Xuyi Wang / wolfSSL

Dependents:   OS

Committer:
wolfSSL
Date:
Sat Aug 18 22:19:52 2018 +0000
Revision:
14:167253f4e170
wolfSSL 3.15.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 14:167253f4e170 1 /* sp.c
wolfSSL 14:167253f4e170 2 *
wolfSSL 14:167253f4e170 3 * Copyright (C) 2006-2018 wolfSSL Inc.
wolfSSL 14:167253f4e170 4 *
wolfSSL 14:167253f4e170 5 * This file is part of wolfSSL.
wolfSSL 14:167253f4e170 6 *
wolfSSL 14:167253f4e170 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 14:167253f4e170 8 * it under the terms of the GNU General Public License as published by
wolfSSL 14:167253f4e170 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 14:167253f4e170 10 * (at your option) any later version.
wolfSSL 14:167253f4e170 11 *
wolfSSL 14:167253f4e170 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 14:167253f4e170 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 14:167253f4e170 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 14:167253f4e170 15 * GNU General Public License for more details.
wolfSSL 14:167253f4e170 16 *
wolfSSL 14:167253f4e170 17 * You should have received a copy of the GNU General Public License
wolfSSL 14:167253f4e170 18 * along with this program; if not, write to the Free Software
wolfSSL 14:167253f4e170 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 14:167253f4e170 20 */
wolfSSL 14:167253f4e170 21
wolfSSL 14:167253f4e170 22 /* Implementation by Sean Parkinson. */
wolfSSL 14:167253f4e170 23
wolfSSL 14:167253f4e170 24 #ifdef HAVE_CONFIG_H
wolfSSL 14:167253f4e170 25 #include <config.h>
wolfSSL 14:167253f4e170 26 #endif
wolfSSL 14:167253f4e170 27
wolfSSL 14:167253f4e170 28 #include <wolfssl/wolfcrypt/settings.h>
wolfSSL 14:167253f4e170 29 #include <wolfssl/wolfcrypt/error-crypt.h>
wolfSSL 14:167253f4e170 30 #include <wolfssl/wolfcrypt/cpuid.h>
wolfSSL 14:167253f4e170 31 #ifdef NO_INLINE
wolfSSL 14:167253f4e170 32 #include <wolfssl/wolfcrypt/misc.h>
wolfSSL 14:167253f4e170 33 #else
wolfSSL 14:167253f4e170 34 #define WOLFSSL_MISC_INCLUDED
wolfSSL 14:167253f4e170 35 #include <wolfcrypt/src/misc.c>
wolfSSL 14:167253f4e170 36 #endif
wolfSSL 14:167253f4e170 37
wolfSSL 14:167253f4e170 38 #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH) || \
wolfSSL 14:167253f4e170 39 defined(WOLFSSL_HAVE_SP_ECC)
wolfSSL 14:167253f4e170 40
wolfSSL 14:167253f4e170 41 #ifdef RSA_LOW_MEM
wolfSSL 14:167253f4e170 42 #define SP_RSA_PRIVATE_EXP_D
wolfSSL 14:167253f4e170 43
wolfSSL 14:167253f4e170 44 #ifndef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45 #define WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 46 #endif
wolfSSL 14:167253f4e170 47 #endif
wolfSSL 14:167253f4e170 48
wolfSSL 14:167253f4e170 49 #include <wolfssl/wolfcrypt/sp.h>
wolfSSL 14:167253f4e170 50
wolfSSL 14:167253f4e170 51 #ifdef WOLFSSL_SP_X86_64_ASM
wolfSSL 14:167253f4e170 52 #if defined(WOLFSSL_HAVE_SP_RSA) || defined(WOLFSSL_HAVE_SP_DH)
wolfSSL 14:167253f4e170 53 #ifndef WOLFSSL_SP_NO_2048
wolfSSL 14:167253f4e170 54 /* Read big endian unsigned byte aray into r.
wolfSSL 14:167253f4e170 55 *
wolfSSL 14:167253f4e170 56 * r A single precision integer.
wolfSSL 14:167253f4e170 57 * a Byte array.
wolfSSL 14:167253f4e170 58 * n Number of bytes in array to read.
wolfSSL 14:167253f4e170 59 */
wolfSSL 14:167253f4e170 60 static void sp_2048_from_bin(sp_digit* r, int max, const byte* a, int n)
wolfSSL 14:167253f4e170 61 {
wolfSSL 14:167253f4e170 62 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 63
wolfSSL 14:167253f4e170 64 r[0] = 0;
wolfSSL 14:167253f4e170 65 for (i = n-1; i >= 0; i--) {
wolfSSL 14:167253f4e170 66 r[j] |= ((sp_digit)a[i]) << s;
wolfSSL 14:167253f4e170 67 if (s >= 56) {
wolfSSL 14:167253f4e170 68 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 69 s = 64 - s;
wolfSSL 14:167253f4e170 70 if (j + 1 >= max)
wolfSSL 14:167253f4e170 71 break;
wolfSSL 14:167253f4e170 72 r[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 73 s = 8 - s;
wolfSSL 14:167253f4e170 74 }
wolfSSL 14:167253f4e170 75 else
wolfSSL 14:167253f4e170 76 s += 8;
wolfSSL 14:167253f4e170 77 }
wolfSSL 14:167253f4e170 78
wolfSSL 14:167253f4e170 79 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 80 r[j] = 0;
wolfSSL 14:167253f4e170 81 }
wolfSSL 14:167253f4e170 82
wolfSSL 14:167253f4e170 83 /* Convert an mp_int to an array of sp_digit.
wolfSSL 14:167253f4e170 84 *
wolfSSL 14:167253f4e170 85 * r A single precision integer.
wolfSSL 14:167253f4e170 86 * a A multi-precision integer.
wolfSSL 14:167253f4e170 87 */
wolfSSL 14:167253f4e170 88 static void sp_2048_from_mp(sp_digit* r, int max, mp_int* a)
wolfSSL 14:167253f4e170 89 {
wolfSSL 14:167253f4e170 90 #if DIGIT_BIT == 64
wolfSSL 14:167253f4e170 91 int j;
wolfSSL 14:167253f4e170 92
wolfSSL 14:167253f4e170 93 XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
wolfSSL 14:167253f4e170 94
wolfSSL 14:167253f4e170 95 for (j = a->used; j < max; j++)
wolfSSL 14:167253f4e170 96 r[j] = 0;
wolfSSL 14:167253f4e170 97 #elif DIGIT_BIT > 64
wolfSSL 14:167253f4e170 98 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 99
wolfSSL 14:167253f4e170 100 r[0] = 0;
wolfSSL 14:167253f4e170 101 for (i = 0; i < a->used && j < max; i++) {
wolfSSL 14:167253f4e170 102 r[j] |= a->dp[i] << s;
wolfSSL 14:167253f4e170 103 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 104 s = 64 - s;
wolfSSL 14:167253f4e170 105 if (j + 1 >= max)
wolfSSL 14:167253f4e170 106 break;
wolfSSL 14:167253f4e170 107 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 108 while (s + 64 <= DIGIT_BIT) {
wolfSSL 14:167253f4e170 109 s += 64;
wolfSSL 14:167253f4e170 110 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 111 if (j + 1 >= max)
wolfSSL 14:167253f4e170 112 break;
wolfSSL 14:167253f4e170 113 if (s < DIGIT_BIT)
wolfSSL 14:167253f4e170 114 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 115 else
wolfSSL 14:167253f4e170 116 r[++j] = 0;
wolfSSL 14:167253f4e170 117 }
wolfSSL 14:167253f4e170 118 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 119 }
wolfSSL 14:167253f4e170 120
wolfSSL 14:167253f4e170 121 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 122 r[j] = 0;
wolfSSL 14:167253f4e170 123 #else
wolfSSL 14:167253f4e170 124 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 125
wolfSSL 14:167253f4e170 126 r[0] = 0;
wolfSSL 14:167253f4e170 127 for (i = 0; i < a->used && j < max; i++) {
wolfSSL 14:167253f4e170 128 r[j] |= ((sp_digit)a->dp[i]) << s;
wolfSSL 14:167253f4e170 129 if (s + DIGIT_BIT >= 64) {
wolfSSL 14:167253f4e170 130 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 131 if (j + 1 >= max)
wolfSSL 14:167253f4e170 132 break;
wolfSSL 14:167253f4e170 133 s = 64 - s;
wolfSSL 14:167253f4e170 134 if (s == DIGIT_BIT) {
wolfSSL 14:167253f4e170 135 r[++j] = 0;
wolfSSL 14:167253f4e170 136 s = 0;
wolfSSL 14:167253f4e170 137 }
wolfSSL 14:167253f4e170 138 else {
wolfSSL 14:167253f4e170 139 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 140 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 141 }
wolfSSL 14:167253f4e170 142 }
wolfSSL 14:167253f4e170 143 else
wolfSSL 14:167253f4e170 144 s += DIGIT_BIT;
wolfSSL 14:167253f4e170 145 }
wolfSSL 14:167253f4e170 146
wolfSSL 14:167253f4e170 147 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 148 r[j] = 0;
wolfSSL 14:167253f4e170 149 #endif
wolfSSL 14:167253f4e170 150 }
wolfSSL 14:167253f4e170 151
wolfSSL 14:167253f4e170 152 /* Write r as big endian to byte aray.
wolfSSL 14:167253f4e170 153 * Fixed length number of bytes written: 256
wolfSSL 14:167253f4e170 154 *
wolfSSL 14:167253f4e170 155 * r A single precision integer.
wolfSSL 14:167253f4e170 156 * a Byte array.
wolfSSL 14:167253f4e170 157 */
wolfSSL 14:167253f4e170 158 static void sp_2048_to_bin(sp_digit* r, byte* a)
wolfSSL 14:167253f4e170 159 {
wolfSSL 14:167253f4e170 160 int i, j, s = 0, b;
wolfSSL 14:167253f4e170 161
wolfSSL 14:167253f4e170 162 j = 2048 / 8 - 1;
wolfSSL 14:167253f4e170 163 a[j] = 0;
wolfSSL 14:167253f4e170 164 for (i=0; i<32 && j>=0; i++) {
wolfSSL 14:167253f4e170 165 b = 0;
wolfSSL 14:167253f4e170 166 a[j--] |= r[i] << s; b += 8 - s;
wolfSSL 14:167253f4e170 167 if (j < 0)
wolfSSL 14:167253f4e170 168 break;
wolfSSL 14:167253f4e170 169 while (b < 64) {
wolfSSL 14:167253f4e170 170 a[j--] = r[i] >> b; b += 8;
wolfSSL 14:167253f4e170 171 if (j < 0)
wolfSSL 14:167253f4e170 172 break;
wolfSSL 14:167253f4e170 173 }
wolfSSL 14:167253f4e170 174 s = 8 - (b - 64);
wolfSSL 14:167253f4e170 175 if (j >= 0)
wolfSSL 14:167253f4e170 176 a[j] = 0;
wolfSSL 14:167253f4e170 177 if (s != 0)
wolfSSL 14:167253f4e170 178 j++;
wolfSSL 14:167253f4e170 179 }
wolfSSL 14:167253f4e170 180 }
wolfSSL 14:167253f4e170 181
wolfSSL 14:167253f4e170 182 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 183 *
wolfSSL 14:167253f4e170 184 * r A single precision integer.
wolfSSL 14:167253f4e170 185 * a A single precision integer.
wolfSSL 14:167253f4e170 186 * b A single precision integer.
wolfSSL 14:167253f4e170 187 */
wolfSSL 14:167253f4e170 188 SP_NOINLINE static void sp_2048_mul_16(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 189 const sp_digit* b)
wolfSSL 14:167253f4e170 190 {
wolfSSL 14:167253f4e170 191 sp_digit tmp[16];
wolfSSL 14:167253f4e170 192
wolfSSL 14:167253f4e170 193 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 194 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 195 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 196 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 197 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 198 "movq %%rax, (%[tmp])\n\t"
wolfSSL 14:167253f4e170 199 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 200 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 201 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 202 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 203 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 204 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 205 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 206 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 207 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 208 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 209 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 210 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 211 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 212 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 213 "movq %%rcx, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 214 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 215 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 216 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 217 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 218 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 219 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 220 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 221 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 222 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 223 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 224 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 225 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 226 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 227 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 228 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 229 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 230 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 231 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 232 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 233 "movq %%r8, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 234 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 235 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 236 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 237 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 238 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 239 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 240 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 241 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 242 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 243 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 244 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 245 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 246 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 247 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 248 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 249 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 250 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 251 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 252 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 253 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 254 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 255 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 256 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 257 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 258 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 259 "movq %%rbx, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 260 "# A[0] * B[4]\n\t"
wolfSSL 14:167253f4e170 261 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 262 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 263 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 264 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 265 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 266 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 267 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 268 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 269 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 270 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 271 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 272 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 273 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 274 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 275 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 276 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 277 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 278 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 279 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 280 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 281 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 282 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 283 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 284 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 285 "# A[4] * B[0]\n\t"
wolfSSL 14:167253f4e170 286 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 287 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 288 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 289 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 290 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 291 "movq %%rcx, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 292 "# A[0] * B[5]\n\t"
wolfSSL 14:167253f4e170 293 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 294 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 295 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 296 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 297 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 298 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 299 "# A[1] * B[4]\n\t"
wolfSSL 14:167253f4e170 300 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 301 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 302 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 303 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 304 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 305 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 306 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 307 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 308 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 309 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 310 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 311 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 312 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 313 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 314 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 315 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 316 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 317 "# A[4] * B[1]\n\t"
wolfSSL 14:167253f4e170 318 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 319 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 320 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 321 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 322 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 323 "# A[5] * B[0]\n\t"
wolfSSL 14:167253f4e170 324 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 325 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 326 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 327 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 328 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 329 "movq %%r8, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 330 "# A[0] * B[6]\n\t"
wolfSSL 14:167253f4e170 331 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 332 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 333 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 334 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 335 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 336 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 337 "# A[1] * B[5]\n\t"
wolfSSL 14:167253f4e170 338 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 339 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 340 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 341 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 342 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 343 "# A[2] * B[4]\n\t"
wolfSSL 14:167253f4e170 344 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 345 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 346 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 347 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 348 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 349 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 350 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 351 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 352 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 353 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 354 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 355 "# A[4] * B[2]\n\t"
wolfSSL 14:167253f4e170 356 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 357 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 358 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 359 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 360 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 361 "# A[5] * B[1]\n\t"
wolfSSL 14:167253f4e170 362 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 363 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 364 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 365 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 366 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 367 "# A[6] * B[0]\n\t"
wolfSSL 14:167253f4e170 368 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 369 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 370 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 371 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 372 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 373 "movq %%rbx, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 374 "# A[0] * B[7]\n\t"
wolfSSL 14:167253f4e170 375 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 376 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 377 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 378 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 379 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 380 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 381 "# A[1] * B[6]\n\t"
wolfSSL 14:167253f4e170 382 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 383 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 384 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 385 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 386 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 387 "# A[2] * B[5]\n\t"
wolfSSL 14:167253f4e170 388 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 389 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 390 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 391 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 392 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 393 "# A[3] * B[4]\n\t"
wolfSSL 14:167253f4e170 394 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 395 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 396 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 397 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 398 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 399 "# A[4] * B[3]\n\t"
wolfSSL 14:167253f4e170 400 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 401 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 402 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 403 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 404 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 405 "# A[5] * B[2]\n\t"
wolfSSL 14:167253f4e170 406 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 407 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 408 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 409 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 410 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 411 "# A[6] * B[1]\n\t"
wolfSSL 14:167253f4e170 412 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 413 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 414 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 415 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 416 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 417 "# A[7] * B[0]\n\t"
wolfSSL 14:167253f4e170 418 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 419 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 420 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 421 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 422 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 423 "movq %%rcx, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 424 "# A[0] * B[8]\n\t"
wolfSSL 14:167253f4e170 425 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 426 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 427 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 428 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 429 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 430 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 431 "# A[1] * B[7]\n\t"
wolfSSL 14:167253f4e170 432 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 433 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 434 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 435 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 436 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 437 "# A[2] * B[6]\n\t"
wolfSSL 14:167253f4e170 438 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 439 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 440 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 441 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 442 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 443 "# A[3] * B[5]\n\t"
wolfSSL 14:167253f4e170 444 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 445 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 446 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 447 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 448 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 449 "# A[4] * B[4]\n\t"
wolfSSL 14:167253f4e170 450 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 451 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 452 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 453 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 454 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 455 "# A[5] * B[3]\n\t"
wolfSSL 14:167253f4e170 456 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 457 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 458 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 459 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 460 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 461 "# A[6] * B[2]\n\t"
wolfSSL 14:167253f4e170 462 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 463 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 464 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 465 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 466 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 467 "# A[7] * B[1]\n\t"
wolfSSL 14:167253f4e170 468 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 469 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 470 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 471 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 472 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 473 "# A[8] * B[0]\n\t"
wolfSSL 14:167253f4e170 474 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 475 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 476 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 477 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 478 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 479 "movq %%r8, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 480 "# A[0] * B[9]\n\t"
wolfSSL 14:167253f4e170 481 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 482 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 483 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 484 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 485 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 486 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 487 "# A[1] * B[8]\n\t"
wolfSSL 14:167253f4e170 488 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 489 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 490 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 491 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 492 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 493 "# A[2] * B[7]\n\t"
wolfSSL 14:167253f4e170 494 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 495 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 496 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 497 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 498 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 499 "# A[3] * B[6]\n\t"
wolfSSL 14:167253f4e170 500 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 501 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 502 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 503 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 504 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 505 "# A[4] * B[5]\n\t"
wolfSSL 14:167253f4e170 506 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 507 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 508 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 509 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 510 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 511 "# A[5] * B[4]\n\t"
wolfSSL 14:167253f4e170 512 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 513 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 514 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 515 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 516 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 517 "# A[6] * B[3]\n\t"
wolfSSL 14:167253f4e170 518 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 519 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 520 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 521 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 522 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 523 "# A[7] * B[2]\n\t"
wolfSSL 14:167253f4e170 524 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 525 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 526 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 527 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 528 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 529 "# A[8] * B[1]\n\t"
wolfSSL 14:167253f4e170 530 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 531 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 532 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 533 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 534 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 535 "# A[9] * B[0]\n\t"
wolfSSL 14:167253f4e170 536 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 537 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 538 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 539 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 540 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 541 "movq %%rbx, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 542 "# A[0] * B[10]\n\t"
wolfSSL 14:167253f4e170 543 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 544 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 545 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 546 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 547 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 548 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 549 "# A[1] * B[9]\n\t"
wolfSSL 14:167253f4e170 550 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 551 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 552 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 553 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 554 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 555 "# A[2] * B[8]\n\t"
wolfSSL 14:167253f4e170 556 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 557 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 558 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 559 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 560 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 561 "# A[3] * B[7]\n\t"
wolfSSL 14:167253f4e170 562 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 563 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 564 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 565 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 566 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 567 "# A[4] * B[6]\n\t"
wolfSSL 14:167253f4e170 568 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 569 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 570 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 571 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 572 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 573 "# A[5] * B[5]\n\t"
wolfSSL 14:167253f4e170 574 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 575 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 576 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 577 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 578 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 579 "# A[6] * B[4]\n\t"
wolfSSL 14:167253f4e170 580 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 581 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 582 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 583 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 584 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 585 "# A[7] * B[3]\n\t"
wolfSSL 14:167253f4e170 586 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 587 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 588 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 589 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 590 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 591 "# A[8] * B[2]\n\t"
wolfSSL 14:167253f4e170 592 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 593 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 594 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 595 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 596 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 597 "# A[9] * B[1]\n\t"
wolfSSL 14:167253f4e170 598 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 599 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 600 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 601 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 602 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 603 "# A[10] * B[0]\n\t"
wolfSSL 14:167253f4e170 604 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 605 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 606 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 607 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 608 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 609 "movq %%rcx, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 610 "# A[0] * B[11]\n\t"
wolfSSL 14:167253f4e170 611 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 612 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 613 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 614 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 615 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 616 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 617 "# A[1] * B[10]\n\t"
wolfSSL 14:167253f4e170 618 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 619 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 620 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 621 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 622 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 623 "# A[2] * B[9]\n\t"
wolfSSL 14:167253f4e170 624 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 625 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 626 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 627 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 628 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 629 "# A[3] * B[8]\n\t"
wolfSSL 14:167253f4e170 630 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 631 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 632 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 633 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 634 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 635 "# A[4] * B[7]\n\t"
wolfSSL 14:167253f4e170 636 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 637 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 638 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 639 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 640 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 641 "# A[5] * B[6]\n\t"
wolfSSL 14:167253f4e170 642 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 643 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 644 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 645 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 646 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 647 "# A[6] * B[5]\n\t"
wolfSSL 14:167253f4e170 648 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 649 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 650 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 651 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 652 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 653 "# A[7] * B[4]\n\t"
wolfSSL 14:167253f4e170 654 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 655 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 656 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 657 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 658 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 659 "# A[8] * B[3]\n\t"
wolfSSL 14:167253f4e170 660 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 661 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 662 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 663 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 664 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 665 "# A[9] * B[2]\n\t"
wolfSSL 14:167253f4e170 666 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 667 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 668 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 669 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 670 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 671 "# A[10] * B[1]\n\t"
wolfSSL 14:167253f4e170 672 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 673 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 674 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 675 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 676 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 677 "# A[11] * B[0]\n\t"
wolfSSL 14:167253f4e170 678 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 679 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 680 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 681 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 682 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 683 "movq %%r8, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 684 "# A[0] * B[12]\n\t"
wolfSSL 14:167253f4e170 685 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 686 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 687 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 688 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 689 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 690 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 691 "# A[1] * B[11]\n\t"
wolfSSL 14:167253f4e170 692 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 693 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 694 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 695 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 696 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 697 "# A[2] * B[10]\n\t"
wolfSSL 14:167253f4e170 698 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 699 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 700 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 701 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 702 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 703 "# A[3] * B[9]\n\t"
wolfSSL 14:167253f4e170 704 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 705 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 706 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 707 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 708 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 709 "# A[4] * B[8]\n\t"
wolfSSL 14:167253f4e170 710 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 711 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 712 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 713 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 714 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 715 "# A[5] * B[7]\n\t"
wolfSSL 14:167253f4e170 716 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 717 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 718 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 719 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 720 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 721 "# A[6] * B[6]\n\t"
wolfSSL 14:167253f4e170 722 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 723 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 724 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 725 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 726 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 727 "# A[7] * B[5]\n\t"
wolfSSL 14:167253f4e170 728 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 729 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 730 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 731 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 732 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 733 "# A[8] * B[4]\n\t"
wolfSSL 14:167253f4e170 734 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 735 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 736 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 737 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 738 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 739 "# A[9] * B[3]\n\t"
wolfSSL 14:167253f4e170 740 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 741 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 742 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 743 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 744 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 745 "# A[10] * B[2]\n\t"
wolfSSL 14:167253f4e170 746 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 747 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 748 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 749 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 750 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 751 "# A[11] * B[1]\n\t"
wolfSSL 14:167253f4e170 752 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 753 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 754 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 755 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 756 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 757 "# A[12] * B[0]\n\t"
wolfSSL 14:167253f4e170 758 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 759 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 760 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 761 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 762 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 763 "movq %%rbx, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 764 "# A[0] * B[13]\n\t"
wolfSSL 14:167253f4e170 765 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 766 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 767 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 768 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 769 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 770 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 771 "# A[1] * B[12]\n\t"
wolfSSL 14:167253f4e170 772 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 773 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 774 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 775 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 776 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 777 "# A[2] * B[11]\n\t"
wolfSSL 14:167253f4e170 778 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 779 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 780 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 781 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 782 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 783 "# A[3] * B[10]\n\t"
wolfSSL 14:167253f4e170 784 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 785 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 786 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 787 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 788 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 789 "# A[4] * B[9]\n\t"
wolfSSL 14:167253f4e170 790 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 791 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 792 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 793 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 794 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 795 "# A[5] * B[8]\n\t"
wolfSSL 14:167253f4e170 796 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 797 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 798 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 799 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 800 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 801 "# A[6] * B[7]\n\t"
wolfSSL 14:167253f4e170 802 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 803 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 804 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 805 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 806 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 807 "# A[7] * B[6]\n\t"
wolfSSL 14:167253f4e170 808 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 809 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 810 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 811 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 812 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 813 "# A[8] * B[5]\n\t"
wolfSSL 14:167253f4e170 814 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 815 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 816 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 817 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 818 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 819 "# A[9] * B[4]\n\t"
wolfSSL 14:167253f4e170 820 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 821 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 822 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 823 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 824 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 825 "# A[10] * B[3]\n\t"
wolfSSL 14:167253f4e170 826 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 827 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 828 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 829 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 830 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 831 "# A[11] * B[2]\n\t"
wolfSSL 14:167253f4e170 832 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 833 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 834 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 835 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 836 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 837 "# A[12] * B[1]\n\t"
wolfSSL 14:167253f4e170 838 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 839 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 840 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 841 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 842 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 843 "# A[13] * B[0]\n\t"
wolfSSL 14:167253f4e170 844 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 845 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 846 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 847 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 848 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 849 "movq %%rcx, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 850 "# A[0] * B[14]\n\t"
wolfSSL 14:167253f4e170 851 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 852 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 853 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 854 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 855 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 856 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 857 "# A[1] * B[13]\n\t"
wolfSSL 14:167253f4e170 858 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 859 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 860 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 861 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 862 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 863 "# A[2] * B[12]\n\t"
wolfSSL 14:167253f4e170 864 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 865 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 866 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 867 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 868 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 869 "# A[3] * B[11]\n\t"
wolfSSL 14:167253f4e170 870 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 871 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 872 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 873 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 874 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 875 "# A[4] * B[10]\n\t"
wolfSSL 14:167253f4e170 876 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 877 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 878 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 879 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 880 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 881 "# A[5] * B[9]\n\t"
wolfSSL 14:167253f4e170 882 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 883 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 884 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 885 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 886 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 887 "# A[6] * B[8]\n\t"
wolfSSL 14:167253f4e170 888 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 889 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 890 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 891 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 892 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 893 "# A[7] * B[7]\n\t"
wolfSSL 14:167253f4e170 894 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 895 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 896 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 897 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 898 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 899 "# A[8] * B[6]\n\t"
wolfSSL 14:167253f4e170 900 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 901 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 902 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 903 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 904 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 905 "# A[9] * B[5]\n\t"
wolfSSL 14:167253f4e170 906 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 907 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 908 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 909 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 910 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 911 "# A[10] * B[4]\n\t"
wolfSSL 14:167253f4e170 912 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 913 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 914 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 915 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 916 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 917 "# A[11] * B[3]\n\t"
wolfSSL 14:167253f4e170 918 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 919 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 920 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 921 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 922 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 923 "# A[12] * B[2]\n\t"
wolfSSL 14:167253f4e170 924 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 925 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 926 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 927 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 928 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 929 "# A[13] * B[1]\n\t"
wolfSSL 14:167253f4e170 930 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 931 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 932 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 933 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 934 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 935 "# A[14] * B[0]\n\t"
wolfSSL 14:167253f4e170 936 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 937 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 938 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 939 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 940 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 941 "movq %%r8, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 942 "# A[0] * B[15]\n\t"
wolfSSL 14:167253f4e170 943 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 944 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 945 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 946 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 947 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 948 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 949 "# A[1] * B[14]\n\t"
wolfSSL 14:167253f4e170 950 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 951 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 952 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 953 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 954 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 955 "# A[2] * B[13]\n\t"
wolfSSL 14:167253f4e170 956 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 957 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 958 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 959 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 960 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 961 "# A[3] * B[12]\n\t"
wolfSSL 14:167253f4e170 962 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 963 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 964 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 965 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 966 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 967 "# A[4] * B[11]\n\t"
wolfSSL 14:167253f4e170 968 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 969 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 970 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 971 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 972 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 973 "# A[5] * B[10]\n\t"
wolfSSL 14:167253f4e170 974 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 975 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 976 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 977 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 978 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 979 "# A[6] * B[9]\n\t"
wolfSSL 14:167253f4e170 980 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 981 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 982 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 983 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 984 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 985 "# A[7] * B[8]\n\t"
wolfSSL 14:167253f4e170 986 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 987 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 988 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 989 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 990 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 991 "# A[8] * B[7]\n\t"
wolfSSL 14:167253f4e170 992 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 993 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 994 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 995 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 996 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 997 "# A[9] * B[6]\n\t"
wolfSSL 14:167253f4e170 998 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 999 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1000 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1001 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1002 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1003 "# A[10] * B[5]\n\t"
wolfSSL 14:167253f4e170 1004 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1005 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1006 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1007 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1008 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1009 "# A[11] * B[4]\n\t"
wolfSSL 14:167253f4e170 1010 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1011 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1012 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1013 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1014 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1015 "# A[12] * B[3]\n\t"
wolfSSL 14:167253f4e170 1016 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1017 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1018 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1019 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1020 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1021 "# A[13] * B[2]\n\t"
wolfSSL 14:167253f4e170 1022 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1023 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1024 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1025 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1026 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1027 "# A[14] * B[1]\n\t"
wolfSSL 14:167253f4e170 1028 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1029 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1030 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1031 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1032 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1033 "# A[15] * B[0]\n\t"
wolfSSL 14:167253f4e170 1034 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1035 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1036 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1037 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1038 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1039 "movq %%rbx, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1040 "# A[1] * B[15]\n\t"
wolfSSL 14:167253f4e170 1041 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1042 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1043 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1044 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1045 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1046 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1047 "# A[2] * B[14]\n\t"
wolfSSL 14:167253f4e170 1048 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1049 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 1050 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1051 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1052 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1053 "# A[3] * B[13]\n\t"
wolfSSL 14:167253f4e170 1054 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1055 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 1056 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1057 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1058 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1059 "# A[4] * B[12]\n\t"
wolfSSL 14:167253f4e170 1060 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1061 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 1062 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1063 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1064 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1065 "# A[5] * B[11]\n\t"
wolfSSL 14:167253f4e170 1066 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1067 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 1068 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1069 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1070 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1071 "# A[6] * B[10]\n\t"
wolfSSL 14:167253f4e170 1072 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1073 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 1074 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1075 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1076 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1077 "# A[7] * B[9]\n\t"
wolfSSL 14:167253f4e170 1078 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1079 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1080 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1081 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1082 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1083 "# A[8] * B[8]\n\t"
wolfSSL 14:167253f4e170 1084 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1085 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1086 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1087 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1088 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1089 "# A[9] * B[7]\n\t"
wolfSSL 14:167253f4e170 1090 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1091 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1092 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1093 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1094 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1095 "# A[10] * B[6]\n\t"
wolfSSL 14:167253f4e170 1096 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1097 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1098 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1099 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1100 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1101 "# A[11] * B[5]\n\t"
wolfSSL 14:167253f4e170 1102 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1103 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1104 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1105 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1106 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1107 "# A[12] * B[4]\n\t"
wolfSSL 14:167253f4e170 1108 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1109 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1110 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1111 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1112 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1113 "# A[13] * B[3]\n\t"
wolfSSL 14:167253f4e170 1114 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1115 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1116 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1117 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1118 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1119 "# A[14] * B[2]\n\t"
wolfSSL 14:167253f4e170 1120 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1121 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1122 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1123 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1124 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1125 "# A[15] * B[1]\n\t"
wolfSSL 14:167253f4e170 1126 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1127 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1128 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1129 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1130 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1131 "movq %%rcx, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 1132 "# A[2] * B[15]\n\t"
wolfSSL 14:167253f4e170 1133 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1134 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 1135 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1136 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1137 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1138 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1139 "# A[3] * B[14]\n\t"
wolfSSL 14:167253f4e170 1140 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1141 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 1142 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1143 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1144 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1145 "# A[4] * B[13]\n\t"
wolfSSL 14:167253f4e170 1146 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1147 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 1148 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1149 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1150 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1151 "# A[5] * B[12]\n\t"
wolfSSL 14:167253f4e170 1152 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1153 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 1154 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1155 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1156 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1157 "# A[6] * B[11]\n\t"
wolfSSL 14:167253f4e170 1158 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1159 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 1160 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1161 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1162 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1163 "# A[7] * B[10]\n\t"
wolfSSL 14:167253f4e170 1164 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1165 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1166 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1167 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1168 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1169 "# A[8] * B[9]\n\t"
wolfSSL 14:167253f4e170 1170 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1171 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1172 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1173 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1174 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1175 "# A[9] * B[8]\n\t"
wolfSSL 14:167253f4e170 1176 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1177 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1178 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1179 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1180 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1181 "# A[10] * B[7]\n\t"
wolfSSL 14:167253f4e170 1182 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1183 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1184 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1185 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1186 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1187 "# A[11] * B[6]\n\t"
wolfSSL 14:167253f4e170 1188 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1189 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1190 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1191 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1192 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1193 "# A[12] * B[5]\n\t"
wolfSSL 14:167253f4e170 1194 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1195 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1196 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1197 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1198 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1199 "# A[13] * B[4]\n\t"
wolfSSL 14:167253f4e170 1200 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1201 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1202 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1203 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1204 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1205 "# A[14] * B[3]\n\t"
wolfSSL 14:167253f4e170 1206 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1207 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1208 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1209 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1210 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1211 "# A[15] * B[2]\n\t"
wolfSSL 14:167253f4e170 1212 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1213 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1214 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1215 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1216 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1217 "movq %%r8, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 1218 "# A[3] * B[15]\n\t"
wolfSSL 14:167253f4e170 1219 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1220 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 1221 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1222 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1223 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1224 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1225 "# A[4] * B[14]\n\t"
wolfSSL 14:167253f4e170 1226 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1227 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 1228 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1229 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1230 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1231 "# A[5] * B[13]\n\t"
wolfSSL 14:167253f4e170 1232 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1233 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 1234 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1235 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1236 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1237 "# A[6] * B[12]\n\t"
wolfSSL 14:167253f4e170 1238 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1239 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 1240 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1241 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1242 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1243 "# A[7] * B[11]\n\t"
wolfSSL 14:167253f4e170 1244 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1245 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1246 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1247 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1248 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1249 "# A[8] * B[10]\n\t"
wolfSSL 14:167253f4e170 1250 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1251 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1252 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1253 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1254 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1255 "# A[9] * B[9]\n\t"
wolfSSL 14:167253f4e170 1256 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1257 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1258 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1259 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1260 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1261 "# A[10] * B[8]\n\t"
wolfSSL 14:167253f4e170 1262 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1263 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1264 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1265 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1266 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1267 "# A[11] * B[7]\n\t"
wolfSSL 14:167253f4e170 1268 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1269 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1270 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1271 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1272 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1273 "# A[12] * B[6]\n\t"
wolfSSL 14:167253f4e170 1274 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1275 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1276 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1277 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1278 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1279 "# A[13] * B[5]\n\t"
wolfSSL 14:167253f4e170 1280 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1281 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1282 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1283 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1284 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1285 "# A[14] * B[4]\n\t"
wolfSSL 14:167253f4e170 1286 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1287 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1288 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1289 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1290 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1291 "# A[15] * B[3]\n\t"
wolfSSL 14:167253f4e170 1292 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1293 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1294 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1295 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1296 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1297 "movq %%rbx, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 1298 "# A[4] * B[15]\n\t"
wolfSSL 14:167253f4e170 1299 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1300 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 1301 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1302 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1303 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1304 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1305 "# A[5] * B[14]\n\t"
wolfSSL 14:167253f4e170 1306 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1307 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 1308 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1309 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1310 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1311 "# A[6] * B[13]\n\t"
wolfSSL 14:167253f4e170 1312 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1313 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 1314 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1315 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1316 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1317 "# A[7] * B[12]\n\t"
wolfSSL 14:167253f4e170 1318 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1319 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1320 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1321 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1322 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1323 "# A[8] * B[11]\n\t"
wolfSSL 14:167253f4e170 1324 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1325 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1326 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1327 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1328 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1329 "# A[9] * B[10]\n\t"
wolfSSL 14:167253f4e170 1330 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1331 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1332 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1333 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1334 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1335 "# A[10] * B[9]\n\t"
wolfSSL 14:167253f4e170 1336 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1337 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1338 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1339 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1340 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1341 "# A[11] * B[8]\n\t"
wolfSSL 14:167253f4e170 1342 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1343 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1344 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1345 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1346 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1347 "# A[12] * B[7]\n\t"
wolfSSL 14:167253f4e170 1348 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1349 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1350 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1351 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1352 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1353 "# A[13] * B[6]\n\t"
wolfSSL 14:167253f4e170 1354 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1355 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1356 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1357 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1358 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1359 "# A[14] * B[5]\n\t"
wolfSSL 14:167253f4e170 1360 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1361 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1362 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1363 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1364 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1365 "# A[15] * B[4]\n\t"
wolfSSL 14:167253f4e170 1366 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1367 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1368 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1369 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1370 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1371 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 1372 "# A[5] * B[15]\n\t"
wolfSSL 14:167253f4e170 1373 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1374 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 1375 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1376 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1377 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1378 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1379 "# A[6] * B[14]\n\t"
wolfSSL 14:167253f4e170 1380 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1381 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 1382 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1383 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1384 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1385 "# A[7] * B[13]\n\t"
wolfSSL 14:167253f4e170 1386 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1387 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1388 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1389 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1390 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1391 "# A[8] * B[12]\n\t"
wolfSSL 14:167253f4e170 1392 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1393 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1394 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1395 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1396 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1397 "# A[9] * B[11]\n\t"
wolfSSL 14:167253f4e170 1398 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1399 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1400 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1401 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1402 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1403 "# A[10] * B[10]\n\t"
wolfSSL 14:167253f4e170 1404 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1405 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1406 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1407 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1408 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1409 "# A[11] * B[9]\n\t"
wolfSSL 14:167253f4e170 1410 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1411 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1412 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1413 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1414 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1415 "# A[12] * B[8]\n\t"
wolfSSL 14:167253f4e170 1416 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1417 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1418 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1419 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1420 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1421 "# A[13] * B[7]\n\t"
wolfSSL 14:167253f4e170 1422 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1423 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1424 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1425 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1426 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1427 "# A[14] * B[6]\n\t"
wolfSSL 14:167253f4e170 1428 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1429 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1430 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1431 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1432 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1433 "# A[15] * B[5]\n\t"
wolfSSL 14:167253f4e170 1434 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1435 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1436 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1437 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1438 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1439 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 1440 "# A[6] * B[15]\n\t"
wolfSSL 14:167253f4e170 1441 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1442 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 1443 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1444 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1445 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1446 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1447 "# A[7] * B[14]\n\t"
wolfSSL 14:167253f4e170 1448 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1449 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1450 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1451 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1452 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1453 "# A[8] * B[13]\n\t"
wolfSSL 14:167253f4e170 1454 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1455 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1456 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1457 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1458 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1459 "# A[9] * B[12]\n\t"
wolfSSL 14:167253f4e170 1460 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1461 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1462 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1463 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1464 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1465 "# A[10] * B[11]\n\t"
wolfSSL 14:167253f4e170 1466 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1467 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1468 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1469 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1470 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1471 "# A[11] * B[10]\n\t"
wolfSSL 14:167253f4e170 1472 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1473 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1474 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1475 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1476 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1477 "# A[12] * B[9]\n\t"
wolfSSL 14:167253f4e170 1478 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1479 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1480 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1481 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1482 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1483 "# A[13] * B[8]\n\t"
wolfSSL 14:167253f4e170 1484 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1485 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1486 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1487 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1488 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1489 "# A[14] * B[7]\n\t"
wolfSSL 14:167253f4e170 1490 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1491 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1492 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1493 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1494 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1495 "# A[15] * B[6]\n\t"
wolfSSL 14:167253f4e170 1496 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1497 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1498 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1499 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1500 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1501 "movq %%rbx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 1502 "# A[7] * B[15]\n\t"
wolfSSL 14:167253f4e170 1503 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1504 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 1505 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1506 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1507 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1508 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1509 "# A[8] * B[14]\n\t"
wolfSSL 14:167253f4e170 1510 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1511 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1512 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1513 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1514 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1515 "# A[9] * B[13]\n\t"
wolfSSL 14:167253f4e170 1516 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1517 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1518 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1519 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1520 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1521 "# A[10] * B[12]\n\t"
wolfSSL 14:167253f4e170 1522 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1523 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1524 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1525 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1526 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1527 "# A[11] * B[11]\n\t"
wolfSSL 14:167253f4e170 1528 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1529 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1530 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1531 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1532 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1533 "# A[12] * B[10]\n\t"
wolfSSL 14:167253f4e170 1534 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1535 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1536 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1537 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1538 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1539 "# A[13] * B[9]\n\t"
wolfSSL 14:167253f4e170 1540 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1541 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1542 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1543 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1544 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1545 "# A[14] * B[8]\n\t"
wolfSSL 14:167253f4e170 1546 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1547 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1548 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1549 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1550 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1551 "# A[15] * B[7]\n\t"
wolfSSL 14:167253f4e170 1552 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1553 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1554 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1555 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1556 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1557 "movq %%rcx, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 1558 "# A[8] * B[15]\n\t"
wolfSSL 14:167253f4e170 1559 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1560 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 1561 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1562 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1563 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1564 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1565 "# A[9] * B[14]\n\t"
wolfSSL 14:167253f4e170 1566 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1567 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1568 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1569 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1570 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1571 "# A[10] * B[13]\n\t"
wolfSSL 14:167253f4e170 1572 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1573 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1574 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1575 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1576 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1577 "# A[11] * B[12]\n\t"
wolfSSL 14:167253f4e170 1578 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1579 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1580 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1581 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1582 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1583 "# A[12] * B[11]\n\t"
wolfSSL 14:167253f4e170 1584 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1585 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1586 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1587 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1588 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1589 "# A[13] * B[10]\n\t"
wolfSSL 14:167253f4e170 1590 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1591 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1592 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1593 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1594 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1595 "# A[14] * B[9]\n\t"
wolfSSL 14:167253f4e170 1596 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1597 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1598 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1599 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1600 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1601 "# A[15] * B[8]\n\t"
wolfSSL 14:167253f4e170 1602 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1603 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1604 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1605 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1606 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1607 "movq %%r8, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 1608 "# A[9] * B[15]\n\t"
wolfSSL 14:167253f4e170 1609 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1610 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 1611 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1612 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1613 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1614 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1615 "# A[10] * B[14]\n\t"
wolfSSL 14:167253f4e170 1616 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1617 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1618 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1619 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1620 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1621 "# A[11] * B[13]\n\t"
wolfSSL 14:167253f4e170 1622 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1623 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1624 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1625 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1626 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1627 "# A[12] * B[12]\n\t"
wolfSSL 14:167253f4e170 1628 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1629 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1630 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1631 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1632 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1633 "# A[13] * B[11]\n\t"
wolfSSL 14:167253f4e170 1634 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1635 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1636 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1637 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1638 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1639 "# A[14] * B[10]\n\t"
wolfSSL 14:167253f4e170 1640 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1641 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1642 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1643 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1644 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1645 "# A[15] * B[9]\n\t"
wolfSSL 14:167253f4e170 1646 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1647 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1648 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1649 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1650 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1651 "movq %%rbx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 1652 "# A[10] * B[15]\n\t"
wolfSSL 14:167253f4e170 1653 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1654 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 1655 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1656 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1657 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1658 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1659 "# A[11] * B[14]\n\t"
wolfSSL 14:167253f4e170 1660 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1661 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1662 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1663 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1664 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1665 "# A[12] * B[13]\n\t"
wolfSSL 14:167253f4e170 1666 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1667 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1668 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1669 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1670 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1671 "# A[13] * B[12]\n\t"
wolfSSL 14:167253f4e170 1672 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1673 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1674 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1675 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1676 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1677 "# A[14] * B[11]\n\t"
wolfSSL 14:167253f4e170 1678 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1679 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1680 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1681 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1682 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1683 "# A[15] * B[10]\n\t"
wolfSSL 14:167253f4e170 1684 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1685 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1686 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1687 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1688 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1689 "movq %%rcx, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 1690 "# A[11] * B[15]\n\t"
wolfSSL 14:167253f4e170 1691 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1692 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 1693 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1694 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1695 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1696 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1697 "# A[12] * B[14]\n\t"
wolfSSL 14:167253f4e170 1698 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1699 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1700 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1701 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1702 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1703 "# A[13] * B[13]\n\t"
wolfSSL 14:167253f4e170 1704 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1705 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1706 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1707 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1708 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1709 "# A[14] * B[12]\n\t"
wolfSSL 14:167253f4e170 1710 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1711 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1712 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1713 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1714 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1715 "# A[15] * B[11]\n\t"
wolfSSL 14:167253f4e170 1716 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1717 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1718 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1719 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1720 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1721 "movq %%r8, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 1722 "# A[12] * B[15]\n\t"
wolfSSL 14:167253f4e170 1723 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1724 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 1725 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1726 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1727 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1728 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1729 "# A[13] * B[14]\n\t"
wolfSSL 14:167253f4e170 1730 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1731 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1732 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1733 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1734 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1735 "# A[14] * B[13]\n\t"
wolfSSL 14:167253f4e170 1736 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1737 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1738 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1739 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1740 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1741 "# A[15] * B[12]\n\t"
wolfSSL 14:167253f4e170 1742 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1743 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1744 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1745 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1746 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1747 "movq %%rbx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 1748 "# A[13] * B[15]\n\t"
wolfSSL 14:167253f4e170 1749 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1750 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 1751 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1752 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1753 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1754 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1755 "# A[14] * B[14]\n\t"
wolfSSL 14:167253f4e170 1756 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1757 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1758 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1759 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1760 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1761 "# A[15] * B[13]\n\t"
wolfSSL 14:167253f4e170 1762 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1763 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1764 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1765 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1766 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 1767 "movq %%rcx, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 1768 "# A[14] * B[15]\n\t"
wolfSSL 14:167253f4e170 1769 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1770 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 1771 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1772 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1773 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1774 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1775 "# A[15] * B[14]\n\t"
wolfSSL 14:167253f4e170 1776 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1777 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1778 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1779 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 1780 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1781 "movq %%r8, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 1782 "# A[15] * B[15]\n\t"
wolfSSL 14:167253f4e170 1783 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 1784 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 1785 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 1786 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1787 "movq %%rbx, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 1788 "movq %%rcx, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 1789 :
wolfSSL 14:167253f4e170 1790 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 1791 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 1792 );
wolfSSL 14:167253f4e170 1793
wolfSSL 14:167253f4e170 1794 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 1795 }
wolfSSL 14:167253f4e170 1796
wolfSSL 14:167253f4e170 1797 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 1798 *
wolfSSL 14:167253f4e170 1799 * r A single precision integer.
wolfSSL 14:167253f4e170 1800 * a A single precision integer.
wolfSSL 14:167253f4e170 1801 */
wolfSSL 14:167253f4e170 1802 SP_NOINLINE static void sp_2048_sqr_16(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 1803 {
wolfSSL 14:167253f4e170 1804 sp_digit tmp[16];
wolfSSL 14:167253f4e170 1805
wolfSSL 14:167253f4e170 1806 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 1807 "# A[0] * A[0]\n\t"
wolfSSL 14:167253f4e170 1808 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1809 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 1810 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 1811 "movq %%rax, (%[tmp])\n\t"
wolfSSL 14:167253f4e170 1812 "movq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1813 "# A[0] * A[1]\n\t"
wolfSSL 14:167253f4e170 1814 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1815 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1816 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1817 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1818 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1819 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1820 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1821 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1822 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1823 "movq %%r8, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1824 "# A[0] * A[2]\n\t"
wolfSSL 14:167253f4e170 1825 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1826 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1827 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1828 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 1829 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1830 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1831 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 1832 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1833 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1834 "# A[1] * A[1]\n\t"
wolfSSL 14:167253f4e170 1835 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1836 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 1837 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 1838 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1839 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 1840 "movq %%r9, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1841 "# A[0] * A[3]\n\t"
wolfSSL 14:167253f4e170 1842 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1843 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1844 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 1845 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1846 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1847 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 1848 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1849 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1850 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 1851 "# A[1] * A[2]\n\t"
wolfSSL 14:167253f4e170 1852 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1853 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1854 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1855 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1856 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 1857 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 1858 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 1859 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 1860 "movq %%rcx, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1861 "# A[0] * A[4]\n\t"
wolfSSL 14:167253f4e170 1862 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1863 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1864 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1865 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1866 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1867 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1868 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1869 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1870 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1871 "# A[1] * A[3]\n\t"
wolfSSL 14:167253f4e170 1872 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1873 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1874 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1875 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1876 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1877 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1878 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1879 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1880 "# A[2] * A[2]\n\t"
wolfSSL 14:167253f4e170 1881 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1882 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 1883 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 1884 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 1885 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 1886 "movq %%r8, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1887 "# A[0] * A[5]\n\t"
wolfSSL 14:167253f4e170 1888 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1889 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1890 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1891 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1892 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1893 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1894 "# A[1] * A[4]\n\t"
wolfSSL 14:167253f4e170 1895 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1896 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1897 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1898 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1899 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1900 "# A[2] * A[3]\n\t"
wolfSSL 14:167253f4e170 1901 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1902 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 1903 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1904 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1905 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1906 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 1907 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 1908 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1909 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 1910 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 1911 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 1912 "movq %%r9, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1913 "# A[0] * A[6]\n\t"
wolfSSL 14:167253f4e170 1914 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1915 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1916 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 1917 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1918 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1919 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1920 "# A[1] * A[5]\n\t"
wolfSSL 14:167253f4e170 1921 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1922 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1923 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1924 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1925 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1926 "# A[2] * A[4]\n\t"
wolfSSL 14:167253f4e170 1927 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1928 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 1929 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1930 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1931 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1932 "# A[3] * A[3]\n\t"
wolfSSL 14:167253f4e170 1933 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1934 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 1935 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 1936 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 1937 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1938 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1939 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1940 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1941 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 1942 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 1943 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 1944 "movq %%rcx, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1945 "# A[0] * A[7]\n\t"
wolfSSL 14:167253f4e170 1946 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1947 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1948 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 1949 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1950 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1951 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1952 "# A[1] * A[6]\n\t"
wolfSSL 14:167253f4e170 1953 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1954 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1955 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1956 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1957 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1958 "# A[2] * A[5]\n\t"
wolfSSL 14:167253f4e170 1959 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1960 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 1961 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1962 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1963 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1964 "# A[3] * A[4]\n\t"
wolfSSL 14:167253f4e170 1965 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1966 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 1967 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1968 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1969 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1970 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 1971 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 1972 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1973 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 1974 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 1975 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 1976 "movq %%r8, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 1977 "# A[0] * A[8]\n\t"
wolfSSL 14:167253f4e170 1978 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1979 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 1980 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 1981 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 1982 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1983 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1984 "# A[1] * A[7]\n\t"
wolfSSL 14:167253f4e170 1985 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1986 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 1987 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1988 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1989 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1990 "# A[2] * A[6]\n\t"
wolfSSL 14:167253f4e170 1991 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1992 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 1993 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 1994 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 1995 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 1996 "# A[3] * A[5]\n\t"
wolfSSL 14:167253f4e170 1997 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 1998 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 1999 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2000 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2001 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2002 "# A[4] * A[4]\n\t"
wolfSSL 14:167253f4e170 2003 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2004 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2005 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2006 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2007 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2008 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2009 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2010 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2011 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 2012 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 2013 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 2014 "movq %%r9, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2015 "# A[0] * A[9]\n\t"
wolfSSL 14:167253f4e170 2016 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2017 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2018 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2019 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2020 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2021 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2022 "# A[1] * A[8]\n\t"
wolfSSL 14:167253f4e170 2023 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2024 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2025 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2026 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2027 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2028 "# A[2] * A[7]\n\t"
wolfSSL 14:167253f4e170 2029 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2030 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2031 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2032 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2033 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2034 "# A[3] * A[6]\n\t"
wolfSSL 14:167253f4e170 2035 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2036 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2037 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2038 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2039 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2040 "# A[4] * A[5]\n\t"
wolfSSL 14:167253f4e170 2041 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2042 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2043 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2044 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2045 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2046 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2047 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2048 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2049 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 2050 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 2051 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 2052 "movq %%rcx, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2053 "# A[0] * A[10]\n\t"
wolfSSL 14:167253f4e170 2054 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2055 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2056 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2057 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2058 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2059 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2060 "# A[1] * A[9]\n\t"
wolfSSL 14:167253f4e170 2061 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2062 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2063 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2064 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2065 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2066 "# A[2] * A[8]\n\t"
wolfSSL 14:167253f4e170 2067 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2068 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2069 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2070 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2071 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2072 "# A[3] * A[7]\n\t"
wolfSSL 14:167253f4e170 2073 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2074 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2075 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2076 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2077 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2078 "# A[4] * A[6]\n\t"
wolfSSL 14:167253f4e170 2079 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2080 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2081 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2082 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2083 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2084 "# A[5] * A[5]\n\t"
wolfSSL 14:167253f4e170 2085 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2086 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2087 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2088 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2089 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2090 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2091 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2092 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2093 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 2094 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 2095 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 2096 "movq %%r8, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2097 "# A[0] * A[11]\n\t"
wolfSSL 14:167253f4e170 2098 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2099 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2100 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2101 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2102 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2103 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2104 "# A[1] * A[10]\n\t"
wolfSSL 14:167253f4e170 2105 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2106 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2107 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2108 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2109 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2110 "# A[2] * A[9]\n\t"
wolfSSL 14:167253f4e170 2111 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2112 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2113 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2114 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2115 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2116 "# A[3] * A[8]\n\t"
wolfSSL 14:167253f4e170 2117 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2118 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2119 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2120 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2121 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2122 "# A[4] * A[7]\n\t"
wolfSSL 14:167253f4e170 2123 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2124 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2125 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2126 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2127 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2128 "# A[5] * A[6]\n\t"
wolfSSL 14:167253f4e170 2129 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2130 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2131 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2132 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2133 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2134 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2135 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2136 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2137 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 2138 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 2139 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 2140 "movq %%r9, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2141 "# A[0] * A[12]\n\t"
wolfSSL 14:167253f4e170 2142 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2143 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2144 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2145 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2146 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2147 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2148 "# A[1] * A[11]\n\t"
wolfSSL 14:167253f4e170 2149 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2150 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2151 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2152 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2153 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2154 "# A[2] * A[10]\n\t"
wolfSSL 14:167253f4e170 2155 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2156 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2157 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2158 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2159 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2160 "# A[3] * A[9]\n\t"
wolfSSL 14:167253f4e170 2161 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2162 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2163 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2164 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2165 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2166 "# A[4] * A[8]\n\t"
wolfSSL 14:167253f4e170 2167 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2168 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2169 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2170 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2171 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2172 "# A[5] * A[7]\n\t"
wolfSSL 14:167253f4e170 2173 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2174 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2175 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2176 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2177 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2178 "# A[6] * A[6]\n\t"
wolfSSL 14:167253f4e170 2179 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2180 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2181 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2182 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2183 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2184 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2185 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2186 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2187 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 2188 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 2189 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 2190 "movq %%rcx, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2191 "# A[0] * A[13]\n\t"
wolfSSL 14:167253f4e170 2192 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2193 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2194 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2195 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2196 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2197 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2198 "# A[1] * A[12]\n\t"
wolfSSL 14:167253f4e170 2199 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2200 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2201 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2202 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2203 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2204 "# A[2] * A[11]\n\t"
wolfSSL 14:167253f4e170 2205 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2206 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2207 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2208 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2209 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2210 "# A[3] * A[10]\n\t"
wolfSSL 14:167253f4e170 2211 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2212 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2213 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2214 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2215 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2216 "# A[4] * A[9]\n\t"
wolfSSL 14:167253f4e170 2217 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2218 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2219 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2220 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2221 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2222 "# A[5] * A[8]\n\t"
wolfSSL 14:167253f4e170 2223 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2224 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2225 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2226 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2227 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2228 "# A[6] * A[7]\n\t"
wolfSSL 14:167253f4e170 2229 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2230 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2231 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2232 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2233 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2234 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2235 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2236 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2237 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 2238 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 2239 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 2240 "movq %%r8, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2241 "# A[0] * A[14]\n\t"
wolfSSL 14:167253f4e170 2242 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2243 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2244 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2245 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2246 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2247 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2248 "# A[1] * A[13]\n\t"
wolfSSL 14:167253f4e170 2249 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2250 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2251 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2252 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2253 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2254 "# A[2] * A[12]\n\t"
wolfSSL 14:167253f4e170 2255 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2256 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2257 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2258 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2259 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2260 "# A[3] * A[11]\n\t"
wolfSSL 14:167253f4e170 2261 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2262 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2263 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2264 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2265 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2266 "# A[4] * A[10]\n\t"
wolfSSL 14:167253f4e170 2267 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2268 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2269 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2270 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2271 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2272 "# A[5] * A[9]\n\t"
wolfSSL 14:167253f4e170 2273 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2274 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2275 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2276 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2277 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2278 "# A[6] * A[8]\n\t"
wolfSSL 14:167253f4e170 2279 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2280 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2281 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2282 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2283 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2284 "# A[7] * A[7]\n\t"
wolfSSL 14:167253f4e170 2285 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2286 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2287 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2288 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2289 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2290 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2291 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2292 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2293 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 2294 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 2295 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 2296 "movq %%r9, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2297 "# A[0] * A[15]\n\t"
wolfSSL 14:167253f4e170 2298 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2299 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 2300 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2301 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2302 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2303 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2304 "# A[1] * A[14]\n\t"
wolfSSL 14:167253f4e170 2305 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2306 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2307 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2308 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2309 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2310 "# A[2] * A[13]\n\t"
wolfSSL 14:167253f4e170 2311 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2312 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2313 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2314 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2315 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2316 "# A[3] * A[12]\n\t"
wolfSSL 14:167253f4e170 2317 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2318 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2319 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2320 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2321 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2322 "# A[4] * A[11]\n\t"
wolfSSL 14:167253f4e170 2323 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2324 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2325 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2326 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2327 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2328 "# A[5] * A[10]\n\t"
wolfSSL 14:167253f4e170 2329 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2330 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2331 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2332 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2333 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2334 "# A[6] * A[9]\n\t"
wolfSSL 14:167253f4e170 2335 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2336 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2337 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2338 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2339 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2340 "# A[7] * A[8]\n\t"
wolfSSL 14:167253f4e170 2341 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2342 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2343 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2344 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2345 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2346 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2347 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2348 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2349 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 2350 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 2351 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 2352 "movq %%rcx, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 2353 "# A[1] * A[15]\n\t"
wolfSSL 14:167253f4e170 2354 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2355 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 2356 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2357 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2358 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2359 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2360 "# A[2] * A[14]\n\t"
wolfSSL 14:167253f4e170 2361 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2362 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2363 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2364 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2365 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2366 "# A[3] * A[13]\n\t"
wolfSSL 14:167253f4e170 2367 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2368 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2369 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2370 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2371 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2372 "# A[4] * A[12]\n\t"
wolfSSL 14:167253f4e170 2373 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2374 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2375 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2376 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2377 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2378 "# A[5] * A[11]\n\t"
wolfSSL 14:167253f4e170 2379 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2380 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2381 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2382 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2383 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2384 "# A[6] * A[10]\n\t"
wolfSSL 14:167253f4e170 2385 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2386 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2387 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2388 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2389 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2390 "# A[7] * A[9]\n\t"
wolfSSL 14:167253f4e170 2391 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2392 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2393 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2394 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2395 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2396 "# A[8] * A[8]\n\t"
wolfSSL 14:167253f4e170 2397 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2398 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2399 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2400 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2401 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2402 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2403 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2404 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2405 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 2406 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 2407 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 2408 "movq %%r8, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 2409 "# A[2] * A[15]\n\t"
wolfSSL 14:167253f4e170 2410 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2411 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 2412 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2413 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2414 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2415 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2416 "# A[3] * A[14]\n\t"
wolfSSL 14:167253f4e170 2417 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2418 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2419 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2420 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2421 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2422 "# A[4] * A[13]\n\t"
wolfSSL 14:167253f4e170 2423 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2424 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2425 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2426 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2427 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2428 "# A[5] * A[12]\n\t"
wolfSSL 14:167253f4e170 2429 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2430 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2431 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2432 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2433 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2434 "# A[6] * A[11]\n\t"
wolfSSL 14:167253f4e170 2435 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2436 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2437 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2438 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2439 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2440 "# A[7] * A[10]\n\t"
wolfSSL 14:167253f4e170 2441 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2442 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2443 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2444 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2445 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2446 "# A[8] * A[9]\n\t"
wolfSSL 14:167253f4e170 2447 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2448 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2449 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2450 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2451 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2452 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2453 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2454 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2455 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 2456 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 2457 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 2458 "movq %%r9, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 2459 "# A[3] * A[15]\n\t"
wolfSSL 14:167253f4e170 2460 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2461 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 2462 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2463 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2464 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2465 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2466 "# A[4] * A[14]\n\t"
wolfSSL 14:167253f4e170 2467 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2468 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2469 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2470 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2471 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2472 "# A[5] * A[13]\n\t"
wolfSSL 14:167253f4e170 2473 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2474 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2475 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2476 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2477 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2478 "# A[6] * A[12]\n\t"
wolfSSL 14:167253f4e170 2479 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2480 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2481 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2482 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2483 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2484 "# A[7] * A[11]\n\t"
wolfSSL 14:167253f4e170 2485 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2486 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2487 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2488 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2489 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2490 "# A[8] * A[10]\n\t"
wolfSSL 14:167253f4e170 2491 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2492 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2493 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2494 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2495 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2496 "# A[9] * A[9]\n\t"
wolfSSL 14:167253f4e170 2497 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2498 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2499 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2500 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2501 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2502 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2503 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2504 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2505 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 2506 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 2507 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 2508 "movq %%rcx, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 2509 "# A[4] * A[15]\n\t"
wolfSSL 14:167253f4e170 2510 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2511 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 2512 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2513 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2514 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2515 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2516 "# A[5] * A[14]\n\t"
wolfSSL 14:167253f4e170 2517 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2518 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2519 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2520 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2521 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2522 "# A[6] * A[13]\n\t"
wolfSSL 14:167253f4e170 2523 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2524 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2525 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2526 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2527 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2528 "# A[7] * A[12]\n\t"
wolfSSL 14:167253f4e170 2529 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2530 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2531 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2532 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2533 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2534 "# A[8] * A[11]\n\t"
wolfSSL 14:167253f4e170 2535 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2536 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2537 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2538 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2539 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2540 "# A[9] * A[10]\n\t"
wolfSSL 14:167253f4e170 2541 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2542 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 2543 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2544 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2545 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2546 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2547 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2548 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2549 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 2550 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 2551 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 2552 "movq %%r8, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 2553 "# A[5] * A[15]\n\t"
wolfSSL 14:167253f4e170 2554 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2555 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 2556 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2557 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2558 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2559 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2560 "# A[6] * A[14]\n\t"
wolfSSL 14:167253f4e170 2561 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2562 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2563 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2564 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2565 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2566 "# A[7] * A[13]\n\t"
wolfSSL 14:167253f4e170 2567 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2568 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2569 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2570 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2571 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2572 "# A[8] * A[12]\n\t"
wolfSSL 14:167253f4e170 2573 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2574 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2575 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2576 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2577 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2578 "# A[9] * A[11]\n\t"
wolfSSL 14:167253f4e170 2579 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2580 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 2581 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2582 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2583 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2584 "# A[10] * A[10]\n\t"
wolfSSL 14:167253f4e170 2585 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2586 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2587 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2588 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2589 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2590 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2591 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2592 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2593 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 2594 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 2595 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 2596 "movq %%r9, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 2597 "# A[6] * A[15]\n\t"
wolfSSL 14:167253f4e170 2598 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2599 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 2600 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2601 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2602 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2603 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2604 "# A[7] * A[14]\n\t"
wolfSSL 14:167253f4e170 2605 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2606 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2607 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2608 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2609 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2610 "# A[8] * A[13]\n\t"
wolfSSL 14:167253f4e170 2611 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2612 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2613 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2614 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2615 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2616 "# A[9] * A[12]\n\t"
wolfSSL 14:167253f4e170 2617 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2618 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 2619 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2620 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2621 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2622 "# A[10] * A[11]\n\t"
wolfSSL 14:167253f4e170 2623 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2624 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 2625 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2626 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2627 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2628 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2629 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2630 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2631 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 2632 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 2633 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 2634 "movq %%rcx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 2635 "# A[7] * A[15]\n\t"
wolfSSL 14:167253f4e170 2636 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2637 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 2638 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2639 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2640 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2641 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2642 "# A[8] * A[14]\n\t"
wolfSSL 14:167253f4e170 2643 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2644 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2645 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2646 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2647 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2648 "# A[9] * A[13]\n\t"
wolfSSL 14:167253f4e170 2649 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2650 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 2651 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2652 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2653 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2654 "# A[10] * A[12]\n\t"
wolfSSL 14:167253f4e170 2655 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2656 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 2657 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2658 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2659 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2660 "# A[11] * A[11]\n\t"
wolfSSL 14:167253f4e170 2661 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2662 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2663 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2664 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2665 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2666 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2667 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2668 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2669 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 2670 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 2671 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 2672 "movq %%r8, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 2673 "# A[8] * A[15]\n\t"
wolfSSL 14:167253f4e170 2674 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2675 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 2676 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2677 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2678 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2679 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2680 "# A[9] * A[14]\n\t"
wolfSSL 14:167253f4e170 2681 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2682 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 2683 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2684 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2685 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2686 "# A[10] * A[13]\n\t"
wolfSSL 14:167253f4e170 2687 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2688 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 2689 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2690 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2691 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2692 "# A[11] * A[12]\n\t"
wolfSSL 14:167253f4e170 2693 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2694 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 2695 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2696 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2697 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2698 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2699 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2700 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2701 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 2702 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 2703 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 2704 "movq %%r9, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 2705 "# A[9] * A[15]\n\t"
wolfSSL 14:167253f4e170 2706 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2707 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 2708 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2709 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2710 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2711 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2712 "# A[10] * A[14]\n\t"
wolfSSL 14:167253f4e170 2713 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2714 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 2715 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2716 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2717 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2718 "# A[11] * A[13]\n\t"
wolfSSL 14:167253f4e170 2719 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2720 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 2721 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2722 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2723 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2724 "# A[12] * A[12]\n\t"
wolfSSL 14:167253f4e170 2725 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2726 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2727 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2728 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2729 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2730 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2731 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2732 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2733 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 2734 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 2735 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 2736 "movq %%rcx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 2737 "# A[10] * A[15]\n\t"
wolfSSL 14:167253f4e170 2738 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2739 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 2740 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2741 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2742 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2743 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2744 "# A[11] * A[14]\n\t"
wolfSSL 14:167253f4e170 2745 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2746 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 2747 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2748 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2749 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2750 "# A[12] * A[13]\n\t"
wolfSSL 14:167253f4e170 2751 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2752 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 2753 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 2754 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 2755 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 2756 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 2757 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 2758 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 2759 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 2760 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 2761 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 2762 "movq %%r8, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 2763 "# A[11] * A[15]\n\t"
wolfSSL 14:167253f4e170 2764 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2765 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 2766 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2767 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2768 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2769 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2770 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2771 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2772 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2773 "# A[12] * A[14]\n\t"
wolfSSL 14:167253f4e170 2774 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2775 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 2776 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2777 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2778 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2779 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2780 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2781 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2782 "# A[13] * A[13]\n\t"
wolfSSL 14:167253f4e170 2783 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2784 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2785 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2786 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2787 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2788 "movq %%r9, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 2789 "# A[12] * A[15]\n\t"
wolfSSL 14:167253f4e170 2790 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2791 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 2792 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 2793 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 2794 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 2795 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 2796 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 2797 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 2798 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 2799 "# A[13] * A[14]\n\t"
wolfSSL 14:167253f4e170 2800 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2801 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 2802 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 2803 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 2804 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 2805 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 2806 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 2807 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 2808 "movq %%rcx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 2809 "# A[13] * A[15]\n\t"
wolfSSL 14:167253f4e170 2810 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2811 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 2812 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2813 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 2814 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 2815 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 2816 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 2817 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 2818 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 2819 "# A[14] * A[14]\n\t"
wolfSSL 14:167253f4e170 2820 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2821 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2822 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 2823 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 2824 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 2825 "movq %%r8, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 2826 "# A[14] * A[15]\n\t"
wolfSSL 14:167253f4e170 2827 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2828 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 2829 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 2830 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2831 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2832 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2833 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 2834 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 2835 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 2836 "movq %%r9, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 2837 "# A[15] * A[15]\n\t"
wolfSSL 14:167253f4e170 2838 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 2839 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 2840 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 2841 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 2842 "movq %%rcx, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 2843 "movq %%r8, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 2844 :
wolfSSL 14:167253f4e170 2845 : [r] "r" (r), [a] "r" (a), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 2846 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 2847 );
wolfSSL 14:167253f4e170 2848
wolfSSL 14:167253f4e170 2849 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 2850 }
wolfSSL 14:167253f4e170 2851
wolfSSL 14:167253f4e170 2852 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 2853 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 2854 *
wolfSSL 14:167253f4e170 2855 * r Result of multiplication.
wolfSSL 14:167253f4e170 2856 * a First number to multiply.
wolfSSL 14:167253f4e170 2857 * b Second number to multiply.
wolfSSL 14:167253f4e170 2858 */
wolfSSL 14:167253f4e170 2859 SP_NOINLINE static void sp_2048_mul_avx2_16(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 2860 const sp_digit* b)
wolfSSL 14:167253f4e170 2861 {
wolfSSL 14:167253f4e170 2862 sp_digit tmp[2*16];
wolfSSL 14:167253f4e170 2863
wolfSSL 14:167253f4e170 2864 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 2865 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 2866 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 2867 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 2868 "mulx 0(%[b]), %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 2869 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 2870 "mulx 8(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2871 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2872 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 2873 "mulx 16(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2874 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2875 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 2876 "mulx 24(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2877 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2878 "movq %%r10, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 2879 "movq %%r11, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 2880 "movq %%r12, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 2881 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 2882 "# A[0] * B[4]\n\t"
wolfSSL 14:167253f4e170 2883 "mulx 32(%[b]), %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 2884 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2885 "# A[0] * B[5]\n\t"
wolfSSL 14:167253f4e170 2886 "mulx 40(%[b]), %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 2887 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 2888 "# A[0] * B[6]\n\t"
wolfSSL 14:167253f4e170 2889 "mulx 48(%[b]), %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2890 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 2891 "# A[0] * B[7]\n\t"
wolfSSL 14:167253f4e170 2892 "mulx 56(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2893 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2894 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 2895 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 2896 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 2897 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 2898 "# A[0] * B[8]\n\t"
wolfSSL 14:167253f4e170 2899 "mulx 64(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2900 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2901 "# A[0] * B[9]\n\t"
wolfSSL 14:167253f4e170 2902 "mulx 72(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2903 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2904 "# A[0] * B[10]\n\t"
wolfSSL 14:167253f4e170 2905 "mulx 80(%[b]), %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 2906 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2907 "# A[0] * B[11]\n\t"
wolfSSL 14:167253f4e170 2908 "mulx 88(%[b]), %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 2909 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 2910 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 2911 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 2912 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 2913 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 2914 "# A[0] * B[12]\n\t"
wolfSSL 14:167253f4e170 2915 "mulx 96(%[b]), %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2916 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 2917 "# A[0] * B[13]\n\t"
wolfSSL 14:167253f4e170 2918 "mulx 104(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2919 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2920 "# A[0] * B[14]\n\t"
wolfSSL 14:167253f4e170 2921 "mulx 112(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2922 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2923 "# A[0] * B[15]\n\t"
wolfSSL 14:167253f4e170 2924 "mulx 120(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2925 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2926 "adcxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 2927 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 2928 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 2929 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 2930 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 2931 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 2932 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 2933 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 2934 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 2935 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 2936 "movq 8(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 2937 "movq 16(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 2938 "movq 24(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 2939 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 2940 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 2941 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 2942 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2943 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2944 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 2945 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 2946 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2947 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2948 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 2949 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 2950 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2951 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2952 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 2953 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 2954 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2955 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2956 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 2957 "movq %%r11, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 2958 "movq %%r12, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 2959 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 2960 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 2961 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 2962 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 2963 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 2964 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 2965 "# A[1] * B[4]\n\t"
wolfSSL 14:167253f4e170 2966 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2967 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 2968 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 2969 "# A[1] * B[5]\n\t"
wolfSSL 14:167253f4e170 2970 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2971 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 2972 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 2973 "# A[1] * B[6]\n\t"
wolfSSL 14:167253f4e170 2974 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2975 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 2976 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 2977 "# A[1] * B[7]\n\t"
wolfSSL 14:167253f4e170 2978 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2979 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 2980 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 2981 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 2982 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 2983 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 2984 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 2985 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 2986 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 2987 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 2988 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 2989 "# A[1] * B[8]\n\t"
wolfSSL 14:167253f4e170 2990 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2991 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 2992 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 2993 "# A[1] * B[9]\n\t"
wolfSSL 14:167253f4e170 2994 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2995 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 2996 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 2997 "# A[1] * B[10]\n\t"
wolfSSL 14:167253f4e170 2998 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 2999 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3000 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3001 "# A[1] * B[11]\n\t"
wolfSSL 14:167253f4e170 3002 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3003 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3004 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3005 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3006 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3007 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3008 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3009 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3010 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3011 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3012 "# A[1] * B[12]\n\t"
wolfSSL 14:167253f4e170 3013 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3014 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3015 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3016 "# A[1] * B[13]\n\t"
wolfSSL 14:167253f4e170 3017 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3018 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3019 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3020 "# A[1] * B[14]\n\t"
wolfSSL 14:167253f4e170 3021 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3022 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3023 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3024 "# A[1] * B[15]\n\t"
wolfSSL 14:167253f4e170 3025 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3026 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 3027 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3028 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3029 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 3030 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3031 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3032 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3033 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3034 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3035 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3036 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3037 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3038 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3039 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3040 "movq 16(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3041 "movq 24(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3042 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3043 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3044 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3045 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 3046 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3047 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3048 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3049 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 3050 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3051 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3052 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3053 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 3054 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3055 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3056 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3057 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 3058 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3059 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3060 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3061 "movq %%r12, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 3062 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 3063 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 3064 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 3065 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3066 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3067 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3068 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3069 "# A[2] * B[4]\n\t"
wolfSSL 14:167253f4e170 3070 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3071 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3072 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3073 "# A[2] * B[5]\n\t"
wolfSSL 14:167253f4e170 3074 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3075 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3076 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3077 "# A[2] * B[6]\n\t"
wolfSSL 14:167253f4e170 3078 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3079 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3080 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3081 "# A[2] * B[7]\n\t"
wolfSSL 14:167253f4e170 3082 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3083 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3084 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3085 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 3086 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 3087 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3088 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3089 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3090 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3091 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3092 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3093 "# A[2] * B[8]\n\t"
wolfSSL 14:167253f4e170 3094 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3095 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3096 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3097 "# A[2] * B[9]\n\t"
wolfSSL 14:167253f4e170 3098 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3099 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3100 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3101 "# A[2] * B[10]\n\t"
wolfSSL 14:167253f4e170 3102 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3103 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3104 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3105 "# A[2] * B[11]\n\t"
wolfSSL 14:167253f4e170 3106 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3107 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3108 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3109 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3110 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3111 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3112 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3113 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3114 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3115 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3116 "# A[2] * B[12]\n\t"
wolfSSL 14:167253f4e170 3117 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3118 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3119 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3120 "# A[2] * B[13]\n\t"
wolfSSL 14:167253f4e170 3121 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3122 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3123 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3124 "# A[2] * B[14]\n\t"
wolfSSL 14:167253f4e170 3125 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3126 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3127 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3128 "# A[2] * B[15]\n\t"
wolfSSL 14:167253f4e170 3129 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3130 "movq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 3131 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3132 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3133 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 3134 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3135 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3136 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3137 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3138 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3139 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3140 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3141 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3142 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3143 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3144 "movq 24(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3145 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3146 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3147 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3148 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3149 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 3150 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3151 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3152 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3153 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 3154 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3155 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3156 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3157 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 3158 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3159 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3160 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3161 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 3162 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3163 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3164 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3165 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 3166 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 3167 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 3168 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 3169 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3170 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3171 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3172 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3173 "# A[3] * B[4]\n\t"
wolfSSL 14:167253f4e170 3174 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3175 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3176 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3177 "# A[3] * B[5]\n\t"
wolfSSL 14:167253f4e170 3178 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3179 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3180 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3181 "# A[3] * B[6]\n\t"
wolfSSL 14:167253f4e170 3182 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3183 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3184 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3185 "# A[3] * B[7]\n\t"
wolfSSL 14:167253f4e170 3186 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3187 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3188 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3189 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 3190 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3191 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3192 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3193 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3194 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3195 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3196 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3197 "# A[3] * B[8]\n\t"
wolfSSL 14:167253f4e170 3198 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3199 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3200 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3201 "# A[3] * B[9]\n\t"
wolfSSL 14:167253f4e170 3202 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3203 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3204 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3205 "# A[3] * B[10]\n\t"
wolfSSL 14:167253f4e170 3206 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3207 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3208 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3209 "# A[3] * B[11]\n\t"
wolfSSL 14:167253f4e170 3210 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3211 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3212 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3213 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3214 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3215 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3216 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3217 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3218 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3219 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3220 "# A[3] * B[12]\n\t"
wolfSSL 14:167253f4e170 3221 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3222 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3223 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3224 "# A[3] * B[13]\n\t"
wolfSSL 14:167253f4e170 3225 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3226 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3227 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3228 "# A[3] * B[14]\n\t"
wolfSSL 14:167253f4e170 3229 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3230 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3231 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3232 "# A[3] * B[15]\n\t"
wolfSSL 14:167253f4e170 3233 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3234 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 3235 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3236 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3237 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 3238 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3239 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3240 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3241 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3242 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3243 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3244 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3245 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3246 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3247 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3248 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3249 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3250 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3251 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3252 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3253 "# A[4] * B[0]\n\t"
wolfSSL 14:167253f4e170 3254 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3255 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3256 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3257 "# A[4] * B[1]\n\t"
wolfSSL 14:167253f4e170 3258 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3259 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3260 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3261 "# A[4] * B[2]\n\t"
wolfSSL 14:167253f4e170 3262 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3263 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3264 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3265 "# A[4] * B[3]\n\t"
wolfSSL 14:167253f4e170 3266 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3267 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3268 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3269 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 3270 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 3271 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 3272 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 3273 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3274 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3275 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3276 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3277 "# A[4] * B[4]\n\t"
wolfSSL 14:167253f4e170 3278 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3279 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3280 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3281 "# A[4] * B[5]\n\t"
wolfSSL 14:167253f4e170 3282 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3283 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3284 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3285 "# A[4] * B[6]\n\t"
wolfSSL 14:167253f4e170 3286 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3287 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3288 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3289 "# A[4] * B[7]\n\t"
wolfSSL 14:167253f4e170 3290 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3291 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3292 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3293 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3294 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3295 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3296 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3297 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3298 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3299 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3300 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3301 "# A[4] * B[8]\n\t"
wolfSSL 14:167253f4e170 3302 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3303 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3304 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3305 "# A[4] * B[9]\n\t"
wolfSSL 14:167253f4e170 3306 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3307 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3308 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3309 "# A[4] * B[10]\n\t"
wolfSSL 14:167253f4e170 3310 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3311 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3312 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3313 "# A[4] * B[11]\n\t"
wolfSSL 14:167253f4e170 3314 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3315 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3316 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3317 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3318 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3319 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3320 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3321 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3322 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3323 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3324 "# A[4] * B[12]\n\t"
wolfSSL 14:167253f4e170 3325 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3326 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3327 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3328 "# A[4] * B[13]\n\t"
wolfSSL 14:167253f4e170 3329 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3330 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3331 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3332 "# A[4] * B[14]\n\t"
wolfSSL 14:167253f4e170 3333 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3334 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3335 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3336 "# A[4] * B[15]\n\t"
wolfSSL 14:167253f4e170 3337 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3338 "movq %%r15, %%r12\n\t"
wolfSSL 14:167253f4e170 3339 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3340 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3341 "adcxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 3342 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3343 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3344 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3345 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3346 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3347 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3348 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3349 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3350 "movq 40(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3351 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3352 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3353 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3354 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3355 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3356 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3357 "# A[5] * B[0]\n\t"
wolfSSL 14:167253f4e170 3358 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3359 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3360 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3361 "# A[5] * B[1]\n\t"
wolfSSL 14:167253f4e170 3362 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3363 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3364 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3365 "# A[5] * B[2]\n\t"
wolfSSL 14:167253f4e170 3366 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3367 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3368 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3369 "# A[5] * B[3]\n\t"
wolfSSL 14:167253f4e170 3370 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3371 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3372 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3373 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 3374 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 3375 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 3376 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3377 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3378 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3379 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3380 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3381 "# A[5] * B[4]\n\t"
wolfSSL 14:167253f4e170 3382 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3383 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3384 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3385 "# A[5] * B[5]\n\t"
wolfSSL 14:167253f4e170 3386 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3387 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3388 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3389 "# A[5] * B[6]\n\t"
wolfSSL 14:167253f4e170 3390 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3391 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3392 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3393 "# A[5] * B[7]\n\t"
wolfSSL 14:167253f4e170 3394 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3395 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3396 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3397 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3398 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3399 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3400 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3401 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3402 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3403 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3404 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3405 "# A[5] * B[8]\n\t"
wolfSSL 14:167253f4e170 3406 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3407 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3408 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3409 "# A[5] * B[9]\n\t"
wolfSSL 14:167253f4e170 3410 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3411 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3412 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3413 "# A[5] * B[10]\n\t"
wolfSSL 14:167253f4e170 3414 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3415 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3416 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3417 "# A[5] * B[11]\n\t"
wolfSSL 14:167253f4e170 3418 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3419 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3420 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3421 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3422 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3423 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3424 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3425 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3426 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3427 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3428 "# A[5] * B[12]\n\t"
wolfSSL 14:167253f4e170 3429 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3430 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3431 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3432 "# A[5] * B[13]\n\t"
wolfSSL 14:167253f4e170 3433 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3434 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3435 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3436 "# A[5] * B[14]\n\t"
wolfSSL 14:167253f4e170 3437 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3438 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3439 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3440 "# A[5] * B[15]\n\t"
wolfSSL 14:167253f4e170 3441 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3442 "movq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 3443 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3444 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3445 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 3446 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3447 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3448 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3449 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3450 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3451 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3452 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3453 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 3454 "movq 48(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3455 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3456 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3457 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3458 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3459 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3460 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3461 "# A[6] * B[0]\n\t"
wolfSSL 14:167253f4e170 3462 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3463 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3464 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3465 "# A[6] * B[1]\n\t"
wolfSSL 14:167253f4e170 3466 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3467 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3468 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3469 "# A[6] * B[2]\n\t"
wolfSSL 14:167253f4e170 3470 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3471 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3472 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3473 "# A[6] * B[3]\n\t"
wolfSSL 14:167253f4e170 3474 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3475 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3476 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3477 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 3478 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 3479 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3480 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3481 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3482 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3483 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3484 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3485 "# A[6] * B[4]\n\t"
wolfSSL 14:167253f4e170 3486 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3487 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3488 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3489 "# A[6] * B[5]\n\t"
wolfSSL 14:167253f4e170 3490 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3491 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3492 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3493 "# A[6] * B[6]\n\t"
wolfSSL 14:167253f4e170 3494 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3495 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3496 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3497 "# A[6] * B[7]\n\t"
wolfSSL 14:167253f4e170 3498 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3499 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3500 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3501 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3502 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3503 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3504 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3505 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3506 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3507 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3508 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3509 "# A[6] * B[8]\n\t"
wolfSSL 14:167253f4e170 3510 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3511 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3512 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3513 "# A[6] * B[9]\n\t"
wolfSSL 14:167253f4e170 3514 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3515 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3516 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3517 "# A[6] * B[10]\n\t"
wolfSSL 14:167253f4e170 3518 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3519 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3520 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3521 "# A[6] * B[11]\n\t"
wolfSSL 14:167253f4e170 3522 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3523 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3524 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3525 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3526 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3527 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3528 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3529 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3530 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3531 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3532 "# A[6] * B[12]\n\t"
wolfSSL 14:167253f4e170 3533 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3534 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3535 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3536 "# A[6] * B[13]\n\t"
wolfSSL 14:167253f4e170 3537 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3538 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3539 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3540 "# A[6] * B[14]\n\t"
wolfSSL 14:167253f4e170 3541 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3542 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3543 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3544 "# A[6] * B[15]\n\t"
wolfSSL 14:167253f4e170 3545 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3546 "movq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 3547 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3548 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3549 "adcxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 3550 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3551 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3552 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3553 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3554 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3555 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3556 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 3557 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 3558 "movq 56(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3559 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3560 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3561 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3562 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3563 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3564 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3565 "# A[7] * B[0]\n\t"
wolfSSL 14:167253f4e170 3566 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3567 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3568 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3569 "# A[7] * B[1]\n\t"
wolfSSL 14:167253f4e170 3570 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3571 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3572 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3573 "# A[7] * B[2]\n\t"
wolfSSL 14:167253f4e170 3574 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3575 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3576 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3577 "# A[7] * B[3]\n\t"
wolfSSL 14:167253f4e170 3578 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3579 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3580 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3581 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 3582 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3583 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3584 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3585 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3586 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3587 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3588 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3589 "# A[7] * B[4]\n\t"
wolfSSL 14:167253f4e170 3590 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3591 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3592 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3593 "# A[7] * B[5]\n\t"
wolfSSL 14:167253f4e170 3594 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3595 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3596 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3597 "# A[7] * B[6]\n\t"
wolfSSL 14:167253f4e170 3598 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3599 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3600 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3601 "# A[7] * B[7]\n\t"
wolfSSL 14:167253f4e170 3602 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3603 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3604 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3605 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3606 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3607 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3608 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3609 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3610 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3611 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3612 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3613 "# A[7] * B[8]\n\t"
wolfSSL 14:167253f4e170 3614 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3615 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3616 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3617 "# A[7] * B[9]\n\t"
wolfSSL 14:167253f4e170 3618 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3619 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3620 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3621 "# A[7] * B[10]\n\t"
wolfSSL 14:167253f4e170 3622 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3623 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3624 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3625 "# A[7] * B[11]\n\t"
wolfSSL 14:167253f4e170 3626 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3627 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3628 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3629 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3630 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3631 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3632 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3633 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3634 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3635 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3636 "# A[7] * B[12]\n\t"
wolfSSL 14:167253f4e170 3637 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3638 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3639 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3640 "# A[7] * B[13]\n\t"
wolfSSL 14:167253f4e170 3641 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3642 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3643 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3644 "# A[7] * B[14]\n\t"
wolfSSL 14:167253f4e170 3645 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3646 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3647 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3648 "# A[7] * B[15]\n\t"
wolfSSL 14:167253f4e170 3649 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3650 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 3651 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3652 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3653 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 3654 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3655 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3656 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3657 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3658 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3659 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 3660 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 3661 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 3662 "movq 64(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3663 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3664 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3665 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3666 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3667 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3668 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3669 "# A[8] * B[0]\n\t"
wolfSSL 14:167253f4e170 3670 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3671 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3672 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3673 "# A[8] * B[1]\n\t"
wolfSSL 14:167253f4e170 3674 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3675 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3676 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3677 "# A[8] * B[2]\n\t"
wolfSSL 14:167253f4e170 3678 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3679 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3680 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3681 "# A[8] * B[3]\n\t"
wolfSSL 14:167253f4e170 3682 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3683 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3684 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3685 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 3686 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3687 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3688 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3689 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3690 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3691 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3692 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3693 "# A[8] * B[4]\n\t"
wolfSSL 14:167253f4e170 3694 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3695 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3696 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3697 "# A[8] * B[5]\n\t"
wolfSSL 14:167253f4e170 3698 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3699 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3700 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3701 "# A[8] * B[6]\n\t"
wolfSSL 14:167253f4e170 3702 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3703 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3704 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3705 "# A[8] * B[7]\n\t"
wolfSSL 14:167253f4e170 3706 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3707 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3708 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3709 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3710 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3711 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3712 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3713 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3714 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3715 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3716 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3717 "# A[8] * B[8]\n\t"
wolfSSL 14:167253f4e170 3718 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3719 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3720 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3721 "# A[8] * B[9]\n\t"
wolfSSL 14:167253f4e170 3722 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3723 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3724 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3725 "# A[8] * B[10]\n\t"
wolfSSL 14:167253f4e170 3726 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3727 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3728 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3729 "# A[8] * B[11]\n\t"
wolfSSL 14:167253f4e170 3730 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3731 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3732 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3733 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3734 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3735 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3736 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3737 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3738 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3739 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3740 "# A[8] * B[12]\n\t"
wolfSSL 14:167253f4e170 3741 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3742 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3743 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3744 "# A[8] * B[13]\n\t"
wolfSSL 14:167253f4e170 3745 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3746 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3747 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3748 "# A[8] * B[14]\n\t"
wolfSSL 14:167253f4e170 3749 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3750 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3751 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3752 "# A[8] * B[15]\n\t"
wolfSSL 14:167253f4e170 3753 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3754 "movq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 3755 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3756 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3757 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 3758 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3759 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3760 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3761 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3762 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 3763 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 3764 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 3765 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 3766 "movq 72(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3767 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3768 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3769 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3770 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3771 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3772 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3773 "# A[9] * B[0]\n\t"
wolfSSL 14:167253f4e170 3774 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3775 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3776 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3777 "# A[9] * B[1]\n\t"
wolfSSL 14:167253f4e170 3778 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3779 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3780 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3781 "# A[9] * B[2]\n\t"
wolfSSL 14:167253f4e170 3782 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3783 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3784 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3785 "# A[9] * B[3]\n\t"
wolfSSL 14:167253f4e170 3786 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3787 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3788 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3789 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 3790 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3791 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3792 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3793 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3794 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3795 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3796 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3797 "# A[9] * B[4]\n\t"
wolfSSL 14:167253f4e170 3798 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3799 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3800 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3801 "# A[9] * B[5]\n\t"
wolfSSL 14:167253f4e170 3802 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3803 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3804 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3805 "# A[9] * B[6]\n\t"
wolfSSL 14:167253f4e170 3806 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3807 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3808 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3809 "# A[9] * B[7]\n\t"
wolfSSL 14:167253f4e170 3810 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3811 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3812 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3813 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3814 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3815 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3816 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3817 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3818 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3819 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3820 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3821 "# A[9] * B[8]\n\t"
wolfSSL 14:167253f4e170 3822 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3823 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3824 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3825 "# A[9] * B[9]\n\t"
wolfSSL 14:167253f4e170 3826 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3827 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3828 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3829 "# A[9] * B[10]\n\t"
wolfSSL 14:167253f4e170 3830 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3831 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3832 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3833 "# A[9] * B[11]\n\t"
wolfSSL 14:167253f4e170 3834 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3835 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3836 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3837 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3838 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3839 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3840 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3841 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3842 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3843 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3844 "# A[9] * B[12]\n\t"
wolfSSL 14:167253f4e170 3845 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3846 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3847 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3848 "# A[9] * B[13]\n\t"
wolfSSL 14:167253f4e170 3849 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3850 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3851 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3852 "# A[9] * B[14]\n\t"
wolfSSL 14:167253f4e170 3853 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3854 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3855 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3856 "# A[9] * B[15]\n\t"
wolfSSL 14:167253f4e170 3857 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3858 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 3859 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3860 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3861 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 3862 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3863 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3864 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3865 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 3866 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 3867 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 3868 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 3869 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 3870 "movq 80(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3871 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3872 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3873 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3874 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3875 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3876 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3877 "# A[10] * B[0]\n\t"
wolfSSL 14:167253f4e170 3878 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3879 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3880 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3881 "# A[10] * B[1]\n\t"
wolfSSL 14:167253f4e170 3882 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3883 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3884 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3885 "# A[10] * B[2]\n\t"
wolfSSL 14:167253f4e170 3886 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3887 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3888 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3889 "# A[10] * B[3]\n\t"
wolfSSL 14:167253f4e170 3890 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3891 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3892 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3893 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 3894 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3895 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3896 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 3897 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3898 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3899 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3900 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3901 "# A[10] * B[4]\n\t"
wolfSSL 14:167253f4e170 3902 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3903 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3904 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3905 "# A[10] * B[5]\n\t"
wolfSSL 14:167253f4e170 3906 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3907 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3908 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3909 "# A[10] * B[6]\n\t"
wolfSSL 14:167253f4e170 3910 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3911 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3912 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3913 "# A[10] * B[7]\n\t"
wolfSSL 14:167253f4e170 3914 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3915 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3916 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3917 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 3918 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 3919 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 3920 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 3921 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3922 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3923 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3924 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 3925 "# A[10] * B[8]\n\t"
wolfSSL 14:167253f4e170 3926 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3927 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3928 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3929 "# A[10] * B[9]\n\t"
wolfSSL 14:167253f4e170 3930 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3931 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3932 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3933 "# A[10] * B[10]\n\t"
wolfSSL 14:167253f4e170 3934 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3935 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3936 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3937 "# A[10] * B[11]\n\t"
wolfSSL 14:167253f4e170 3938 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3939 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 3940 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 3941 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 3942 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 3943 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 3944 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 3945 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3946 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3947 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3948 "# A[10] * B[12]\n\t"
wolfSSL 14:167253f4e170 3949 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3950 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 3951 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 3952 "# A[10] * B[13]\n\t"
wolfSSL 14:167253f4e170 3953 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3954 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3955 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3956 "# A[10] * B[14]\n\t"
wolfSSL 14:167253f4e170 3957 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3958 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3959 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3960 "# A[10] * B[15]\n\t"
wolfSSL 14:167253f4e170 3961 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3962 "movq %%r15, %%r12\n\t"
wolfSSL 14:167253f4e170 3963 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3964 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3965 "adcxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 3966 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3967 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3968 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 3969 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 3970 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 3971 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 3972 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 3973 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 3974 "movq 88(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 3975 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 3976 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 3977 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 3978 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 3979 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 3980 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 3981 "# A[11] * B[0]\n\t"
wolfSSL 14:167253f4e170 3982 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3983 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 3984 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 3985 "# A[11] * B[1]\n\t"
wolfSSL 14:167253f4e170 3986 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3987 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 3988 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 3989 "# A[11] * B[2]\n\t"
wolfSSL 14:167253f4e170 3990 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3991 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 3992 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 3993 "# A[11] * B[3]\n\t"
wolfSSL 14:167253f4e170 3994 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 3995 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 3996 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 3997 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 3998 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 3999 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 4000 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 4001 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4002 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4003 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4004 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4005 "# A[11] * B[4]\n\t"
wolfSSL 14:167253f4e170 4006 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4007 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4008 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4009 "# A[11] * B[5]\n\t"
wolfSSL 14:167253f4e170 4010 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4011 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4012 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4013 "# A[11] * B[6]\n\t"
wolfSSL 14:167253f4e170 4014 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4015 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4016 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4017 "# A[11] * B[7]\n\t"
wolfSSL 14:167253f4e170 4018 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4019 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4020 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4021 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 4022 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 4023 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 4024 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 4025 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4026 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4027 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4028 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4029 "# A[11] * B[8]\n\t"
wolfSSL 14:167253f4e170 4030 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4031 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4032 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4033 "# A[11] * B[9]\n\t"
wolfSSL 14:167253f4e170 4034 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4035 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4036 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4037 "# A[11] * B[10]\n\t"
wolfSSL 14:167253f4e170 4038 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4039 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4040 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4041 "# A[11] * B[11]\n\t"
wolfSSL 14:167253f4e170 4042 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4043 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4044 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4045 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 4046 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 4047 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 4048 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 4049 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4050 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4051 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4052 "# A[11] * B[12]\n\t"
wolfSSL 14:167253f4e170 4053 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4054 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4055 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4056 "# A[11] * B[13]\n\t"
wolfSSL 14:167253f4e170 4057 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4058 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4059 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4060 "# A[11] * B[14]\n\t"
wolfSSL 14:167253f4e170 4061 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4062 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4063 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4064 "# A[11] * B[15]\n\t"
wolfSSL 14:167253f4e170 4065 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4066 "movq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 4067 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4068 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4069 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4070 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4071 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4072 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4073 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 4074 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 4075 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 4076 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 4077 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 4078 "movq 96(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4079 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 4080 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4081 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4082 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4083 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4084 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4085 "# A[12] * B[0]\n\t"
wolfSSL 14:167253f4e170 4086 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4087 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4088 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4089 "# A[12] * B[1]\n\t"
wolfSSL 14:167253f4e170 4090 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4091 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4092 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4093 "# A[12] * B[2]\n\t"
wolfSSL 14:167253f4e170 4094 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4095 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4096 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4097 "# A[12] * B[3]\n\t"
wolfSSL 14:167253f4e170 4098 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4099 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4100 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4101 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 4102 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 4103 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 4104 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 4105 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4106 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4107 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4108 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4109 "# A[12] * B[4]\n\t"
wolfSSL 14:167253f4e170 4110 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4111 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4112 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4113 "# A[12] * B[5]\n\t"
wolfSSL 14:167253f4e170 4114 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4115 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4116 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4117 "# A[12] * B[6]\n\t"
wolfSSL 14:167253f4e170 4118 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4119 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4120 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4121 "# A[12] * B[7]\n\t"
wolfSSL 14:167253f4e170 4122 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4123 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4124 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4125 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 4126 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 4127 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 4128 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 4129 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4130 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4131 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4132 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4133 "# A[12] * B[8]\n\t"
wolfSSL 14:167253f4e170 4134 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4135 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4136 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4137 "# A[12] * B[9]\n\t"
wolfSSL 14:167253f4e170 4138 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4139 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4140 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4141 "# A[12] * B[10]\n\t"
wolfSSL 14:167253f4e170 4142 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4143 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4144 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4145 "# A[12] * B[11]\n\t"
wolfSSL 14:167253f4e170 4146 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4147 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4148 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4149 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 4150 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 4151 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 4152 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 4153 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4154 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4155 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4156 "# A[12] * B[12]\n\t"
wolfSSL 14:167253f4e170 4157 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4158 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4159 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4160 "# A[12] * B[13]\n\t"
wolfSSL 14:167253f4e170 4161 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4162 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4163 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4164 "# A[12] * B[14]\n\t"
wolfSSL 14:167253f4e170 4165 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4166 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4167 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4168 "# A[12] * B[15]\n\t"
wolfSSL 14:167253f4e170 4169 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4170 "movq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 4171 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4172 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4173 "adcxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4174 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4175 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4176 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4177 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 4178 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 4179 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 4180 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 4181 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 4182 "movq 104(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4183 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 4184 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4185 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4186 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4187 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4188 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4189 "# A[13] * B[0]\n\t"
wolfSSL 14:167253f4e170 4190 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4191 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4192 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4193 "# A[13] * B[1]\n\t"
wolfSSL 14:167253f4e170 4194 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4195 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4196 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4197 "# A[13] * B[2]\n\t"
wolfSSL 14:167253f4e170 4198 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4199 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4200 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4201 "# A[13] * B[3]\n\t"
wolfSSL 14:167253f4e170 4202 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4203 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4204 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4205 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 4206 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 4207 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 4208 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 4209 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4210 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4211 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4212 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4213 "# A[13] * B[4]\n\t"
wolfSSL 14:167253f4e170 4214 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4215 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4216 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4217 "# A[13] * B[5]\n\t"
wolfSSL 14:167253f4e170 4218 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4219 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4220 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4221 "# A[13] * B[6]\n\t"
wolfSSL 14:167253f4e170 4222 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4223 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4224 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4225 "# A[13] * B[7]\n\t"
wolfSSL 14:167253f4e170 4226 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4227 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4228 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4229 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 4230 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 4231 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 4232 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 4233 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4234 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4235 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4236 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4237 "# A[13] * B[8]\n\t"
wolfSSL 14:167253f4e170 4238 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4239 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4240 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4241 "# A[13] * B[9]\n\t"
wolfSSL 14:167253f4e170 4242 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4243 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4244 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4245 "# A[13] * B[10]\n\t"
wolfSSL 14:167253f4e170 4246 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4247 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4248 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4249 "# A[13] * B[11]\n\t"
wolfSSL 14:167253f4e170 4250 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4251 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4252 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4253 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 4254 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 4255 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 4256 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 4257 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4258 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4259 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4260 "# A[13] * B[12]\n\t"
wolfSSL 14:167253f4e170 4261 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4262 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4263 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4264 "# A[13] * B[13]\n\t"
wolfSSL 14:167253f4e170 4265 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4266 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4267 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4268 "# A[13] * B[14]\n\t"
wolfSSL 14:167253f4e170 4269 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4270 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4271 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4272 "# A[13] * B[15]\n\t"
wolfSSL 14:167253f4e170 4273 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4274 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 4275 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4276 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4277 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 4278 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4279 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4280 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4281 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 4282 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 4283 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 4284 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 4285 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 4286 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4287 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 4288 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4289 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4290 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4291 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4292 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4293 "# A[14] * B[0]\n\t"
wolfSSL 14:167253f4e170 4294 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4295 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4296 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4297 "# A[14] * B[1]\n\t"
wolfSSL 14:167253f4e170 4298 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4299 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4300 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4301 "# A[14] * B[2]\n\t"
wolfSSL 14:167253f4e170 4302 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4303 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4304 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4305 "# A[14] * B[3]\n\t"
wolfSSL 14:167253f4e170 4306 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4307 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4308 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4309 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 4310 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 4311 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 4312 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 4313 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4314 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4315 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4316 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4317 "# A[14] * B[4]\n\t"
wolfSSL 14:167253f4e170 4318 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4319 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4320 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4321 "# A[14] * B[5]\n\t"
wolfSSL 14:167253f4e170 4322 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4323 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4324 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4325 "# A[14] * B[6]\n\t"
wolfSSL 14:167253f4e170 4326 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4327 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4328 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4329 "# A[14] * B[7]\n\t"
wolfSSL 14:167253f4e170 4330 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4331 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4332 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4333 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 4334 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 4335 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 4336 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 4337 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4338 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4339 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4340 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4341 "# A[14] * B[8]\n\t"
wolfSSL 14:167253f4e170 4342 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4343 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4344 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4345 "# A[14] * B[9]\n\t"
wolfSSL 14:167253f4e170 4346 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4347 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4348 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4349 "# A[14] * B[10]\n\t"
wolfSSL 14:167253f4e170 4350 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4351 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4352 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4353 "# A[14] * B[11]\n\t"
wolfSSL 14:167253f4e170 4354 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4355 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4356 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4357 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 4358 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 4359 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 4360 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 4361 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4362 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4363 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4364 "# A[14] * B[12]\n\t"
wolfSSL 14:167253f4e170 4365 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4366 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4367 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4368 "# A[14] * B[13]\n\t"
wolfSSL 14:167253f4e170 4369 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4370 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4371 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4372 "# A[14] * B[14]\n\t"
wolfSSL 14:167253f4e170 4373 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4374 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4375 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4376 "# A[14] * B[15]\n\t"
wolfSSL 14:167253f4e170 4377 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4378 "movq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 4379 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4380 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4381 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4382 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4383 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4384 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 4385 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 4386 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 4387 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 4388 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 4389 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 4390 "movq 120(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4391 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 4392 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4393 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4394 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4395 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4396 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4397 "# A[15] * B[0]\n\t"
wolfSSL 14:167253f4e170 4398 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4399 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4400 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4401 "# A[15] * B[1]\n\t"
wolfSSL 14:167253f4e170 4402 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4403 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4404 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4405 "# A[15] * B[2]\n\t"
wolfSSL 14:167253f4e170 4406 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4407 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4408 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4409 "# A[15] * B[3]\n\t"
wolfSSL 14:167253f4e170 4410 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4411 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4412 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4413 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 4414 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 4415 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 4416 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 4417 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4418 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4419 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4420 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4421 "# A[15] * B[4]\n\t"
wolfSSL 14:167253f4e170 4422 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4423 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4424 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4425 "# A[15] * B[5]\n\t"
wolfSSL 14:167253f4e170 4426 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4427 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4428 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4429 "# A[15] * B[6]\n\t"
wolfSSL 14:167253f4e170 4430 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4431 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4432 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4433 "# A[15] * B[7]\n\t"
wolfSSL 14:167253f4e170 4434 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4435 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4436 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4437 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 4438 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 4439 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 4440 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 4441 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4442 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 4443 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 4444 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 4445 "# A[15] * B[8]\n\t"
wolfSSL 14:167253f4e170 4446 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4447 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4448 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4449 "# A[15] * B[9]\n\t"
wolfSSL 14:167253f4e170 4450 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4451 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4452 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4453 "# A[15] * B[10]\n\t"
wolfSSL 14:167253f4e170 4454 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4455 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4456 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 4457 "# A[15] * B[11]\n\t"
wolfSSL 14:167253f4e170 4458 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4459 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4460 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4461 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 4462 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 4463 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 4464 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 4465 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 4466 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 4467 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 4468 "# A[15] * B[12]\n\t"
wolfSSL 14:167253f4e170 4469 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4470 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4471 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 4472 "# A[15] * B[13]\n\t"
wolfSSL 14:167253f4e170 4473 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4474 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4475 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 4476 "# A[15] * B[14]\n\t"
wolfSSL 14:167253f4e170 4477 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4478 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 4479 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4480 "# A[15] * B[15]\n\t"
wolfSSL 14:167253f4e170 4481 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4482 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 4483 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4484 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 4485 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4486 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 4487 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 4488 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 4489 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 4490 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 4491 :
wolfSSL 14:167253f4e170 4492 : [a] "r" (a), [b] "r" (b), [t] "r" (tmp)
wolfSSL 14:167253f4e170 4493 : "memory", "rax", "rdx", "rcx",
wolfSSL 14:167253f4e170 4494 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 4495 );
wolfSSL 14:167253f4e170 4496
wolfSSL 14:167253f4e170 4497 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 4498 }
wolfSSL 14:167253f4e170 4499 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 4500
wolfSSL 14:167253f4e170 4501 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 4502 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 4503 *
wolfSSL 14:167253f4e170 4504 * r A single precision integer.
wolfSSL 14:167253f4e170 4505 * a A single precision integer.
wolfSSL 14:167253f4e170 4506 */
wolfSSL 14:167253f4e170 4507 SP_NOINLINE static void sp_2048_sqr_avx2_16(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 4508 {
wolfSSL 14:167253f4e170 4509 sp_digit tmp[32];
wolfSSL 14:167253f4e170 4510
wolfSSL 14:167253f4e170 4511 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 4512 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 4513 "# Diagonal 1\n\t"
wolfSSL 14:167253f4e170 4514 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 4515 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 4516 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 4517 "xorq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 4518 "xorq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 4519 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 4520 "# A[1] x A[0]\n\t"
wolfSSL 14:167253f4e170 4521 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4522 "mulxq 8(%[a]), %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 4523 "# A[2] x A[0]\n\t"
wolfSSL 14:167253f4e170 4524 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4525 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4526 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4527 "# A[3] x A[0]\n\t"
wolfSSL 14:167253f4e170 4528 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4529 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4530 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4531 "# A[4] x A[0]\n\t"
wolfSSL 14:167253f4e170 4532 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4533 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4534 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4535 "# A[5] x A[0]\n\t"
wolfSSL 14:167253f4e170 4536 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4537 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4538 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4539 "movq %%r10, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4540 "movq %%r11, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4541 "movq %%r12, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4542 "movq %%r13, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4543 "movq %%r14, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4544 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4545 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4546 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4547 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4548 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 4549 "# A[6] x A[0]\n\t"
wolfSSL 14:167253f4e170 4550 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4551 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4552 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4553 "# A[7] x A[0]\n\t"
wolfSSL 14:167253f4e170 4554 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4555 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4556 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4557 "# A[8] x A[0]\n\t"
wolfSSL 14:167253f4e170 4558 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4559 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4560 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4561 "# A[9] x A[0]\n\t"
wolfSSL 14:167253f4e170 4562 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4563 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4564 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4565 "# A[10] x A[0]\n\t"
wolfSSL 14:167253f4e170 4566 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4567 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4568 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4569 "movq %%r15, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4570 "movq %%r10, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4571 "movq %%r11, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4572 "movq %%r12, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4573 "movq %%r13, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4574 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 4575 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4576 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 4577 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4578 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4579 "# A[11] x A[0]\n\t"
wolfSSL 14:167253f4e170 4580 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4581 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4582 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4583 "# A[12] x A[0]\n\t"
wolfSSL 14:167253f4e170 4584 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4585 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4586 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4587 "# A[13] x A[0]\n\t"
wolfSSL 14:167253f4e170 4588 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4589 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4590 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4591 "# A[14] x A[0]\n\t"
wolfSSL 14:167253f4e170 4592 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4593 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4594 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4595 "# A[15] x A[0]\n\t"
wolfSSL 14:167253f4e170 4596 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4597 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4598 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4599 "movq %%r14, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4600 "movq %%r15, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4601 "movq %%r10, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4602 "movq %%r11, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4603 "movq %%r12, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4604 "# Carry\n\t"
wolfSSL 14:167253f4e170 4605 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4606 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4607 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4608 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4609 "movq %%r13, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4610 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 4611 "# Diagonal 2\n\t"
wolfSSL 14:167253f4e170 4612 "movq 24(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4613 "movq 32(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4614 "movq 40(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4615 "movq 48(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4616 "movq 56(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4617 "movq 64(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4618 "# A[2] x A[1]\n\t"
wolfSSL 14:167253f4e170 4619 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4620 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4621 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4622 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4623 "# A[3] x A[1]\n\t"
wolfSSL 14:167253f4e170 4624 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4625 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4626 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4627 "# A[4] x A[1]\n\t"
wolfSSL 14:167253f4e170 4628 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4629 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4630 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4631 "# A[5] x A[1]\n\t"
wolfSSL 14:167253f4e170 4632 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4633 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4634 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4635 "# A[6] x A[1]\n\t"
wolfSSL 14:167253f4e170 4636 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4637 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4638 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4639 "movq %%r13, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4640 "movq %%r14, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4641 "movq %%r15, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4642 "movq %%r10, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4643 "movq %%r11, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4644 "movq 72(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4645 "movq 80(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4646 "movq 88(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4647 "movq 96(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4648 "movq 104(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4649 "# A[7] x A[1]\n\t"
wolfSSL 14:167253f4e170 4650 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4651 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4652 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4653 "# A[8] x A[1]\n\t"
wolfSSL 14:167253f4e170 4654 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4655 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4656 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4657 "# A[9] x A[1]\n\t"
wolfSSL 14:167253f4e170 4658 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4659 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4660 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4661 "# A[10] x A[1]\n\t"
wolfSSL 14:167253f4e170 4662 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4663 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4664 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4665 "# A[11] x A[1]\n\t"
wolfSSL 14:167253f4e170 4666 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4667 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4668 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4669 "movq %%r12, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4670 "movq %%r13, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4671 "movq %%r14, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4672 "movq %%r15, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4673 "movq %%r10, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4674 "movq 112(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4675 "movq 120(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4676 "movq 128(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4677 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 4678 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4679 "# A[12] x A[1]\n\t"
wolfSSL 14:167253f4e170 4680 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4681 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4682 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4683 "# A[13] x A[1]\n\t"
wolfSSL 14:167253f4e170 4684 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4685 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4686 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4687 "# A[14] x A[1]\n\t"
wolfSSL 14:167253f4e170 4688 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4689 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4690 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4691 "# A[15] x A[1]\n\t"
wolfSSL 14:167253f4e170 4692 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4693 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4694 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4695 "# A[15] x A[2]\n\t"
wolfSSL 14:167253f4e170 4696 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4697 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4698 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4699 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4700 "movq %%r11, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4701 "movq %%r12, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4702 "movq %%r13, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4703 "movq %%r14, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4704 "movq %%r15, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4705 "# Carry\n\t"
wolfSSL 14:167253f4e170 4706 "adcxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4707 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4708 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4709 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4710 "movq %%r10, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4711 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 4712 "# Diagonal 3\n\t"
wolfSSL 14:167253f4e170 4713 "movq 40(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4714 "movq 48(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4715 "movq 56(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4716 "movq 64(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4717 "movq 72(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4718 "movq 80(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4719 "# A[3] x A[2]\n\t"
wolfSSL 14:167253f4e170 4720 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4721 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4722 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4723 "# A[4] x A[2]\n\t"
wolfSSL 14:167253f4e170 4724 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4725 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4726 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4727 "# A[5] x A[2]\n\t"
wolfSSL 14:167253f4e170 4728 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4729 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4730 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4731 "# A[6] x A[2]\n\t"
wolfSSL 14:167253f4e170 4732 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4733 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4734 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4735 "# A[7] x A[2]\n\t"
wolfSSL 14:167253f4e170 4736 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4737 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4738 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4739 "movq %%r10, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4740 "movq %%r11, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4741 "movq %%r12, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4742 "movq %%r13, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4743 "movq %%r14, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4744 "movq 88(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4745 "movq 96(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4746 "movq 104(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4747 "movq 112(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4748 "movq 120(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4749 "# A[8] x A[2]\n\t"
wolfSSL 14:167253f4e170 4750 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4751 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4752 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4753 "# A[9] x A[2]\n\t"
wolfSSL 14:167253f4e170 4754 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4755 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4756 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4757 "# A[10] x A[2]\n\t"
wolfSSL 14:167253f4e170 4758 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4759 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4760 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4761 "# A[11] x A[2]\n\t"
wolfSSL 14:167253f4e170 4762 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4763 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4764 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4765 "# A[12] x A[2]\n\t"
wolfSSL 14:167253f4e170 4766 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4767 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4768 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4769 "movq %%r15, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4770 "movq %%r10, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4771 "movq %%r11, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4772 "movq %%r12, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4773 "movq %%r13, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4774 "movq 128(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4775 "movq 136(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4776 "movq 144(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4777 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4778 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4779 "# A[13] x A[2]\n\t"
wolfSSL 14:167253f4e170 4780 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4781 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4782 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4783 "# A[14] x A[2]\n\t"
wolfSSL 14:167253f4e170 4784 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4785 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4786 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4787 "# A[14] x A[3]\n\t"
wolfSSL 14:167253f4e170 4788 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4789 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4790 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4791 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4792 "# A[14] x A[4]\n\t"
wolfSSL 14:167253f4e170 4793 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4794 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4795 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4796 "# A[14] x A[5]\n\t"
wolfSSL 14:167253f4e170 4797 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4798 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4799 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4800 "movq %%r14, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4801 "movq %%r15, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4802 "movq %%r10, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4803 "movq %%r11, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4804 "movq %%r12, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4805 "# Carry\n\t"
wolfSSL 14:167253f4e170 4806 "adcxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 4807 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4808 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4809 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4810 "movq %%r13, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4811 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 4812 "# Diagonal 4\n\t"
wolfSSL 14:167253f4e170 4813 "movq 56(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4814 "movq 64(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4815 "movq 72(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4816 "movq 80(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4817 "movq 88(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4818 "movq 96(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4819 "# A[4] x A[3]\n\t"
wolfSSL 14:167253f4e170 4820 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4821 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4822 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4823 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4824 "# A[5] x A[3]\n\t"
wolfSSL 14:167253f4e170 4825 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4826 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4827 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4828 "# A[6] x A[3]\n\t"
wolfSSL 14:167253f4e170 4829 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4830 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4831 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4832 "# A[7] x A[3]\n\t"
wolfSSL 14:167253f4e170 4833 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4834 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4835 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4836 "# A[8] x A[3]\n\t"
wolfSSL 14:167253f4e170 4837 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4838 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4839 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4840 "movq %%r13, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4841 "movq %%r14, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4842 "movq %%r15, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4843 "movq %%r10, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4844 "movq %%r11, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4845 "movq 104(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4846 "movq 112(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4847 "movq 120(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4848 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4849 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4850 "# A[9] x A[3]\n\t"
wolfSSL 14:167253f4e170 4851 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4852 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4853 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4854 "# A[10] x A[3]\n\t"
wolfSSL 14:167253f4e170 4855 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4856 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4857 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4858 "# A[11] x A[3]\n\t"
wolfSSL 14:167253f4e170 4859 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4860 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4861 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4862 "# A[12] x A[3]\n\t"
wolfSSL 14:167253f4e170 4863 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4864 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4865 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4866 "# A[13] x A[3]\n\t"
wolfSSL 14:167253f4e170 4867 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4868 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4869 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4870 "movq %%r12, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4871 "movq %%r13, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4872 "movq %%r14, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4873 "movq %%r15, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4874 "movq %%r10, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4875 "movq 144(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4876 "movq 152(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4877 "movq 160(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4878 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 4879 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 4880 "# A[13] x A[4]\n\t"
wolfSSL 14:167253f4e170 4881 "movq 104(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4882 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4883 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4884 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4885 "# A[13] x A[5]\n\t"
wolfSSL 14:167253f4e170 4886 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4887 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4888 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4889 "# A[13] x A[6]\n\t"
wolfSSL 14:167253f4e170 4890 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4891 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4892 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4893 "# A[13] x A[7]\n\t"
wolfSSL 14:167253f4e170 4894 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4895 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4896 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4897 "# A[13] x A[8]\n\t"
wolfSSL 14:167253f4e170 4898 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4899 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4900 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4901 "movq %%r11, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4902 "movq %%r12, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4903 "movq %%r13, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4904 "movq %%r14, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4905 "movq %%r15, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4906 "# Carry\n\t"
wolfSSL 14:167253f4e170 4907 "adcxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 4908 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4909 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4910 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 4911 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4912 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 4913 "# Diagonal 5\n\t"
wolfSSL 14:167253f4e170 4914 "movq 72(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4915 "movq 80(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4916 "movq 88(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4917 "movq 96(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4918 "movq 104(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4919 "movq 112(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4920 "# A[5] x A[4]\n\t"
wolfSSL 14:167253f4e170 4921 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4922 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4923 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4924 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4925 "# A[6] x A[4]\n\t"
wolfSSL 14:167253f4e170 4926 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4927 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4928 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4929 "# A[7] x A[4]\n\t"
wolfSSL 14:167253f4e170 4930 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4931 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4932 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4933 "# A[8] x A[4]\n\t"
wolfSSL 14:167253f4e170 4934 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4935 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4936 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4937 "# A[9] x A[4]\n\t"
wolfSSL 14:167253f4e170 4938 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4939 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4940 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4941 "movq %%r10, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4942 "movq %%r11, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4943 "movq %%r12, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4944 "movq %%r13, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4945 "movq %%r14, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4946 "movq 120(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4947 "movq 128(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4948 "movq 136(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 4949 "movq 144(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 4950 "movq 152(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 4951 "# A[10] x A[4]\n\t"
wolfSSL 14:167253f4e170 4952 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4953 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4954 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4955 "# A[11] x A[4]\n\t"
wolfSSL 14:167253f4e170 4956 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4957 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4958 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4959 "# A[12] x A[4]\n\t"
wolfSSL 14:167253f4e170 4960 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4961 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4962 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4963 "# A[12] x A[5]\n\t"
wolfSSL 14:167253f4e170 4964 "movq 96(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 4965 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4966 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 4967 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 4968 "# A[12] x A[6]\n\t"
wolfSSL 14:167253f4e170 4969 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4970 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 4971 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 4972 "movq %%r15, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4973 "movq %%r10, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4974 "movq %%r11, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4975 "movq %%r12, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4976 "movq %%r13, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 4977 "movq 160(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 4978 "movq 168(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 4979 "movq 176(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 4980 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 4981 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 4982 "# A[12] x A[7]\n\t"
wolfSSL 14:167253f4e170 4983 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4984 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 4985 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 4986 "# A[12] x A[8]\n\t"
wolfSSL 14:167253f4e170 4987 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4988 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 4989 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 4990 "# A[12] x A[9]\n\t"
wolfSSL 14:167253f4e170 4991 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4992 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 4993 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 4994 "# A[12] x A[10]\n\t"
wolfSSL 14:167253f4e170 4995 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 4996 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 4997 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 4998 "# A[12] x A[11]\n\t"
wolfSSL 14:167253f4e170 4999 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5000 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5001 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5002 "movq %%r14, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5003 "movq %%r15, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5004 "movq %%r10, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5005 "movq %%r11, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5006 "movq %%r12, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5007 "# Carry\n\t"
wolfSSL 14:167253f4e170 5008 "adcxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 5009 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5010 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5011 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5012 "movq %%r13, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5013 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 5014 "# Diagonal 6\n\t"
wolfSSL 14:167253f4e170 5015 "movq 88(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5016 "movq 96(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5017 "movq 104(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 5018 "movq 112(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5019 "movq 120(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5020 "movq 128(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 5021 "# A[6] x A[5]\n\t"
wolfSSL 14:167253f4e170 5022 "movq 40(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5023 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5024 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5025 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5026 "# A[7] x A[5]\n\t"
wolfSSL 14:167253f4e170 5027 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5028 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5029 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5030 "# A[8] x A[5]\n\t"
wolfSSL 14:167253f4e170 5031 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5032 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5033 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5034 "# A[9] x A[5]\n\t"
wolfSSL 14:167253f4e170 5035 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5036 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5037 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5038 "# A[10] x A[5]\n\t"
wolfSSL 14:167253f4e170 5039 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5040 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5041 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5042 "movq %%r13, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5043 "movq %%r14, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5044 "movq %%r15, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5045 "movq %%r10, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5046 "movq %%r11, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5047 "movq 136(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5048 "movq 144(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5049 "movq 152(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 5050 "movq 160(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5051 "movq 168(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5052 "# A[11] x A[5]\n\t"
wolfSSL 14:167253f4e170 5053 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5054 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5055 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5056 "# A[11] x A[6]\n\t"
wolfSSL 14:167253f4e170 5057 "movq 88(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5058 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5059 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5060 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5061 "# A[11] x A[7]\n\t"
wolfSSL 14:167253f4e170 5062 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5063 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5064 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5065 "# A[11] x A[8]\n\t"
wolfSSL 14:167253f4e170 5066 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5067 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5068 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5069 "# A[11] x A[9]\n\t"
wolfSSL 14:167253f4e170 5070 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5071 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5072 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5073 "movq %%r12, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5074 "movq %%r13, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5075 "movq %%r14, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5076 "movq %%r15, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5077 "movq %%r10, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5078 "movq 176(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 5079 "movq 184(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5080 "movq 192(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5081 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 5082 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 5083 "# A[11] x A[10]\n\t"
wolfSSL 14:167253f4e170 5084 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5085 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5086 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5087 "# A[13] x A[9]\n\t"
wolfSSL 14:167253f4e170 5088 "movq 104(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5089 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5090 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5091 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5092 "# A[13] x A[10]\n\t"
wolfSSL 14:167253f4e170 5093 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5094 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5095 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5096 "# A[13] x A[11]\n\t"
wolfSSL 14:167253f4e170 5097 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5098 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5099 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5100 "# A[13] x A[12]\n\t"
wolfSSL 14:167253f4e170 5101 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5102 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5103 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5104 "movq %%r11, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5105 "movq %%r12, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5106 "movq %%r13, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5107 "movq %%r14, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5108 "movq %%r15, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5109 "# Carry\n\t"
wolfSSL 14:167253f4e170 5110 "adcxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 5111 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5112 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5113 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5114 "movq %%r10, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5115 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 5116 "# Diagonal 7\n\t"
wolfSSL 14:167253f4e170 5117 "movq 104(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5118 "movq 112(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5119 "movq 120(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 5120 "movq 128(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5121 "movq 136(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5122 "movq 144(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 5123 "# A[7] x A[6]\n\t"
wolfSSL 14:167253f4e170 5124 "movq 48(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5125 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5126 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5127 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5128 "# A[8] x A[6]\n\t"
wolfSSL 14:167253f4e170 5129 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5130 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5131 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5132 "# A[9] x A[6]\n\t"
wolfSSL 14:167253f4e170 5133 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5134 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5135 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5136 "# A[10] x A[6]\n\t"
wolfSSL 14:167253f4e170 5137 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5138 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5139 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5140 "# A[10] x A[7]\n\t"
wolfSSL 14:167253f4e170 5141 "movq 80(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5142 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5143 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5144 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5145 "movq %%r10, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5146 "movq %%r11, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5147 "movq %%r12, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5148 "movq %%r13, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5149 "movq %%r14, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5150 "movq 152(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5151 "movq 160(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5152 "movq 168(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 5153 "movq 176(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5154 "movq 184(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5155 "# A[10] x A[8]\n\t"
wolfSSL 14:167253f4e170 5156 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5157 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5158 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5159 "# A[10] x A[9]\n\t"
wolfSSL 14:167253f4e170 5160 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5161 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5162 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5163 "# A[14] x A[6]\n\t"
wolfSSL 14:167253f4e170 5164 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5165 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5166 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5167 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5168 "# A[14] x A[7]\n\t"
wolfSSL 14:167253f4e170 5169 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5170 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5171 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5172 "# A[14] x A[8]\n\t"
wolfSSL 14:167253f4e170 5173 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5174 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5175 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5176 "movq %%r15, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5177 "movq %%r10, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5178 "movq %%r11, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5179 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5180 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5181 "movq 192(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 5182 "movq 200(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5183 "movq 208(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5184 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 5185 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 5186 "# A[14] x A[9]\n\t"
wolfSSL 14:167253f4e170 5187 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5188 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5189 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5190 "# A[14] x A[10]\n\t"
wolfSSL 14:167253f4e170 5191 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5192 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5193 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5194 "# A[14] x A[11]\n\t"
wolfSSL 14:167253f4e170 5195 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5196 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5197 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5198 "# A[14] x A[12]\n\t"
wolfSSL 14:167253f4e170 5199 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5200 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5201 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5202 "# A[14] x A[13]\n\t"
wolfSSL 14:167253f4e170 5203 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5204 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5205 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5206 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5207 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5208 "movq %%r10, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5209 "movq %%r11, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5210 "movq %%r12, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5211 "# Carry\n\t"
wolfSSL 14:167253f4e170 5212 "adcxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 5213 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5214 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5215 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5216 "movq %%r13, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5217 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 5218 "# Diagonal 8\n\t"
wolfSSL 14:167253f4e170 5219 "movq 120(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5220 "movq 128(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5221 "movq 136(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 5222 "movq 144(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5223 "movq 152(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5224 "movq 160(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 5225 "# A[8] x A[7]\n\t"
wolfSSL 14:167253f4e170 5226 "movq 56(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5227 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5228 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5229 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5230 "# A[9] x A[7]\n\t"
wolfSSL 14:167253f4e170 5231 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5232 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5233 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5234 "# A[9] x A[8]\n\t"
wolfSSL 14:167253f4e170 5235 "movq 64(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5236 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5237 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5238 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5239 "# A[15] x A[3]\n\t"
wolfSSL 14:167253f4e170 5240 "movq 120(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5241 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5242 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5243 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5244 "# A[15] x A[4]\n\t"
wolfSSL 14:167253f4e170 5245 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5246 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5247 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5248 "movq %%r13, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5249 "movq %%r14, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5250 "movq %%r15, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5251 "movq %%r10, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5252 "movq %%r11, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5253 "movq 168(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5254 "movq 176(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5255 "movq 184(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 5256 "movq 192(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5257 "movq 200(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5258 "# A[15] x A[5]\n\t"
wolfSSL 14:167253f4e170 5259 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5260 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5261 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5262 "# A[15] x A[6]\n\t"
wolfSSL 14:167253f4e170 5263 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5264 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5265 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5266 "# A[15] x A[7]\n\t"
wolfSSL 14:167253f4e170 5267 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5268 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5269 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5270 "# A[15] x A[8]\n\t"
wolfSSL 14:167253f4e170 5271 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5272 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5273 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5274 "# A[15] x A[9]\n\t"
wolfSSL 14:167253f4e170 5275 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5276 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5277 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5278 "movq %%r12, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5279 "movq %%r13, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5280 "movq %%r14, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5281 "movq %%r15, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5282 "movq %%r10, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5283 "movq 208(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 5284 "movq 216(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 5285 "movq 224(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 5286 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 5287 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 5288 "# A[15] x A[10]\n\t"
wolfSSL 14:167253f4e170 5289 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5290 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 5291 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 5292 "# A[15] x A[11]\n\t"
wolfSSL 14:167253f4e170 5293 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5294 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 5295 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 5296 "# A[15] x A[12]\n\t"
wolfSSL 14:167253f4e170 5297 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5298 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 5299 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 5300 "# A[15] x A[13]\n\t"
wolfSSL 14:167253f4e170 5301 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5302 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 5303 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 5304 "# A[15] x A[14]\n\t"
wolfSSL 14:167253f4e170 5305 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5306 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 5307 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 5308 "movq %%r11, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5309 "movq %%r12, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5310 "movq %%r13, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5311 "movq %%r14, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5312 "movq %%r15, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5313 "# Carry\n\t"
wolfSSL 14:167253f4e170 5314 "adcxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 5315 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5316 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5317 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 5318 "movq %%r10, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5319 "movq %%r9, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5320 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 5321 "# Double and Add in A[i] x A[i]\n\t"
wolfSSL 14:167253f4e170 5322 "movq 8(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5323 "# A[0] x A[0]\n\t"
wolfSSL 14:167253f4e170 5324 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5325 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5326 "movq %%rax, 0(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5327 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5328 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5329 "movq %%r11, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5330 "movq 16(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5331 "movq 24(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5332 "# A[1] x A[1]\n\t"
wolfSSL 14:167253f4e170 5333 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5334 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5335 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5336 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5337 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5338 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5339 "movq %%r10, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5340 "movq %%r11, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5341 "movq 32(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5342 "movq 40(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5343 "# A[2] x A[2]\n\t"
wolfSSL 14:167253f4e170 5344 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5345 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5346 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5347 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5348 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5349 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5350 "movq %%r10, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5351 "movq %%r11, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5352 "movq 48(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5353 "movq 56(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5354 "# A[3] x A[3]\n\t"
wolfSSL 14:167253f4e170 5355 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5356 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5357 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5358 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5359 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5360 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5361 "movq %%r10, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5362 "movq %%r11, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5363 "movq 64(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5364 "movq 72(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5365 "# A[4] x A[4]\n\t"
wolfSSL 14:167253f4e170 5366 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5367 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5368 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5369 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5370 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5371 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5372 "movq %%r10, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5373 "movq %%r11, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5374 "movq 80(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5375 "movq 88(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5376 "# A[5] x A[5]\n\t"
wolfSSL 14:167253f4e170 5377 "movq 40(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5378 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5379 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5380 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5381 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5382 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5383 "movq %%r10, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5384 "movq %%r11, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5385 "movq 96(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5386 "movq 104(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5387 "# A[6] x A[6]\n\t"
wolfSSL 14:167253f4e170 5388 "movq 48(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5389 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5390 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5391 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5392 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5393 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5394 "movq %%r10, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5395 "movq %%r11, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5396 "movq 112(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5397 "movq 120(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5398 "# A[7] x A[7]\n\t"
wolfSSL 14:167253f4e170 5399 "movq 56(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5400 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5401 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5402 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5403 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5404 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5405 "movq %%r10, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5406 "movq %%r11, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 5407 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5408 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5409 "# A[8] x A[8]\n\t"
wolfSSL 14:167253f4e170 5410 "movq 64(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5411 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5412 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5413 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5414 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5415 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5416 "movq %%r10, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 5417 "movq %%r11, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 5418 "movq 144(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5419 "movq 152(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5420 "# A[9] x A[9]\n\t"
wolfSSL 14:167253f4e170 5421 "movq 72(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5422 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5423 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5424 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5425 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5426 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5427 "movq %%r10, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 5428 "movq %%r11, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 5429 "movq 160(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5430 "movq 168(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5431 "# A[10] x A[10]\n\t"
wolfSSL 14:167253f4e170 5432 "movq 80(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5433 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5434 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5435 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5436 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5437 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5438 "movq %%r10, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 5439 "movq %%r11, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 5440 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5441 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5442 "# A[11] x A[11]\n\t"
wolfSSL 14:167253f4e170 5443 "movq 88(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5444 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5445 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5446 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5447 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5448 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5449 "movq %%r10, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 5450 "movq %%r11, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 5451 "movq 192(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5452 "movq 200(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5453 "# A[12] x A[12]\n\t"
wolfSSL 14:167253f4e170 5454 "movq 96(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5455 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5456 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5457 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5458 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5459 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5460 "movq %%r10, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 5461 "movq %%r11, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 5462 "movq 208(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5463 "movq 216(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5464 "# A[13] x A[13]\n\t"
wolfSSL 14:167253f4e170 5465 "movq 104(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5466 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5467 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5468 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5469 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5470 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5471 "movq %%r10, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 5472 "movq %%r11, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 5473 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5474 "movq 232(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5475 "# A[14] x A[14]\n\t"
wolfSSL 14:167253f4e170 5476 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5477 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5478 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5479 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5480 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5481 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5482 "movq %%r10, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 5483 "movq %%r11, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 5484 "movq 240(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 5485 "movq 248(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 5486 "# A[15] x A[15]\n\t"
wolfSSL 14:167253f4e170 5487 "movq 120(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5488 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 5489 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 5490 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 5491 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 5492 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 5493 "movq %%r10, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 5494 "movq %%r11, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 5495 :
wolfSSL 14:167253f4e170 5496 : [r] "r" (r), [a] "r" (a), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 5497 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 5498 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 5499 );
wolfSSL 14:167253f4e170 5500
wolfSSL 14:167253f4e170 5501 XMEMCPY(r, tmp, sizeof(tmp)/2);
wolfSSL 14:167253f4e170 5502 }
wolfSSL 14:167253f4e170 5503 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 5504
wolfSSL 14:167253f4e170 5505 /* Add b to a into r. (r = a + b)
wolfSSL 14:167253f4e170 5506 *
wolfSSL 14:167253f4e170 5507 * r A single precision integer.
wolfSSL 14:167253f4e170 5508 * a A single precision integer.
wolfSSL 14:167253f4e170 5509 * b A single precision integer.
wolfSSL 14:167253f4e170 5510 */
wolfSSL 14:167253f4e170 5511 SP_NOINLINE static sp_digit sp_2048_add_16(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 5512 const sp_digit* b)
wolfSSL 14:167253f4e170 5513 {
wolfSSL 14:167253f4e170 5514 sp_digit c = 0;
wolfSSL 14:167253f4e170 5515
wolfSSL 14:167253f4e170 5516 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 5517 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5518 "addq (%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5519 "movq %%rax, (%[r])\n\t"
wolfSSL 14:167253f4e170 5520 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5521 "adcq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5522 "movq %%rax, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 5523 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5524 "adcq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5525 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 5526 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5527 "adcq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5528 "movq %%rax, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 5529 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5530 "adcq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5531 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 5532 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5533 "adcq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5534 "movq %%rax, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 5535 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5536 "adcq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5537 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 5538 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5539 "adcq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5540 "movq %%rax, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 5541 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5542 "adcq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5543 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 5544 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5545 "adcq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5546 "movq %%rax, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 5547 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5548 "adcq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5549 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 5550 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5551 "adcq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5552 "movq %%rax, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 5553 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5554 "adcq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5555 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 5556 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5557 "adcq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5558 "movq %%rax, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 5559 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5560 "adcq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5561 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 5562 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5563 "adcq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5564 "movq %%rax, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 5565 "adcq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 5566 : [c] "+r" (c)
wolfSSL 14:167253f4e170 5567 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 5568 : "memory", "rax"
wolfSSL 14:167253f4e170 5569 );
wolfSSL 14:167253f4e170 5570
wolfSSL 14:167253f4e170 5571 return c;
wolfSSL 14:167253f4e170 5572 }
wolfSSL 14:167253f4e170 5573
wolfSSL 14:167253f4e170 5574 /* Sub b from a into a. (a -= b)
wolfSSL 14:167253f4e170 5575 *
wolfSSL 14:167253f4e170 5576 * a A single precision integer and result.
wolfSSL 14:167253f4e170 5577 * b A single precision integer.
wolfSSL 14:167253f4e170 5578 */
wolfSSL 14:167253f4e170 5579 SP_NOINLINE static sp_digit sp_2048_sub_in_place_32(sp_digit* a,
wolfSSL 14:167253f4e170 5580 const sp_digit* b)
wolfSSL 14:167253f4e170 5581 {
wolfSSL 14:167253f4e170 5582 sp_digit c = 0;
wolfSSL 14:167253f4e170 5583
wolfSSL 14:167253f4e170 5584 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 5585 "movq 0(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5586 "movq 8(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5587 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5588 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5589 "subq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5590 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5591 "movq %%r8, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 5592 "movq 16(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5593 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5594 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5595 "movq %%r9, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 5596 "movq 24(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5597 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5598 "movq 32(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5599 "movq %%r8, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 5600 "movq 32(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5601 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5602 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5603 "movq %%r9, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 5604 "movq 40(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5605 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5606 "movq 48(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5607 "movq %%r8, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 5608 "movq 48(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5609 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5610 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5611 "movq %%r9, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 5612 "movq 56(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5613 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5614 "movq 64(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5615 "movq %%r8, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 5616 "movq 64(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5617 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5618 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5619 "movq %%r9, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 5620 "movq 72(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5621 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5622 "movq 80(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5623 "movq %%r8, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 5624 "movq 80(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5625 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5626 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5627 "movq %%r9, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 5628 "movq 88(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5629 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5630 "movq 96(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5631 "movq %%r8, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 5632 "movq 96(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5633 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5634 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5635 "movq %%r9, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 5636 "movq 104(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5637 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5638 "movq 112(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5639 "movq %%r8, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 5640 "movq 112(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5641 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5642 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5643 "movq %%r9, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 5644 "movq 120(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5645 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5646 "movq 128(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5647 "movq %%r8, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 5648 "movq 128(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5649 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5650 "movq 136(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5651 "movq %%r9, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 5652 "movq 136(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5653 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5654 "movq 144(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5655 "movq %%r8, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 5656 "movq 144(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5657 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5658 "movq 152(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5659 "movq %%r9, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 5660 "movq 152(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5661 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5662 "movq 160(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5663 "movq %%r8, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 5664 "movq 160(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5665 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5666 "movq 168(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5667 "movq %%r9, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 5668 "movq 168(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5669 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5670 "movq 176(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5671 "movq %%r8, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 5672 "movq 176(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5673 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5674 "movq 184(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5675 "movq %%r9, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 5676 "movq 184(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5677 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5678 "movq 192(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5679 "movq %%r8, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 5680 "movq 192(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5681 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5682 "movq 200(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5683 "movq %%r9, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 5684 "movq 200(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5685 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5686 "movq 208(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5687 "movq %%r8, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 5688 "movq 208(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5689 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5690 "movq 216(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5691 "movq %%r9, 200(%[a])\n\t"
wolfSSL 14:167253f4e170 5692 "movq 216(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5693 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5694 "movq 224(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5695 "movq %%r8, 208(%[a])\n\t"
wolfSSL 14:167253f4e170 5696 "movq 224(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5697 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5698 "movq 232(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5699 "movq %%r9, 216(%[a])\n\t"
wolfSSL 14:167253f4e170 5700 "movq 232(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5701 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5702 "movq 240(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 5703 "movq %%r8, 224(%[a])\n\t"
wolfSSL 14:167253f4e170 5704 "movq 240(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 5705 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5706 "movq 248(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 5707 "movq %%r9, 232(%[a])\n\t"
wolfSSL 14:167253f4e170 5708 "movq 248(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 5709 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 5710 "movq %%r8, 240(%[a])\n\t"
wolfSSL 14:167253f4e170 5711 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 5712 "movq %%r9, 248(%[a])\n\t"
wolfSSL 14:167253f4e170 5713 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 5714 : [c] "+r" (c)
wolfSSL 14:167253f4e170 5715 : [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 5716 : "memory", "rdx", "rcx", "r8", "r9"
wolfSSL 14:167253f4e170 5717 );
wolfSSL 14:167253f4e170 5718
wolfSSL 14:167253f4e170 5719 return c;
wolfSSL 14:167253f4e170 5720 }
wolfSSL 14:167253f4e170 5721
wolfSSL 14:167253f4e170 5722 /* Add b to a into r. (r = a + b)
wolfSSL 14:167253f4e170 5723 *
wolfSSL 14:167253f4e170 5724 * r A single precision integer.
wolfSSL 14:167253f4e170 5725 * a A single precision integer.
wolfSSL 14:167253f4e170 5726 * b A single precision integer.
wolfSSL 14:167253f4e170 5727 */
wolfSSL 14:167253f4e170 5728 SP_NOINLINE static sp_digit sp_2048_add_32(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 5729 const sp_digit* b)
wolfSSL 14:167253f4e170 5730 {
wolfSSL 14:167253f4e170 5731 sp_digit c = 0;
wolfSSL 14:167253f4e170 5732
wolfSSL 14:167253f4e170 5733 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 5734 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5735 "addq (%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5736 "movq %%rax, (%[r])\n\t"
wolfSSL 14:167253f4e170 5737 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5738 "adcq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5739 "movq %%rax, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 5740 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5741 "adcq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5742 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 5743 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5744 "adcq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5745 "movq %%rax, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 5746 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5747 "adcq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5748 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 5749 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5750 "adcq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5751 "movq %%rax, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 5752 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5753 "adcq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5754 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 5755 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5756 "adcq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5757 "movq %%rax, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 5758 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5759 "adcq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5760 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 5761 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5762 "adcq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5763 "movq %%rax, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 5764 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5765 "adcq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5766 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 5767 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5768 "adcq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5769 "movq %%rax, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 5770 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5771 "adcq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5772 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 5773 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5774 "adcq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5775 "movq %%rax, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 5776 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5777 "adcq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5778 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 5779 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5780 "adcq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5781 "movq %%rax, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 5782 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5783 "adcq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5784 "movq %%rax, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 5785 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5786 "adcq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5787 "movq %%rax, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 5788 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5789 "adcq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5790 "movq %%rax, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 5791 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5792 "adcq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5793 "movq %%rax, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 5794 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5795 "adcq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5796 "movq %%rax, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 5797 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5798 "adcq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5799 "movq %%rax, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 5800 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5801 "adcq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5802 "movq %%rax, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 5803 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5804 "adcq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5805 "movq %%rax, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 5806 "movq 192(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5807 "adcq 192(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5808 "movq %%rax, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 5809 "movq 200(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5810 "adcq 200(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5811 "movq %%rax, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 5812 "movq 208(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5813 "adcq 208(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5814 "movq %%rax, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 5815 "movq 216(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5816 "adcq 216(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5817 "movq %%rax, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 5818 "movq 224(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5819 "adcq 224(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5820 "movq %%rax, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 5821 "movq 232(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5822 "adcq 232(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5823 "movq %%rax, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 5824 "movq 240(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5825 "adcq 240(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5826 "movq %%rax, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 5827 "movq 248(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 5828 "adcq 248(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 5829 "movq %%rax, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 5830 "adcq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 5831 : [c] "+r" (c)
wolfSSL 14:167253f4e170 5832 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 5833 : "memory", "rax"
wolfSSL 14:167253f4e170 5834 );
wolfSSL 14:167253f4e170 5835
wolfSSL 14:167253f4e170 5836 return c;
wolfSSL 14:167253f4e170 5837 }
wolfSSL 14:167253f4e170 5838
wolfSSL 14:167253f4e170 5839 /* AND m into each word of a and store in r.
wolfSSL 14:167253f4e170 5840 *
wolfSSL 14:167253f4e170 5841 * r A single precision integer.
wolfSSL 14:167253f4e170 5842 * a A single precision integer.
wolfSSL 14:167253f4e170 5843 * m Mask to AND against each digit.
wolfSSL 14:167253f4e170 5844 */
wolfSSL 14:167253f4e170 5845 static void sp_2048_mask_16(sp_digit* r, sp_digit* a, sp_digit m)
wolfSSL 14:167253f4e170 5846 {
wolfSSL 14:167253f4e170 5847 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 5848 int i;
wolfSSL 14:167253f4e170 5849
wolfSSL 14:167253f4e170 5850 for (i=0; i<16; i++)
wolfSSL 14:167253f4e170 5851 r[i] = a[i] & m;
wolfSSL 14:167253f4e170 5852 #else
wolfSSL 14:167253f4e170 5853 int i;
wolfSSL 14:167253f4e170 5854
wolfSSL 14:167253f4e170 5855 for (i = 0; i < 16; i += 8) {
wolfSSL 14:167253f4e170 5856 r[i+0] = a[i+0] & m;
wolfSSL 14:167253f4e170 5857 r[i+1] = a[i+1] & m;
wolfSSL 14:167253f4e170 5858 r[i+2] = a[i+2] & m;
wolfSSL 14:167253f4e170 5859 r[i+3] = a[i+3] & m;
wolfSSL 14:167253f4e170 5860 r[i+4] = a[i+4] & m;
wolfSSL 14:167253f4e170 5861 r[i+5] = a[i+5] & m;
wolfSSL 14:167253f4e170 5862 r[i+6] = a[i+6] & m;
wolfSSL 14:167253f4e170 5863 r[i+7] = a[i+7] & m;
wolfSSL 14:167253f4e170 5864 }
wolfSSL 14:167253f4e170 5865 #endif
wolfSSL 14:167253f4e170 5866 }
wolfSSL 14:167253f4e170 5867
wolfSSL 14:167253f4e170 5868 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 5869 *
wolfSSL 14:167253f4e170 5870 * r A single precision integer.
wolfSSL 14:167253f4e170 5871 * a A single precision integer.
wolfSSL 14:167253f4e170 5872 * b A single precision integer.
wolfSSL 14:167253f4e170 5873 */
wolfSSL 14:167253f4e170 5874 SP_NOINLINE static void sp_2048_mul_32(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 5875 const sp_digit* b)
wolfSSL 14:167253f4e170 5876 {
wolfSSL 14:167253f4e170 5877 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 5878 sp_digit z1[32];
wolfSSL 14:167253f4e170 5879 sp_digit a1[16];
wolfSSL 14:167253f4e170 5880 sp_digit b1[16];
wolfSSL 14:167253f4e170 5881 sp_digit z2[32];
wolfSSL 14:167253f4e170 5882 sp_digit u, ca, cb;
wolfSSL 14:167253f4e170 5883
wolfSSL 14:167253f4e170 5884 ca = sp_2048_add_16(a1, a, &a[16]);
wolfSSL 14:167253f4e170 5885 cb = sp_2048_add_16(b1, b, &b[16]);
wolfSSL 14:167253f4e170 5886 u = ca & cb;
wolfSSL 14:167253f4e170 5887 sp_2048_mul_16(z1, a1, b1);
wolfSSL 14:167253f4e170 5888 sp_2048_mul_16(z2, &a[16], &b[16]);
wolfSSL 14:167253f4e170 5889 sp_2048_mul_16(z0, a, b);
wolfSSL 14:167253f4e170 5890 sp_2048_mask_16(r + 32, a1, 0 - cb);
wolfSSL 14:167253f4e170 5891 sp_2048_mask_16(b1, b1, 0 - ca);
wolfSSL 14:167253f4e170 5892 u += sp_2048_add_16(r + 32, r + 32, b1);
wolfSSL 14:167253f4e170 5893 u += sp_2048_sub_in_place_32(z1, z2);
wolfSSL 14:167253f4e170 5894 u += sp_2048_sub_in_place_32(z1, z0);
wolfSSL 14:167253f4e170 5895 u += sp_2048_add_32(r + 16, r + 16, z1);
wolfSSL 14:167253f4e170 5896 r[48] = u;
wolfSSL 14:167253f4e170 5897 XMEMSET(r + 48 + 1, 0, sizeof(sp_digit) * (16 - 1));
wolfSSL 14:167253f4e170 5898 sp_2048_add_32(r + 32, r + 32, z2);
wolfSSL 14:167253f4e170 5899 }
wolfSSL 14:167253f4e170 5900
wolfSSL 14:167253f4e170 5901 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 5902 *
wolfSSL 14:167253f4e170 5903 * r A single precision integer.
wolfSSL 14:167253f4e170 5904 * a A single precision integer.
wolfSSL 14:167253f4e170 5905 */
wolfSSL 14:167253f4e170 5906 SP_NOINLINE static void sp_2048_sqr_32(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 5907 {
wolfSSL 14:167253f4e170 5908 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 5909 sp_digit z2[32];
wolfSSL 14:167253f4e170 5910 sp_digit z1[32];
wolfSSL 14:167253f4e170 5911 sp_digit a1[16];
wolfSSL 14:167253f4e170 5912 sp_digit u;
wolfSSL 14:167253f4e170 5913
wolfSSL 14:167253f4e170 5914 u = sp_2048_add_16(a1, a, &a[16]);
wolfSSL 14:167253f4e170 5915 sp_2048_sqr_16(z1, a1);
wolfSSL 14:167253f4e170 5916 sp_2048_sqr_16(z2, &a[16]);
wolfSSL 14:167253f4e170 5917 sp_2048_sqr_16(z0, a);
wolfSSL 14:167253f4e170 5918 sp_2048_mask_16(r + 32, a1, 0 - u);
wolfSSL 14:167253f4e170 5919 u += sp_2048_add_16(r + 32, r + 32, r + 32);
wolfSSL 14:167253f4e170 5920 u += sp_2048_sub_in_place_32(z1, z2);
wolfSSL 14:167253f4e170 5921 u += sp_2048_sub_in_place_32(z1, z0);
wolfSSL 14:167253f4e170 5922 u += sp_2048_add_32(r + 16, r + 16, z1);
wolfSSL 14:167253f4e170 5923 r[48] = u;
wolfSSL 14:167253f4e170 5924 XMEMSET(r + 48 + 1, 0, sizeof(sp_digit) * (16 - 1));
wolfSSL 14:167253f4e170 5925 sp_2048_add_32(r + 32, r + 32, z2);
wolfSSL 14:167253f4e170 5926 }
wolfSSL 14:167253f4e170 5927
wolfSSL 14:167253f4e170 5928 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 5929 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 5930 *
wolfSSL 14:167253f4e170 5931 * r A single precision integer.
wolfSSL 14:167253f4e170 5932 * a A single precision integer.
wolfSSL 14:167253f4e170 5933 * b A single precision integer.
wolfSSL 14:167253f4e170 5934 */
wolfSSL 14:167253f4e170 5935 SP_NOINLINE static void sp_2048_mul_avx2_32(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 5936 const sp_digit* b)
wolfSSL 14:167253f4e170 5937 {
wolfSSL 14:167253f4e170 5938 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 5939 sp_digit z1[32];
wolfSSL 14:167253f4e170 5940 sp_digit a1[16];
wolfSSL 14:167253f4e170 5941 sp_digit b1[16];
wolfSSL 14:167253f4e170 5942 sp_digit z2[32];
wolfSSL 14:167253f4e170 5943 sp_digit u, ca, cb;
wolfSSL 14:167253f4e170 5944
wolfSSL 14:167253f4e170 5945 ca = sp_2048_add_16(a1, a, &a[16]);
wolfSSL 14:167253f4e170 5946 cb = sp_2048_add_16(b1, b, &b[16]);
wolfSSL 14:167253f4e170 5947 u = ca & cb;
wolfSSL 14:167253f4e170 5948 sp_2048_mul_avx2_16(z1, a1, b1);
wolfSSL 14:167253f4e170 5949 sp_2048_mul_avx2_16(z2, &a[16], &b[16]);
wolfSSL 14:167253f4e170 5950 sp_2048_mul_avx2_16(z0, a, b);
wolfSSL 14:167253f4e170 5951 sp_2048_mask_16(r + 32, a1, 0 - cb);
wolfSSL 14:167253f4e170 5952 sp_2048_mask_16(b1, b1, 0 - ca);
wolfSSL 14:167253f4e170 5953 u += sp_2048_add_16(r + 32, r + 32, b1);
wolfSSL 14:167253f4e170 5954 u += sp_2048_sub_in_place_32(z1, z2);
wolfSSL 14:167253f4e170 5955 u += sp_2048_sub_in_place_32(z1, z0);
wolfSSL 14:167253f4e170 5956 u += sp_2048_add_32(r + 16, r + 16, z1);
wolfSSL 14:167253f4e170 5957 r[48] = u;
wolfSSL 14:167253f4e170 5958 XMEMSET(r + 48 + 1, 0, sizeof(sp_digit) * (16 - 1));
wolfSSL 14:167253f4e170 5959 sp_2048_add_32(r + 32, r + 32, z2);
wolfSSL 14:167253f4e170 5960 }
wolfSSL 14:167253f4e170 5961 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 5962
wolfSSL 14:167253f4e170 5963 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 5964 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 5965 *
wolfSSL 14:167253f4e170 5966 * r A single precision integer.
wolfSSL 14:167253f4e170 5967 * a A single precision integer.
wolfSSL 14:167253f4e170 5968 */
wolfSSL 14:167253f4e170 5969 SP_NOINLINE static void sp_2048_sqr_avx2_32(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 5970 {
wolfSSL 14:167253f4e170 5971 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 5972 sp_digit z2[32];
wolfSSL 14:167253f4e170 5973 sp_digit z1[32];
wolfSSL 14:167253f4e170 5974 sp_digit a1[16];
wolfSSL 14:167253f4e170 5975 sp_digit u;
wolfSSL 14:167253f4e170 5976
wolfSSL 14:167253f4e170 5977 u = sp_2048_add_16(a1, a, &a[16]);
wolfSSL 14:167253f4e170 5978 sp_2048_sqr_avx2_16(z1, a1);
wolfSSL 14:167253f4e170 5979 sp_2048_sqr_avx2_16(z2, &a[16]);
wolfSSL 14:167253f4e170 5980 sp_2048_sqr_avx2_16(z0, a);
wolfSSL 14:167253f4e170 5981 sp_2048_mask_16(r + 32, a1, 0 - u);
wolfSSL 14:167253f4e170 5982 u += sp_2048_add_16(r + 32, r + 32, r + 32);
wolfSSL 14:167253f4e170 5983 u += sp_2048_sub_in_place_32(z1, z2);
wolfSSL 14:167253f4e170 5984 u += sp_2048_sub_in_place_32(z1, z0);
wolfSSL 14:167253f4e170 5985 u += sp_2048_add_32(r + 16, r + 16, z1);
wolfSSL 14:167253f4e170 5986 r[48] = u;
wolfSSL 14:167253f4e170 5987 XMEMSET(r + 48 + 1, 0, sizeof(sp_digit) * (16 - 1));
wolfSSL 14:167253f4e170 5988 sp_2048_add_32(r + 32, r + 32, z2);
wolfSSL 14:167253f4e170 5989 }
wolfSSL 14:167253f4e170 5990 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 5991
wolfSSL 14:167253f4e170 5992 #if !defined(SP_RSA_PRIVATE_EXP_D) && defined(WOLFSSL_HAVE_SP_RSA)
wolfSSL 14:167253f4e170 5993 #endif /* !SP_RSA_PRIVATE_EXP_D && WOLFSSL_HAVE_SP_RSA */
wolfSSL 14:167253f4e170 5994
wolfSSL 14:167253f4e170 5995 /* Caclulate the bottom digit of -1/a mod 2^n.
wolfSSL 14:167253f4e170 5996 *
wolfSSL 14:167253f4e170 5997 * a A single precision number.
wolfSSL 14:167253f4e170 5998 * rho Bottom word of inverse.
wolfSSL 14:167253f4e170 5999 */
wolfSSL 14:167253f4e170 6000 static void sp_2048_mont_setup(sp_digit* a, sp_digit* rho)
wolfSSL 14:167253f4e170 6001 {
wolfSSL 14:167253f4e170 6002 sp_digit x, b;
wolfSSL 14:167253f4e170 6003
wolfSSL 14:167253f4e170 6004 b = a[0];
wolfSSL 14:167253f4e170 6005 x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
wolfSSL 14:167253f4e170 6006 x *= 2 - b * x; /* here x*a==1 mod 2**8 */
wolfSSL 14:167253f4e170 6007 x *= 2 - b * x; /* here x*a==1 mod 2**16 */
wolfSSL 14:167253f4e170 6008 x *= 2 - b * x; /* here x*a==1 mod 2**32 */
wolfSSL 14:167253f4e170 6009 x *= 2 - b * x; /* here x*a==1 mod 2**64 */
wolfSSL 14:167253f4e170 6010
wolfSSL 14:167253f4e170 6011 /* rho = -1/m mod b */
wolfSSL 14:167253f4e170 6012 *rho = -x;
wolfSSL 14:167253f4e170 6013 }
wolfSSL 14:167253f4e170 6014
wolfSSL 14:167253f4e170 6015 #if !defined(SP_RSA_PRIVATE_EXP_D) && defined(WOLFSSL_HAVE_SP_RSA)
wolfSSL 14:167253f4e170 6016 /* Sub b from a into a. (a -= b)
wolfSSL 14:167253f4e170 6017 *
wolfSSL 14:167253f4e170 6018 * a A single precision integer and result.
wolfSSL 14:167253f4e170 6019 * b A single precision integer.
wolfSSL 14:167253f4e170 6020 */
wolfSSL 14:167253f4e170 6021 SP_NOINLINE static sp_digit sp_2048_sub_in_place_16(sp_digit* a,
wolfSSL 14:167253f4e170 6022 const sp_digit* b)
wolfSSL 14:167253f4e170 6023 {
wolfSSL 14:167253f4e170 6024 sp_digit c = 0;
wolfSSL 14:167253f4e170 6025
wolfSSL 14:167253f4e170 6026 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6027 "movq 0(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6028 "movq 8(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6029 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6030 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6031 "subq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6032 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6033 "movq %%r8, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 6034 "movq 16(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6035 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6036 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6037 "movq %%r9, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 6038 "movq 24(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6039 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6040 "movq 32(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6041 "movq %%r8, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 6042 "movq 32(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6043 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6044 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6045 "movq %%r9, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 6046 "movq 40(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6047 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6048 "movq 48(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6049 "movq %%r8, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 6050 "movq 48(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6051 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6052 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6053 "movq %%r9, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 6054 "movq 56(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6055 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6056 "movq 64(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6057 "movq %%r8, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 6058 "movq 64(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6059 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6060 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6061 "movq %%r9, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 6062 "movq 72(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6063 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6064 "movq 80(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6065 "movq %%r8, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 6066 "movq 80(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6067 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6068 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6069 "movq %%r9, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 6070 "movq 88(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6071 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6072 "movq 96(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6073 "movq %%r8, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 6074 "movq 96(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6075 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6076 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6077 "movq %%r9, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 6078 "movq 104(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6079 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6080 "movq 112(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6081 "movq %%r8, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 6082 "movq 112(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 6083 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6084 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6085 "movq %%r9, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 6086 "movq 120(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 6087 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6088 "movq %%r8, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 6089 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6090 "movq %%r9, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 6091 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 6092 : [c] "+r" (c)
wolfSSL 14:167253f4e170 6093 : [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 6094 : "memory", "rdx", "rcx", "r8", "r9"
wolfSSL 14:167253f4e170 6095 );
wolfSSL 14:167253f4e170 6096
wolfSSL 14:167253f4e170 6097 return c;
wolfSSL 14:167253f4e170 6098 }
wolfSSL 14:167253f4e170 6099
wolfSSL 14:167253f4e170 6100 /* r = 2^n mod m where n is the number of bits to reduce by.
wolfSSL 14:167253f4e170 6101 * Given m must be 2048 bits, just need to subtract.
wolfSSL 14:167253f4e170 6102 *
wolfSSL 14:167253f4e170 6103 * r A single precision number.
wolfSSL 14:167253f4e170 6104 * m A signle precision number.
wolfSSL 14:167253f4e170 6105 */
wolfSSL 14:167253f4e170 6106 static void sp_2048_mont_norm_16(sp_digit* r, sp_digit* m)
wolfSSL 14:167253f4e170 6107 {
wolfSSL 14:167253f4e170 6108 XMEMSET(r, 0, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 6109
wolfSSL 14:167253f4e170 6110 /* r = 2^n mod m */
wolfSSL 14:167253f4e170 6111 sp_2048_sub_in_place_16(r, m);
wolfSSL 14:167253f4e170 6112 }
wolfSSL 14:167253f4e170 6113
wolfSSL 14:167253f4e170 6114 /* Conditionally subtract b from a using the mask m.
wolfSSL 14:167253f4e170 6115 * m is -1 to subtract and 0 when not copying.
wolfSSL 14:167253f4e170 6116 *
wolfSSL 14:167253f4e170 6117 * r A single precision number representing condition subtract result.
wolfSSL 14:167253f4e170 6118 * a A single precision number to subtract from.
wolfSSL 14:167253f4e170 6119 * b A single precision number to subtract.
wolfSSL 14:167253f4e170 6120 * m Mask value to apply.
wolfSSL 14:167253f4e170 6121 */
wolfSSL 14:167253f4e170 6122 static sp_digit sp_2048_cond_sub_16(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 6123 sp_digit m)
wolfSSL 14:167253f4e170 6124 {
wolfSSL 14:167253f4e170 6125 sp_digit t[16];
wolfSSL 14:167253f4e170 6126 sp_digit c = 0;
wolfSSL 14:167253f4e170 6127
wolfSSL 14:167253f4e170 6128 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6129 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6130 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6131 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6132 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6133 "movq %%rax, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 6134 "movq %%rcx, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 6135 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6136 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6137 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6138 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6139 "movq %%rax, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 6140 "movq %%rcx, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 6141 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6142 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6143 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6144 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6145 "movq %%rax, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 6146 "movq %%rcx, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 6147 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6148 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6149 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6150 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6151 "movq %%rax, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 6152 "movq %%rcx, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 6153 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6154 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6155 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6156 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6157 "movq %%rax, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 6158 "movq %%rcx, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 6159 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6160 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6161 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6162 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6163 "movq %%rax, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 6164 "movq %%rcx, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 6165 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6166 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6167 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6168 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6169 "movq %%rax, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 6170 "movq %%rcx, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 6171 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 6172 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6173 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 6174 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 6175 "movq %%rax, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 6176 "movq %%rcx, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 6177 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6178 "movq (%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6179 "subq %%rdx,%%rax\n\t"
wolfSSL 14:167253f4e170 6180 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6181 "movq 8(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6182 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6183 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 6184 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6185 "movq 16(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6186 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6187 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 6188 "movq 24(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6189 "movq 24(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6190 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6191 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 6192 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6193 "movq 32(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6194 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6195 "movq %%rcx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 6196 "movq 40(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6197 "movq 40(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6198 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6199 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 6200 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6201 "movq 48(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6202 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6203 "movq %%rcx, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 6204 "movq 56(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6205 "movq 56(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6206 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6207 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 6208 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6209 "movq 64(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6210 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6211 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 6212 "movq 72(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6213 "movq 72(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6214 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6215 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 6216 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6217 "movq 80(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6218 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6219 "movq %%rcx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 6220 "movq 88(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6221 "movq 88(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6222 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6223 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 6224 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6225 "movq 96(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6226 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6227 "movq %%rcx, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 6228 "movq 104(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6229 "movq 104(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6230 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6231 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 6232 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 6233 "movq 112(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6234 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 6235 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 6236 "movq 120(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 6237 "movq 120(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 6238 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6239 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 6240 "movq %%rcx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 6241 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 6242 : [c] "+r" (c)
wolfSSL 14:167253f4e170 6243 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m), [t] "r" (t)
wolfSSL 14:167253f4e170 6244 : "memory", "rax", "rcx", "rdx"
wolfSSL 14:167253f4e170 6245 );
wolfSSL 14:167253f4e170 6246
wolfSSL 14:167253f4e170 6247 return c;
wolfSSL 14:167253f4e170 6248 }
wolfSSL 14:167253f4e170 6249
wolfSSL 14:167253f4e170 6250 /* Reduce the number back to 2048 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 6251 *
wolfSSL 14:167253f4e170 6252 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 6253 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 6254 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 6255 */
wolfSSL 14:167253f4e170 6256 SP_NOINLINE static void sp_2048_mont_reduce_16(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 6257 sp_digit mp)
wolfSSL 14:167253f4e170 6258 {
wolfSSL 14:167253f4e170 6259 sp_digit ca = 0;
wolfSSL 14:167253f4e170 6260
wolfSSL 14:167253f4e170 6261 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6262 "# i = 0\n\t"
wolfSSL 14:167253f4e170 6263 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6264 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 6265 "movq 8(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 6266 "\nL_mont_loop_16:\n\t"
wolfSSL 14:167253f4e170 6267 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 6268 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 6269 "imulq %[mp], %%r10\n\t"
wolfSSL 14:167253f4e170 6270 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 6271 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6272 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6273 "mulq 0(%[m])\n\t"
wolfSSL 14:167253f4e170 6274 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 6275 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6276 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 6277 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6278 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6279 "mulq 8(%[m])\n\t"
wolfSSL 14:167253f4e170 6280 "movq %%r13, %%r12\n\t"
wolfSSL 14:167253f4e170 6281 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 6282 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6283 "addq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 6284 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6285 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 6286 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6287 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6288 "mulq 16(%[m])\n\t"
wolfSSL 14:167253f4e170 6289 "movq 16(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 6290 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 6291 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6292 "addq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 6293 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6294 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 6295 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6296 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6297 "mulq 24(%[m])\n\t"
wolfSSL 14:167253f4e170 6298 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6299 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6300 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6301 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6302 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 6303 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6304 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 6305 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6306 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6307 "mulq 32(%[m])\n\t"
wolfSSL 14:167253f4e170 6308 "movq 32(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6309 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6310 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6311 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 6312 "movq %%r11, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 6313 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6314 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 6315 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6316 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6317 "mulq 40(%[m])\n\t"
wolfSSL 14:167253f4e170 6318 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6319 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6320 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6321 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6322 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 6323 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6324 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 6325 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6326 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6327 "mulq 48(%[m])\n\t"
wolfSSL 14:167253f4e170 6328 "movq 48(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6329 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6330 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6331 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 6332 "movq %%r11, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 6333 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6334 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 6335 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6336 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6337 "mulq 56(%[m])\n\t"
wolfSSL 14:167253f4e170 6338 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6339 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6340 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6341 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6342 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 6343 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6344 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 6345 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6346 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6347 "mulq 64(%[m])\n\t"
wolfSSL 14:167253f4e170 6348 "movq 64(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6349 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6350 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6351 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 6352 "movq %%r11, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 6353 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6354 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 6355 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6356 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6357 "mulq 72(%[m])\n\t"
wolfSSL 14:167253f4e170 6358 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6359 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6360 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6361 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6362 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 6363 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6364 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 6365 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6366 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6367 "mulq 80(%[m])\n\t"
wolfSSL 14:167253f4e170 6368 "movq 80(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6369 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6370 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6371 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 6372 "movq %%r11, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 6373 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6374 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 6375 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6376 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6377 "mulq 88(%[m])\n\t"
wolfSSL 14:167253f4e170 6378 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6379 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6380 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6381 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6382 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 6383 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6384 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 6385 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6386 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6387 "mulq 96(%[m])\n\t"
wolfSSL 14:167253f4e170 6388 "movq 96(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6389 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6390 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6391 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 6392 "movq %%r11, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 6393 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6394 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 6395 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6396 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6397 "mulq 104(%[m])\n\t"
wolfSSL 14:167253f4e170 6398 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6399 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6400 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6401 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6402 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 6403 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6404 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 6405 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6406 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 6407 "mulq 112(%[m])\n\t"
wolfSSL 14:167253f4e170 6408 "movq 112(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6409 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 6410 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 6411 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 6412 "movq %%r11, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 6413 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 6414 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 6415 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 6416 "mulq 120(%[m])\n\t"
wolfSSL 14:167253f4e170 6417 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 6418 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6419 "adcq %[ca], %%rdx\n\t"
wolfSSL 14:167253f4e170 6420 "movq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 6421 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 6422 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 6423 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 6424 "adcq %%rdx, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 6425 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 6426 "# i += 1\n\t"
wolfSSL 14:167253f4e170 6427 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 6428 "addq $8, %%rcx\n\t"
wolfSSL 14:167253f4e170 6429 "cmpq $128, %%rcx\n\t"
wolfSSL 14:167253f4e170 6430 "jl L_mont_loop_16\n\t"
wolfSSL 14:167253f4e170 6431 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 6432 "movq %%r13, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 6433 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 6434 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 6435 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 6436 "r12", "r13"
wolfSSL 14:167253f4e170 6437 );
wolfSSL 14:167253f4e170 6438
wolfSSL 14:167253f4e170 6439 sp_2048_cond_sub_16(a - 16, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 6440 }
wolfSSL 14:167253f4e170 6441
wolfSSL 14:167253f4e170 6442 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 6443 * (r = a * b mod m)
wolfSSL 14:167253f4e170 6444 *
wolfSSL 14:167253f4e170 6445 * r Result of multiplication.
wolfSSL 14:167253f4e170 6446 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 6447 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 6448 * m Modulus (prime).
wolfSSL 14:167253f4e170 6449 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 6450 */
wolfSSL 14:167253f4e170 6451 static void sp_2048_mont_mul_16(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 6452 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 6453 {
wolfSSL 14:167253f4e170 6454 sp_2048_mul_16(r, a, b);
wolfSSL 14:167253f4e170 6455 sp_2048_mont_reduce_16(r, m, mp);
wolfSSL 14:167253f4e170 6456 }
wolfSSL 14:167253f4e170 6457
wolfSSL 14:167253f4e170 6458 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 6459 *
wolfSSL 14:167253f4e170 6460 * r Result of squaring.
wolfSSL 14:167253f4e170 6461 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 6462 * m Modulus (prime).
wolfSSL 14:167253f4e170 6463 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 6464 */
wolfSSL 14:167253f4e170 6465 static void sp_2048_mont_sqr_16(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 6466 sp_digit mp)
wolfSSL 14:167253f4e170 6467 {
wolfSSL 14:167253f4e170 6468 sp_2048_sqr_16(r, a);
wolfSSL 14:167253f4e170 6469 sp_2048_mont_reduce_16(r, m, mp);
wolfSSL 14:167253f4e170 6470 }
wolfSSL 14:167253f4e170 6471
wolfSSL 14:167253f4e170 6472 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 6473 *
wolfSSL 14:167253f4e170 6474 * r A single precision integer.
wolfSSL 14:167253f4e170 6475 * a A single precision integer.
wolfSSL 14:167253f4e170 6476 * b A single precision digit.
wolfSSL 14:167253f4e170 6477 */
wolfSSL 14:167253f4e170 6478 SP_NOINLINE static void sp_2048_mul_d_16(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 6479 const sp_digit b)
wolfSSL 14:167253f4e170 6480 {
wolfSSL 14:167253f4e170 6481 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6482 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 6483 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6484 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6485 "mulq (%[a])\n\t"
wolfSSL 14:167253f4e170 6486 "movq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 6487 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6488 "movq %%rbx, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 6489 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 6490 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6491 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6492 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 6493 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6494 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 6495 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6496 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 6497 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 6498 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6499 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6500 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 6501 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6502 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 6503 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6504 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 6505 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 6506 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6507 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6508 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 6509 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 6510 "movq %%rbx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 6511 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6512 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6513 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 6514 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6515 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6516 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 6517 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6518 "movq %%rcx, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 6519 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6520 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 6521 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 6522 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6523 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6524 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 6525 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6526 "movq %%r8, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 6527 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6528 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 6529 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 6530 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6531 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6532 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 6533 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 6534 "movq %%rbx, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 6535 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6536 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6537 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 6538 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6539 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6540 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 6541 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6542 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 6543 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6544 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 6545 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 6546 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6547 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6548 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 6549 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6550 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 6551 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6552 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 6553 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 6554 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6555 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6556 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 6557 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 6558 "movq %%rbx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 6559 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6560 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6561 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 6562 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6563 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6564 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 6565 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6566 "movq %%rcx, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 6567 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6568 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 6569 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 6570 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6571 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6572 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 6573 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6574 "movq %%r8, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 6575 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6576 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 6577 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 6578 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6579 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 6580 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 6581 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 6582 "movq %%rbx, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 6583 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6584 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 6585 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 6586 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6587 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6588 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 6589 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6590 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 6591 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6592 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 6593 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 6594 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6595 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6596 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 6597 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6598 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 6599 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6600 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 6601 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 6602 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 6603 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 6604 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 6605 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6606 "movq %%rbx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 6607 "movq %%rcx, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 6608 :
wolfSSL 14:167253f4e170 6609 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 6610 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 6611 );
wolfSSL 14:167253f4e170 6612 }
wolfSSL 14:167253f4e170 6613
wolfSSL 14:167253f4e170 6614 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 6615 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 6616 *
wolfSSL 14:167253f4e170 6617 * r A single precision integer.
wolfSSL 14:167253f4e170 6618 * a A single precision integer.
wolfSSL 14:167253f4e170 6619 * b A single precision digit.
wolfSSL 14:167253f4e170 6620 */
wolfSSL 14:167253f4e170 6621 SP_NOINLINE static void sp_2048_mul_d_avx2_16(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 6622 const sp_digit b)
wolfSSL 14:167253f4e170 6623 {
wolfSSL 14:167253f4e170 6624 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6625 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 6626 "movq %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 6627 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 6628 "mulxq (%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 6629 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 6630 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 6631 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6632 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6633 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6634 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 6635 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6636 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 6637 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6638 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6639 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6640 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 6641 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6642 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 6643 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6644 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6645 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6646 "movq %%r9, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 6647 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6648 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 6649 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6650 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6651 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6652 "movq %%r8, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 6653 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6654 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 6655 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6656 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6657 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6658 "movq %%r9, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 6659 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6660 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 6661 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6662 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6663 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6664 "movq %%r8, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 6665 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6666 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 6667 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6668 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6669 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6670 "movq %%r9, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 6671 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6672 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 6673 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6674 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6675 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6676 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 6677 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6678 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 6679 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6680 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6681 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6682 "movq %%r9, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 6683 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6684 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 6685 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6686 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6687 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6688 "movq %%r8, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 6689 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6690 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 6691 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6692 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6693 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6694 "movq %%r9, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 6695 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6696 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 6697 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6698 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6699 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6700 "movq %%r8, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 6701 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6702 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 6703 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6704 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6705 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6706 "movq %%r9, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 6707 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6708 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 6709 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6710 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 6711 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 6712 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 6713 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 6714 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 6715 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 6716 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6717 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 6718 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 6719 "adcxq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 6720 "movq %%r9, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 6721 "movq %%r8, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 6722 :
wolfSSL 14:167253f4e170 6723 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 6724 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10"
wolfSSL 14:167253f4e170 6725 );
wolfSSL 14:167253f4e170 6726 }
wolfSSL 14:167253f4e170 6727 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 6728
wolfSSL 14:167253f4e170 6729 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
wolfSSL 14:167253f4e170 6730 *
wolfSSL 14:167253f4e170 6731 * d1 The high order half of the number to divide.
wolfSSL 14:167253f4e170 6732 * d0 The low order half of the number to divide.
wolfSSL 14:167253f4e170 6733 * div The dividend.
wolfSSL 14:167253f4e170 6734 * returns the result of the division.
wolfSSL 14:167253f4e170 6735 */
wolfSSL 14:167253f4e170 6736 static sp_digit div_2048_word_16(sp_digit d1, sp_digit d0, sp_digit div)
wolfSSL 14:167253f4e170 6737 {
wolfSSL 14:167253f4e170 6738 sp_digit r;
wolfSSL 14:167253f4e170 6739
wolfSSL 14:167253f4e170 6740 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6741 "movq %[d0], %%rax\n\t"
wolfSSL 14:167253f4e170 6742 "movq %[d1], %%rdx\n\t"
wolfSSL 14:167253f4e170 6743 "divq %[div]\n\t"
wolfSSL 14:167253f4e170 6744 "movq %%rax, %[r]\n\t"
wolfSSL 14:167253f4e170 6745 : [r] "=r" (r)
wolfSSL 14:167253f4e170 6746 : [d1] "r" (d1), [d0] "r" (d0), [div] "r" (div)
wolfSSL 14:167253f4e170 6747 : "rax", "rdx"
wolfSSL 14:167253f4e170 6748 );
wolfSSL 14:167253f4e170 6749
wolfSSL 14:167253f4e170 6750 return r;
wolfSSL 14:167253f4e170 6751 }
wolfSSL 14:167253f4e170 6752
wolfSSL 14:167253f4e170 6753 /* Compare a with b in constant time.
wolfSSL 14:167253f4e170 6754 *
wolfSSL 14:167253f4e170 6755 * a A single precision integer.
wolfSSL 14:167253f4e170 6756 * b A single precision integer.
wolfSSL 14:167253f4e170 6757 * return -ve, 0 or +ve if a is less than, equal to or greater than b
wolfSSL 14:167253f4e170 6758 * respectively.
wolfSSL 14:167253f4e170 6759 */
wolfSSL 14:167253f4e170 6760 static int64_t sp_2048_cmp_16(sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 6761 {
wolfSSL 14:167253f4e170 6762 sp_digit r = -1;
wolfSSL 14:167253f4e170 6763 sp_digit one = 1;
wolfSSL 14:167253f4e170 6764
wolfSSL 14:167253f4e170 6765 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 6766 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 6767 "movq $-1, %%rdx\n\t"
wolfSSL 14:167253f4e170 6768 "movq 120(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6769 "movq 120(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6770 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6771 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6772 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6773 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6774 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6775 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6776 "movq 112(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6777 "movq 112(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6778 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6779 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6780 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6781 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6782 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6783 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6784 "movq 104(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6785 "movq 104(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6786 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6787 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6788 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6789 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6790 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6791 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6792 "movq 96(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6793 "movq 96(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6794 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6795 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6796 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6797 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6798 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6799 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6800 "movq 88(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6801 "movq 88(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6802 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6803 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6804 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6805 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6806 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6807 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6808 "movq 80(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6809 "movq 80(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6810 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6811 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6812 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6813 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6814 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6815 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6816 "movq 72(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6817 "movq 72(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6818 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6819 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6820 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6821 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6822 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6823 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6824 "movq 64(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6825 "movq 64(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6826 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6827 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6828 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6829 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6830 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6831 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6832 "movq 56(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6833 "movq 56(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6834 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6835 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6836 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6837 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6838 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6839 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6840 "movq 48(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6841 "movq 48(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6842 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6843 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6844 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6845 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6846 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6847 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6848 "movq 40(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6849 "movq 40(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6850 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6851 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6852 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6853 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6854 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6855 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6856 "movq 32(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6857 "movq 32(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6858 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6859 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6860 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6861 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6862 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6863 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6864 "movq 24(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6865 "movq 24(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6866 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6867 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6868 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6869 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6870 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6871 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6872 "movq 16(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6873 "movq 16(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6874 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6875 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6876 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6877 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6878 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6879 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6880 "movq 8(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6881 "movq 8(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6882 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6883 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6884 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6885 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6886 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6887 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6888 "movq 0(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 6889 "movq 0(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 6890 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 6891 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 6892 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 6893 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 6894 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6895 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 6896 "xorq %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 6897 : [r] "+r" (r)
wolfSSL 14:167253f4e170 6898 : [a] "r" (a), [b] "r" (b), [one] "r" (one)
wolfSSL 14:167253f4e170 6899 : "rax", "rdx", "rcx", "rbx", "r8"
wolfSSL 14:167253f4e170 6900 );
wolfSSL 14:167253f4e170 6901
wolfSSL 14:167253f4e170 6902 return r;
wolfSSL 14:167253f4e170 6903 }
wolfSSL 14:167253f4e170 6904
wolfSSL 14:167253f4e170 6905 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 6906 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 6907 *
wolfSSL 14:167253f4e170 6908 * a Nmber to be divided.
wolfSSL 14:167253f4e170 6909 * d Number to divide with.
wolfSSL 14:167253f4e170 6910 * m Multiplier result.
wolfSSL 14:167253f4e170 6911 * r Remainder from the division.
wolfSSL 14:167253f4e170 6912 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 6913 */
wolfSSL 14:167253f4e170 6914 static WC_INLINE int sp_2048_div_16(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 6915 sp_digit* r)
wolfSSL 14:167253f4e170 6916 {
wolfSSL 14:167253f4e170 6917 sp_digit t1[32], t2[17];
wolfSSL 14:167253f4e170 6918 sp_digit div, r1;
wolfSSL 14:167253f4e170 6919 int i;
wolfSSL 14:167253f4e170 6920 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 6921 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 6922 #endif
wolfSSL 14:167253f4e170 6923
wolfSSL 14:167253f4e170 6924 (void)m;
wolfSSL 14:167253f4e170 6925
wolfSSL 14:167253f4e170 6926 div = d[15];
wolfSSL 14:167253f4e170 6927 XMEMCPY(t1, a, sizeof(*t1) * 2 * 16);
wolfSSL 14:167253f4e170 6928 for (i=15; i>=0; i--) {
wolfSSL 14:167253f4e170 6929 r1 = div_2048_word_16(t1[16 + i], t1[16 + i - 1], div);
wolfSSL 14:167253f4e170 6930
wolfSSL 14:167253f4e170 6931 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 6932 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 6933 sp_2048_mul_d_avx2_16(t2, d, r1);
wolfSSL 14:167253f4e170 6934 else
wolfSSL 14:167253f4e170 6935 #endif
wolfSSL 14:167253f4e170 6936 sp_2048_mul_d_16(t2, d, r1);
wolfSSL 14:167253f4e170 6937 t1[16 + i] += sp_2048_sub_in_place_16(&t1[i], t2);
wolfSSL 14:167253f4e170 6938 t1[16 + i] -= t2[16];
wolfSSL 14:167253f4e170 6939 sp_2048_mask_16(t2, d, t1[16 + i]);
wolfSSL 14:167253f4e170 6940 t1[16 + i] += sp_2048_add_16(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 6941 sp_2048_mask_16(t2, d, t1[16 + i]);
wolfSSL 14:167253f4e170 6942 t1[16 + i] += sp_2048_add_16(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 6943 }
wolfSSL 14:167253f4e170 6944
wolfSSL 14:167253f4e170 6945 r1 = sp_2048_cmp_16(t1, d) >= 0;
wolfSSL 14:167253f4e170 6946 sp_2048_cond_sub_16(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 6947
wolfSSL 14:167253f4e170 6948 return MP_OKAY;
wolfSSL 14:167253f4e170 6949 }
wolfSSL 14:167253f4e170 6950
wolfSSL 14:167253f4e170 6951 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 6952 *
wolfSSL 14:167253f4e170 6953 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 6954 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 6955 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 6956 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 6957 */
wolfSSL 14:167253f4e170 6958 static WC_INLINE int sp_2048_mod_16(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 6959 {
wolfSSL 14:167253f4e170 6960 return sp_2048_div_16(a, m, NULL, r);
wolfSSL 14:167253f4e170 6961 }
wolfSSL 14:167253f4e170 6962
wolfSSL 14:167253f4e170 6963 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 6964 *
wolfSSL 14:167253f4e170 6965 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 6966 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 6967 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 6968 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 6969 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 6970 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 6971 */
wolfSSL 14:167253f4e170 6972 static int sp_2048_mod_exp_16(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 6973 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 6974 {
wolfSSL 14:167253f4e170 6975 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 6976 sp_digit t[32][32];
wolfSSL 14:167253f4e170 6977 #else
wolfSSL 14:167253f4e170 6978 sp_digit* t[32];
wolfSSL 14:167253f4e170 6979 sp_digit* td;
wolfSSL 14:167253f4e170 6980 #endif
wolfSSL 14:167253f4e170 6981 sp_digit* norm;
wolfSSL 14:167253f4e170 6982 sp_digit mp = 1;
wolfSSL 14:167253f4e170 6983 sp_digit n;
wolfSSL 14:167253f4e170 6984 sp_digit mask;
wolfSSL 14:167253f4e170 6985 int i;
wolfSSL 14:167253f4e170 6986 int c, y;
wolfSSL 14:167253f4e170 6987 int err = MP_OKAY;
wolfSSL 14:167253f4e170 6988
wolfSSL 14:167253f4e170 6989 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 6990 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 32, NULL,
wolfSSL 14:167253f4e170 6991 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 6992 if (td == NULL)
wolfSSL 14:167253f4e170 6993 err = MEMORY_E;
wolfSSL 14:167253f4e170 6994
wolfSSL 14:167253f4e170 6995 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 6996 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 6997 t[i] = td + i * 32;
wolfSSL 14:167253f4e170 6998 norm = t[0];
wolfSSL 14:167253f4e170 6999 }
wolfSSL 14:167253f4e170 7000 #else
wolfSSL 14:167253f4e170 7001 norm = t[0];
wolfSSL 14:167253f4e170 7002 #endif
wolfSSL 14:167253f4e170 7003
wolfSSL 14:167253f4e170 7004 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 7005 sp_2048_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 7006 sp_2048_mont_norm_16(norm, m);
wolfSSL 14:167253f4e170 7007
wolfSSL 14:167253f4e170 7008 XMEMSET(t[1], 0, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7009 if (reduceA) {
wolfSSL 14:167253f4e170 7010 err = sp_2048_mod_16(t[1] + 16, a, m);
wolfSSL 14:167253f4e170 7011 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 7012 err = sp_2048_mod_16(t[1], t[1], m);
wolfSSL 14:167253f4e170 7013 }
wolfSSL 14:167253f4e170 7014 else {
wolfSSL 14:167253f4e170 7015 XMEMCPY(t[1] + 16, a, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7016 err = sp_2048_mod_16(t[1], t[1], m);
wolfSSL 14:167253f4e170 7017 }
wolfSSL 14:167253f4e170 7018 }
wolfSSL 14:167253f4e170 7019
wolfSSL 14:167253f4e170 7020 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 7021 sp_2048_mont_sqr_16(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 7022 sp_2048_mont_mul_16(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 7023 sp_2048_mont_sqr_16(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 7024 sp_2048_mont_mul_16(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 7025 sp_2048_mont_sqr_16(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 7026 sp_2048_mont_mul_16(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 7027 sp_2048_mont_sqr_16(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 7028 sp_2048_mont_mul_16(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 7029 sp_2048_mont_sqr_16(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 7030 sp_2048_mont_mul_16(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 7031 sp_2048_mont_sqr_16(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 7032 sp_2048_mont_mul_16(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 7033 sp_2048_mont_sqr_16(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 7034 sp_2048_mont_mul_16(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 7035 sp_2048_mont_sqr_16(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 7036 sp_2048_mont_mul_16(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 7037 sp_2048_mont_sqr_16(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 7038 sp_2048_mont_mul_16(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 7039 sp_2048_mont_sqr_16(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 7040 sp_2048_mont_mul_16(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 7041 sp_2048_mont_sqr_16(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 7042 sp_2048_mont_mul_16(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 7043 sp_2048_mont_sqr_16(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 7044 sp_2048_mont_mul_16(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 7045 sp_2048_mont_sqr_16(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 7046 sp_2048_mont_mul_16(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 7047 sp_2048_mont_sqr_16(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 7048 sp_2048_mont_mul_16(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 7049 sp_2048_mont_sqr_16(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 7050 sp_2048_mont_mul_16(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 7051
wolfSSL 14:167253f4e170 7052 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 7053 n = e[i--];
wolfSSL 14:167253f4e170 7054 y = n >> 59;
wolfSSL 14:167253f4e170 7055 n <<= 5;
wolfSSL 14:167253f4e170 7056 c = 59;
wolfSSL 14:167253f4e170 7057 XMEMCPY(r, t[y], sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7058 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 7059 if (c == 0) {
wolfSSL 14:167253f4e170 7060 n = e[i--];
wolfSSL 14:167253f4e170 7061 y = n >> 59;
wolfSSL 14:167253f4e170 7062 n <<= 5;
wolfSSL 14:167253f4e170 7063 c = 59;
wolfSSL 14:167253f4e170 7064 }
wolfSSL 14:167253f4e170 7065 else if (c < 5) {
wolfSSL 14:167253f4e170 7066 y = n >> 59;
wolfSSL 14:167253f4e170 7067 n = e[i--];
wolfSSL 14:167253f4e170 7068 c = 5 - c;
wolfSSL 14:167253f4e170 7069 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 7070 n <<= c;
wolfSSL 14:167253f4e170 7071 c = 64 - c;
wolfSSL 14:167253f4e170 7072 }
wolfSSL 14:167253f4e170 7073 else {
wolfSSL 14:167253f4e170 7074 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 7075 n <<= 5;
wolfSSL 14:167253f4e170 7076 c -= 5;
wolfSSL 14:167253f4e170 7077 }
wolfSSL 14:167253f4e170 7078
wolfSSL 14:167253f4e170 7079 sp_2048_mont_sqr_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7080 sp_2048_mont_sqr_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7081 sp_2048_mont_sqr_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7082 sp_2048_mont_sqr_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7083 sp_2048_mont_sqr_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7084
wolfSSL 14:167253f4e170 7085 sp_2048_mont_mul_16(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 7086 }
wolfSSL 14:167253f4e170 7087 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 7088 for (; c > 0; c--)
wolfSSL 14:167253f4e170 7089 sp_2048_mont_sqr_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7090 sp_2048_mont_mul_16(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 7091
wolfSSL 14:167253f4e170 7092 XMEMSET(&r[16], 0, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7093 sp_2048_mont_reduce_16(r, m, mp);
wolfSSL 14:167253f4e170 7094
wolfSSL 14:167253f4e170 7095 mask = 0 - (sp_2048_cmp_16(r, m) >= 0);
wolfSSL 14:167253f4e170 7096 sp_2048_cond_sub_16(r, r, m, mask);
wolfSSL 14:167253f4e170 7097 }
wolfSSL 14:167253f4e170 7098
wolfSSL 14:167253f4e170 7099 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 7100 if (td != NULL)
wolfSSL 14:167253f4e170 7101 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 7102 #endif
wolfSSL 14:167253f4e170 7103
wolfSSL 14:167253f4e170 7104 return err;
wolfSSL 14:167253f4e170 7105 }
wolfSSL 14:167253f4e170 7106
wolfSSL 14:167253f4e170 7107 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 7108 /* Reduce the number back to 2048 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 7109 *
wolfSSL 14:167253f4e170 7110 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 7111 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 7112 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 7113 */
wolfSSL 14:167253f4e170 7114 SP_NOINLINE static void sp_2048_mont_reduce_avx2_16(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 7115 sp_digit mp)
wolfSSL 14:167253f4e170 7116 {
wolfSSL 14:167253f4e170 7117 sp_digit ca = 0;
wolfSSL 14:167253f4e170 7118
wolfSSL 14:167253f4e170 7119 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 7120 "# i = 0\n\t"
wolfSSL 14:167253f4e170 7121 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 7122 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7123 "\nL_mont_loop_avx2_16:\n\t"
wolfSSL 14:167253f4e170 7124 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7125 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 7126 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 7127 "movq %%r12, %%rdx\n\t"
wolfSSL 14:167253f4e170 7128 "mulxq %[mp], %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7129 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 7130 "mulxq 0(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7131 "movq 8(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 7132 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7133 "adoxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 7134 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 7135 "mulxq 8(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7136 "movq 16(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7137 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 7138 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7139 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 7140 "mulxq 16(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7141 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7142 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7143 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7144 "movq %%r10, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 7145 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 7146 "mulxq 24(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7147 "movq 32(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7148 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7149 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7150 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 7151 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 7152 "mulxq 32(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7153 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7154 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7155 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7156 "movq %%r10, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 7157 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 7158 "mulxq 40(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7159 "movq 48(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7160 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7161 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7162 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 7163 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 7164 "mulxq 48(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7165 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7166 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7167 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7168 "movq %%r10, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 7169 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 7170 "mulxq 56(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7171 "movq 64(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7172 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7173 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7174 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 7175 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 7176 "mulxq 64(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7177 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7178 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7179 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7180 "movq %%r10, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 7181 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 7182 "mulxq 72(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7183 "movq 80(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7184 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7185 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7186 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 7187 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 7188 "mulxq 80(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7189 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7190 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7191 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7192 "movq %%r10, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 7193 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 7194 "mulxq 88(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7195 "movq 96(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7196 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7197 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7198 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 7199 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 7200 "mulxq 96(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7201 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7202 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7203 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7204 "movq %%r10, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 7205 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 7206 "mulxq 104(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7207 "movq 112(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7208 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7209 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7210 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 7211 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 7212 "mulxq 112(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7213 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7214 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 7215 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7216 "movq %%r10, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 7217 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 7218 "mulxq 120(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 7219 "movq 128(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 7220 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7221 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 7222 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 7223 "adcxq %[ca], %%r10\n\t"
wolfSSL 14:167253f4e170 7224 "movq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 7225 "adoxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 7226 "adcxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 7227 "movq %%r10, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 7228 "# i += 1\n\t"
wolfSSL 14:167253f4e170 7229 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 7230 "addq $1, %%rcx\n\t"
wolfSSL 14:167253f4e170 7231 "cmpq $16, %%rcx\n\t"
wolfSSL 14:167253f4e170 7232 "jl L_mont_loop_avx2_16\n\t"
wolfSSL 14:167253f4e170 7233 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 7234 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 7235 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 7236 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 7237 );
wolfSSL 14:167253f4e170 7238
wolfSSL 14:167253f4e170 7239 sp_2048_cond_sub_16(a - 16, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 7240 }
wolfSSL 14:167253f4e170 7241 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 7242
wolfSSL 14:167253f4e170 7243 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 7244 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 7245 * (r = a * b mod m)
wolfSSL 14:167253f4e170 7246 *
wolfSSL 14:167253f4e170 7247 * r Result of multiplication.
wolfSSL 14:167253f4e170 7248 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 7249 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 7250 * m Modulus (prime).
wolfSSL 14:167253f4e170 7251 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 7252 */
wolfSSL 14:167253f4e170 7253 static void sp_2048_mont_mul_avx2_16(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 7254 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 7255 {
wolfSSL 14:167253f4e170 7256 sp_2048_mul_avx2_16(r, a, b);
wolfSSL 14:167253f4e170 7257 sp_2048_mont_reduce_avx2_16(r, m, mp);
wolfSSL 14:167253f4e170 7258 }
wolfSSL 14:167253f4e170 7259
wolfSSL 14:167253f4e170 7260 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 7261 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 7262 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 7263 *
wolfSSL 14:167253f4e170 7264 * r Result of squaring.
wolfSSL 14:167253f4e170 7265 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 7266 * m Modulus (prime).
wolfSSL 14:167253f4e170 7267 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 7268 */
wolfSSL 14:167253f4e170 7269 static void sp_2048_mont_sqr_avx2_16(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 7270 sp_digit mp)
wolfSSL 14:167253f4e170 7271 {
wolfSSL 14:167253f4e170 7272 sp_2048_sqr_avx2_16(r, a);
wolfSSL 14:167253f4e170 7273 sp_2048_mont_reduce_avx2_16(r, m, mp);
wolfSSL 14:167253f4e170 7274 }
wolfSSL 14:167253f4e170 7275
wolfSSL 14:167253f4e170 7276 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 7277 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 7278 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 7279 *
wolfSSL 14:167253f4e170 7280 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 7281 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 7282 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 7283 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 7284 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 7285 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 7286 */
wolfSSL 14:167253f4e170 7287 static int sp_2048_mod_exp_avx2_16(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 7288 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 7289 {
wolfSSL 14:167253f4e170 7290 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 7291 sp_digit t[32][32];
wolfSSL 14:167253f4e170 7292 #else
wolfSSL 14:167253f4e170 7293 sp_digit* t[32];
wolfSSL 14:167253f4e170 7294 sp_digit* td;
wolfSSL 14:167253f4e170 7295 #endif
wolfSSL 14:167253f4e170 7296 sp_digit* norm;
wolfSSL 14:167253f4e170 7297 sp_digit mp = 1;
wolfSSL 14:167253f4e170 7298 sp_digit n;
wolfSSL 14:167253f4e170 7299 sp_digit mask;
wolfSSL 14:167253f4e170 7300 int i;
wolfSSL 14:167253f4e170 7301 int c, y;
wolfSSL 14:167253f4e170 7302 int err = MP_OKAY;
wolfSSL 14:167253f4e170 7303
wolfSSL 14:167253f4e170 7304 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 7305 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 32, NULL,
wolfSSL 14:167253f4e170 7306 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 7307 if (td == NULL)
wolfSSL 14:167253f4e170 7308 err = MEMORY_E;
wolfSSL 14:167253f4e170 7309
wolfSSL 14:167253f4e170 7310 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 7311 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 7312 t[i] = td + i * 32;
wolfSSL 14:167253f4e170 7313 norm = t[0];
wolfSSL 14:167253f4e170 7314 }
wolfSSL 14:167253f4e170 7315 #else
wolfSSL 14:167253f4e170 7316 norm = t[0];
wolfSSL 14:167253f4e170 7317 #endif
wolfSSL 14:167253f4e170 7318
wolfSSL 14:167253f4e170 7319 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 7320 sp_2048_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 7321 sp_2048_mont_norm_16(norm, m);
wolfSSL 14:167253f4e170 7322
wolfSSL 14:167253f4e170 7323 XMEMSET(t[1], 0, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7324 if (reduceA) {
wolfSSL 14:167253f4e170 7325 err = sp_2048_mod_16(t[1] + 16, a, m);
wolfSSL 14:167253f4e170 7326 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 7327 err = sp_2048_mod_16(t[1], t[1], m);
wolfSSL 14:167253f4e170 7328 }
wolfSSL 14:167253f4e170 7329 else {
wolfSSL 14:167253f4e170 7330 XMEMCPY(t[1] + 16, a, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7331 err = sp_2048_mod_16(t[1], t[1], m);
wolfSSL 14:167253f4e170 7332 }
wolfSSL 14:167253f4e170 7333 }
wolfSSL 14:167253f4e170 7334
wolfSSL 14:167253f4e170 7335 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 7336 sp_2048_mont_sqr_avx2_16(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 7337 sp_2048_mont_mul_avx2_16(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 7338 sp_2048_mont_sqr_avx2_16(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 7339 sp_2048_mont_mul_avx2_16(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 7340 sp_2048_mont_sqr_avx2_16(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 7341 sp_2048_mont_mul_avx2_16(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 7342 sp_2048_mont_sqr_avx2_16(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 7343 sp_2048_mont_mul_avx2_16(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 7344 sp_2048_mont_sqr_avx2_16(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 7345 sp_2048_mont_mul_avx2_16(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 7346 sp_2048_mont_sqr_avx2_16(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 7347 sp_2048_mont_mul_avx2_16(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 7348 sp_2048_mont_sqr_avx2_16(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 7349 sp_2048_mont_mul_avx2_16(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 7350 sp_2048_mont_sqr_avx2_16(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 7351 sp_2048_mont_mul_avx2_16(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 7352 sp_2048_mont_sqr_avx2_16(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 7353 sp_2048_mont_mul_avx2_16(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 7354 sp_2048_mont_sqr_avx2_16(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 7355 sp_2048_mont_mul_avx2_16(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 7356 sp_2048_mont_sqr_avx2_16(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 7357 sp_2048_mont_mul_avx2_16(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 7358 sp_2048_mont_sqr_avx2_16(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 7359 sp_2048_mont_mul_avx2_16(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 7360 sp_2048_mont_sqr_avx2_16(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 7361 sp_2048_mont_mul_avx2_16(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 7362 sp_2048_mont_sqr_avx2_16(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 7363 sp_2048_mont_mul_avx2_16(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 7364 sp_2048_mont_sqr_avx2_16(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 7365 sp_2048_mont_mul_avx2_16(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 7366
wolfSSL 14:167253f4e170 7367 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 7368 n = e[i--];
wolfSSL 14:167253f4e170 7369 y = n >> 59;
wolfSSL 14:167253f4e170 7370 n <<= 5;
wolfSSL 14:167253f4e170 7371 c = 59;
wolfSSL 14:167253f4e170 7372 XMEMCPY(r, t[y], sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7373 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 7374 if (c == 0) {
wolfSSL 14:167253f4e170 7375 n = e[i--];
wolfSSL 14:167253f4e170 7376 y = n >> 59;
wolfSSL 14:167253f4e170 7377 n <<= 5;
wolfSSL 14:167253f4e170 7378 c = 59;
wolfSSL 14:167253f4e170 7379 }
wolfSSL 14:167253f4e170 7380 else if (c < 5) {
wolfSSL 14:167253f4e170 7381 y = n >> 59;
wolfSSL 14:167253f4e170 7382 n = e[i--];
wolfSSL 14:167253f4e170 7383 c = 5 - c;
wolfSSL 14:167253f4e170 7384 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 7385 n <<= c;
wolfSSL 14:167253f4e170 7386 c = 64 - c;
wolfSSL 14:167253f4e170 7387 }
wolfSSL 14:167253f4e170 7388 else {
wolfSSL 14:167253f4e170 7389 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 7390 n <<= 5;
wolfSSL 14:167253f4e170 7391 c -= 5;
wolfSSL 14:167253f4e170 7392 }
wolfSSL 14:167253f4e170 7393
wolfSSL 14:167253f4e170 7394 sp_2048_mont_sqr_avx2_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7395 sp_2048_mont_sqr_avx2_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7396 sp_2048_mont_sqr_avx2_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7397 sp_2048_mont_sqr_avx2_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7398 sp_2048_mont_sqr_avx2_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7399
wolfSSL 14:167253f4e170 7400 sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 7401 }
wolfSSL 14:167253f4e170 7402 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 7403 for (; c > 0; c--)
wolfSSL 14:167253f4e170 7404 sp_2048_mont_sqr_avx2_16(r, r, m, mp);
wolfSSL 14:167253f4e170 7405 sp_2048_mont_mul_avx2_16(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 7406
wolfSSL 14:167253f4e170 7407 XMEMSET(&r[16], 0, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 7408 sp_2048_mont_reduce_avx2_16(r, m, mp);
wolfSSL 14:167253f4e170 7409
wolfSSL 14:167253f4e170 7410 mask = 0 - (sp_2048_cmp_16(r, m) >= 0);
wolfSSL 14:167253f4e170 7411 sp_2048_cond_sub_16(r, r, m, mask);
wolfSSL 14:167253f4e170 7412 }
wolfSSL 14:167253f4e170 7413
wolfSSL 14:167253f4e170 7414 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 7415 if (td != NULL)
wolfSSL 14:167253f4e170 7416 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 7417 #endif
wolfSSL 14:167253f4e170 7418
wolfSSL 14:167253f4e170 7419 return err;
wolfSSL 14:167253f4e170 7420 }
wolfSSL 14:167253f4e170 7421 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 7422
wolfSSL 14:167253f4e170 7423 #endif /* !SP_RSA_PRIVATE_EXP_D && WOLFSSL_HAVE_SP_RSA */
wolfSSL 14:167253f4e170 7424
wolfSSL 14:167253f4e170 7425 /* r = 2^n mod m where n is the number of bits to reduce by.
wolfSSL 14:167253f4e170 7426 * Given m must be 2048 bits, just need to subtract.
wolfSSL 14:167253f4e170 7427 *
wolfSSL 14:167253f4e170 7428 * r A single precision number.
wolfSSL 14:167253f4e170 7429 * m A signle precision number.
wolfSSL 14:167253f4e170 7430 */
wolfSSL 14:167253f4e170 7431 static void sp_2048_mont_norm_32(sp_digit* r, sp_digit* m)
wolfSSL 14:167253f4e170 7432 {
wolfSSL 14:167253f4e170 7433 XMEMSET(r, 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 7434
wolfSSL 14:167253f4e170 7435 /* r = 2^n mod m */
wolfSSL 14:167253f4e170 7436 sp_2048_sub_in_place_32(r, m);
wolfSSL 14:167253f4e170 7437 }
wolfSSL 14:167253f4e170 7438
wolfSSL 14:167253f4e170 7439 /* Conditionally subtract b from a using the mask m.
wolfSSL 14:167253f4e170 7440 * m is -1 to subtract and 0 when not copying.
wolfSSL 14:167253f4e170 7441 *
wolfSSL 14:167253f4e170 7442 * r A single precision number representing condition subtract result.
wolfSSL 14:167253f4e170 7443 * a A single precision number to subtract from.
wolfSSL 14:167253f4e170 7444 * b A single precision number to subtract.
wolfSSL 14:167253f4e170 7445 * m Mask value to apply.
wolfSSL 14:167253f4e170 7446 */
wolfSSL 14:167253f4e170 7447 static sp_digit sp_2048_cond_sub_32(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 7448 sp_digit m)
wolfSSL 14:167253f4e170 7449 {
wolfSSL 14:167253f4e170 7450 sp_digit t[32];
wolfSSL 14:167253f4e170 7451 sp_digit c = 0;
wolfSSL 14:167253f4e170 7452
wolfSSL 14:167253f4e170 7453 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 7454 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7455 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7456 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7457 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7458 "movq %%rax, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 7459 "movq %%rcx, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 7460 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7461 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7462 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7463 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7464 "movq %%rax, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 7465 "movq %%rcx, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 7466 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7467 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7468 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7469 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7470 "movq %%rax, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 7471 "movq %%rcx, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 7472 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7473 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7474 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7475 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7476 "movq %%rax, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 7477 "movq %%rcx, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 7478 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7479 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7480 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7481 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7482 "movq %%rax, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 7483 "movq %%rcx, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 7484 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7485 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7486 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7487 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7488 "movq %%rax, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 7489 "movq %%rcx, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 7490 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7491 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7492 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7493 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7494 "movq %%rax, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 7495 "movq %%rcx, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 7496 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7497 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7498 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7499 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7500 "movq %%rax, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 7501 "movq %%rcx, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 7502 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7503 "movq 136(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7504 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7505 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7506 "movq %%rax, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 7507 "movq %%rcx, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 7508 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7509 "movq 152(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7510 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7511 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7512 "movq %%rax, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 7513 "movq %%rcx, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 7514 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7515 "movq 168(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7516 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7517 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7518 "movq %%rax, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 7519 "movq %%rcx, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 7520 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7521 "movq 184(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7522 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7523 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7524 "movq %%rax, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 7525 "movq %%rcx, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 7526 "movq 192(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7527 "movq 200(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7528 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7529 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7530 "movq %%rax, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 7531 "movq %%rcx, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 7532 "movq 208(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7533 "movq 216(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7534 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7535 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7536 "movq %%rax, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 7537 "movq %%rcx, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 7538 "movq 224(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7539 "movq 232(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7540 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7541 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7542 "movq %%rax, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 7543 "movq %%rcx, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 7544 "movq 240(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 7545 "movq 248(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7546 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 7547 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 7548 "movq %%rax, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 7549 "movq %%rcx, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 7550 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7551 "movq (%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7552 "subq %%rdx,%%rax\n\t"
wolfSSL 14:167253f4e170 7553 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7554 "movq 8(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7555 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7556 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 7557 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7558 "movq 16(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7559 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7560 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 7561 "movq 24(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7562 "movq 24(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7563 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7564 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 7565 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7566 "movq 32(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7567 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7568 "movq %%rcx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 7569 "movq 40(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7570 "movq 40(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7571 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7572 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 7573 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7574 "movq 48(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7575 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7576 "movq %%rcx, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 7577 "movq 56(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7578 "movq 56(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7579 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7580 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 7581 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7582 "movq 64(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7583 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7584 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 7585 "movq 72(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7586 "movq 72(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7587 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7588 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 7589 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7590 "movq 80(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7591 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7592 "movq %%rcx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 7593 "movq 88(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7594 "movq 88(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7595 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7596 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 7597 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7598 "movq 96(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7599 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7600 "movq %%rcx, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 7601 "movq 104(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7602 "movq 104(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7603 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7604 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 7605 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7606 "movq 112(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7607 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7608 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 7609 "movq 120(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7610 "movq 120(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7611 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7612 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 7613 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7614 "movq 128(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7615 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7616 "movq %%rcx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 7617 "movq 136(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7618 "movq 136(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7619 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7620 "movq %%rax, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 7621 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7622 "movq 144(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7623 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7624 "movq %%rcx, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 7625 "movq 152(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7626 "movq 152(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7627 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7628 "movq %%rax, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 7629 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7630 "movq 160(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7631 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7632 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 7633 "movq 168(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7634 "movq 168(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7635 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7636 "movq %%rax, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 7637 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7638 "movq 176(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7639 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7640 "movq %%rcx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 7641 "movq 184(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7642 "movq 184(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7643 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7644 "movq %%rax, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 7645 "movq 192(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7646 "movq 192(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7647 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7648 "movq %%rcx, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 7649 "movq 200(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7650 "movq 200(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7651 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7652 "movq %%rax, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 7653 "movq 208(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7654 "movq 208(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7655 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7656 "movq %%rcx, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 7657 "movq 216(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7658 "movq 216(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7659 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7660 "movq %%rax, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 7661 "movq 224(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7662 "movq 224(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7663 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7664 "movq %%rcx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 7665 "movq 232(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7666 "movq 232(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7667 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7668 "movq %%rax, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 7669 "movq 240(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 7670 "movq 240(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7671 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 7672 "movq %%rcx, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 7673 "movq 248(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 7674 "movq 248(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 7675 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7676 "movq %%rax, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 7677 "movq %%rcx, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 7678 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 7679 : [c] "+r" (c)
wolfSSL 14:167253f4e170 7680 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m), [t] "r" (t)
wolfSSL 14:167253f4e170 7681 : "memory", "rax", "rcx", "rdx"
wolfSSL 14:167253f4e170 7682 );
wolfSSL 14:167253f4e170 7683
wolfSSL 14:167253f4e170 7684 return c;
wolfSSL 14:167253f4e170 7685 }
wolfSSL 14:167253f4e170 7686
wolfSSL 14:167253f4e170 7687 /* Reduce the number back to 2048 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 7688 *
wolfSSL 14:167253f4e170 7689 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 7690 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 7691 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 7692 */
wolfSSL 14:167253f4e170 7693 SP_NOINLINE static void sp_2048_mont_reduce_32(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 7694 sp_digit mp)
wolfSSL 14:167253f4e170 7695 {
wolfSSL 14:167253f4e170 7696 sp_digit ca = 0;
wolfSSL 14:167253f4e170 7697
wolfSSL 14:167253f4e170 7698 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 7699 "# i = 0\n\t"
wolfSSL 14:167253f4e170 7700 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 7701 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 7702 "movq 8(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 7703 "\nL_mont_loop_32:\n\t"
wolfSSL 14:167253f4e170 7704 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 7705 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 7706 "imulq %[mp], %%r10\n\t"
wolfSSL 14:167253f4e170 7707 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 7708 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7709 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7710 "mulq 0(%[m])\n\t"
wolfSSL 14:167253f4e170 7711 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 7712 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7713 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 7714 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7715 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7716 "mulq 8(%[m])\n\t"
wolfSSL 14:167253f4e170 7717 "movq %%r13, %%r12\n\t"
wolfSSL 14:167253f4e170 7718 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 7719 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7720 "addq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 7721 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7722 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 7723 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7724 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7725 "mulq 16(%[m])\n\t"
wolfSSL 14:167253f4e170 7726 "movq 16(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 7727 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 7728 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7729 "addq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 7730 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7731 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 7732 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7733 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7734 "mulq 24(%[m])\n\t"
wolfSSL 14:167253f4e170 7735 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7736 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7737 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7738 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7739 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 7740 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7741 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 7742 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7743 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7744 "mulq 32(%[m])\n\t"
wolfSSL 14:167253f4e170 7745 "movq 32(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7746 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7747 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7748 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7749 "movq %%r11, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 7750 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7751 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 7752 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7753 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7754 "mulq 40(%[m])\n\t"
wolfSSL 14:167253f4e170 7755 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7756 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7757 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7758 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7759 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 7760 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7761 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 7762 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7763 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7764 "mulq 48(%[m])\n\t"
wolfSSL 14:167253f4e170 7765 "movq 48(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7766 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7767 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7768 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7769 "movq %%r11, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 7770 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7771 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 7772 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7773 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7774 "mulq 56(%[m])\n\t"
wolfSSL 14:167253f4e170 7775 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7776 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7777 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7778 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7779 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 7780 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7781 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 7782 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7783 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7784 "mulq 64(%[m])\n\t"
wolfSSL 14:167253f4e170 7785 "movq 64(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7786 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7787 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7788 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7789 "movq %%r11, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 7790 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7791 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 7792 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7793 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7794 "mulq 72(%[m])\n\t"
wolfSSL 14:167253f4e170 7795 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7796 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7797 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7798 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7799 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 7800 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7801 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 7802 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7803 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7804 "mulq 80(%[m])\n\t"
wolfSSL 14:167253f4e170 7805 "movq 80(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7806 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7807 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7808 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7809 "movq %%r11, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 7810 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7811 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 7812 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7813 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7814 "mulq 88(%[m])\n\t"
wolfSSL 14:167253f4e170 7815 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7816 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7817 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7818 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7819 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 7820 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7821 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 7822 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7823 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7824 "mulq 96(%[m])\n\t"
wolfSSL 14:167253f4e170 7825 "movq 96(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7826 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7827 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7828 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7829 "movq %%r11, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 7830 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7831 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 7832 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7833 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7834 "mulq 104(%[m])\n\t"
wolfSSL 14:167253f4e170 7835 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7836 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7837 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7838 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7839 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 7840 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7841 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 7842 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7843 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7844 "mulq 112(%[m])\n\t"
wolfSSL 14:167253f4e170 7845 "movq 112(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7846 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7847 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7848 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7849 "movq %%r11, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 7850 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7851 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 7852 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7853 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7854 "mulq 120(%[m])\n\t"
wolfSSL 14:167253f4e170 7855 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7856 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7857 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7858 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7859 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 7860 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7861 "# a[i+16] += m[16] * mu\n\t"
wolfSSL 14:167253f4e170 7862 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7863 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7864 "mulq 128(%[m])\n\t"
wolfSSL 14:167253f4e170 7865 "movq 128(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7866 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7867 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7868 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7869 "movq %%r11, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 7870 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7871 "# a[i+17] += m[17] * mu\n\t"
wolfSSL 14:167253f4e170 7872 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7873 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7874 "mulq 136(%[m])\n\t"
wolfSSL 14:167253f4e170 7875 "movq 136(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7876 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7877 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7878 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7879 "movq %%r11, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 7880 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7881 "# a[i+18] += m[18] * mu\n\t"
wolfSSL 14:167253f4e170 7882 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7883 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7884 "mulq 144(%[m])\n\t"
wolfSSL 14:167253f4e170 7885 "movq 144(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7886 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7887 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7888 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7889 "movq %%r11, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 7890 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7891 "# a[i+19] += m[19] * mu\n\t"
wolfSSL 14:167253f4e170 7892 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7893 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7894 "mulq 152(%[m])\n\t"
wolfSSL 14:167253f4e170 7895 "movq 152(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7896 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7897 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7898 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7899 "movq %%r11, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 7900 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7901 "# a[i+20] += m[20] * mu\n\t"
wolfSSL 14:167253f4e170 7902 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7903 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7904 "mulq 160(%[m])\n\t"
wolfSSL 14:167253f4e170 7905 "movq 160(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7906 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7907 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7908 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7909 "movq %%r11, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 7910 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7911 "# a[i+21] += m[21] * mu\n\t"
wolfSSL 14:167253f4e170 7912 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7913 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7914 "mulq 168(%[m])\n\t"
wolfSSL 14:167253f4e170 7915 "movq 168(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7916 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7917 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7918 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7919 "movq %%r11, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 7920 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7921 "# a[i+22] += m[22] * mu\n\t"
wolfSSL 14:167253f4e170 7922 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7923 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7924 "mulq 176(%[m])\n\t"
wolfSSL 14:167253f4e170 7925 "movq 176(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7926 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7927 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7928 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7929 "movq %%r11, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 7930 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7931 "# a[i+23] += m[23] * mu\n\t"
wolfSSL 14:167253f4e170 7932 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7933 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7934 "mulq 184(%[m])\n\t"
wolfSSL 14:167253f4e170 7935 "movq 184(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7936 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7937 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7938 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7939 "movq %%r11, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 7940 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7941 "# a[i+24] += m[24] * mu\n\t"
wolfSSL 14:167253f4e170 7942 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7943 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7944 "mulq 192(%[m])\n\t"
wolfSSL 14:167253f4e170 7945 "movq 192(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7946 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7947 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7948 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7949 "movq %%r11, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 7950 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7951 "# a[i+25] += m[25] * mu\n\t"
wolfSSL 14:167253f4e170 7952 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7953 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7954 "mulq 200(%[m])\n\t"
wolfSSL 14:167253f4e170 7955 "movq 200(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7956 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7957 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7958 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7959 "movq %%r11, 200(%[a])\n\t"
wolfSSL 14:167253f4e170 7960 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7961 "# a[i+26] += m[26] * mu\n\t"
wolfSSL 14:167253f4e170 7962 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7963 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7964 "mulq 208(%[m])\n\t"
wolfSSL 14:167253f4e170 7965 "movq 208(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7966 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7967 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7968 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7969 "movq %%r11, 208(%[a])\n\t"
wolfSSL 14:167253f4e170 7970 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7971 "# a[i+27] += m[27] * mu\n\t"
wolfSSL 14:167253f4e170 7972 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7973 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7974 "mulq 216(%[m])\n\t"
wolfSSL 14:167253f4e170 7975 "movq 216(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7976 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7977 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7978 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7979 "movq %%r11, 216(%[a])\n\t"
wolfSSL 14:167253f4e170 7980 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 7981 "# a[i+28] += m[28] * mu\n\t"
wolfSSL 14:167253f4e170 7982 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7983 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 7984 "mulq 224(%[m])\n\t"
wolfSSL 14:167253f4e170 7985 "movq 224(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7986 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7987 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 7988 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 7989 "movq %%r11, 224(%[a])\n\t"
wolfSSL 14:167253f4e170 7990 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 7991 "# a[i+29] += m[29] * mu\n\t"
wolfSSL 14:167253f4e170 7992 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 7993 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 7994 "mulq 232(%[m])\n\t"
wolfSSL 14:167253f4e170 7995 "movq 232(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 7996 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 7997 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 7998 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 7999 "movq %%r11, 232(%[a])\n\t"
wolfSSL 14:167253f4e170 8000 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8001 "# a[i+30] += m[30] * mu\n\t"
wolfSSL 14:167253f4e170 8002 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 8003 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 8004 "mulq 240(%[m])\n\t"
wolfSSL 14:167253f4e170 8005 "movq 240(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 8006 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 8007 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 8008 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 8009 "movq %%r11, 240(%[a])\n\t"
wolfSSL 14:167253f4e170 8010 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 8011 "# a[i+31] += m[31] * mu\n\t"
wolfSSL 14:167253f4e170 8012 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 8013 "mulq 248(%[m])\n\t"
wolfSSL 14:167253f4e170 8014 "movq 248(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 8015 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8016 "adcq %[ca], %%rdx\n\t"
wolfSSL 14:167253f4e170 8017 "movq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 8018 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 8019 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 8020 "movq %%r11, 248(%[a])\n\t"
wolfSSL 14:167253f4e170 8021 "adcq %%rdx, 256(%[a])\n\t"
wolfSSL 14:167253f4e170 8022 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 8023 "# i += 1\n\t"
wolfSSL 14:167253f4e170 8024 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 8025 "addq $8, %%rcx\n\t"
wolfSSL 14:167253f4e170 8026 "cmpq $256, %%rcx\n\t"
wolfSSL 14:167253f4e170 8027 "jl L_mont_loop_32\n\t"
wolfSSL 14:167253f4e170 8028 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 8029 "movq %%r13, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 8030 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 8031 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 8032 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 8033 "r12", "r13"
wolfSSL 14:167253f4e170 8034 );
wolfSSL 14:167253f4e170 8035
wolfSSL 14:167253f4e170 8036 sp_2048_cond_sub_32(a - 32, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 8037 }
wolfSSL 14:167253f4e170 8038
wolfSSL 14:167253f4e170 8039 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 8040 * (r = a * b mod m)
wolfSSL 14:167253f4e170 8041 *
wolfSSL 14:167253f4e170 8042 * r Result of multiplication.
wolfSSL 14:167253f4e170 8043 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 8044 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 8045 * m Modulus (prime).
wolfSSL 14:167253f4e170 8046 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 8047 */
wolfSSL 14:167253f4e170 8048 static void sp_2048_mont_mul_32(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 8049 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 8050 {
wolfSSL 14:167253f4e170 8051 sp_2048_mul_32(r, a, b);
wolfSSL 14:167253f4e170 8052 sp_2048_mont_reduce_32(r, m, mp);
wolfSSL 14:167253f4e170 8053 }
wolfSSL 14:167253f4e170 8054
wolfSSL 14:167253f4e170 8055 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 8056 *
wolfSSL 14:167253f4e170 8057 * r Result of squaring.
wolfSSL 14:167253f4e170 8058 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 8059 * m Modulus (prime).
wolfSSL 14:167253f4e170 8060 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 8061 */
wolfSSL 14:167253f4e170 8062 static void sp_2048_mont_sqr_32(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 8063 sp_digit mp)
wolfSSL 14:167253f4e170 8064 {
wolfSSL 14:167253f4e170 8065 sp_2048_sqr_32(r, a);
wolfSSL 14:167253f4e170 8066 sp_2048_mont_reduce_32(r, m, mp);
wolfSSL 14:167253f4e170 8067 }
wolfSSL 14:167253f4e170 8068
wolfSSL 14:167253f4e170 8069 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 8070 *
wolfSSL 14:167253f4e170 8071 * r A single precision integer.
wolfSSL 14:167253f4e170 8072 * a A single precision integer.
wolfSSL 14:167253f4e170 8073 * b A single precision digit.
wolfSSL 14:167253f4e170 8074 */
wolfSSL 14:167253f4e170 8075 SP_NOINLINE static void sp_2048_mul_d_32(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 8076 const sp_digit b)
wolfSSL 14:167253f4e170 8077 {
wolfSSL 14:167253f4e170 8078 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 8079 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 8080 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8081 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8082 "mulq (%[a])\n\t"
wolfSSL 14:167253f4e170 8083 "movq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8084 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8085 "movq %%rbx, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 8086 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 8087 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8088 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8089 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 8090 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8091 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 8092 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8093 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8094 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 8095 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8096 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8097 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 8098 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8099 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 8100 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8101 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8102 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 8103 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8104 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8105 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 8106 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8107 "movq %%rbx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 8108 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8109 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8110 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 8111 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8112 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8113 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 8114 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8115 "movq %%rcx, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 8116 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8117 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8118 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 8119 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8120 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8121 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 8122 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8123 "movq %%r8, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 8124 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8125 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8126 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 8127 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8128 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8129 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 8130 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8131 "movq %%rbx, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 8132 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8133 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8134 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 8135 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8136 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8137 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 8138 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8139 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 8140 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8141 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8142 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 8143 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8144 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8145 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 8146 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8147 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 8148 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8149 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8150 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 8151 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8152 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8153 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 8154 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8155 "movq %%rbx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 8156 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8157 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8158 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 8159 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8160 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8161 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 8162 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8163 "movq %%rcx, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 8164 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8165 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8166 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 8167 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8168 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8169 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 8170 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8171 "movq %%r8, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 8172 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8173 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8174 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 8175 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8176 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8177 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 8178 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8179 "movq %%rbx, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 8180 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8181 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8182 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 8183 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8184 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8185 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 8186 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8187 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 8188 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8189 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8190 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 8191 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8192 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8193 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 8194 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8195 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 8196 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8197 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8198 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 8199 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8200 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8201 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 8202 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8203 "movq %%rbx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 8204 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8205 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8206 "# A[16] * B\n\t"
wolfSSL 14:167253f4e170 8207 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8208 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8209 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 8210 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8211 "movq %%rcx, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 8212 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8213 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8214 "# A[17] * B\n\t"
wolfSSL 14:167253f4e170 8215 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8216 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8217 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 8218 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8219 "movq %%r8, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 8220 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8221 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8222 "# A[18] * B\n\t"
wolfSSL 14:167253f4e170 8223 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8224 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8225 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 8226 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8227 "movq %%rbx, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 8228 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8229 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8230 "# A[19] * B\n\t"
wolfSSL 14:167253f4e170 8231 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8232 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8233 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 8234 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8235 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 8236 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8237 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8238 "# A[20] * B\n\t"
wolfSSL 14:167253f4e170 8239 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8240 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8241 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 8242 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8243 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 8244 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8245 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8246 "# A[21] * B\n\t"
wolfSSL 14:167253f4e170 8247 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8248 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8249 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 8250 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8251 "movq %%rbx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 8252 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8253 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8254 "# A[22] * B\n\t"
wolfSSL 14:167253f4e170 8255 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8256 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8257 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 8258 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8259 "movq %%rcx, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 8260 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8261 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8262 "# A[23] * B\n\t"
wolfSSL 14:167253f4e170 8263 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8264 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8265 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 8266 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8267 "movq %%r8, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 8268 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8269 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8270 "# A[24] * B\n\t"
wolfSSL 14:167253f4e170 8271 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8272 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8273 "mulq 192(%[a])\n\t"
wolfSSL 14:167253f4e170 8274 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8275 "movq %%rbx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 8276 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8277 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8278 "# A[25] * B\n\t"
wolfSSL 14:167253f4e170 8279 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8280 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8281 "mulq 200(%[a])\n\t"
wolfSSL 14:167253f4e170 8282 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8283 "movq %%rcx, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 8284 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8285 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8286 "# A[26] * B\n\t"
wolfSSL 14:167253f4e170 8287 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8288 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8289 "mulq 208(%[a])\n\t"
wolfSSL 14:167253f4e170 8290 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8291 "movq %%r8, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 8292 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8293 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8294 "# A[27] * B\n\t"
wolfSSL 14:167253f4e170 8295 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8296 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8297 "mulq 216(%[a])\n\t"
wolfSSL 14:167253f4e170 8298 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8299 "movq %%rbx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 8300 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8301 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8302 "# A[28] * B\n\t"
wolfSSL 14:167253f4e170 8303 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8304 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8305 "mulq 224(%[a])\n\t"
wolfSSL 14:167253f4e170 8306 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8307 "movq %%rcx, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 8308 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8309 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 8310 "# A[29] * B\n\t"
wolfSSL 14:167253f4e170 8311 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8312 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8313 "mulq 232(%[a])\n\t"
wolfSSL 14:167253f4e170 8314 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8315 "movq %%r8, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 8316 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8317 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 8318 "# A[30] * B\n\t"
wolfSSL 14:167253f4e170 8319 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8320 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 8321 "mulq 240(%[a])\n\t"
wolfSSL 14:167253f4e170 8322 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 8323 "movq %%rbx, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 8324 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8325 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 8326 "# A[31] * B\n\t"
wolfSSL 14:167253f4e170 8327 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 8328 "mulq 248(%[a])\n\t"
wolfSSL 14:167253f4e170 8329 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8330 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8331 "movq %%rcx, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 8332 "movq %%r8, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 8333 :
wolfSSL 14:167253f4e170 8334 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 8335 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 8336 );
wolfSSL 14:167253f4e170 8337 }
wolfSSL 14:167253f4e170 8338
wolfSSL 14:167253f4e170 8339 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 8340 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 8341 *
wolfSSL 14:167253f4e170 8342 * r A single precision integer.
wolfSSL 14:167253f4e170 8343 * a A single precision integer.
wolfSSL 14:167253f4e170 8344 * b A single precision digit.
wolfSSL 14:167253f4e170 8345 */
wolfSSL 14:167253f4e170 8346 SP_NOINLINE static void sp_2048_mul_d_avx2_32(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 8347 const sp_digit b)
wolfSSL 14:167253f4e170 8348 {
wolfSSL 14:167253f4e170 8349 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 8350 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 8351 "movq %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 8352 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 8353 "mulxq (%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 8354 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 8355 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 8356 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8357 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8358 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8359 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 8360 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8361 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 8362 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8363 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8364 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8365 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 8366 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8367 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 8368 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8369 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8370 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8371 "movq %%r9, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 8372 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8373 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 8374 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8375 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8376 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8377 "movq %%r8, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 8378 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8379 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 8380 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8381 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8382 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8383 "movq %%r9, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 8384 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8385 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 8386 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8387 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8388 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8389 "movq %%r8, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 8390 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8391 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 8392 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8393 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8394 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8395 "movq %%r9, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 8396 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8397 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 8398 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8399 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8400 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8401 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 8402 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8403 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 8404 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8405 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8406 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8407 "movq %%r9, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 8408 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8409 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 8410 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8411 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8412 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8413 "movq %%r8, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 8414 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8415 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 8416 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8417 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8418 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8419 "movq %%r9, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 8420 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8421 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 8422 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8423 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8424 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8425 "movq %%r8, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 8426 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8427 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 8428 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8429 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8430 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8431 "movq %%r9, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 8432 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8433 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 8434 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8435 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8436 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8437 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 8438 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8439 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 8440 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8441 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8442 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8443 "movq %%r9, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 8444 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8445 "# A[16] * B\n\t"
wolfSSL 14:167253f4e170 8446 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8447 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8448 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8449 "movq %%r8, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 8450 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8451 "# A[17] * B\n\t"
wolfSSL 14:167253f4e170 8452 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8453 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8454 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8455 "movq %%r9, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 8456 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8457 "# A[18] * B\n\t"
wolfSSL 14:167253f4e170 8458 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8459 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8460 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8461 "movq %%r8, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 8462 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8463 "# A[19] * B\n\t"
wolfSSL 14:167253f4e170 8464 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8465 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8466 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8467 "movq %%r9, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 8468 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8469 "# A[20] * B\n\t"
wolfSSL 14:167253f4e170 8470 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8471 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8472 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8473 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 8474 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8475 "# A[21] * B\n\t"
wolfSSL 14:167253f4e170 8476 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8477 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8478 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8479 "movq %%r9, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 8480 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8481 "# A[22] * B\n\t"
wolfSSL 14:167253f4e170 8482 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8483 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8484 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8485 "movq %%r8, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 8486 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8487 "# A[23] * B\n\t"
wolfSSL 14:167253f4e170 8488 "mulxq 184(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8489 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8490 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8491 "movq %%r9, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 8492 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8493 "# A[24] * B\n\t"
wolfSSL 14:167253f4e170 8494 "mulxq 192(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8495 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8496 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8497 "movq %%r8, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 8498 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8499 "# A[25] * B\n\t"
wolfSSL 14:167253f4e170 8500 "mulxq 200(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8501 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8502 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8503 "movq %%r9, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 8504 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8505 "# A[26] * B\n\t"
wolfSSL 14:167253f4e170 8506 "mulxq 208(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8507 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8508 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8509 "movq %%r8, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 8510 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8511 "# A[27] * B\n\t"
wolfSSL 14:167253f4e170 8512 "mulxq 216(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8513 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8514 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8515 "movq %%r9, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 8516 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8517 "# A[28] * B\n\t"
wolfSSL 14:167253f4e170 8518 "mulxq 224(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8519 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8520 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8521 "movq %%r8, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 8522 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8523 "# A[29] * B\n\t"
wolfSSL 14:167253f4e170 8524 "mulxq 232(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8525 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8526 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8527 "movq %%r9, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 8528 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8529 "# A[30] * B\n\t"
wolfSSL 14:167253f4e170 8530 "mulxq 240(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8531 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 8532 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 8533 "movq %%r8, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 8534 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 8535 "# A[31] * B\n\t"
wolfSSL 14:167253f4e170 8536 "mulxq 248(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 8537 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8538 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 8539 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 8540 "adcxq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 8541 "movq %%r9, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 8542 "movq %%r8, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 8543 :
wolfSSL 14:167253f4e170 8544 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 8545 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10"
wolfSSL 14:167253f4e170 8546 );
wolfSSL 14:167253f4e170 8547 }
wolfSSL 14:167253f4e170 8548 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 8549
wolfSSL 14:167253f4e170 8550 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
wolfSSL 14:167253f4e170 8551 *
wolfSSL 14:167253f4e170 8552 * d1 The high order half of the number to divide.
wolfSSL 14:167253f4e170 8553 * d0 The low order half of the number to divide.
wolfSSL 14:167253f4e170 8554 * div The dividend.
wolfSSL 14:167253f4e170 8555 * returns the result of the division.
wolfSSL 14:167253f4e170 8556 */
wolfSSL 14:167253f4e170 8557 static sp_digit div_2048_word_32(sp_digit d1, sp_digit d0, sp_digit div)
wolfSSL 14:167253f4e170 8558 {
wolfSSL 14:167253f4e170 8559 sp_digit r;
wolfSSL 14:167253f4e170 8560
wolfSSL 14:167253f4e170 8561 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 8562 "movq %[d0], %%rax\n\t"
wolfSSL 14:167253f4e170 8563 "movq %[d1], %%rdx\n\t"
wolfSSL 14:167253f4e170 8564 "divq %[div]\n\t"
wolfSSL 14:167253f4e170 8565 "movq %%rax, %[r]\n\t"
wolfSSL 14:167253f4e170 8566 : [r] "=r" (r)
wolfSSL 14:167253f4e170 8567 : [d1] "r" (d1), [d0] "r" (d0), [div] "r" (div)
wolfSSL 14:167253f4e170 8568 : "rax", "rdx"
wolfSSL 14:167253f4e170 8569 );
wolfSSL 14:167253f4e170 8570
wolfSSL 14:167253f4e170 8571 return r;
wolfSSL 14:167253f4e170 8572 }
wolfSSL 14:167253f4e170 8573
wolfSSL 14:167253f4e170 8574 /* AND m into each word of a and store in r.
wolfSSL 14:167253f4e170 8575 *
wolfSSL 14:167253f4e170 8576 * r A single precision integer.
wolfSSL 14:167253f4e170 8577 * a A single precision integer.
wolfSSL 14:167253f4e170 8578 * m Mask to AND against each digit.
wolfSSL 14:167253f4e170 8579 */
wolfSSL 14:167253f4e170 8580 static void sp_2048_mask_32(sp_digit* r, sp_digit* a, sp_digit m)
wolfSSL 14:167253f4e170 8581 {
wolfSSL 14:167253f4e170 8582 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 8583 int i;
wolfSSL 14:167253f4e170 8584
wolfSSL 14:167253f4e170 8585 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 8586 r[i] = a[i] & m;
wolfSSL 14:167253f4e170 8587 #else
wolfSSL 14:167253f4e170 8588 int i;
wolfSSL 14:167253f4e170 8589
wolfSSL 14:167253f4e170 8590 for (i = 0; i < 32; i += 8) {
wolfSSL 14:167253f4e170 8591 r[i+0] = a[i+0] & m;
wolfSSL 14:167253f4e170 8592 r[i+1] = a[i+1] & m;
wolfSSL 14:167253f4e170 8593 r[i+2] = a[i+2] & m;
wolfSSL 14:167253f4e170 8594 r[i+3] = a[i+3] & m;
wolfSSL 14:167253f4e170 8595 r[i+4] = a[i+4] & m;
wolfSSL 14:167253f4e170 8596 r[i+5] = a[i+5] & m;
wolfSSL 14:167253f4e170 8597 r[i+6] = a[i+6] & m;
wolfSSL 14:167253f4e170 8598 r[i+7] = a[i+7] & m;
wolfSSL 14:167253f4e170 8599 }
wolfSSL 14:167253f4e170 8600 #endif
wolfSSL 14:167253f4e170 8601 }
wolfSSL 14:167253f4e170 8602
wolfSSL 14:167253f4e170 8603 /* Compare a with b in constant time.
wolfSSL 14:167253f4e170 8604 *
wolfSSL 14:167253f4e170 8605 * a A single precision integer.
wolfSSL 14:167253f4e170 8606 * b A single precision integer.
wolfSSL 14:167253f4e170 8607 * return -ve, 0 or +ve if a is less than, equal to or greater than b
wolfSSL 14:167253f4e170 8608 * respectively.
wolfSSL 14:167253f4e170 8609 */
wolfSSL 14:167253f4e170 8610 static int64_t sp_2048_cmp_32(sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 8611 {
wolfSSL 14:167253f4e170 8612 sp_digit r = -1;
wolfSSL 14:167253f4e170 8613 sp_digit one = 1;
wolfSSL 14:167253f4e170 8614
wolfSSL 14:167253f4e170 8615 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 8616 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 8617 "movq $-1, %%rdx\n\t"
wolfSSL 14:167253f4e170 8618 "movq 248(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8619 "movq 248(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8620 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8621 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8622 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8623 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8624 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8625 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8626 "movq 240(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8627 "movq 240(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8628 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8629 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8630 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8631 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8632 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8633 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8634 "movq 232(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8635 "movq 232(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8636 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8637 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8638 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8639 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8640 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8641 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8642 "movq 224(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8643 "movq 224(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8644 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8645 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8646 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8647 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8648 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8649 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8650 "movq 216(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8651 "movq 216(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8652 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8653 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8654 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8655 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8656 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8657 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8658 "movq 208(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8659 "movq 208(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8660 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8661 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8662 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8663 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8664 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8665 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8666 "movq 200(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8667 "movq 200(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8668 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8669 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8670 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8671 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8672 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8673 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8674 "movq 192(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8675 "movq 192(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8676 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8677 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8678 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8679 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8680 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8681 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8682 "movq 184(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8683 "movq 184(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8684 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8685 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8686 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8687 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8688 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8689 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8690 "movq 176(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8691 "movq 176(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8692 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8693 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8694 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8695 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8696 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8697 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8698 "movq 168(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8699 "movq 168(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8700 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8701 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8702 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8703 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8704 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8705 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8706 "movq 160(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8707 "movq 160(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8708 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8709 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8710 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8711 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8712 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8713 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8714 "movq 152(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8715 "movq 152(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8716 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8717 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8718 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8719 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8720 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8721 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8722 "movq 144(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8723 "movq 144(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8724 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8725 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8726 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8727 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8728 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8729 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8730 "movq 136(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8731 "movq 136(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8732 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8733 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8734 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8735 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8736 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8737 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8738 "movq 128(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8739 "movq 128(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8740 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8741 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8742 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8743 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8744 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8745 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8746 "movq 120(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8747 "movq 120(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8748 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8749 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8750 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8751 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8752 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8753 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8754 "movq 112(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8755 "movq 112(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8756 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8757 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8758 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8759 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8760 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8761 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8762 "movq 104(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8763 "movq 104(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8764 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8765 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8766 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8767 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8768 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8769 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8770 "movq 96(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8771 "movq 96(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8772 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8773 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8774 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8775 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8776 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8777 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8778 "movq 88(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8779 "movq 88(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8780 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8781 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8782 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8783 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8784 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8785 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8786 "movq 80(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8787 "movq 80(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8788 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8789 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8790 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8791 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8792 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8793 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8794 "movq 72(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8795 "movq 72(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8796 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8797 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8798 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8799 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8800 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8801 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8802 "movq 64(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8803 "movq 64(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8804 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8805 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8806 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8807 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8808 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8809 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8810 "movq 56(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8811 "movq 56(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8812 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8813 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8814 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8815 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8816 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8817 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8818 "movq 48(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8819 "movq 48(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8820 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8821 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8822 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8823 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8824 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8825 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8826 "movq 40(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8827 "movq 40(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8828 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8829 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8830 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8831 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8832 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8833 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8834 "movq 32(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8835 "movq 32(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8836 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8837 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8838 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8839 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8840 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8841 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8842 "movq 24(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8843 "movq 24(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8844 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8845 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8846 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8847 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8848 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8849 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8850 "movq 16(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8851 "movq 16(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8852 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8853 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8854 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8855 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8856 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8857 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8858 "movq 8(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8859 "movq 8(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8860 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8861 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8862 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8863 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8864 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8865 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8866 "movq 0(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 8867 "movq 0(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 8868 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 8869 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 8870 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 8871 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 8872 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8873 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 8874 "xorq %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 8875 : [r] "+r" (r)
wolfSSL 14:167253f4e170 8876 : [a] "r" (a), [b] "r" (b), [one] "r" (one)
wolfSSL 14:167253f4e170 8877 : "rax", "rdx", "rcx", "rbx", "r8"
wolfSSL 14:167253f4e170 8878 );
wolfSSL 14:167253f4e170 8879
wolfSSL 14:167253f4e170 8880 return r;
wolfSSL 14:167253f4e170 8881 }
wolfSSL 14:167253f4e170 8882
wolfSSL 14:167253f4e170 8883 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 8884 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 8885 *
wolfSSL 14:167253f4e170 8886 * a Nmber to be divided.
wolfSSL 14:167253f4e170 8887 * d Number to divide with.
wolfSSL 14:167253f4e170 8888 * m Multiplier result.
wolfSSL 14:167253f4e170 8889 * r Remainder from the division.
wolfSSL 14:167253f4e170 8890 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 8891 */
wolfSSL 14:167253f4e170 8892 static WC_INLINE int sp_2048_div_32(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 8893 sp_digit* r)
wolfSSL 14:167253f4e170 8894 {
wolfSSL 14:167253f4e170 8895 sp_digit t1[64], t2[33];
wolfSSL 14:167253f4e170 8896 sp_digit div, r1;
wolfSSL 14:167253f4e170 8897 int i;
wolfSSL 14:167253f4e170 8898 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 8899 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 8900 #endif
wolfSSL 14:167253f4e170 8901
wolfSSL 14:167253f4e170 8902 (void)m;
wolfSSL 14:167253f4e170 8903
wolfSSL 14:167253f4e170 8904 div = d[31];
wolfSSL 14:167253f4e170 8905 XMEMCPY(t1, a, sizeof(*t1) * 2 * 32);
wolfSSL 14:167253f4e170 8906 for (i=31; i>=0; i--) {
wolfSSL 14:167253f4e170 8907 r1 = div_2048_word_32(t1[32 + i], t1[32 + i - 1], div);
wolfSSL 14:167253f4e170 8908
wolfSSL 14:167253f4e170 8909 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 8910 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 8911 sp_2048_mul_d_avx2_32(t2, d, r1);
wolfSSL 14:167253f4e170 8912 else
wolfSSL 14:167253f4e170 8913 #endif
wolfSSL 14:167253f4e170 8914 sp_2048_mul_d_32(t2, d, r1);
wolfSSL 14:167253f4e170 8915 t1[32 + i] += sp_2048_sub_in_place_32(&t1[i], t2);
wolfSSL 14:167253f4e170 8916 t1[32 + i] -= t2[32];
wolfSSL 14:167253f4e170 8917 sp_2048_mask_32(t2, d, t1[32 + i]);
wolfSSL 14:167253f4e170 8918 t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 8919 sp_2048_mask_32(t2, d, t1[32 + i]);
wolfSSL 14:167253f4e170 8920 t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 8921 }
wolfSSL 14:167253f4e170 8922
wolfSSL 14:167253f4e170 8923 r1 = sp_2048_cmp_32(t1, d) >= 0;
wolfSSL 14:167253f4e170 8924 sp_2048_cond_sub_32(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 8925
wolfSSL 14:167253f4e170 8926 return MP_OKAY;
wolfSSL 14:167253f4e170 8927 }
wolfSSL 14:167253f4e170 8928
wolfSSL 14:167253f4e170 8929 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 8930 *
wolfSSL 14:167253f4e170 8931 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 8932 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 8933 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 8934 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 8935 */
wolfSSL 14:167253f4e170 8936 static WC_INLINE int sp_2048_mod_32(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 8937 {
wolfSSL 14:167253f4e170 8938 return sp_2048_div_32(a, m, NULL, r);
wolfSSL 14:167253f4e170 8939 }
wolfSSL 14:167253f4e170 8940
wolfSSL 14:167253f4e170 8941 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 8942 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 8943 *
wolfSSL 14:167253f4e170 8944 * a Nmber to be divided.
wolfSSL 14:167253f4e170 8945 * d Number to divide with.
wolfSSL 14:167253f4e170 8946 * m Multiplier result.
wolfSSL 14:167253f4e170 8947 * r Remainder from the division.
wolfSSL 14:167253f4e170 8948 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 8949 */
wolfSSL 14:167253f4e170 8950 static WC_INLINE int sp_2048_div_32_cond(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 8951 sp_digit* r)
wolfSSL 14:167253f4e170 8952 {
wolfSSL 14:167253f4e170 8953 sp_digit t1[64], t2[33];
wolfSSL 14:167253f4e170 8954 sp_digit div, r1;
wolfSSL 14:167253f4e170 8955 int i;
wolfSSL 14:167253f4e170 8956 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 8957 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 8958 #endif
wolfSSL 14:167253f4e170 8959
wolfSSL 14:167253f4e170 8960 (void)m;
wolfSSL 14:167253f4e170 8961
wolfSSL 14:167253f4e170 8962 div = d[31];
wolfSSL 14:167253f4e170 8963 XMEMCPY(t1, a, sizeof(*t1) * 2 * 32);
wolfSSL 14:167253f4e170 8964 for (i=31; i>=0; i--) {
wolfSSL 14:167253f4e170 8965 r1 = div_2048_word_32(t1[32 + i], t1[32 + i - 1], div);
wolfSSL 14:167253f4e170 8966
wolfSSL 14:167253f4e170 8967 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 8968 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 8969 sp_2048_mul_d_avx2_32(t2, d, r1);
wolfSSL 14:167253f4e170 8970 else
wolfSSL 14:167253f4e170 8971 #endif
wolfSSL 14:167253f4e170 8972 sp_2048_mul_d_32(t2, d, r1);
wolfSSL 14:167253f4e170 8973 t1[32 + i] += sp_2048_sub_in_place_32(&t1[i], t2);
wolfSSL 14:167253f4e170 8974 t1[32 + i] -= t2[32];
wolfSSL 14:167253f4e170 8975 if (t1[32 + i] != 0) {
wolfSSL 14:167253f4e170 8976 t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], d);
wolfSSL 14:167253f4e170 8977 if (t1[32 + i] != 0)
wolfSSL 14:167253f4e170 8978 t1[32 + i] += sp_2048_add_32(&t1[i], &t1[i], d);
wolfSSL 14:167253f4e170 8979 }
wolfSSL 14:167253f4e170 8980 }
wolfSSL 14:167253f4e170 8981
wolfSSL 14:167253f4e170 8982 r1 = sp_2048_cmp_32(t1, d) >= 0;
wolfSSL 14:167253f4e170 8983 sp_2048_cond_sub_32(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 8984
wolfSSL 14:167253f4e170 8985 return MP_OKAY;
wolfSSL 14:167253f4e170 8986 }
wolfSSL 14:167253f4e170 8987
wolfSSL 14:167253f4e170 8988 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 8989 *
wolfSSL 14:167253f4e170 8990 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 8991 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 8992 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 8993 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 8994 */
wolfSSL 14:167253f4e170 8995 static WC_INLINE int sp_2048_mod_32_cond(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 8996 {
wolfSSL 14:167253f4e170 8997 return sp_2048_div_32_cond(a, m, NULL, r);
wolfSSL 14:167253f4e170 8998 }
wolfSSL 14:167253f4e170 8999
wolfSSL 14:167253f4e170 9000 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH)
wolfSSL 14:167253f4e170 9001 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 9002 *
wolfSSL 14:167253f4e170 9003 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 9004 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 9005 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 9006 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 9007 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 9008 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 9009 */
wolfSSL 14:167253f4e170 9010 static int sp_2048_mod_exp_32(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 9011 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 9012 {
wolfSSL 14:167253f4e170 9013 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 9014 sp_digit t[32][64];
wolfSSL 14:167253f4e170 9015 #else
wolfSSL 14:167253f4e170 9016 sp_digit* t[32];
wolfSSL 14:167253f4e170 9017 sp_digit* td;
wolfSSL 14:167253f4e170 9018 #endif
wolfSSL 14:167253f4e170 9019 sp_digit* norm;
wolfSSL 14:167253f4e170 9020 sp_digit mp = 1;
wolfSSL 14:167253f4e170 9021 sp_digit n;
wolfSSL 14:167253f4e170 9022 sp_digit mask;
wolfSSL 14:167253f4e170 9023 int i;
wolfSSL 14:167253f4e170 9024 int c, y;
wolfSSL 14:167253f4e170 9025 int err = MP_OKAY;
wolfSSL 14:167253f4e170 9026
wolfSSL 14:167253f4e170 9027 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 9028 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 64, NULL,
wolfSSL 14:167253f4e170 9029 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9030 if (td == NULL)
wolfSSL 14:167253f4e170 9031 err = MEMORY_E;
wolfSSL 14:167253f4e170 9032
wolfSSL 14:167253f4e170 9033 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9034 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 9035 t[i] = td + i * 64;
wolfSSL 14:167253f4e170 9036 norm = t[0];
wolfSSL 14:167253f4e170 9037 }
wolfSSL 14:167253f4e170 9038 #else
wolfSSL 14:167253f4e170 9039 norm = t[0];
wolfSSL 14:167253f4e170 9040 #endif
wolfSSL 14:167253f4e170 9041
wolfSSL 14:167253f4e170 9042 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9043 sp_2048_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 9044 sp_2048_mont_norm_32(norm, m);
wolfSSL 14:167253f4e170 9045
wolfSSL 14:167253f4e170 9046 XMEMSET(t[1], 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9047 if (reduceA) {
wolfSSL 14:167253f4e170 9048 err = sp_2048_mod_32(t[1] + 32, a, m);
wolfSSL 14:167253f4e170 9049 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 9050 err = sp_2048_mod_32(t[1], t[1], m);
wolfSSL 14:167253f4e170 9051 }
wolfSSL 14:167253f4e170 9052 else {
wolfSSL 14:167253f4e170 9053 XMEMCPY(t[1] + 32, a, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9054 err = sp_2048_mod_32(t[1], t[1], m);
wolfSSL 14:167253f4e170 9055 }
wolfSSL 14:167253f4e170 9056 }
wolfSSL 14:167253f4e170 9057
wolfSSL 14:167253f4e170 9058 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9059 sp_2048_mont_sqr_32(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 9060 sp_2048_mont_mul_32(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 9061 sp_2048_mont_sqr_32(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 9062 sp_2048_mont_mul_32(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 9063 sp_2048_mont_sqr_32(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 9064 sp_2048_mont_mul_32(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 9065 sp_2048_mont_sqr_32(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 9066 sp_2048_mont_mul_32(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 9067 sp_2048_mont_sqr_32(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 9068 sp_2048_mont_mul_32(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 9069 sp_2048_mont_sqr_32(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 9070 sp_2048_mont_mul_32(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 9071 sp_2048_mont_sqr_32(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 9072 sp_2048_mont_mul_32(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 9073 sp_2048_mont_sqr_32(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 9074 sp_2048_mont_mul_32(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 9075 sp_2048_mont_sqr_32(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 9076 sp_2048_mont_mul_32(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 9077 sp_2048_mont_sqr_32(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 9078 sp_2048_mont_mul_32(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 9079 sp_2048_mont_sqr_32(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 9080 sp_2048_mont_mul_32(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 9081 sp_2048_mont_sqr_32(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 9082 sp_2048_mont_mul_32(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 9083 sp_2048_mont_sqr_32(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 9084 sp_2048_mont_mul_32(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 9085 sp_2048_mont_sqr_32(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 9086 sp_2048_mont_mul_32(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 9087 sp_2048_mont_sqr_32(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 9088 sp_2048_mont_mul_32(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 9089
wolfSSL 14:167253f4e170 9090 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 9091 n = e[i--];
wolfSSL 14:167253f4e170 9092 y = n >> 59;
wolfSSL 14:167253f4e170 9093 n <<= 5;
wolfSSL 14:167253f4e170 9094 c = 59;
wolfSSL 14:167253f4e170 9095 XMEMCPY(r, t[y], sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9096 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 9097 if (c == 0) {
wolfSSL 14:167253f4e170 9098 n = e[i--];
wolfSSL 14:167253f4e170 9099 y = n >> 59;
wolfSSL 14:167253f4e170 9100 n <<= 5;
wolfSSL 14:167253f4e170 9101 c = 59;
wolfSSL 14:167253f4e170 9102 }
wolfSSL 14:167253f4e170 9103 else if (c < 5) {
wolfSSL 14:167253f4e170 9104 y = n >> 59;
wolfSSL 14:167253f4e170 9105 n = e[i--];
wolfSSL 14:167253f4e170 9106 c = 5 - c;
wolfSSL 14:167253f4e170 9107 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 9108 n <<= c;
wolfSSL 14:167253f4e170 9109 c = 64 - c;
wolfSSL 14:167253f4e170 9110 }
wolfSSL 14:167253f4e170 9111 else {
wolfSSL 14:167253f4e170 9112 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 9113 n <<= 5;
wolfSSL 14:167253f4e170 9114 c -= 5;
wolfSSL 14:167253f4e170 9115 }
wolfSSL 14:167253f4e170 9116
wolfSSL 14:167253f4e170 9117 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9118 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9119 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9120 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9121 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9122
wolfSSL 14:167253f4e170 9123 sp_2048_mont_mul_32(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 9124 }
wolfSSL 14:167253f4e170 9125 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 9126 for (; c > 0; c--)
wolfSSL 14:167253f4e170 9127 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9128 sp_2048_mont_mul_32(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 9129
wolfSSL 14:167253f4e170 9130 XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9131 sp_2048_mont_reduce_32(r, m, mp);
wolfSSL 14:167253f4e170 9132
wolfSSL 14:167253f4e170 9133 mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
wolfSSL 14:167253f4e170 9134 sp_2048_cond_sub_32(r, r, m, mask);
wolfSSL 14:167253f4e170 9135 }
wolfSSL 14:167253f4e170 9136
wolfSSL 14:167253f4e170 9137 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 9138 if (td != NULL)
wolfSSL 14:167253f4e170 9139 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9140 #endif
wolfSSL 14:167253f4e170 9141
wolfSSL 14:167253f4e170 9142 return err;
wolfSSL 14:167253f4e170 9143 }
wolfSSL 14:167253f4e170 9144 #endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 9145
wolfSSL 14:167253f4e170 9146 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9147 /* Reduce the number back to 2048 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 9148 *
wolfSSL 14:167253f4e170 9149 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 9150 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 9151 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 9152 */
wolfSSL 14:167253f4e170 9153 SP_NOINLINE static void sp_2048_mont_reduce_avx2_32(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 9154 sp_digit mp)
wolfSSL 14:167253f4e170 9155 {
wolfSSL 14:167253f4e170 9156 sp_digit ca = 0;
wolfSSL 14:167253f4e170 9157
wolfSSL 14:167253f4e170 9158 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 9159 "# i = 0\n\t"
wolfSSL 14:167253f4e170 9160 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 9161 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 9162 "\nL_mont_loop_avx2_32:\n\t"
wolfSSL 14:167253f4e170 9163 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 9164 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 9165 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 9166 "movq %%r12, %%rdx\n\t"
wolfSSL 14:167253f4e170 9167 "mulxq %[mp], %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 9168 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 9169 "mulxq 0(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9170 "movq 8(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 9171 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9172 "adoxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 9173 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 9174 "mulxq 8(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9175 "movq 16(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9176 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 9177 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9178 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 9179 "mulxq 16(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9180 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9181 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9182 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9183 "movq %%r10, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 9184 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 9185 "mulxq 24(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9186 "movq 32(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9187 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9188 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9189 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 9190 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 9191 "mulxq 32(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9192 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9193 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9194 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9195 "movq %%r10, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 9196 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 9197 "mulxq 40(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9198 "movq 48(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9199 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9200 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9201 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 9202 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 9203 "mulxq 48(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9204 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9205 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9206 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9207 "movq %%r10, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 9208 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 9209 "mulxq 56(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9210 "movq 64(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9211 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9212 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9213 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 9214 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 9215 "mulxq 64(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9216 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9217 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9218 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9219 "movq %%r10, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 9220 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 9221 "mulxq 72(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9222 "movq 80(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9223 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9224 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9225 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 9226 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 9227 "mulxq 80(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9228 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9229 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9230 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9231 "movq %%r10, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 9232 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 9233 "mulxq 88(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9234 "movq 96(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9235 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9236 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9237 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 9238 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 9239 "mulxq 96(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9240 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9241 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9242 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9243 "movq %%r10, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 9244 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 9245 "mulxq 104(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9246 "movq 112(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9247 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9248 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9249 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 9250 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 9251 "mulxq 112(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9252 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9253 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9254 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9255 "movq %%r10, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 9256 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 9257 "mulxq 120(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9258 "movq 128(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9259 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9260 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9261 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 9262 "# a[i+16] += m[16] * mu\n\t"
wolfSSL 14:167253f4e170 9263 "mulxq 128(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9264 "movq 136(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9265 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9266 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9267 "movq %%r10, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 9268 "# a[i+17] += m[17] * mu\n\t"
wolfSSL 14:167253f4e170 9269 "mulxq 136(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9270 "movq 144(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9271 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9272 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9273 "movq %%r11, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 9274 "# a[i+18] += m[18] * mu\n\t"
wolfSSL 14:167253f4e170 9275 "mulxq 144(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9276 "movq 152(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9277 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9278 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9279 "movq %%r10, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 9280 "# a[i+19] += m[19] * mu\n\t"
wolfSSL 14:167253f4e170 9281 "mulxq 152(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9282 "movq 160(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9283 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9284 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9285 "movq %%r11, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 9286 "# a[i+20] += m[20] * mu\n\t"
wolfSSL 14:167253f4e170 9287 "mulxq 160(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9288 "movq 168(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9289 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9290 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9291 "movq %%r10, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 9292 "# a[i+21] += m[21] * mu\n\t"
wolfSSL 14:167253f4e170 9293 "mulxq 168(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9294 "movq 176(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9295 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9296 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9297 "movq %%r11, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 9298 "# a[i+22] += m[22] * mu\n\t"
wolfSSL 14:167253f4e170 9299 "mulxq 176(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9300 "movq 184(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9301 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9302 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9303 "movq %%r10, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 9304 "# a[i+23] += m[23] * mu\n\t"
wolfSSL 14:167253f4e170 9305 "mulxq 184(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9306 "movq 192(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9307 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9308 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9309 "movq %%r11, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 9310 "# a[i+24] += m[24] * mu\n\t"
wolfSSL 14:167253f4e170 9311 "mulxq 192(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9312 "movq 200(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9313 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9314 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9315 "movq %%r10, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 9316 "# a[i+25] += m[25] * mu\n\t"
wolfSSL 14:167253f4e170 9317 "mulxq 200(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9318 "movq 208(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9319 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9320 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9321 "movq %%r11, 200(%[a])\n\t"
wolfSSL 14:167253f4e170 9322 "# a[i+26] += m[26] * mu\n\t"
wolfSSL 14:167253f4e170 9323 "mulxq 208(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9324 "movq 216(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9325 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9326 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9327 "movq %%r10, 208(%[a])\n\t"
wolfSSL 14:167253f4e170 9328 "# a[i+27] += m[27] * mu\n\t"
wolfSSL 14:167253f4e170 9329 "mulxq 216(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9330 "movq 224(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9331 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9332 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9333 "movq %%r11, 216(%[a])\n\t"
wolfSSL 14:167253f4e170 9334 "# a[i+28] += m[28] * mu\n\t"
wolfSSL 14:167253f4e170 9335 "mulxq 224(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9336 "movq 232(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9337 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9338 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9339 "movq %%r10, 224(%[a])\n\t"
wolfSSL 14:167253f4e170 9340 "# a[i+29] += m[29] * mu\n\t"
wolfSSL 14:167253f4e170 9341 "mulxq 232(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9342 "movq 240(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9343 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9344 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9345 "movq %%r11, 232(%[a])\n\t"
wolfSSL 14:167253f4e170 9346 "# a[i+30] += m[30] * mu\n\t"
wolfSSL 14:167253f4e170 9347 "mulxq 240(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9348 "movq 248(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 9349 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 9350 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 9351 "movq %%r10, 240(%[a])\n\t"
wolfSSL 14:167253f4e170 9352 "# a[i+31] += m[31] * mu\n\t"
wolfSSL 14:167253f4e170 9353 "mulxq 248(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 9354 "movq 256(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 9355 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 9356 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 9357 "movq %%r11, 248(%[a])\n\t"
wolfSSL 14:167253f4e170 9358 "adcxq %[ca], %%r10\n\t"
wolfSSL 14:167253f4e170 9359 "movq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 9360 "adoxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 9361 "adcxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 9362 "movq %%r10, 256(%[a])\n\t"
wolfSSL 14:167253f4e170 9363 "# i += 1\n\t"
wolfSSL 14:167253f4e170 9364 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 9365 "addq $1, %%rcx\n\t"
wolfSSL 14:167253f4e170 9366 "cmpq $32, %%rcx\n\t"
wolfSSL 14:167253f4e170 9367 "jl L_mont_loop_avx2_32\n\t"
wolfSSL 14:167253f4e170 9368 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 9369 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 9370 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 9371 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 9372 );
wolfSSL 14:167253f4e170 9373
wolfSSL 14:167253f4e170 9374 sp_2048_cond_sub_32(a - 32, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 9375 }
wolfSSL 14:167253f4e170 9376 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 9377
wolfSSL 14:167253f4e170 9378 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9379 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 9380 * (r = a * b mod m)
wolfSSL 14:167253f4e170 9381 *
wolfSSL 14:167253f4e170 9382 * r Result of multiplication.
wolfSSL 14:167253f4e170 9383 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 9384 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 9385 * m Modulus (prime).
wolfSSL 14:167253f4e170 9386 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 9387 */
wolfSSL 14:167253f4e170 9388 static void sp_2048_mont_mul_avx2_32(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 9389 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 9390 {
wolfSSL 14:167253f4e170 9391 sp_2048_mul_avx2_32(r, a, b);
wolfSSL 14:167253f4e170 9392 sp_2048_mont_reduce_avx2_32(r, m, mp);
wolfSSL 14:167253f4e170 9393 }
wolfSSL 14:167253f4e170 9394
wolfSSL 14:167253f4e170 9395 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 9396 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9397 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 9398 *
wolfSSL 14:167253f4e170 9399 * r Result of squaring.
wolfSSL 14:167253f4e170 9400 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 9401 * m Modulus (prime).
wolfSSL 14:167253f4e170 9402 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 9403 */
wolfSSL 14:167253f4e170 9404 static void sp_2048_mont_sqr_avx2_32(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 9405 sp_digit mp)
wolfSSL 14:167253f4e170 9406 {
wolfSSL 14:167253f4e170 9407 sp_2048_sqr_avx2_32(r, a);
wolfSSL 14:167253f4e170 9408 sp_2048_mont_reduce_avx2_32(r, m, mp);
wolfSSL 14:167253f4e170 9409 }
wolfSSL 14:167253f4e170 9410
wolfSSL 14:167253f4e170 9411 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 9412 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH)
wolfSSL 14:167253f4e170 9413 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9414 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 9415 *
wolfSSL 14:167253f4e170 9416 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 9417 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 9418 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 9419 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 9420 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 9421 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 9422 */
wolfSSL 14:167253f4e170 9423 static int sp_2048_mod_exp_avx2_32(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 9424 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 9425 {
wolfSSL 14:167253f4e170 9426 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 9427 sp_digit t[32][64];
wolfSSL 14:167253f4e170 9428 #else
wolfSSL 14:167253f4e170 9429 sp_digit* t[32];
wolfSSL 14:167253f4e170 9430 sp_digit* td;
wolfSSL 14:167253f4e170 9431 #endif
wolfSSL 14:167253f4e170 9432 sp_digit* norm;
wolfSSL 14:167253f4e170 9433 sp_digit mp = 1;
wolfSSL 14:167253f4e170 9434 sp_digit n;
wolfSSL 14:167253f4e170 9435 sp_digit mask;
wolfSSL 14:167253f4e170 9436 int i;
wolfSSL 14:167253f4e170 9437 int c, y;
wolfSSL 14:167253f4e170 9438 int err = MP_OKAY;
wolfSSL 14:167253f4e170 9439
wolfSSL 14:167253f4e170 9440 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 9441 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 64, NULL,
wolfSSL 14:167253f4e170 9442 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9443 if (td == NULL)
wolfSSL 14:167253f4e170 9444 err = MEMORY_E;
wolfSSL 14:167253f4e170 9445
wolfSSL 14:167253f4e170 9446 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9447 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 9448 t[i] = td + i * 64;
wolfSSL 14:167253f4e170 9449 norm = t[0];
wolfSSL 14:167253f4e170 9450 }
wolfSSL 14:167253f4e170 9451 #else
wolfSSL 14:167253f4e170 9452 norm = t[0];
wolfSSL 14:167253f4e170 9453 #endif
wolfSSL 14:167253f4e170 9454
wolfSSL 14:167253f4e170 9455 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9456 sp_2048_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 9457 sp_2048_mont_norm_32(norm, m);
wolfSSL 14:167253f4e170 9458
wolfSSL 14:167253f4e170 9459 XMEMSET(t[1], 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9460 if (reduceA) {
wolfSSL 14:167253f4e170 9461 err = sp_2048_mod_32(t[1] + 32, a, m);
wolfSSL 14:167253f4e170 9462 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 9463 err = sp_2048_mod_32(t[1], t[1], m);
wolfSSL 14:167253f4e170 9464 }
wolfSSL 14:167253f4e170 9465 else {
wolfSSL 14:167253f4e170 9466 XMEMCPY(t[1] + 32, a, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9467 err = sp_2048_mod_32(t[1], t[1], m);
wolfSSL 14:167253f4e170 9468 }
wolfSSL 14:167253f4e170 9469 }
wolfSSL 14:167253f4e170 9470
wolfSSL 14:167253f4e170 9471 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9472 sp_2048_mont_sqr_avx2_32(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 9473 sp_2048_mont_mul_avx2_32(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 9474 sp_2048_mont_sqr_avx2_32(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 9475 sp_2048_mont_mul_avx2_32(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 9476 sp_2048_mont_sqr_avx2_32(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 9477 sp_2048_mont_mul_avx2_32(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 9478 sp_2048_mont_sqr_avx2_32(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 9479 sp_2048_mont_mul_avx2_32(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 9480 sp_2048_mont_sqr_avx2_32(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 9481 sp_2048_mont_mul_avx2_32(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 9482 sp_2048_mont_sqr_avx2_32(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 9483 sp_2048_mont_mul_avx2_32(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 9484 sp_2048_mont_sqr_avx2_32(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 9485 sp_2048_mont_mul_avx2_32(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 9486 sp_2048_mont_sqr_avx2_32(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 9487 sp_2048_mont_mul_avx2_32(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 9488 sp_2048_mont_sqr_avx2_32(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 9489 sp_2048_mont_mul_avx2_32(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 9490 sp_2048_mont_sqr_avx2_32(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 9491 sp_2048_mont_mul_avx2_32(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 9492 sp_2048_mont_sqr_avx2_32(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 9493 sp_2048_mont_mul_avx2_32(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 9494 sp_2048_mont_sqr_avx2_32(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 9495 sp_2048_mont_mul_avx2_32(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 9496 sp_2048_mont_sqr_avx2_32(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 9497 sp_2048_mont_mul_avx2_32(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 9498 sp_2048_mont_sqr_avx2_32(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 9499 sp_2048_mont_mul_avx2_32(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 9500 sp_2048_mont_sqr_avx2_32(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 9501 sp_2048_mont_mul_avx2_32(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 9502
wolfSSL 14:167253f4e170 9503 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 9504 n = e[i--];
wolfSSL 14:167253f4e170 9505 y = n >> 59;
wolfSSL 14:167253f4e170 9506 n <<= 5;
wolfSSL 14:167253f4e170 9507 c = 59;
wolfSSL 14:167253f4e170 9508 XMEMCPY(r, t[y], sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9509 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 9510 if (c == 0) {
wolfSSL 14:167253f4e170 9511 n = e[i--];
wolfSSL 14:167253f4e170 9512 y = n >> 59;
wolfSSL 14:167253f4e170 9513 n <<= 5;
wolfSSL 14:167253f4e170 9514 c = 59;
wolfSSL 14:167253f4e170 9515 }
wolfSSL 14:167253f4e170 9516 else if (c < 5) {
wolfSSL 14:167253f4e170 9517 y = n >> 59;
wolfSSL 14:167253f4e170 9518 n = e[i--];
wolfSSL 14:167253f4e170 9519 c = 5 - c;
wolfSSL 14:167253f4e170 9520 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 9521 n <<= c;
wolfSSL 14:167253f4e170 9522 c = 64 - c;
wolfSSL 14:167253f4e170 9523 }
wolfSSL 14:167253f4e170 9524 else {
wolfSSL 14:167253f4e170 9525 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 9526 n <<= 5;
wolfSSL 14:167253f4e170 9527 c -= 5;
wolfSSL 14:167253f4e170 9528 }
wolfSSL 14:167253f4e170 9529
wolfSSL 14:167253f4e170 9530 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9531 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9532 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9533 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9534 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9535
wolfSSL 14:167253f4e170 9536 sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 9537 }
wolfSSL 14:167253f4e170 9538 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 9539 for (; c > 0; c--)
wolfSSL 14:167253f4e170 9540 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9541 sp_2048_mont_mul_avx2_32(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 9542
wolfSSL 14:167253f4e170 9543 XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9544 sp_2048_mont_reduce_avx2_32(r, m, mp);
wolfSSL 14:167253f4e170 9545
wolfSSL 14:167253f4e170 9546 mask = 0 - (sp_2048_cmp_32(r, m) >= 0);
wolfSSL 14:167253f4e170 9547 sp_2048_cond_sub_32(r, r, m, mask);
wolfSSL 14:167253f4e170 9548 }
wolfSSL 14:167253f4e170 9549
wolfSSL 14:167253f4e170 9550 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 9551 if (td != NULL)
wolfSSL 14:167253f4e170 9552 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9553 #endif
wolfSSL 14:167253f4e170 9554
wolfSSL 14:167253f4e170 9555 return err;
wolfSSL 14:167253f4e170 9556 }
wolfSSL 14:167253f4e170 9557 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 9558 #endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 9559
wolfSSL 14:167253f4e170 9560 #ifdef WOLFSSL_HAVE_SP_RSA
wolfSSL 14:167253f4e170 9561 /* RSA public key operation.
wolfSSL 14:167253f4e170 9562 *
wolfSSL 14:167253f4e170 9563 * in Array of bytes representing the number to exponentiate, base.
wolfSSL 14:167253f4e170 9564 * inLen Number of bytes in base.
wolfSSL 14:167253f4e170 9565 * em Public exponent.
wolfSSL 14:167253f4e170 9566 * mm Modulus.
wolfSSL 14:167253f4e170 9567 * out Buffer to hold big-endian bytes of exponentiation result.
wolfSSL 14:167253f4e170 9568 * Must be at least 256 bytes long.
wolfSSL 14:167253f4e170 9569 * outLen Number of bytes in result.
wolfSSL 14:167253f4e170 9570 * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
wolfSSL 14:167253f4e170 9571 * an array is too long and MEMORY_E when dynamic memory allocation fails.
wolfSSL 14:167253f4e170 9572 */
wolfSSL 14:167253f4e170 9573 int sp_RsaPublic_2048(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
wolfSSL 14:167253f4e170 9574 byte* out, word32* outLen)
wolfSSL 14:167253f4e170 9575 {
wolfSSL 14:167253f4e170 9576 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 9577 sp_digit ad[64], md[32], rd[64];
wolfSSL 14:167253f4e170 9578 #else
wolfSSL 14:167253f4e170 9579 sp_digit* d = NULL;
wolfSSL 14:167253f4e170 9580 #endif
wolfSSL 14:167253f4e170 9581 sp_digit* a;
wolfSSL 14:167253f4e170 9582 sp_digit *ah;
wolfSSL 14:167253f4e170 9583 sp_digit* m;
wolfSSL 14:167253f4e170 9584 sp_digit* r;
wolfSSL 14:167253f4e170 9585 sp_digit e[1];
wolfSSL 14:167253f4e170 9586 int err = MP_OKAY;
wolfSSL 14:167253f4e170 9587 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9588 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 9589 #endif
wolfSSL 14:167253f4e170 9590
wolfSSL 14:167253f4e170 9591 if (*outLen < 256)
wolfSSL 14:167253f4e170 9592 err = MP_TO_E;
wolfSSL 14:167253f4e170 9593 if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 256 ||
wolfSSL 14:167253f4e170 9594 mp_count_bits(mm) != 2048))
wolfSSL 14:167253f4e170 9595 err = MP_READ_E;
wolfSSL 14:167253f4e170 9596
wolfSSL 14:167253f4e170 9597 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 9598 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9599 d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 5, NULL,
wolfSSL 14:167253f4e170 9600 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9601 if (d == NULL)
wolfSSL 14:167253f4e170 9602 err = MEMORY_E;
wolfSSL 14:167253f4e170 9603 }
wolfSSL 14:167253f4e170 9604
wolfSSL 14:167253f4e170 9605 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9606 a = d;
wolfSSL 14:167253f4e170 9607 r = a + 32 * 2;
wolfSSL 14:167253f4e170 9608 m = r + 32 * 2;
wolfSSL 14:167253f4e170 9609 ah = a + 32;
wolfSSL 14:167253f4e170 9610 }
wolfSSL 14:167253f4e170 9611 #else
wolfSSL 14:167253f4e170 9612 a = ad;
wolfSSL 14:167253f4e170 9613 m = md;
wolfSSL 14:167253f4e170 9614 r = rd;
wolfSSL 14:167253f4e170 9615 ah = a + 32;
wolfSSL 14:167253f4e170 9616 #endif
wolfSSL 14:167253f4e170 9617
wolfSSL 14:167253f4e170 9618 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9619 sp_2048_from_bin(ah, 32, in, inLen);
wolfSSL 14:167253f4e170 9620 #if DIGIT_BIT >= 64
wolfSSL 14:167253f4e170 9621 e[0] = em->dp[0];
wolfSSL 14:167253f4e170 9622 #else
wolfSSL 14:167253f4e170 9623 e[0] = em->dp[0];
wolfSSL 14:167253f4e170 9624 if (em->used > 1)
wolfSSL 14:167253f4e170 9625 e[0] |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
wolfSSL 14:167253f4e170 9626 #endif
wolfSSL 14:167253f4e170 9627 if (e[0] == 0)
wolfSSL 14:167253f4e170 9628 err = MP_EXPTMOD_E;
wolfSSL 14:167253f4e170 9629 }
wolfSSL 14:167253f4e170 9630 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9631 sp_2048_from_mp(m, 32, mm);
wolfSSL 14:167253f4e170 9632
wolfSSL 14:167253f4e170 9633 if (e[0] == 0x3) {
wolfSSL 14:167253f4e170 9634 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9635 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 9636 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9637 sp_2048_sqr_avx2_32(r, ah);
wolfSSL 14:167253f4e170 9638 err = sp_2048_mod_32_cond(r, r, m);
wolfSSL 14:167253f4e170 9639 }
wolfSSL 14:167253f4e170 9640 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9641 sp_2048_mul_avx2_32(r, ah, r);
wolfSSL 14:167253f4e170 9642 err = sp_2048_mod_32_cond(r, r, m);
wolfSSL 14:167253f4e170 9643 }
wolfSSL 14:167253f4e170 9644 }
wolfSSL 14:167253f4e170 9645 else
wolfSSL 14:167253f4e170 9646 #endif
wolfSSL 14:167253f4e170 9647 {
wolfSSL 14:167253f4e170 9648 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9649 sp_2048_sqr_32(r, ah);
wolfSSL 14:167253f4e170 9650 err = sp_2048_mod_32_cond(r, r, m);
wolfSSL 14:167253f4e170 9651 }
wolfSSL 14:167253f4e170 9652 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9653 sp_2048_mul_32(r, ah, r);
wolfSSL 14:167253f4e170 9654 err = sp_2048_mod_32_cond(r, r, m);
wolfSSL 14:167253f4e170 9655 }
wolfSSL 14:167253f4e170 9656 }
wolfSSL 14:167253f4e170 9657 }
wolfSSL 14:167253f4e170 9658 else {
wolfSSL 14:167253f4e170 9659 int i;
wolfSSL 14:167253f4e170 9660 sp_digit mp;
wolfSSL 14:167253f4e170 9661
wolfSSL 14:167253f4e170 9662 sp_2048_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 9663
wolfSSL 14:167253f4e170 9664 /* Convert to Montgomery form. */
wolfSSL 14:167253f4e170 9665 XMEMSET(a, 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9666 err = sp_2048_mod_32_cond(a, a, m);
wolfSSL 14:167253f4e170 9667
wolfSSL 14:167253f4e170 9668 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9669 for (i=63; i>=0; i--)
wolfSSL 14:167253f4e170 9670 if (e[0] >> i)
wolfSSL 14:167253f4e170 9671 break;
wolfSSL 14:167253f4e170 9672
wolfSSL 14:167253f4e170 9673 XMEMCPY(r, a, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9674 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9675 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 9676 for (i--; i>=0; i--) {
wolfSSL 14:167253f4e170 9677 sp_2048_mont_sqr_avx2_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9678 if (((e[0] >> i) & 1) == 1)
wolfSSL 14:167253f4e170 9679 sp_2048_mont_mul_avx2_32(r, r, a, m, mp);
wolfSSL 14:167253f4e170 9680 }
wolfSSL 14:167253f4e170 9681 XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9682 sp_2048_mont_reduce_avx2_32(r, m, mp);
wolfSSL 14:167253f4e170 9683 }
wolfSSL 14:167253f4e170 9684 else
wolfSSL 14:167253f4e170 9685 #endif
wolfSSL 14:167253f4e170 9686 {
wolfSSL 14:167253f4e170 9687 for (i--; i>=0; i--) {
wolfSSL 14:167253f4e170 9688 sp_2048_mont_sqr_32(r, r, m, mp);
wolfSSL 14:167253f4e170 9689 if (((e[0] >> i) & 1) == 1)
wolfSSL 14:167253f4e170 9690 sp_2048_mont_mul_32(r, r, a, m, mp);
wolfSSL 14:167253f4e170 9691 }
wolfSSL 14:167253f4e170 9692 XMEMSET(&r[32], 0, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9693 sp_2048_mont_reduce_32(r, m, mp);
wolfSSL 14:167253f4e170 9694 }
wolfSSL 14:167253f4e170 9695
wolfSSL 14:167253f4e170 9696 for (i = 31; i > 0; i--) {
wolfSSL 14:167253f4e170 9697 if (r[i] != m[i])
wolfSSL 14:167253f4e170 9698 break;
wolfSSL 14:167253f4e170 9699 }
wolfSSL 14:167253f4e170 9700 if (r[i] >= m[i])
wolfSSL 14:167253f4e170 9701 sp_2048_sub_in_place_32(r, m);
wolfSSL 14:167253f4e170 9702 }
wolfSSL 14:167253f4e170 9703 }
wolfSSL 14:167253f4e170 9704 }
wolfSSL 14:167253f4e170 9705
wolfSSL 14:167253f4e170 9706 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9707 sp_2048_to_bin(r, out);
wolfSSL 14:167253f4e170 9708 *outLen = 256;
wolfSSL 14:167253f4e170 9709 }
wolfSSL 14:167253f4e170 9710
wolfSSL 14:167253f4e170 9711 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 9712 if (d != NULL)
wolfSSL 14:167253f4e170 9713 XFREE(d, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9714 #endif
wolfSSL 14:167253f4e170 9715
wolfSSL 14:167253f4e170 9716 return err;
wolfSSL 14:167253f4e170 9717 }
wolfSSL 14:167253f4e170 9718
wolfSSL 14:167253f4e170 9719 /* RSA private key operation.
wolfSSL 14:167253f4e170 9720 *
wolfSSL 14:167253f4e170 9721 * in Array of bytes representing the number to exponentiate, base.
wolfSSL 14:167253f4e170 9722 * inLen Number of bytes in base.
wolfSSL 14:167253f4e170 9723 * dm Private exponent.
wolfSSL 14:167253f4e170 9724 * pm First prime.
wolfSSL 14:167253f4e170 9725 * qm Second prime.
wolfSSL 14:167253f4e170 9726 * dpm First prime's CRT exponent.
wolfSSL 14:167253f4e170 9727 * dqm Second prime's CRT exponent.
wolfSSL 14:167253f4e170 9728 * qim Inverse of second prime mod p.
wolfSSL 14:167253f4e170 9729 * mm Modulus.
wolfSSL 14:167253f4e170 9730 * out Buffer to hold big-endian bytes of exponentiation result.
wolfSSL 14:167253f4e170 9731 * Must be at least 256 bytes long.
wolfSSL 14:167253f4e170 9732 * outLen Number of bytes in result.
wolfSSL 14:167253f4e170 9733 * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
wolfSSL 14:167253f4e170 9734 * an array is too long and MEMORY_E when dynamic memory allocation fails.
wolfSSL 14:167253f4e170 9735 */
wolfSSL 14:167253f4e170 9736 int sp_RsaPrivate_2048(const byte* in, word32 inLen, mp_int* dm,
wolfSSL 14:167253f4e170 9737 mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
wolfSSL 14:167253f4e170 9738 byte* out, word32* outLen)
wolfSSL 14:167253f4e170 9739 {
wolfSSL 14:167253f4e170 9740 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 9741 sp_digit ad[32 * 2];
wolfSSL 14:167253f4e170 9742 sp_digit pd[16], qd[16], dpd[16];
wolfSSL 14:167253f4e170 9743 sp_digit tmpad[32], tmpbd[32];
wolfSSL 14:167253f4e170 9744 #else
wolfSSL 14:167253f4e170 9745 sp_digit* t = NULL;
wolfSSL 14:167253f4e170 9746 #endif
wolfSSL 14:167253f4e170 9747 sp_digit* a;
wolfSSL 14:167253f4e170 9748 sp_digit* p;
wolfSSL 14:167253f4e170 9749 sp_digit* q;
wolfSSL 14:167253f4e170 9750 sp_digit* dp;
wolfSSL 14:167253f4e170 9751 sp_digit* dq;
wolfSSL 14:167253f4e170 9752 sp_digit* qi;
wolfSSL 14:167253f4e170 9753 sp_digit* tmp;
wolfSSL 14:167253f4e170 9754 sp_digit* tmpa;
wolfSSL 14:167253f4e170 9755 sp_digit* tmpb;
wolfSSL 14:167253f4e170 9756 sp_digit* r;
wolfSSL 14:167253f4e170 9757 sp_digit c;
wolfSSL 14:167253f4e170 9758 int err = MP_OKAY;
wolfSSL 14:167253f4e170 9759 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9760 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 9761 #endif
wolfSSL 14:167253f4e170 9762
wolfSSL 14:167253f4e170 9763 (void)dm;
wolfSSL 14:167253f4e170 9764 (void)mm;
wolfSSL 14:167253f4e170 9765
wolfSSL 14:167253f4e170 9766 if (*outLen < 256)
wolfSSL 14:167253f4e170 9767 err = MP_TO_E;
wolfSSL 14:167253f4e170 9768 if (err == MP_OKAY && (inLen > 256 || mp_count_bits(mm) != 2048))
wolfSSL 14:167253f4e170 9769 err = MP_READ_E;
wolfSSL 14:167253f4e170 9770
wolfSSL 14:167253f4e170 9771 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 9772 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9773 t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 16 * 11, NULL,
wolfSSL 14:167253f4e170 9774 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9775 if (t == NULL)
wolfSSL 14:167253f4e170 9776 err = MEMORY_E;
wolfSSL 14:167253f4e170 9777 }
wolfSSL 14:167253f4e170 9778 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9779 a = t;
wolfSSL 14:167253f4e170 9780 p = a + 32 * 2;
wolfSSL 14:167253f4e170 9781 q = p + 16;
wolfSSL 14:167253f4e170 9782 qi = dq = dp = q + 16;
wolfSSL 14:167253f4e170 9783 tmpa = qi + 16;
wolfSSL 14:167253f4e170 9784 tmpb = tmpa + 32;
wolfSSL 14:167253f4e170 9785
wolfSSL 14:167253f4e170 9786 tmp = t;
wolfSSL 14:167253f4e170 9787 r = tmp + 32;
wolfSSL 14:167253f4e170 9788 }
wolfSSL 14:167253f4e170 9789 #else
wolfSSL 14:167253f4e170 9790 r = a = ad;
wolfSSL 14:167253f4e170 9791 p = pd;
wolfSSL 14:167253f4e170 9792 q = qd;
wolfSSL 14:167253f4e170 9793 qi = dq = dp = dpd;
wolfSSL 14:167253f4e170 9794 tmpa = tmpad;
wolfSSL 14:167253f4e170 9795 tmpb = tmpbd;
wolfSSL 14:167253f4e170 9796 tmp = a + 32;
wolfSSL 14:167253f4e170 9797 #endif
wolfSSL 14:167253f4e170 9798
wolfSSL 14:167253f4e170 9799 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9800 sp_2048_from_bin(a, 32, in, inLen);
wolfSSL 14:167253f4e170 9801 sp_2048_from_mp(p, 16, pm);
wolfSSL 14:167253f4e170 9802 sp_2048_from_mp(q, 16, qm);
wolfSSL 14:167253f4e170 9803 sp_2048_from_mp(dp, 16, dpm);
wolfSSL 14:167253f4e170 9804
wolfSSL 14:167253f4e170 9805 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9806 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 9807 err = sp_2048_mod_exp_avx2_16(tmpa, a, dp, 1024, p, 1);
wolfSSL 14:167253f4e170 9808 else
wolfSSL 14:167253f4e170 9809 #endif
wolfSSL 14:167253f4e170 9810 err = sp_2048_mod_exp_16(tmpa, a, dp, 1024, p, 1);
wolfSSL 14:167253f4e170 9811 }
wolfSSL 14:167253f4e170 9812 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9813 sp_2048_from_mp(dq, 16, dqm);
wolfSSL 14:167253f4e170 9814 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9815 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 9816 err = sp_2048_mod_exp_avx2_16(tmpb, a, dq, 1024, q, 1);
wolfSSL 14:167253f4e170 9817 else
wolfSSL 14:167253f4e170 9818 #endif
wolfSSL 14:167253f4e170 9819 err = sp_2048_mod_exp_16(tmpb, a, dq, 1024, q, 1);
wolfSSL 14:167253f4e170 9820 }
wolfSSL 14:167253f4e170 9821
wolfSSL 14:167253f4e170 9822 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9823 c = sp_2048_sub_in_place_16(tmpa, tmpb);
wolfSSL 14:167253f4e170 9824 sp_2048_mask_16(tmp, p, c);
wolfSSL 14:167253f4e170 9825 sp_2048_add_16(tmpa, tmpa, tmp);
wolfSSL 14:167253f4e170 9826
wolfSSL 14:167253f4e170 9827 sp_2048_from_mp(qi, 16, qim);
wolfSSL 14:167253f4e170 9828 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9829 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 9830 sp_2048_mul_avx2_16(tmpa, tmpa, qi);
wolfSSL 14:167253f4e170 9831 else
wolfSSL 14:167253f4e170 9832 #endif
wolfSSL 14:167253f4e170 9833 sp_2048_mul_16(tmpa, tmpa, qi);
wolfSSL 14:167253f4e170 9834 err = sp_2048_mod_16(tmpa, tmpa, p);
wolfSSL 14:167253f4e170 9835 }
wolfSSL 14:167253f4e170 9836
wolfSSL 14:167253f4e170 9837 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9838 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9839 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 9840 sp_2048_mul_avx2_16(tmpa, q, tmpa);
wolfSSL 14:167253f4e170 9841 else
wolfSSL 14:167253f4e170 9842 #endif
wolfSSL 14:167253f4e170 9843 sp_2048_mul_16(tmpa, q, tmpa);
wolfSSL 14:167253f4e170 9844 XMEMSET(&tmpb[16], 0, sizeof(sp_digit) * 16);
wolfSSL 14:167253f4e170 9845 sp_2048_add_32(r, tmpb, tmpa);
wolfSSL 14:167253f4e170 9846
wolfSSL 14:167253f4e170 9847 sp_2048_to_bin(r, out);
wolfSSL 14:167253f4e170 9848 *outLen = 256;
wolfSSL 14:167253f4e170 9849 }
wolfSSL 14:167253f4e170 9850
wolfSSL 14:167253f4e170 9851 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 9852 if (t != NULL) {
wolfSSL 14:167253f4e170 9853 XMEMSET(t, 0, sizeof(sp_digit) * 16 * 11);
wolfSSL 14:167253f4e170 9854 XFREE(t, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 9855 }
wolfSSL 14:167253f4e170 9856 #else
wolfSSL 14:167253f4e170 9857 XMEMSET(tmpad, 0, sizeof(tmpad));
wolfSSL 14:167253f4e170 9858 XMEMSET(tmpbd, 0, sizeof(tmpbd));
wolfSSL 14:167253f4e170 9859 XMEMSET(pd, 0, sizeof(pd));
wolfSSL 14:167253f4e170 9860 XMEMSET(qd, 0, sizeof(qd));
wolfSSL 14:167253f4e170 9861 XMEMSET(dpd, 0, sizeof(dpd));
wolfSSL 14:167253f4e170 9862 #endif
wolfSSL 14:167253f4e170 9863
wolfSSL 14:167253f4e170 9864 return err;
wolfSSL 14:167253f4e170 9865 }
wolfSSL 14:167253f4e170 9866 #endif /* WOLFSSL_HAVE_SP_RSA */
wolfSSL 14:167253f4e170 9867 #ifdef WOLFSSL_HAVE_SP_DH
wolfSSL 14:167253f4e170 9868 /* Convert an array of sp_digit to an mp_int.
wolfSSL 14:167253f4e170 9869 *
wolfSSL 14:167253f4e170 9870 * a A single precision integer.
wolfSSL 14:167253f4e170 9871 * r A multi-precision integer.
wolfSSL 14:167253f4e170 9872 */
wolfSSL 14:167253f4e170 9873 static int sp_2048_to_mp(sp_digit* a, mp_int* r)
wolfSSL 14:167253f4e170 9874 {
wolfSSL 14:167253f4e170 9875 int err;
wolfSSL 14:167253f4e170 9876
wolfSSL 14:167253f4e170 9877 err = mp_grow(r, (2048 + DIGIT_BIT - 1) / DIGIT_BIT);
wolfSSL 14:167253f4e170 9878 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9879 #if DIGIT_BIT == 64
wolfSSL 14:167253f4e170 9880 XMEMCPY(r->dp, a, sizeof(sp_digit) * 32);
wolfSSL 14:167253f4e170 9881 r->used = 32;
wolfSSL 14:167253f4e170 9882 mp_clamp(r);
wolfSSL 14:167253f4e170 9883 #elif DIGIT_BIT < 64
wolfSSL 14:167253f4e170 9884 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 9885
wolfSSL 14:167253f4e170 9886 r->dp[0] = 0;
wolfSSL 14:167253f4e170 9887 for (i = 0; i < 32; i++) {
wolfSSL 14:167253f4e170 9888 r->dp[j] |= a[i] << s;
wolfSSL 14:167253f4e170 9889 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 9890 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 9891 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 9892 while (s + DIGIT_BIT <= 64) {
wolfSSL 14:167253f4e170 9893 s += DIGIT_BIT;
wolfSSL 14:167253f4e170 9894 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 9895 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 9896 }
wolfSSL 14:167253f4e170 9897 s = 64 - s;
wolfSSL 14:167253f4e170 9898 }
wolfSSL 14:167253f4e170 9899 r->used = (2048 + DIGIT_BIT - 1) / DIGIT_BIT;
wolfSSL 14:167253f4e170 9900 mp_clamp(r);
wolfSSL 14:167253f4e170 9901 #else
wolfSSL 14:167253f4e170 9902 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 9903
wolfSSL 14:167253f4e170 9904 r->dp[0] = 0;
wolfSSL 14:167253f4e170 9905 for (i = 0; i < 32; i++) {
wolfSSL 14:167253f4e170 9906 r->dp[j] |= ((mp_digit)a[i]) << s;
wolfSSL 14:167253f4e170 9907 if (s + 64 >= DIGIT_BIT) {
wolfSSL 14:167253f4e170 9908 #if DIGIT_BIT < 64
wolfSSL 14:167253f4e170 9909 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 9910 #endif
wolfSSL 14:167253f4e170 9911 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 9912 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 9913 s = 64 - s;
wolfSSL 14:167253f4e170 9914 }
wolfSSL 14:167253f4e170 9915 else
wolfSSL 14:167253f4e170 9916 s += 64;
wolfSSL 14:167253f4e170 9917 }
wolfSSL 14:167253f4e170 9918 r->used = (2048 + DIGIT_BIT - 1) / DIGIT_BIT;
wolfSSL 14:167253f4e170 9919 mp_clamp(r);
wolfSSL 14:167253f4e170 9920 #endif
wolfSSL 14:167253f4e170 9921 }
wolfSSL 14:167253f4e170 9922
wolfSSL 14:167253f4e170 9923 return err;
wolfSSL 14:167253f4e170 9924 }
wolfSSL 14:167253f4e170 9925
wolfSSL 14:167253f4e170 9926 /* Perform the modular exponentiation for Diffie-Hellman.
wolfSSL 14:167253f4e170 9927 *
wolfSSL 14:167253f4e170 9928 * base Base. MP integer.
wolfSSL 14:167253f4e170 9929 * exp Exponent. MP integer.
wolfSSL 14:167253f4e170 9930 * mod Modulus. MP integer.
wolfSSL 14:167253f4e170 9931 * res Result. MP integer.
wolfSSL 14:167253f4e170 9932 * returs 0 on success, MP_READ_E if there are too many bytes in an array
wolfSSL 14:167253f4e170 9933 * and MEMORY_E if memory allocation fails.
wolfSSL 14:167253f4e170 9934 */
wolfSSL 14:167253f4e170 9935 int sp_ModExp_2048(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
wolfSSL 14:167253f4e170 9936 {
wolfSSL 14:167253f4e170 9937 int err = MP_OKAY;
wolfSSL 14:167253f4e170 9938 sp_digit b[64], e[32], m[32];
wolfSSL 14:167253f4e170 9939 sp_digit* r = b;
wolfSSL 14:167253f4e170 9940 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9941 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 9942 #endif
wolfSSL 14:167253f4e170 9943 int expBits = mp_count_bits(exp);
wolfSSL 14:167253f4e170 9944
wolfSSL 14:167253f4e170 9945 if (mp_count_bits(base) > 2048 || expBits > 2048 ||
wolfSSL 14:167253f4e170 9946 mp_count_bits(mod) != 2048) {
wolfSSL 14:167253f4e170 9947 err = MP_READ_E;
wolfSSL 14:167253f4e170 9948 }
wolfSSL 14:167253f4e170 9949
wolfSSL 14:167253f4e170 9950 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9951 sp_2048_from_mp(b, 32, base);
wolfSSL 14:167253f4e170 9952 sp_2048_from_mp(e, 32, exp);
wolfSSL 14:167253f4e170 9953 sp_2048_from_mp(m, 32, mod);
wolfSSL 14:167253f4e170 9954
wolfSSL 14:167253f4e170 9955 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9956 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 9957 err = sp_2048_mod_exp_avx2_32(r, b, e, expBits, m, 0);
wolfSSL 14:167253f4e170 9958 else
wolfSSL 14:167253f4e170 9959 #endif
wolfSSL 14:167253f4e170 9960 err = sp_2048_mod_exp_32(r, b, e, expBits, m, 0);
wolfSSL 14:167253f4e170 9961 }
wolfSSL 14:167253f4e170 9962
wolfSSL 14:167253f4e170 9963 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 9964 err = sp_2048_to_mp(r, res);
wolfSSL 14:167253f4e170 9965 }
wolfSSL 14:167253f4e170 9966
wolfSSL 14:167253f4e170 9967 XMEMSET(e, 0, sizeof(e));
wolfSSL 14:167253f4e170 9968
wolfSSL 14:167253f4e170 9969 return err;
wolfSSL 14:167253f4e170 9970 }
wolfSSL 14:167253f4e170 9971
wolfSSL 14:167253f4e170 9972 /* Perform the modular exponentiation for Diffie-Hellman.
wolfSSL 14:167253f4e170 9973 *
wolfSSL 14:167253f4e170 9974 * base Base.
wolfSSL 14:167253f4e170 9975 * exp Array of bytes that is the exponent.
wolfSSL 14:167253f4e170 9976 * expLen Length of data, in bytes, in exponent.
wolfSSL 14:167253f4e170 9977 * mod Modulus.
wolfSSL 14:167253f4e170 9978 * out Buffer to hold big-endian bytes of exponentiation result.
wolfSSL 14:167253f4e170 9979 * Must be at least 256 bytes long.
wolfSSL 14:167253f4e170 9980 * outLen Length, in bytes, of exponentiation result.
wolfSSL 14:167253f4e170 9981 * returs 0 on success, MP_READ_E if there are too many bytes in an array
wolfSSL 14:167253f4e170 9982 * and MEMORY_E if memory allocation fails.
wolfSSL 14:167253f4e170 9983 */
wolfSSL 14:167253f4e170 9984 int sp_DhExp_2048(mp_int* base, const byte* exp, word32 expLen,
wolfSSL 14:167253f4e170 9985 mp_int* mod, byte* out, word32* outLen)
wolfSSL 14:167253f4e170 9986 {
wolfSSL 14:167253f4e170 9987 int err = MP_OKAY;
wolfSSL 14:167253f4e170 9988 sp_digit b[64], e[32], m[32];
wolfSSL 14:167253f4e170 9989 sp_digit* r = b;
wolfSSL 14:167253f4e170 9990 word32 i;
wolfSSL 14:167253f4e170 9991 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 9992 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 9993 #endif
wolfSSL 14:167253f4e170 9994
wolfSSL 14:167253f4e170 9995 if (mp_count_bits(base) > 2048 || expLen > 256 ||
wolfSSL 14:167253f4e170 9996 mp_count_bits(mod) != 2048) {
wolfSSL 14:167253f4e170 9997 err = MP_READ_E;
wolfSSL 14:167253f4e170 9998 }
wolfSSL 14:167253f4e170 9999
wolfSSL 14:167253f4e170 10000 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 10001 sp_2048_from_mp(b, 32, base);
wolfSSL 14:167253f4e170 10002 sp_2048_from_bin(e, 32, exp, expLen);
wolfSSL 14:167253f4e170 10003 sp_2048_from_mp(m, 32, mod);
wolfSSL 14:167253f4e170 10004
wolfSSL 14:167253f4e170 10005 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 10006 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 10007 err = sp_2048_mod_exp_avx2_32(r, b, e, expLen * 8, m, 0);
wolfSSL 14:167253f4e170 10008 else
wolfSSL 14:167253f4e170 10009 #endif
wolfSSL 14:167253f4e170 10010 err = sp_2048_mod_exp_32(r, b, e, expLen * 8, m, 0);
wolfSSL 14:167253f4e170 10011 }
wolfSSL 14:167253f4e170 10012
wolfSSL 14:167253f4e170 10013 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 10014 sp_2048_to_bin(r, out);
wolfSSL 14:167253f4e170 10015 *outLen = 256;
wolfSSL 14:167253f4e170 10016 for (i=0; i<256 && out[i] == 0; i++) {
wolfSSL 14:167253f4e170 10017 }
wolfSSL 14:167253f4e170 10018 *outLen -= i;
wolfSSL 14:167253f4e170 10019 XMEMMOVE(out, out + i, *outLen);
wolfSSL 14:167253f4e170 10020 }
wolfSSL 14:167253f4e170 10021
wolfSSL 14:167253f4e170 10022 XMEMSET(e, 0, sizeof(e));
wolfSSL 14:167253f4e170 10023
wolfSSL 14:167253f4e170 10024 return err;
wolfSSL 14:167253f4e170 10025 }
wolfSSL 14:167253f4e170 10026 #endif /* WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 10027
wolfSSL 14:167253f4e170 10028 #endif /* WOLFSSL_SP_NO_2048 */
wolfSSL 14:167253f4e170 10029
wolfSSL 14:167253f4e170 10030 #ifndef WOLFSSL_SP_NO_3072
wolfSSL 14:167253f4e170 10031 /* Read big endian unsigned byte aray into r.
wolfSSL 14:167253f4e170 10032 *
wolfSSL 14:167253f4e170 10033 * r A single precision integer.
wolfSSL 14:167253f4e170 10034 * a Byte array.
wolfSSL 14:167253f4e170 10035 * n Number of bytes in array to read.
wolfSSL 14:167253f4e170 10036 */
wolfSSL 14:167253f4e170 10037 static void sp_3072_from_bin(sp_digit* r, int max, const byte* a, int n)
wolfSSL 14:167253f4e170 10038 {
wolfSSL 14:167253f4e170 10039 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 10040
wolfSSL 14:167253f4e170 10041 r[0] = 0;
wolfSSL 14:167253f4e170 10042 for (i = n-1; i >= 0; i--) {
wolfSSL 14:167253f4e170 10043 r[j] |= ((sp_digit)a[i]) << s;
wolfSSL 14:167253f4e170 10044 if (s >= 56) {
wolfSSL 14:167253f4e170 10045 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 10046 s = 64 - s;
wolfSSL 14:167253f4e170 10047 if (j + 1 >= max)
wolfSSL 14:167253f4e170 10048 break;
wolfSSL 14:167253f4e170 10049 r[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 10050 s = 8 - s;
wolfSSL 14:167253f4e170 10051 }
wolfSSL 14:167253f4e170 10052 else
wolfSSL 14:167253f4e170 10053 s += 8;
wolfSSL 14:167253f4e170 10054 }
wolfSSL 14:167253f4e170 10055
wolfSSL 14:167253f4e170 10056 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 10057 r[j] = 0;
wolfSSL 14:167253f4e170 10058 }
wolfSSL 14:167253f4e170 10059
wolfSSL 14:167253f4e170 10060 /* Convert an mp_int to an array of sp_digit.
wolfSSL 14:167253f4e170 10061 *
wolfSSL 14:167253f4e170 10062 * r A single precision integer.
wolfSSL 14:167253f4e170 10063 * a A multi-precision integer.
wolfSSL 14:167253f4e170 10064 */
wolfSSL 14:167253f4e170 10065 static void sp_3072_from_mp(sp_digit* r, int max, mp_int* a)
wolfSSL 14:167253f4e170 10066 {
wolfSSL 14:167253f4e170 10067 #if DIGIT_BIT == 64
wolfSSL 14:167253f4e170 10068 int j;
wolfSSL 14:167253f4e170 10069
wolfSSL 14:167253f4e170 10070 XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
wolfSSL 14:167253f4e170 10071
wolfSSL 14:167253f4e170 10072 for (j = a->used; j < max; j++)
wolfSSL 14:167253f4e170 10073 r[j] = 0;
wolfSSL 14:167253f4e170 10074 #elif DIGIT_BIT > 64
wolfSSL 14:167253f4e170 10075 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 10076
wolfSSL 14:167253f4e170 10077 r[0] = 0;
wolfSSL 14:167253f4e170 10078 for (i = 0; i < a->used && j < max; i++) {
wolfSSL 14:167253f4e170 10079 r[j] |= a->dp[i] << s;
wolfSSL 14:167253f4e170 10080 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 10081 s = 64 - s;
wolfSSL 14:167253f4e170 10082 if (j + 1 >= max)
wolfSSL 14:167253f4e170 10083 break;
wolfSSL 14:167253f4e170 10084 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 10085 while (s + 64 <= DIGIT_BIT) {
wolfSSL 14:167253f4e170 10086 s += 64;
wolfSSL 14:167253f4e170 10087 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 10088 if (j + 1 >= max)
wolfSSL 14:167253f4e170 10089 break;
wolfSSL 14:167253f4e170 10090 if (s < DIGIT_BIT)
wolfSSL 14:167253f4e170 10091 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 10092 else
wolfSSL 14:167253f4e170 10093 r[++j] = 0;
wolfSSL 14:167253f4e170 10094 }
wolfSSL 14:167253f4e170 10095 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 10096 }
wolfSSL 14:167253f4e170 10097
wolfSSL 14:167253f4e170 10098 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 10099 r[j] = 0;
wolfSSL 14:167253f4e170 10100 #else
wolfSSL 14:167253f4e170 10101 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 10102
wolfSSL 14:167253f4e170 10103 r[0] = 0;
wolfSSL 14:167253f4e170 10104 for (i = 0; i < a->used && j < max; i++) {
wolfSSL 14:167253f4e170 10105 r[j] |= ((sp_digit)a->dp[i]) << s;
wolfSSL 14:167253f4e170 10106 if (s + DIGIT_BIT >= 64) {
wolfSSL 14:167253f4e170 10107 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 10108 if (j + 1 >= max)
wolfSSL 14:167253f4e170 10109 break;
wolfSSL 14:167253f4e170 10110 s = 64 - s;
wolfSSL 14:167253f4e170 10111 if (s == DIGIT_BIT) {
wolfSSL 14:167253f4e170 10112 r[++j] = 0;
wolfSSL 14:167253f4e170 10113 s = 0;
wolfSSL 14:167253f4e170 10114 }
wolfSSL 14:167253f4e170 10115 else {
wolfSSL 14:167253f4e170 10116 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 10117 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 10118 }
wolfSSL 14:167253f4e170 10119 }
wolfSSL 14:167253f4e170 10120 else
wolfSSL 14:167253f4e170 10121 s += DIGIT_BIT;
wolfSSL 14:167253f4e170 10122 }
wolfSSL 14:167253f4e170 10123
wolfSSL 14:167253f4e170 10124 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 10125 r[j] = 0;
wolfSSL 14:167253f4e170 10126 #endif
wolfSSL 14:167253f4e170 10127 }
wolfSSL 14:167253f4e170 10128
wolfSSL 14:167253f4e170 10129 /* Write r as big endian to byte aray.
wolfSSL 14:167253f4e170 10130 * Fixed length number of bytes written: 384
wolfSSL 14:167253f4e170 10131 *
wolfSSL 14:167253f4e170 10132 * r A single precision integer.
wolfSSL 14:167253f4e170 10133 * a Byte array.
wolfSSL 14:167253f4e170 10134 */
wolfSSL 14:167253f4e170 10135 static void sp_3072_to_bin(sp_digit* r, byte* a)
wolfSSL 14:167253f4e170 10136 {
wolfSSL 14:167253f4e170 10137 int i, j, s = 0, b;
wolfSSL 14:167253f4e170 10138
wolfSSL 14:167253f4e170 10139 j = 3072 / 8 - 1;
wolfSSL 14:167253f4e170 10140 a[j] = 0;
wolfSSL 14:167253f4e170 10141 for (i=0; i<48 && j>=0; i++) {
wolfSSL 14:167253f4e170 10142 b = 0;
wolfSSL 14:167253f4e170 10143 a[j--] |= r[i] << s; b += 8 - s;
wolfSSL 14:167253f4e170 10144 if (j < 0)
wolfSSL 14:167253f4e170 10145 break;
wolfSSL 14:167253f4e170 10146 while (b < 64) {
wolfSSL 14:167253f4e170 10147 a[j--] = r[i] >> b; b += 8;
wolfSSL 14:167253f4e170 10148 if (j < 0)
wolfSSL 14:167253f4e170 10149 break;
wolfSSL 14:167253f4e170 10150 }
wolfSSL 14:167253f4e170 10151 s = 8 - (b - 64);
wolfSSL 14:167253f4e170 10152 if (j >= 0)
wolfSSL 14:167253f4e170 10153 a[j] = 0;
wolfSSL 14:167253f4e170 10154 if (s != 0)
wolfSSL 14:167253f4e170 10155 j++;
wolfSSL 14:167253f4e170 10156 }
wolfSSL 14:167253f4e170 10157 }
wolfSSL 14:167253f4e170 10158
wolfSSL 14:167253f4e170 10159 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 10160 *
wolfSSL 14:167253f4e170 10161 * r A single precision integer.
wolfSSL 14:167253f4e170 10162 * a A single precision integer.
wolfSSL 14:167253f4e170 10163 * b A single precision integer.
wolfSSL 14:167253f4e170 10164 */
wolfSSL 14:167253f4e170 10165 SP_NOINLINE static void sp_3072_mul_24(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 10166 const sp_digit* b)
wolfSSL 14:167253f4e170 10167 {
wolfSSL 14:167253f4e170 10168 sp_digit tmp[24];
wolfSSL 14:167253f4e170 10169
wolfSSL 14:167253f4e170 10170 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 10171 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 10172 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10173 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10174 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 10175 "movq %%rax, (%[tmp])\n\t"
wolfSSL 14:167253f4e170 10176 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10177 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 10178 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10179 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10180 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10181 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10182 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10183 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10184 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 10185 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10186 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10187 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10188 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10189 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10190 "movq %%rcx, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10191 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 10192 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10193 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10194 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10195 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10196 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10197 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10198 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 10199 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10200 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10201 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10202 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10203 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10204 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 10205 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10206 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10207 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10208 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10209 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10210 "movq %%r8, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10211 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 10212 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10213 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10214 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 10215 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10216 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10217 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10218 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 10219 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10220 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10221 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10222 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10223 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10224 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 10225 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10226 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10227 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10228 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10229 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10230 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 10231 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10232 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10233 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10234 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10235 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10236 "movq %%rbx, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10237 "# A[0] * B[4]\n\t"
wolfSSL 14:167253f4e170 10238 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10239 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10240 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10241 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10242 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10243 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10244 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 10245 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10246 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10247 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10248 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10249 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10250 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 10251 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10252 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10253 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10254 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10255 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10256 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 10257 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10258 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10259 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10260 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10261 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10262 "# A[4] * B[0]\n\t"
wolfSSL 14:167253f4e170 10263 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10264 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10265 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10266 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10267 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10268 "movq %%rcx, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10269 "# A[0] * B[5]\n\t"
wolfSSL 14:167253f4e170 10270 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10271 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10272 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10273 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10274 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10275 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10276 "# A[1] * B[4]\n\t"
wolfSSL 14:167253f4e170 10277 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10278 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10279 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10280 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10281 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10282 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 10283 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10284 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10285 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10286 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10287 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10288 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 10289 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10290 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10291 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10292 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10293 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10294 "# A[4] * B[1]\n\t"
wolfSSL 14:167253f4e170 10295 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10296 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10297 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10298 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10299 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10300 "# A[5] * B[0]\n\t"
wolfSSL 14:167253f4e170 10301 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10302 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10303 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10304 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10305 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10306 "movq %%r8, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10307 "# A[0] * B[6]\n\t"
wolfSSL 14:167253f4e170 10308 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10309 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10310 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 10311 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10312 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10313 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10314 "# A[1] * B[5]\n\t"
wolfSSL 14:167253f4e170 10315 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10316 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10317 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10318 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10319 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10320 "# A[2] * B[4]\n\t"
wolfSSL 14:167253f4e170 10321 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10322 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10323 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10324 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10325 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10326 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 10327 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10328 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10329 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10330 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10331 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10332 "# A[4] * B[2]\n\t"
wolfSSL 14:167253f4e170 10333 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10334 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10335 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10336 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10337 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10338 "# A[5] * B[1]\n\t"
wolfSSL 14:167253f4e170 10339 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10340 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10341 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10342 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10343 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10344 "# A[6] * B[0]\n\t"
wolfSSL 14:167253f4e170 10345 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10346 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10347 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10348 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10349 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10350 "movq %%rbx, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10351 "# A[0] * B[7]\n\t"
wolfSSL 14:167253f4e170 10352 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10353 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10354 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10355 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10356 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10357 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10358 "# A[1] * B[6]\n\t"
wolfSSL 14:167253f4e170 10359 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10360 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10361 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10362 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10363 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10364 "# A[2] * B[5]\n\t"
wolfSSL 14:167253f4e170 10365 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10366 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10367 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10368 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10369 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10370 "# A[3] * B[4]\n\t"
wolfSSL 14:167253f4e170 10371 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10372 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10373 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10374 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10375 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10376 "# A[4] * B[3]\n\t"
wolfSSL 14:167253f4e170 10377 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10378 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10379 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10380 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10381 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10382 "# A[5] * B[2]\n\t"
wolfSSL 14:167253f4e170 10383 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10384 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10385 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10386 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10387 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10388 "# A[6] * B[1]\n\t"
wolfSSL 14:167253f4e170 10389 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10390 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10391 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10392 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10393 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10394 "# A[7] * B[0]\n\t"
wolfSSL 14:167253f4e170 10395 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10396 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10397 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10398 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10399 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10400 "movq %%rcx, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10401 "# A[0] * B[8]\n\t"
wolfSSL 14:167253f4e170 10402 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10403 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10404 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10405 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10406 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10407 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10408 "# A[1] * B[7]\n\t"
wolfSSL 14:167253f4e170 10409 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10410 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10411 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10412 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10413 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10414 "# A[2] * B[6]\n\t"
wolfSSL 14:167253f4e170 10415 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10416 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10417 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10418 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10419 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10420 "# A[3] * B[5]\n\t"
wolfSSL 14:167253f4e170 10421 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10422 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10423 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10424 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10425 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10426 "# A[4] * B[4]\n\t"
wolfSSL 14:167253f4e170 10427 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10428 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10429 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10430 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10431 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10432 "# A[5] * B[3]\n\t"
wolfSSL 14:167253f4e170 10433 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10434 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10435 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10436 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10437 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10438 "# A[6] * B[2]\n\t"
wolfSSL 14:167253f4e170 10439 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10440 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10441 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10442 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10443 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10444 "# A[7] * B[1]\n\t"
wolfSSL 14:167253f4e170 10445 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10446 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10447 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10448 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10449 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10450 "# A[8] * B[0]\n\t"
wolfSSL 14:167253f4e170 10451 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10452 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10453 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10454 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10455 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10456 "movq %%r8, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10457 "# A[0] * B[9]\n\t"
wolfSSL 14:167253f4e170 10458 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10459 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10460 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 10461 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10462 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10463 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10464 "# A[1] * B[8]\n\t"
wolfSSL 14:167253f4e170 10465 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10466 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10467 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10468 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10469 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10470 "# A[2] * B[7]\n\t"
wolfSSL 14:167253f4e170 10471 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10472 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10473 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10474 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10475 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10476 "# A[3] * B[6]\n\t"
wolfSSL 14:167253f4e170 10477 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10478 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10479 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10480 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10481 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10482 "# A[4] * B[5]\n\t"
wolfSSL 14:167253f4e170 10483 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10484 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10485 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10486 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10487 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10488 "# A[5] * B[4]\n\t"
wolfSSL 14:167253f4e170 10489 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10490 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10491 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10492 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10493 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10494 "# A[6] * B[3]\n\t"
wolfSSL 14:167253f4e170 10495 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10496 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10497 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10498 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10499 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10500 "# A[7] * B[2]\n\t"
wolfSSL 14:167253f4e170 10501 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10502 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10503 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10504 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10505 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10506 "# A[8] * B[1]\n\t"
wolfSSL 14:167253f4e170 10507 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10508 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10509 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10510 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10511 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10512 "# A[9] * B[0]\n\t"
wolfSSL 14:167253f4e170 10513 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10514 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10515 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10516 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10517 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10518 "movq %%rbx, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10519 "# A[0] * B[10]\n\t"
wolfSSL 14:167253f4e170 10520 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10521 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10522 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10523 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10524 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10525 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10526 "# A[1] * B[9]\n\t"
wolfSSL 14:167253f4e170 10527 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10528 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10529 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10530 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10531 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10532 "# A[2] * B[8]\n\t"
wolfSSL 14:167253f4e170 10533 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10534 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10535 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10536 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10537 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10538 "# A[3] * B[7]\n\t"
wolfSSL 14:167253f4e170 10539 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10540 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10541 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10542 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10543 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10544 "# A[4] * B[6]\n\t"
wolfSSL 14:167253f4e170 10545 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10546 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10547 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10548 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10549 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10550 "# A[5] * B[5]\n\t"
wolfSSL 14:167253f4e170 10551 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10552 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10553 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10554 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10555 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10556 "# A[6] * B[4]\n\t"
wolfSSL 14:167253f4e170 10557 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10558 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10559 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10560 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10561 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10562 "# A[7] * B[3]\n\t"
wolfSSL 14:167253f4e170 10563 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10564 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10565 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10566 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10567 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10568 "# A[8] * B[2]\n\t"
wolfSSL 14:167253f4e170 10569 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10570 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10571 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10572 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10573 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10574 "# A[9] * B[1]\n\t"
wolfSSL 14:167253f4e170 10575 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10576 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10577 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10578 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10579 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10580 "# A[10] * B[0]\n\t"
wolfSSL 14:167253f4e170 10581 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10582 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 10583 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10584 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10585 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10586 "movq %%rcx, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10587 "# A[0] * B[11]\n\t"
wolfSSL 14:167253f4e170 10588 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10589 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10590 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10591 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10592 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10593 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10594 "# A[1] * B[10]\n\t"
wolfSSL 14:167253f4e170 10595 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10596 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10597 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10598 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10599 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10600 "# A[2] * B[9]\n\t"
wolfSSL 14:167253f4e170 10601 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10602 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10603 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10604 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10605 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10606 "# A[3] * B[8]\n\t"
wolfSSL 14:167253f4e170 10607 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10608 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10609 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10610 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10611 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10612 "# A[4] * B[7]\n\t"
wolfSSL 14:167253f4e170 10613 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10614 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10615 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10616 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10617 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10618 "# A[5] * B[6]\n\t"
wolfSSL 14:167253f4e170 10619 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10620 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10621 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10622 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10623 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10624 "# A[6] * B[5]\n\t"
wolfSSL 14:167253f4e170 10625 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10626 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10627 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10628 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10629 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10630 "# A[7] * B[4]\n\t"
wolfSSL 14:167253f4e170 10631 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10632 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10633 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10634 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10635 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10636 "# A[8] * B[3]\n\t"
wolfSSL 14:167253f4e170 10637 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10638 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10639 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10640 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10641 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10642 "# A[9] * B[2]\n\t"
wolfSSL 14:167253f4e170 10643 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10644 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10645 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10646 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10647 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10648 "# A[10] * B[1]\n\t"
wolfSSL 14:167253f4e170 10649 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10650 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 10651 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10652 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10653 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10654 "# A[11] * B[0]\n\t"
wolfSSL 14:167253f4e170 10655 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10656 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 10657 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10658 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10659 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10660 "movq %%r8, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10661 "# A[0] * B[12]\n\t"
wolfSSL 14:167253f4e170 10662 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10663 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10664 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 10665 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10666 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10667 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10668 "# A[1] * B[11]\n\t"
wolfSSL 14:167253f4e170 10669 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10670 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10671 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10672 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10673 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10674 "# A[2] * B[10]\n\t"
wolfSSL 14:167253f4e170 10675 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10676 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10677 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10678 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10679 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10680 "# A[3] * B[9]\n\t"
wolfSSL 14:167253f4e170 10681 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10682 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10683 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10684 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10685 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10686 "# A[4] * B[8]\n\t"
wolfSSL 14:167253f4e170 10687 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10688 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10689 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10690 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10691 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10692 "# A[5] * B[7]\n\t"
wolfSSL 14:167253f4e170 10693 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10694 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10695 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10696 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10697 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10698 "# A[6] * B[6]\n\t"
wolfSSL 14:167253f4e170 10699 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10700 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10701 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10702 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10703 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10704 "# A[7] * B[5]\n\t"
wolfSSL 14:167253f4e170 10705 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10706 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10707 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10708 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10709 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10710 "# A[8] * B[4]\n\t"
wolfSSL 14:167253f4e170 10711 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10712 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10713 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10714 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10715 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10716 "# A[9] * B[3]\n\t"
wolfSSL 14:167253f4e170 10717 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10718 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10719 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10720 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10721 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10722 "# A[10] * B[2]\n\t"
wolfSSL 14:167253f4e170 10723 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10724 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 10725 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10726 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10727 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10728 "# A[11] * B[1]\n\t"
wolfSSL 14:167253f4e170 10729 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10730 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 10731 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10732 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10733 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10734 "# A[12] * B[0]\n\t"
wolfSSL 14:167253f4e170 10735 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10736 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 10737 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10738 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10739 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10740 "movq %%rbx, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10741 "# A[0] * B[13]\n\t"
wolfSSL 14:167253f4e170 10742 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10743 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10744 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10745 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10746 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10747 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10748 "# A[1] * B[12]\n\t"
wolfSSL 14:167253f4e170 10749 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10750 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10751 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10752 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10753 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10754 "# A[2] * B[11]\n\t"
wolfSSL 14:167253f4e170 10755 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10756 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10757 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10758 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10759 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10760 "# A[3] * B[10]\n\t"
wolfSSL 14:167253f4e170 10761 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10762 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10763 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10764 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10765 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10766 "# A[4] * B[9]\n\t"
wolfSSL 14:167253f4e170 10767 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10768 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10769 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10770 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10771 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10772 "# A[5] * B[8]\n\t"
wolfSSL 14:167253f4e170 10773 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10774 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10775 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10776 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10777 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10778 "# A[6] * B[7]\n\t"
wolfSSL 14:167253f4e170 10779 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10780 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10781 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10782 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10783 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10784 "# A[7] * B[6]\n\t"
wolfSSL 14:167253f4e170 10785 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10786 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10787 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10788 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10789 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10790 "# A[8] * B[5]\n\t"
wolfSSL 14:167253f4e170 10791 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10792 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10793 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10794 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10795 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10796 "# A[9] * B[4]\n\t"
wolfSSL 14:167253f4e170 10797 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10798 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10799 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10800 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10801 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10802 "# A[10] * B[3]\n\t"
wolfSSL 14:167253f4e170 10803 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10804 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 10805 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10806 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10807 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10808 "# A[11] * B[2]\n\t"
wolfSSL 14:167253f4e170 10809 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10810 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 10811 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10812 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10813 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10814 "# A[12] * B[1]\n\t"
wolfSSL 14:167253f4e170 10815 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10816 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 10817 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10818 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10819 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10820 "# A[13] * B[0]\n\t"
wolfSSL 14:167253f4e170 10821 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10822 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 10823 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 10824 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 10825 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 10826 "movq %%rcx, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10827 "# A[0] * B[14]\n\t"
wolfSSL 14:167253f4e170 10828 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10829 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10830 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10831 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10832 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10833 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10834 "# A[1] * B[13]\n\t"
wolfSSL 14:167253f4e170 10835 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10836 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10837 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10838 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10839 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10840 "# A[2] * B[12]\n\t"
wolfSSL 14:167253f4e170 10841 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10842 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10843 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10844 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10845 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10846 "# A[3] * B[11]\n\t"
wolfSSL 14:167253f4e170 10847 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10848 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10849 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10850 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10851 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10852 "# A[4] * B[10]\n\t"
wolfSSL 14:167253f4e170 10853 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10854 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10855 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10856 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10857 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10858 "# A[5] * B[9]\n\t"
wolfSSL 14:167253f4e170 10859 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10860 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10861 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10862 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10863 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10864 "# A[6] * B[8]\n\t"
wolfSSL 14:167253f4e170 10865 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10866 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10867 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10868 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10869 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10870 "# A[7] * B[7]\n\t"
wolfSSL 14:167253f4e170 10871 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10872 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10873 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10874 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10875 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10876 "# A[8] * B[6]\n\t"
wolfSSL 14:167253f4e170 10877 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10878 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10879 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10880 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10881 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10882 "# A[9] * B[5]\n\t"
wolfSSL 14:167253f4e170 10883 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10884 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10885 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10886 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10887 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10888 "# A[10] * B[4]\n\t"
wolfSSL 14:167253f4e170 10889 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10890 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 10891 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10892 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10893 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10894 "# A[11] * B[3]\n\t"
wolfSSL 14:167253f4e170 10895 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10896 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 10897 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10898 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10899 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10900 "# A[12] * B[2]\n\t"
wolfSSL 14:167253f4e170 10901 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10902 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 10903 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10904 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10905 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10906 "# A[13] * B[1]\n\t"
wolfSSL 14:167253f4e170 10907 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10908 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 10909 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10910 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10911 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10912 "# A[14] * B[0]\n\t"
wolfSSL 14:167253f4e170 10913 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10914 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 10915 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 10916 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 10917 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 10918 "movq %%r8, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 10919 "# A[0] * B[15]\n\t"
wolfSSL 14:167253f4e170 10920 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10921 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 10922 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 10923 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10924 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10925 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10926 "# A[1] * B[14]\n\t"
wolfSSL 14:167253f4e170 10927 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10928 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 10929 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10930 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10931 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10932 "# A[2] * B[13]\n\t"
wolfSSL 14:167253f4e170 10933 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10934 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 10935 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10936 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10937 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10938 "# A[3] * B[12]\n\t"
wolfSSL 14:167253f4e170 10939 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10940 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 10941 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10942 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10943 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10944 "# A[4] * B[11]\n\t"
wolfSSL 14:167253f4e170 10945 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10946 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 10947 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10948 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10949 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10950 "# A[5] * B[10]\n\t"
wolfSSL 14:167253f4e170 10951 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10952 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 10953 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10954 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10955 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10956 "# A[6] * B[9]\n\t"
wolfSSL 14:167253f4e170 10957 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10958 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 10959 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10960 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10961 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10962 "# A[7] * B[8]\n\t"
wolfSSL 14:167253f4e170 10963 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10964 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 10965 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10966 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10967 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10968 "# A[8] * B[7]\n\t"
wolfSSL 14:167253f4e170 10969 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10970 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 10971 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10972 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10973 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10974 "# A[9] * B[6]\n\t"
wolfSSL 14:167253f4e170 10975 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10976 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 10977 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10978 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10979 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10980 "# A[10] * B[5]\n\t"
wolfSSL 14:167253f4e170 10981 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10982 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 10983 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10984 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10985 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10986 "# A[11] * B[4]\n\t"
wolfSSL 14:167253f4e170 10987 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10988 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 10989 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10990 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10991 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10992 "# A[12] * B[3]\n\t"
wolfSSL 14:167253f4e170 10993 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 10994 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 10995 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 10996 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 10997 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 10998 "# A[13] * B[2]\n\t"
wolfSSL 14:167253f4e170 10999 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11000 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11001 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11002 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11003 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11004 "# A[14] * B[1]\n\t"
wolfSSL 14:167253f4e170 11005 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11006 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11007 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11008 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11009 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11010 "# A[15] * B[0]\n\t"
wolfSSL 14:167253f4e170 11011 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11012 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11013 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11014 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11015 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11016 "movq %%rbx, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11017 "# A[0] * B[16]\n\t"
wolfSSL 14:167253f4e170 11018 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11019 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11020 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11021 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11022 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11023 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11024 "# A[1] * B[15]\n\t"
wolfSSL 14:167253f4e170 11025 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11026 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11027 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11028 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11029 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11030 "# A[2] * B[14]\n\t"
wolfSSL 14:167253f4e170 11031 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11032 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11033 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11034 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11035 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11036 "# A[3] * B[13]\n\t"
wolfSSL 14:167253f4e170 11037 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11038 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11039 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11040 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11041 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11042 "# A[4] * B[12]\n\t"
wolfSSL 14:167253f4e170 11043 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11044 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11045 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11046 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11047 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11048 "# A[5] * B[11]\n\t"
wolfSSL 14:167253f4e170 11049 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11050 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11051 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11052 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11053 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11054 "# A[6] * B[10]\n\t"
wolfSSL 14:167253f4e170 11055 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11056 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11057 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11058 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11059 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11060 "# A[7] * B[9]\n\t"
wolfSSL 14:167253f4e170 11061 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11062 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11063 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11064 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11065 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11066 "# A[8] * B[8]\n\t"
wolfSSL 14:167253f4e170 11067 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11068 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11069 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11070 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11071 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11072 "# A[9] * B[7]\n\t"
wolfSSL 14:167253f4e170 11073 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11074 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11075 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11076 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11077 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11078 "# A[10] * B[6]\n\t"
wolfSSL 14:167253f4e170 11079 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11080 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11081 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11082 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11083 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11084 "# A[11] * B[5]\n\t"
wolfSSL 14:167253f4e170 11085 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11086 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11087 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11088 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11089 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11090 "# A[12] * B[4]\n\t"
wolfSSL 14:167253f4e170 11091 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11092 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11093 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11094 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11095 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11096 "# A[13] * B[3]\n\t"
wolfSSL 14:167253f4e170 11097 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11098 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11099 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11100 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11101 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11102 "# A[14] * B[2]\n\t"
wolfSSL 14:167253f4e170 11103 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11104 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11105 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11106 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11107 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11108 "# A[15] * B[1]\n\t"
wolfSSL 14:167253f4e170 11109 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11110 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11111 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11112 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11113 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11114 "# A[16] * B[0]\n\t"
wolfSSL 14:167253f4e170 11115 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11116 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11117 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11118 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11119 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11120 "movq %%rcx, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11121 "# A[0] * B[17]\n\t"
wolfSSL 14:167253f4e170 11122 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11123 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11124 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11125 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11126 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11127 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11128 "# A[1] * B[16]\n\t"
wolfSSL 14:167253f4e170 11129 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11130 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11131 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11132 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11133 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11134 "# A[2] * B[15]\n\t"
wolfSSL 14:167253f4e170 11135 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11136 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11137 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11138 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11139 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11140 "# A[3] * B[14]\n\t"
wolfSSL 14:167253f4e170 11141 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11142 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11143 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11144 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11145 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11146 "# A[4] * B[13]\n\t"
wolfSSL 14:167253f4e170 11147 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11148 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11149 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11150 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11151 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11152 "# A[5] * B[12]\n\t"
wolfSSL 14:167253f4e170 11153 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11154 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11155 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11156 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11157 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11158 "# A[6] * B[11]\n\t"
wolfSSL 14:167253f4e170 11159 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11160 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11161 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11162 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11163 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11164 "# A[7] * B[10]\n\t"
wolfSSL 14:167253f4e170 11165 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11166 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11167 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11168 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11169 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11170 "# A[8] * B[9]\n\t"
wolfSSL 14:167253f4e170 11171 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11172 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11173 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11174 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11175 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11176 "# A[9] * B[8]\n\t"
wolfSSL 14:167253f4e170 11177 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11178 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11179 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11180 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11181 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11182 "# A[10] * B[7]\n\t"
wolfSSL 14:167253f4e170 11183 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11184 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11185 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11186 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11187 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11188 "# A[11] * B[6]\n\t"
wolfSSL 14:167253f4e170 11189 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11190 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11191 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11192 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11193 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11194 "# A[12] * B[5]\n\t"
wolfSSL 14:167253f4e170 11195 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11196 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11197 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11198 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11199 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11200 "# A[13] * B[4]\n\t"
wolfSSL 14:167253f4e170 11201 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11202 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11203 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11204 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11205 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11206 "# A[14] * B[3]\n\t"
wolfSSL 14:167253f4e170 11207 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11208 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11209 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11210 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11211 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11212 "# A[15] * B[2]\n\t"
wolfSSL 14:167253f4e170 11213 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11214 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11215 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11216 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11217 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11218 "# A[16] * B[1]\n\t"
wolfSSL 14:167253f4e170 11219 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11220 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11221 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11222 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11223 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11224 "# A[17] * B[0]\n\t"
wolfSSL 14:167253f4e170 11225 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11226 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11227 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11228 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11229 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11230 "movq %%r8, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11231 "# A[0] * B[18]\n\t"
wolfSSL 14:167253f4e170 11232 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11233 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11234 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 11235 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11236 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11237 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11238 "# A[1] * B[17]\n\t"
wolfSSL 14:167253f4e170 11239 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11240 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11241 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11242 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11243 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11244 "# A[2] * B[16]\n\t"
wolfSSL 14:167253f4e170 11245 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11246 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11247 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11248 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11249 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11250 "# A[3] * B[15]\n\t"
wolfSSL 14:167253f4e170 11251 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11252 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11253 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11254 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11255 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11256 "# A[4] * B[14]\n\t"
wolfSSL 14:167253f4e170 11257 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11258 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11259 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11260 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11261 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11262 "# A[5] * B[13]\n\t"
wolfSSL 14:167253f4e170 11263 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11264 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11265 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11266 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11267 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11268 "# A[6] * B[12]\n\t"
wolfSSL 14:167253f4e170 11269 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11270 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11271 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11272 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11273 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11274 "# A[7] * B[11]\n\t"
wolfSSL 14:167253f4e170 11275 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11276 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11277 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11278 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11279 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11280 "# A[8] * B[10]\n\t"
wolfSSL 14:167253f4e170 11281 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11282 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11283 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11284 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11285 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11286 "# A[9] * B[9]\n\t"
wolfSSL 14:167253f4e170 11287 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11288 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11289 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11290 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11291 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11292 "# A[10] * B[8]\n\t"
wolfSSL 14:167253f4e170 11293 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11294 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11295 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11296 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11297 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11298 "# A[11] * B[7]\n\t"
wolfSSL 14:167253f4e170 11299 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11300 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11301 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11302 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11303 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11304 "# A[12] * B[6]\n\t"
wolfSSL 14:167253f4e170 11305 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11306 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11307 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11308 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11309 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11310 "# A[13] * B[5]\n\t"
wolfSSL 14:167253f4e170 11311 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11312 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11313 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11314 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11315 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11316 "# A[14] * B[4]\n\t"
wolfSSL 14:167253f4e170 11317 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11318 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11319 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11320 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11321 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11322 "# A[15] * B[3]\n\t"
wolfSSL 14:167253f4e170 11323 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11324 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11325 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11326 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11327 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11328 "# A[16] * B[2]\n\t"
wolfSSL 14:167253f4e170 11329 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11330 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11331 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11332 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11333 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11334 "# A[17] * B[1]\n\t"
wolfSSL 14:167253f4e170 11335 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11336 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11337 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11338 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11339 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11340 "# A[18] * B[0]\n\t"
wolfSSL 14:167253f4e170 11341 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11342 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 11343 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11344 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11345 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11346 "movq %%rbx, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11347 "# A[0] * B[19]\n\t"
wolfSSL 14:167253f4e170 11348 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11349 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11350 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11351 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11352 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11353 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11354 "# A[1] * B[18]\n\t"
wolfSSL 14:167253f4e170 11355 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11356 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11357 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11358 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11359 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11360 "# A[2] * B[17]\n\t"
wolfSSL 14:167253f4e170 11361 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11362 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11363 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11364 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11365 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11366 "# A[3] * B[16]\n\t"
wolfSSL 14:167253f4e170 11367 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11368 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11369 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11370 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11371 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11372 "# A[4] * B[15]\n\t"
wolfSSL 14:167253f4e170 11373 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11374 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11375 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11376 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11377 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11378 "# A[5] * B[14]\n\t"
wolfSSL 14:167253f4e170 11379 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11380 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11381 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11382 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11383 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11384 "# A[6] * B[13]\n\t"
wolfSSL 14:167253f4e170 11385 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11386 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11387 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11388 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11389 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11390 "# A[7] * B[12]\n\t"
wolfSSL 14:167253f4e170 11391 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11392 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11393 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11394 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11395 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11396 "# A[8] * B[11]\n\t"
wolfSSL 14:167253f4e170 11397 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11398 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11399 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11400 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11401 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11402 "# A[9] * B[10]\n\t"
wolfSSL 14:167253f4e170 11403 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11404 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11405 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11406 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11407 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11408 "# A[10] * B[9]\n\t"
wolfSSL 14:167253f4e170 11409 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11410 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11411 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11412 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11413 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11414 "# A[11] * B[8]\n\t"
wolfSSL 14:167253f4e170 11415 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11416 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11417 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11418 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11419 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11420 "# A[12] * B[7]\n\t"
wolfSSL 14:167253f4e170 11421 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11422 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11423 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11424 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11425 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11426 "# A[13] * B[6]\n\t"
wolfSSL 14:167253f4e170 11427 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11428 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11429 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11430 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11431 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11432 "# A[14] * B[5]\n\t"
wolfSSL 14:167253f4e170 11433 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11434 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11435 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11436 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11437 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11438 "# A[15] * B[4]\n\t"
wolfSSL 14:167253f4e170 11439 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11440 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11441 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11442 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11443 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11444 "# A[16] * B[3]\n\t"
wolfSSL 14:167253f4e170 11445 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11446 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11447 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11448 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11449 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11450 "# A[17] * B[2]\n\t"
wolfSSL 14:167253f4e170 11451 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11452 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11453 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11454 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11455 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11456 "# A[18] * B[1]\n\t"
wolfSSL 14:167253f4e170 11457 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11458 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 11459 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11460 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11461 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11462 "# A[19] * B[0]\n\t"
wolfSSL 14:167253f4e170 11463 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11464 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 11465 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11466 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11467 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11468 "movq %%rcx, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11469 "# A[0] * B[20]\n\t"
wolfSSL 14:167253f4e170 11470 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11471 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11472 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11473 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11474 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11475 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11476 "# A[1] * B[19]\n\t"
wolfSSL 14:167253f4e170 11477 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11478 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11479 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11480 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11481 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11482 "# A[2] * B[18]\n\t"
wolfSSL 14:167253f4e170 11483 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11484 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11485 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11486 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11487 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11488 "# A[3] * B[17]\n\t"
wolfSSL 14:167253f4e170 11489 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11490 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11491 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11492 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11493 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11494 "# A[4] * B[16]\n\t"
wolfSSL 14:167253f4e170 11495 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11496 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11497 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11498 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11499 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11500 "# A[5] * B[15]\n\t"
wolfSSL 14:167253f4e170 11501 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11502 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11503 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11504 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11505 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11506 "# A[6] * B[14]\n\t"
wolfSSL 14:167253f4e170 11507 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11508 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11509 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11510 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11511 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11512 "# A[7] * B[13]\n\t"
wolfSSL 14:167253f4e170 11513 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11514 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11515 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11516 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11517 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11518 "# A[8] * B[12]\n\t"
wolfSSL 14:167253f4e170 11519 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11520 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11521 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11522 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11523 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11524 "# A[9] * B[11]\n\t"
wolfSSL 14:167253f4e170 11525 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11526 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11527 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11528 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11529 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11530 "# A[10] * B[10]\n\t"
wolfSSL 14:167253f4e170 11531 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11532 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11533 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11534 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11535 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11536 "# A[11] * B[9]\n\t"
wolfSSL 14:167253f4e170 11537 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11538 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11539 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11540 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11541 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11542 "# A[12] * B[8]\n\t"
wolfSSL 14:167253f4e170 11543 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11544 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11545 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11546 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11547 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11548 "# A[13] * B[7]\n\t"
wolfSSL 14:167253f4e170 11549 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11550 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11551 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11552 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11553 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11554 "# A[14] * B[6]\n\t"
wolfSSL 14:167253f4e170 11555 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11556 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11557 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11558 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11559 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11560 "# A[15] * B[5]\n\t"
wolfSSL 14:167253f4e170 11561 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11562 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11563 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11564 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11565 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11566 "# A[16] * B[4]\n\t"
wolfSSL 14:167253f4e170 11567 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11568 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11569 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11570 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11571 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11572 "# A[17] * B[3]\n\t"
wolfSSL 14:167253f4e170 11573 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11574 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11575 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11576 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11577 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11578 "# A[18] * B[2]\n\t"
wolfSSL 14:167253f4e170 11579 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11580 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 11581 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11582 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11583 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11584 "# A[19] * B[1]\n\t"
wolfSSL 14:167253f4e170 11585 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11586 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 11587 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11588 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11589 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11590 "# A[20] * B[0]\n\t"
wolfSSL 14:167253f4e170 11591 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11592 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 11593 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11594 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11595 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11596 "movq %%r8, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11597 "# A[0] * B[21]\n\t"
wolfSSL 14:167253f4e170 11598 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11599 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11600 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 11601 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11602 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11603 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11604 "# A[1] * B[20]\n\t"
wolfSSL 14:167253f4e170 11605 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11606 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11607 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11608 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11609 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11610 "# A[2] * B[19]\n\t"
wolfSSL 14:167253f4e170 11611 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11612 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11613 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11614 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11615 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11616 "# A[3] * B[18]\n\t"
wolfSSL 14:167253f4e170 11617 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11618 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11619 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11620 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11621 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11622 "# A[4] * B[17]\n\t"
wolfSSL 14:167253f4e170 11623 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11624 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11625 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11626 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11627 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11628 "# A[5] * B[16]\n\t"
wolfSSL 14:167253f4e170 11629 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11630 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11631 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11632 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11633 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11634 "# A[6] * B[15]\n\t"
wolfSSL 14:167253f4e170 11635 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11636 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11637 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11638 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11639 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11640 "# A[7] * B[14]\n\t"
wolfSSL 14:167253f4e170 11641 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11642 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11643 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11644 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11645 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11646 "# A[8] * B[13]\n\t"
wolfSSL 14:167253f4e170 11647 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11648 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11649 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11650 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11651 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11652 "# A[9] * B[12]\n\t"
wolfSSL 14:167253f4e170 11653 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11654 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11655 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11656 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11657 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11658 "# A[10] * B[11]\n\t"
wolfSSL 14:167253f4e170 11659 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11660 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11661 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11662 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11663 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11664 "# A[11] * B[10]\n\t"
wolfSSL 14:167253f4e170 11665 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11666 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11667 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11668 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11669 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11670 "# A[12] * B[9]\n\t"
wolfSSL 14:167253f4e170 11671 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11672 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11673 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11674 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11675 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11676 "# A[13] * B[8]\n\t"
wolfSSL 14:167253f4e170 11677 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11678 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11679 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11680 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11681 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11682 "# A[14] * B[7]\n\t"
wolfSSL 14:167253f4e170 11683 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11684 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11685 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11686 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11687 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11688 "# A[15] * B[6]\n\t"
wolfSSL 14:167253f4e170 11689 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11690 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11691 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11692 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11693 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11694 "# A[16] * B[5]\n\t"
wolfSSL 14:167253f4e170 11695 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11696 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11697 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11698 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11699 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11700 "# A[17] * B[4]\n\t"
wolfSSL 14:167253f4e170 11701 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11702 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11703 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11704 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11705 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11706 "# A[18] * B[3]\n\t"
wolfSSL 14:167253f4e170 11707 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11708 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 11709 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11710 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11711 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11712 "# A[19] * B[2]\n\t"
wolfSSL 14:167253f4e170 11713 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11714 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 11715 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11716 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11717 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11718 "# A[20] * B[1]\n\t"
wolfSSL 14:167253f4e170 11719 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11720 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 11721 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11722 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11723 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11724 "# A[21] * B[0]\n\t"
wolfSSL 14:167253f4e170 11725 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11726 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 11727 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 11728 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11729 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 11730 "movq %%rbx, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11731 "# A[0] * B[22]\n\t"
wolfSSL 14:167253f4e170 11732 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11733 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11734 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11735 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11736 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11737 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11738 "# A[1] * B[21]\n\t"
wolfSSL 14:167253f4e170 11739 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11740 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11741 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11742 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11743 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11744 "# A[2] * B[20]\n\t"
wolfSSL 14:167253f4e170 11745 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11746 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11747 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11748 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11749 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11750 "# A[3] * B[19]\n\t"
wolfSSL 14:167253f4e170 11751 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11752 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11753 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11754 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11755 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11756 "# A[4] * B[18]\n\t"
wolfSSL 14:167253f4e170 11757 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11758 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11759 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11760 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11761 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11762 "# A[5] * B[17]\n\t"
wolfSSL 14:167253f4e170 11763 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11764 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11765 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11766 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11767 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11768 "# A[6] * B[16]\n\t"
wolfSSL 14:167253f4e170 11769 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11770 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11771 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11772 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11773 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11774 "# A[7] * B[15]\n\t"
wolfSSL 14:167253f4e170 11775 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11776 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11777 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11778 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11779 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11780 "# A[8] * B[14]\n\t"
wolfSSL 14:167253f4e170 11781 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11782 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11783 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11784 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11785 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11786 "# A[9] * B[13]\n\t"
wolfSSL 14:167253f4e170 11787 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11788 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11789 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11790 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11791 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11792 "# A[10] * B[12]\n\t"
wolfSSL 14:167253f4e170 11793 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11794 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11795 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11796 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11797 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11798 "# A[11] * B[11]\n\t"
wolfSSL 14:167253f4e170 11799 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11800 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11801 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11802 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11803 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11804 "# A[12] * B[10]\n\t"
wolfSSL 14:167253f4e170 11805 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11806 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11807 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11808 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11809 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11810 "# A[13] * B[9]\n\t"
wolfSSL 14:167253f4e170 11811 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11812 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11813 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11814 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11815 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11816 "# A[14] * B[8]\n\t"
wolfSSL 14:167253f4e170 11817 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11818 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11819 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11820 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11821 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11822 "# A[15] * B[7]\n\t"
wolfSSL 14:167253f4e170 11823 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11824 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11825 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11826 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11827 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11828 "# A[16] * B[6]\n\t"
wolfSSL 14:167253f4e170 11829 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11830 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11831 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11832 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11833 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11834 "# A[17] * B[5]\n\t"
wolfSSL 14:167253f4e170 11835 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11836 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11837 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11838 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11839 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11840 "# A[18] * B[4]\n\t"
wolfSSL 14:167253f4e170 11841 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11842 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 11843 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11844 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11845 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11846 "# A[19] * B[3]\n\t"
wolfSSL 14:167253f4e170 11847 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11848 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 11849 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11850 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11851 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11852 "# A[20] * B[2]\n\t"
wolfSSL 14:167253f4e170 11853 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11854 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 11855 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11856 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11857 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11858 "# A[21] * B[1]\n\t"
wolfSSL 14:167253f4e170 11859 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11860 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 11861 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11862 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11863 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11864 "# A[22] * B[0]\n\t"
wolfSSL 14:167253f4e170 11865 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11866 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 11867 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 11868 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 11869 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 11870 "movq %%rcx, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 11871 "# A[0] * B[23]\n\t"
wolfSSL 14:167253f4e170 11872 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11873 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 11874 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 11875 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11876 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11877 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11878 "# A[1] * B[22]\n\t"
wolfSSL 14:167253f4e170 11879 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11880 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 11881 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11882 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11883 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11884 "# A[2] * B[21]\n\t"
wolfSSL 14:167253f4e170 11885 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11886 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 11887 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11888 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11889 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11890 "# A[3] * B[20]\n\t"
wolfSSL 14:167253f4e170 11891 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11892 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 11893 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11894 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11895 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11896 "# A[4] * B[19]\n\t"
wolfSSL 14:167253f4e170 11897 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11898 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 11899 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11900 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11901 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11902 "# A[5] * B[18]\n\t"
wolfSSL 14:167253f4e170 11903 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11904 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 11905 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11906 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11907 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11908 "# A[6] * B[17]\n\t"
wolfSSL 14:167253f4e170 11909 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11910 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 11911 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11912 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11913 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11914 "# A[7] * B[16]\n\t"
wolfSSL 14:167253f4e170 11915 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11916 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 11917 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11918 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11919 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11920 "# A[8] * B[15]\n\t"
wolfSSL 14:167253f4e170 11921 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11922 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 11923 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11924 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11925 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11926 "# A[9] * B[14]\n\t"
wolfSSL 14:167253f4e170 11927 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11928 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 11929 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11930 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11931 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11932 "# A[10] * B[13]\n\t"
wolfSSL 14:167253f4e170 11933 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11934 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 11935 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11936 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11937 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11938 "# A[11] * B[12]\n\t"
wolfSSL 14:167253f4e170 11939 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11940 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 11941 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11942 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11943 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11944 "# A[12] * B[11]\n\t"
wolfSSL 14:167253f4e170 11945 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11946 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 11947 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11948 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11949 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11950 "# A[13] * B[10]\n\t"
wolfSSL 14:167253f4e170 11951 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11952 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 11953 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11954 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11955 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11956 "# A[14] * B[9]\n\t"
wolfSSL 14:167253f4e170 11957 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11958 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 11959 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11960 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11961 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11962 "# A[15] * B[8]\n\t"
wolfSSL 14:167253f4e170 11963 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11964 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 11965 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11966 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11967 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11968 "# A[16] * B[7]\n\t"
wolfSSL 14:167253f4e170 11969 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11970 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 11971 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11972 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11973 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11974 "# A[17] * B[6]\n\t"
wolfSSL 14:167253f4e170 11975 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11976 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 11977 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11978 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11979 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11980 "# A[18] * B[5]\n\t"
wolfSSL 14:167253f4e170 11981 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11982 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 11983 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11984 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11985 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11986 "# A[19] * B[4]\n\t"
wolfSSL 14:167253f4e170 11987 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11988 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 11989 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11990 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11991 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11992 "# A[20] * B[3]\n\t"
wolfSSL 14:167253f4e170 11993 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 11994 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 11995 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 11996 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 11997 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 11998 "# A[21] * B[2]\n\t"
wolfSSL 14:167253f4e170 11999 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12000 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12001 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12002 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12003 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12004 "# A[22] * B[1]\n\t"
wolfSSL 14:167253f4e170 12005 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12006 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12007 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12008 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12009 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12010 "# A[23] * B[0]\n\t"
wolfSSL 14:167253f4e170 12011 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12012 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12013 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12014 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12015 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12016 "movq %%r8, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 12017 "# A[1] * B[23]\n\t"
wolfSSL 14:167253f4e170 12018 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12019 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 12020 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 12021 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12022 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12023 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12024 "# A[2] * B[22]\n\t"
wolfSSL 14:167253f4e170 12025 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12026 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 12027 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12028 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12029 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12030 "# A[3] * B[21]\n\t"
wolfSSL 14:167253f4e170 12031 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12032 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 12033 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12034 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12035 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12036 "# A[4] * B[20]\n\t"
wolfSSL 14:167253f4e170 12037 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12038 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 12039 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12040 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12041 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12042 "# A[5] * B[19]\n\t"
wolfSSL 14:167253f4e170 12043 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12044 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 12045 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12046 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12047 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12048 "# A[6] * B[18]\n\t"
wolfSSL 14:167253f4e170 12049 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12050 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 12051 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12052 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12053 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12054 "# A[7] * B[17]\n\t"
wolfSSL 14:167253f4e170 12055 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12056 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12057 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12058 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12059 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12060 "# A[8] * B[16]\n\t"
wolfSSL 14:167253f4e170 12061 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12062 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12063 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12064 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12065 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12066 "# A[9] * B[15]\n\t"
wolfSSL 14:167253f4e170 12067 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12068 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12069 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12070 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12071 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12072 "# A[10] * B[14]\n\t"
wolfSSL 14:167253f4e170 12073 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12074 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12075 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12076 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12077 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12078 "# A[11] * B[13]\n\t"
wolfSSL 14:167253f4e170 12079 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12080 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12081 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12082 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12083 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12084 "# A[12] * B[12]\n\t"
wolfSSL 14:167253f4e170 12085 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12086 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12087 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12088 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12089 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12090 "# A[13] * B[11]\n\t"
wolfSSL 14:167253f4e170 12091 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12092 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12093 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12094 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12095 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12096 "# A[14] * B[10]\n\t"
wolfSSL 14:167253f4e170 12097 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12098 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12099 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12100 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12101 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12102 "# A[15] * B[9]\n\t"
wolfSSL 14:167253f4e170 12103 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12104 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12105 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12106 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12107 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12108 "# A[16] * B[8]\n\t"
wolfSSL 14:167253f4e170 12109 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12110 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12111 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12112 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12113 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12114 "# A[17] * B[7]\n\t"
wolfSSL 14:167253f4e170 12115 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12116 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12117 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12118 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12119 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12120 "# A[18] * B[6]\n\t"
wolfSSL 14:167253f4e170 12121 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12122 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12123 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12124 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12125 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12126 "# A[19] * B[5]\n\t"
wolfSSL 14:167253f4e170 12127 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12128 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12129 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12130 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12131 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12132 "# A[20] * B[4]\n\t"
wolfSSL 14:167253f4e170 12133 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12134 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12135 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12136 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12137 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12138 "# A[21] * B[3]\n\t"
wolfSSL 14:167253f4e170 12139 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12140 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12141 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12142 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12143 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12144 "# A[22] * B[2]\n\t"
wolfSSL 14:167253f4e170 12145 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12146 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12147 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12148 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12149 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12150 "# A[23] * B[1]\n\t"
wolfSSL 14:167253f4e170 12151 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12152 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12153 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12154 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12155 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12156 "movq %%rbx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 12157 "# A[2] * B[23]\n\t"
wolfSSL 14:167253f4e170 12158 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12159 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 12160 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12161 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12162 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12163 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12164 "# A[3] * B[22]\n\t"
wolfSSL 14:167253f4e170 12165 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12166 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 12167 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12168 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12169 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12170 "# A[4] * B[21]\n\t"
wolfSSL 14:167253f4e170 12171 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12172 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 12173 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12174 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12175 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12176 "# A[5] * B[20]\n\t"
wolfSSL 14:167253f4e170 12177 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12178 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 12179 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12180 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12181 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12182 "# A[6] * B[19]\n\t"
wolfSSL 14:167253f4e170 12183 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12184 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 12185 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12186 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12187 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12188 "# A[7] * B[18]\n\t"
wolfSSL 14:167253f4e170 12189 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12190 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12191 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12192 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12193 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12194 "# A[8] * B[17]\n\t"
wolfSSL 14:167253f4e170 12195 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12196 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12197 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12198 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12199 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12200 "# A[9] * B[16]\n\t"
wolfSSL 14:167253f4e170 12201 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12202 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12203 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12204 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12205 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12206 "# A[10] * B[15]\n\t"
wolfSSL 14:167253f4e170 12207 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12208 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12209 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12210 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12211 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12212 "# A[11] * B[14]\n\t"
wolfSSL 14:167253f4e170 12213 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12214 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12215 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12216 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12217 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12218 "# A[12] * B[13]\n\t"
wolfSSL 14:167253f4e170 12219 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12220 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12221 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12222 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12223 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12224 "# A[13] * B[12]\n\t"
wolfSSL 14:167253f4e170 12225 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12226 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12227 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12228 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12229 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12230 "# A[14] * B[11]\n\t"
wolfSSL 14:167253f4e170 12231 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12232 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12233 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12234 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12235 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12236 "# A[15] * B[10]\n\t"
wolfSSL 14:167253f4e170 12237 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12238 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12239 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12240 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12241 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12242 "# A[16] * B[9]\n\t"
wolfSSL 14:167253f4e170 12243 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12244 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12245 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12246 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12247 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12248 "# A[17] * B[8]\n\t"
wolfSSL 14:167253f4e170 12249 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12250 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12251 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12252 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12253 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12254 "# A[18] * B[7]\n\t"
wolfSSL 14:167253f4e170 12255 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12256 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12257 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12258 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12259 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12260 "# A[19] * B[6]\n\t"
wolfSSL 14:167253f4e170 12261 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12262 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12263 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12264 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12265 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12266 "# A[20] * B[5]\n\t"
wolfSSL 14:167253f4e170 12267 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12268 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12269 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12270 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12271 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12272 "# A[21] * B[4]\n\t"
wolfSSL 14:167253f4e170 12273 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12274 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12275 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12276 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12277 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12278 "# A[22] * B[3]\n\t"
wolfSSL 14:167253f4e170 12279 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12280 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12281 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12282 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12283 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12284 "# A[23] * B[2]\n\t"
wolfSSL 14:167253f4e170 12285 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12286 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12287 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12288 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12289 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12290 "movq %%rcx, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 12291 "# A[3] * B[23]\n\t"
wolfSSL 14:167253f4e170 12292 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12293 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 12294 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12295 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12296 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12297 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12298 "# A[4] * B[22]\n\t"
wolfSSL 14:167253f4e170 12299 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12300 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 12301 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12302 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12303 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12304 "# A[5] * B[21]\n\t"
wolfSSL 14:167253f4e170 12305 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12306 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 12307 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12308 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12309 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12310 "# A[6] * B[20]\n\t"
wolfSSL 14:167253f4e170 12311 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12312 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 12313 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12314 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12315 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12316 "# A[7] * B[19]\n\t"
wolfSSL 14:167253f4e170 12317 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12318 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12319 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12320 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12321 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12322 "# A[8] * B[18]\n\t"
wolfSSL 14:167253f4e170 12323 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12324 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12325 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12326 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12327 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12328 "# A[9] * B[17]\n\t"
wolfSSL 14:167253f4e170 12329 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12330 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12331 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12332 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12333 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12334 "# A[10] * B[16]\n\t"
wolfSSL 14:167253f4e170 12335 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12336 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12337 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12338 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12339 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12340 "# A[11] * B[15]\n\t"
wolfSSL 14:167253f4e170 12341 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12342 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12343 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12344 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12345 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12346 "# A[12] * B[14]\n\t"
wolfSSL 14:167253f4e170 12347 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12348 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12349 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12350 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12351 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12352 "# A[13] * B[13]\n\t"
wolfSSL 14:167253f4e170 12353 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12354 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12355 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12356 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12357 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12358 "# A[14] * B[12]\n\t"
wolfSSL 14:167253f4e170 12359 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12360 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12361 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12362 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12363 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12364 "# A[15] * B[11]\n\t"
wolfSSL 14:167253f4e170 12365 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12366 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12367 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12368 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12369 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12370 "# A[16] * B[10]\n\t"
wolfSSL 14:167253f4e170 12371 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12372 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12373 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12374 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12375 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12376 "# A[17] * B[9]\n\t"
wolfSSL 14:167253f4e170 12377 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12378 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12379 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12380 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12381 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12382 "# A[18] * B[8]\n\t"
wolfSSL 14:167253f4e170 12383 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12384 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12385 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12386 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12387 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12388 "# A[19] * B[7]\n\t"
wolfSSL 14:167253f4e170 12389 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12390 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12391 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12392 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12393 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12394 "# A[20] * B[6]\n\t"
wolfSSL 14:167253f4e170 12395 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12396 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12397 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12398 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12399 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12400 "# A[21] * B[5]\n\t"
wolfSSL 14:167253f4e170 12401 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12402 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12403 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12404 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12405 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12406 "# A[22] * B[4]\n\t"
wolfSSL 14:167253f4e170 12407 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12408 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12409 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12410 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12411 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12412 "# A[23] * B[3]\n\t"
wolfSSL 14:167253f4e170 12413 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12414 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12415 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12416 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12417 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12418 "movq %%r8, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 12419 "# A[4] * B[23]\n\t"
wolfSSL 14:167253f4e170 12420 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12421 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 12422 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 12423 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12424 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12425 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12426 "# A[5] * B[22]\n\t"
wolfSSL 14:167253f4e170 12427 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12428 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 12429 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12430 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12431 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12432 "# A[6] * B[21]\n\t"
wolfSSL 14:167253f4e170 12433 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12434 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 12435 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12436 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12437 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12438 "# A[7] * B[20]\n\t"
wolfSSL 14:167253f4e170 12439 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12440 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12441 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12442 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12443 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12444 "# A[8] * B[19]\n\t"
wolfSSL 14:167253f4e170 12445 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12446 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12447 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12448 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12449 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12450 "# A[9] * B[18]\n\t"
wolfSSL 14:167253f4e170 12451 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12452 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12453 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12454 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12455 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12456 "# A[10] * B[17]\n\t"
wolfSSL 14:167253f4e170 12457 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12458 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12459 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12460 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12461 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12462 "# A[11] * B[16]\n\t"
wolfSSL 14:167253f4e170 12463 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12464 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12465 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12466 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12467 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12468 "# A[12] * B[15]\n\t"
wolfSSL 14:167253f4e170 12469 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12470 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12471 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12472 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12473 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12474 "# A[13] * B[14]\n\t"
wolfSSL 14:167253f4e170 12475 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12476 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12477 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12478 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12479 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12480 "# A[14] * B[13]\n\t"
wolfSSL 14:167253f4e170 12481 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12482 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12483 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12484 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12485 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12486 "# A[15] * B[12]\n\t"
wolfSSL 14:167253f4e170 12487 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12488 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12489 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12490 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12491 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12492 "# A[16] * B[11]\n\t"
wolfSSL 14:167253f4e170 12493 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12494 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12495 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12496 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12497 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12498 "# A[17] * B[10]\n\t"
wolfSSL 14:167253f4e170 12499 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12500 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12501 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12502 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12503 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12504 "# A[18] * B[9]\n\t"
wolfSSL 14:167253f4e170 12505 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12506 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12507 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12508 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12509 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12510 "# A[19] * B[8]\n\t"
wolfSSL 14:167253f4e170 12511 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12512 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12513 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12514 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12515 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12516 "# A[20] * B[7]\n\t"
wolfSSL 14:167253f4e170 12517 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12518 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12519 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12520 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12521 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12522 "# A[21] * B[6]\n\t"
wolfSSL 14:167253f4e170 12523 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12524 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12525 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12526 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12527 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12528 "# A[22] * B[5]\n\t"
wolfSSL 14:167253f4e170 12529 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12530 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12531 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12532 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12533 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12534 "# A[23] * B[4]\n\t"
wolfSSL 14:167253f4e170 12535 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12536 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12537 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12538 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12539 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12540 "movq %%rbx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 12541 "# A[5] * B[23]\n\t"
wolfSSL 14:167253f4e170 12542 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12543 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 12544 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12545 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12546 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12547 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12548 "# A[6] * B[22]\n\t"
wolfSSL 14:167253f4e170 12549 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12550 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 12551 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12552 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12553 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12554 "# A[7] * B[21]\n\t"
wolfSSL 14:167253f4e170 12555 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12556 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12557 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12558 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12559 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12560 "# A[8] * B[20]\n\t"
wolfSSL 14:167253f4e170 12561 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12562 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12563 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12564 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12565 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12566 "# A[9] * B[19]\n\t"
wolfSSL 14:167253f4e170 12567 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12568 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12569 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12570 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12571 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12572 "# A[10] * B[18]\n\t"
wolfSSL 14:167253f4e170 12573 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12574 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12575 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12576 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12577 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12578 "# A[11] * B[17]\n\t"
wolfSSL 14:167253f4e170 12579 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12580 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12581 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12582 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12583 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12584 "# A[12] * B[16]\n\t"
wolfSSL 14:167253f4e170 12585 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12586 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12587 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12588 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12589 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12590 "# A[13] * B[15]\n\t"
wolfSSL 14:167253f4e170 12591 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12592 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12593 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12594 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12595 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12596 "# A[14] * B[14]\n\t"
wolfSSL 14:167253f4e170 12597 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12598 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12599 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12600 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12601 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12602 "# A[15] * B[13]\n\t"
wolfSSL 14:167253f4e170 12603 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12604 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12605 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12606 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12607 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12608 "# A[16] * B[12]\n\t"
wolfSSL 14:167253f4e170 12609 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12610 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12611 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12612 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12613 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12614 "# A[17] * B[11]\n\t"
wolfSSL 14:167253f4e170 12615 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12616 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12617 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12618 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12619 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12620 "# A[18] * B[10]\n\t"
wolfSSL 14:167253f4e170 12621 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12622 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12623 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12624 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12625 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12626 "# A[19] * B[9]\n\t"
wolfSSL 14:167253f4e170 12627 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12628 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12629 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12630 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12631 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12632 "# A[20] * B[8]\n\t"
wolfSSL 14:167253f4e170 12633 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12634 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12635 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12636 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12637 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12638 "# A[21] * B[7]\n\t"
wolfSSL 14:167253f4e170 12639 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12640 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12641 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12642 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12643 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12644 "# A[22] * B[6]\n\t"
wolfSSL 14:167253f4e170 12645 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12646 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12647 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12648 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12649 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12650 "# A[23] * B[5]\n\t"
wolfSSL 14:167253f4e170 12651 "movq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12652 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12653 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12654 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12655 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12656 "movq %%rcx, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 12657 "# A[6] * B[23]\n\t"
wolfSSL 14:167253f4e170 12658 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12659 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 12660 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12661 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12662 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12663 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12664 "# A[7] * B[22]\n\t"
wolfSSL 14:167253f4e170 12665 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12666 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12667 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12668 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12669 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12670 "# A[8] * B[21]\n\t"
wolfSSL 14:167253f4e170 12671 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12672 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12673 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12674 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12675 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12676 "# A[9] * B[20]\n\t"
wolfSSL 14:167253f4e170 12677 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12678 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12679 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12680 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12681 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12682 "# A[10] * B[19]\n\t"
wolfSSL 14:167253f4e170 12683 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12684 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12685 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12686 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12687 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12688 "# A[11] * B[18]\n\t"
wolfSSL 14:167253f4e170 12689 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12690 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12691 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12692 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12693 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12694 "# A[12] * B[17]\n\t"
wolfSSL 14:167253f4e170 12695 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12696 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12697 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12698 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12699 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12700 "# A[13] * B[16]\n\t"
wolfSSL 14:167253f4e170 12701 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12702 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12703 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12704 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12705 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12706 "# A[14] * B[15]\n\t"
wolfSSL 14:167253f4e170 12707 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12708 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12709 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12710 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12711 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12712 "# A[15] * B[14]\n\t"
wolfSSL 14:167253f4e170 12713 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12714 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12715 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12716 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12717 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12718 "# A[16] * B[13]\n\t"
wolfSSL 14:167253f4e170 12719 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12720 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12721 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12722 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12723 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12724 "# A[17] * B[12]\n\t"
wolfSSL 14:167253f4e170 12725 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12726 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12727 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12728 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12729 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12730 "# A[18] * B[11]\n\t"
wolfSSL 14:167253f4e170 12731 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12732 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12733 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12734 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12735 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12736 "# A[19] * B[10]\n\t"
wolfSSL 14:167253f4e170 12737 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12738 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12739 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12740 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12741 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12742 "# A[20] * B[9]\n\t"
wolfSSL 14:167253f4e170 12743 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12744 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12745 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12746 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12747 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12748 "# A[21] * B[8]\n\t"
wolfSSL 14:167253f4e170 12749 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12750 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12751 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12752 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12753 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12754 "# A[22] * B[7]\n\t"
wolfSSL 14:167253f4e170 12755 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12756 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12757 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12758 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12759 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12760 "# A[23] * B[6]\n\t"
wolfSSL 14:167253f4e170 12761 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12762 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12763 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12764 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12765 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12766 "movq %%r8, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 12767 "# A[7] * B[23]\n\t"
wolfSSL 14:167253f4e170 12768 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12769 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 12770 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 12771 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12772 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12773 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12774 "# A[8] * B[22]\n\t"
wolfSSL 14:167253f4e170 12775 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12776 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12777 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12778 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12779 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12780 "# A[9] * B[21]\n\t"
wolfSSL 14:167253f4e170 12781 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12782 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12783 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12784 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12785 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12786 "# A[10] * B[20]\n\t"
wolfSSL 14:167253f4e170 12787 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12788 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12789 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12790 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12791 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12792 "# A[11] * B[19]\n\t"
wolfSSL 14:167253f4e170 12793 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12794 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12795 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12796 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12797 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12798 "# A[12] * B[18]\n\t"
wolfSSL 14:167253f4e170 12799 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12800 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12801 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12802 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12803 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12804 "# A[13] * B[17]\n\t"
wolfSSL 14:167253f4e170 12805 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12806 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12807 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12808 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12809 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12810 "# A[14] * B[16]\n\t"
wolfSSL 14:167253f4e170 12811 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12812 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12813 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12814 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12815 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12816 "# A[15] * B[15]\n\t"
wolfSSL 14:167253f4e170 12817 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12818 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12819 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12820 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12821 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12822 "# A[16] * B[14]\n\t"
wolfSSL 14:167253f4e170 12823 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12824 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12825 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12826 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12827 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12828 "# A[17] * B[13]\n\t"
wolfSSL 14:167253f4e170 12829 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12830 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12831 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12832 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12833 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12834 "# A[18] * B[12]\n\t"
wolfSSL 14:167253f4e170 12835 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12836 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12837 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12838 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12839 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12840 "# A[19] * B[11]\n\t"
wolfSSL 14:167253f4e170 12841 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12842 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12843 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12844 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12845 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12846 "# A[20] * B[10]\n\t"
wolfSSL 14:167253f4e170 12847 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12848 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12849 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12850 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12851 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12852 "# A[21] * B[9]\n\t"
wolfSSL 14:167253f4e170 12853 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12854 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12855 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12856 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12857 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12858 "# A[22] * B[8]\n\t"
wolfSSL 14:167253f4e170 12859 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12860 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12861 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12862 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12863 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12864 "# A[23] * B[7]\n\t"
wolfSSL 14:167253f4e170 12865 "movq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12866 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12867 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 12868 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12869 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 12870 "movq %%rbx, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 12871 "# A[8] * B[23]\n\t"
wolfSSL 14:167253f4e170 12872 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12873 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 12874 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12875 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12876 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12877 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12878 "# A[9] * B[22]\n\t"
wolfSSL 14:167253f4e170 12879 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12880 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12881 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12882 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12883 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12884 "# A[10] * B[21]\n\t"
wolfSSL 14:167253f4e170 12885 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12886 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12887 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12888 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12889 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12890 "# A[11] * B[20]\n\t"
wolfSSL 14:167253f4e170 12891 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12892 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12893 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12894 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12895 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12896 "# A[12] * B[19]\n\t"
wolfSSL 14:167253f4e170 12897 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12898 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12899 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12900 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12901 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12902 "# A[13] * B[18]\n\t"
wolfSSL 14:167253f4e170 12903 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12904 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12905 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12906 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12907 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12908 "# A[14] * B[17]\n\t"
wolfSSL 14:167253f4e170 12909 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12910 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 12911 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12912 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12913 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12914 "# A[15] * B[16]\n\t"
wolfSSL 14:167253f4e170 12915 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12916 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 12917 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12918 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12919 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12920 "# A[16] * B[15]\n\t"
wolfSSL 14:167253f4e170 12921 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12922 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 12923 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12924 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12925 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12926 "# A[17] * B[14]\n\t"
wolfSSL 14:167253f4e170 12927 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12928 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 12929 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12930 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12931 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12932 "# A[18] * B[13]\n\t"
wolfSSL 14:167253f4e170 12933 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12934 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 12935 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12936 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12937 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12938 "# A[19] * B[12]\n\t"
wolfSSL 14:167253f4e170 12939 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12940 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 12941 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12942 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12943 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12944 "# A[20] * B[11]\n\t"
wolfSSL 14:167253f4e170 12945 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12946 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 12947 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12948 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12949 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12950 "# A[21] * B[10]\n\t"
wolfSSL 14:167253f4e170 12951 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12952 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 12953 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12954 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12955 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12956 "# A[22] * B[9]\n\t"
wolfSSL 14:167253f4e170 12957 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12958 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 12959 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12960 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12961 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12962 "# A[23] * B[8]\n\t"
wolfSSL 14:167253f4e170 12963 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12964 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 12965 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 12966 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 12967 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 12968 "movq %%rcx, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 12969 "# A[9] * B[23]\n\t"
wolfSSL 14:167253f4e170 12970 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12971 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 12972 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 12973 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12974 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12975 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12976 "# A[10] * B[22]\n\t"
wolfSSL 14:167253f4e170 12977 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12978 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 12979 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12980 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12981 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12982 "# A[11] * B[21]\n\t"
wolfSSL 14:167253f4e170 12983 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12984 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 12985 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12986 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12987 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12988 "# A[12] * B[20]\n\t"
wolfSSL 14:167253f4e170 12989 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12990 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 12991 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12992 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12993 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 12994 "# A[13] * B[19]\n\t"
wolfSSL 14:167253f4e170 12995 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 12996 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 12997 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 12998 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 12999 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13000 "# A[14] * B[18]\n\t"
wolfSSL 14:167253f4e170 13001 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13002 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 13003 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13004 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13005 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13006 "# A[15] * B[17]\n\t"
wolfSSL 14:167253f4e170 13007 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13008 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13009 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13010 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13011 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13012 "# A[16] * B[16]\n\t"
wolfSSL 14:167253f4e170 13013 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13014 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13015 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13016 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13017 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13018 "# A[17] * B[15]\n\t"
wolfSSL 14:167253f4e170 13019 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13020 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13021 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13022 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13023 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13024 "# A[18] * B[14]\n\t"
wolfSSL 14:167253f4e170 13025 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13026 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13027 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13028 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13029 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13030 "# A[19] * B[13]\n\t"
wolfSSL 14:167253f4e170 13031 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13032 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13033 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13034 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13035 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13036 "# A[20] * B[12]\n\t"
wolfSSL 14:167253f4e170 13037 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13038 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13039 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13040 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13041 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13042 "# A[21] * B[11]\n\t"
wolfSSL 14:167253f4e170 13043 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13044 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13045 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13046 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13047 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13048 "# A[22] * B[10]\n\t"
wolfSSL 14:167253f4e170 13049 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13050 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13051 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13052 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13053 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13054 "# A[23] * B[9]\n\t"
wolfSSL 14:167253f4e170 13055 "movq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13056 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13057 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13058 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13059 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13060 "movq %%r8, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 13061 "# A[10] * B[23]\n\t"
wolfSSL 14:167253f4e170 13062 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13063 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 13064 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13065 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13066 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13067 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13068 "# A[11] * B[22]\n\t"
wolfSSL 14:167253f4e170 13069 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13070 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 13071 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13072 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13073 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13074 "# A[12] * B[21]\n\t"
wolfSSL 14:167253f4e170 13075 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13076 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 13077 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13078 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13079 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13080 "# A[13] * B[20]\n\t"
wolfSSL 14:167253f4e170 13081 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13082 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 13083 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13084 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13085 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13086 "# A[14] * B[19]\n\t"
wolfSSL 14:167253f4e170 13087 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13088 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 13089 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13090 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13091 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13092 "# A[15] * B[18]\n\t"
wolfSSL 14:167253f4e170 13093 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13094 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13095 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13096 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13097 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13098 "# A[16] * B[17]\n\t"
wolfSSL 14:167253f4e170 13099 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13100 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13101 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13102 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13103 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13104 "# A[17] * B[16]\n\t"
wolfSSL 14:167253f4e170 13105 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13106 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13107 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13108 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13109 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13110 "# A[18] * B[15]\n\t"
wolfSSL 14:167253f4e170 13111 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13112 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13113 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13114 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13115 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13116 "# A[19] * B[14]\n\t"
wolfSSL 14:167253f4e170 13117 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13118 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13119 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13120 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13121 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13122 "# A[20] * B[13]\n\t"
wolfSSL 14:167253f4e170 13123 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13124 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13125 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13126 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13127 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13128 "# A[21] * B[12]\n\t"
wolfSSL 14:167253f4e170 13129 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13130 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13131 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13132 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13133 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13134 "# A[22] * B[11]\n\t"
wolfSSL 14:167253f4e170 13135 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13136 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13137 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13138 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13139 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13140 "# A[23] * B[10]\n\t"
wolfSSL 14:167253f4e170 13141 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13142 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13143 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13144 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13145 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13146 "movq %%rbx, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 13147 "# A[11] * B[23]\n\t"
wolfSSL 14:167253f4e170 13148 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13149 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 13150 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13151 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13152 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13153 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13154 "# A[12] * B[22]\n\t"
wolfSSL 14:167253f4e170 13155 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13156 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 13157 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13158 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13159 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13160 "# A[13] * B[21]\n\t"
wolfSSL 14:167253f4e170 13161 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13162 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 13163 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13164 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13165 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13166 "# A[14] * B[20]\n\t"
wolfSSL 14:167253f4e170 13167 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13168 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 13169 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13170 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13171 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13172 "# A[15] * B[19]\n\t"
wolfSSL 14:167253f4e170 13173 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13174 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13175 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13176 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13177 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13178 "# A[16] * B[18]\n\t"
wolfSSL 14:167253f4e170 13179 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13180 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13181 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13182 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13183 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13184 "# A[17] * B[17]\n\t"
wolfSSL 14:167253f4e170 13185 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13186 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13187 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13188 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13189 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13190 "# A[18] * B[16]\n\t"
wolfSSL 14:167253f4e170 13191 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13192 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13193 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13194 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13195 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13196 "# A[19] * B[15]\n\t"
wolfSSL 14:167253f4e170 13197 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13198 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13199 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13200 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13201 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13202 "# A[20] * B[14]\n\t"
wolfSSL 14:167253f4e170 13203 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13204 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13205 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13206 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13207 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13208 "# A[21] * B[13]\n\t"
wolfSSL 14:167253f4e170 13209 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13210 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13211 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13212 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13213 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13214 "# A[22] * B[12]\n\t"
wolfSSL 14:167253f4e170 13215 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13216 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13217 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13218 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13219 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13220 "# A[23] * B[11]\n\t"
wolfSSL 14:167253f4e170 13221 "movq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13222 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13223 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13224 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13225 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13226 "movq %%rcx, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 13227 "# A[12] * B[23]\n\t"
wolfSSL 14:167253f4e170 13228 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13229 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 13230 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13231 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13232 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13233 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13234 "# A[13] * B[22]\n\t"
wolfSSL 14:167253f4e170 13235 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13236 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 13237 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13238 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13239 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13240 "# A[14] * B[21]\n\t"
wolfSSL 14:167253f4e170 13241 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13242 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 13243 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13244 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13245 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13246 "# A[15] * B[20]\n\t"
wolfSSL 14:167253f4e170 13247 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13248 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13249 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13250 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13251 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13252 "# A[16] * B[19]\n\t"
wolfSSL 14:167253f4e170 13253 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13254 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13255 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13256 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13257 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13258 "# A[17] * B[18]\n\t"
wolfSSL 14:167253f4e170 13259 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13260 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13261 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13262 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13263 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13264 "# A[18] * B[17]\n\t"
wolfSSL 14:167253f4e170 13265 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13266 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13267 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13268 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13269 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13270 "# A[19] * B[16]\n\t"
wolfSSL 14:167253f4e170 13271 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13272 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13273 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13274 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13275 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13276 "# A[20] * B[15]\n\t"
wolfSSL 14:167253f4e170 13277 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13278 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13279 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13280 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13281 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13282 "# A[21] * B[14]\n\t"
wolfSSL 14:167253f4e170 13283 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13284 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13285 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13286 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13287 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13288 "# A[22] * B[13]\n\t"
wolfSSL 14:167253f4e170 13289 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13290 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13291 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13292 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13293 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13294 "# A[23] * B[12]\n\t"
wolfSSL 14:167253f4e170 13295 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13296 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13297 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13298 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13299 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13300 "movq %%r8, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 13301 "# A[13] * B[23]\n\t"
wolfSSL 14:167253f4e170 13302 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13303 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 13304 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13305 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13306 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13307 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13308 "# A[14] * B[22]\n\t"
wolfSSL 14:167253f4e170 13309 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13310 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 13311 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13312 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13313 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13314 "# A[15] * B[21]\n\t"
wolfSSL 14:167253f4e170 13315 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13316 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13317 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13318 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13319 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13320 "# A[16] * B[20]\n\t"
wolfSSL 14:167253f4e170 13321 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13322 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13323 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13324 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13325 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13326 "# A[17] * B[19]\n\t"
wolfSSL 14:167253f4e170 13327 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13328 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13329 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13330 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13331 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13332 "# A[18] * B[18]\n\t"
wolfSSL 14:167253f4e170 13333 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13334 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13335 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13336 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13337 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13338 "# A[19] * B[17]\n\t"
wolfSSL 14:167253f4e170 13339 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13340 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13341 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13342 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13343 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13344 "# A[20] * B[16]\n\t"
wolfSSL 14:167253f4e170 13345 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13346 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13347 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13348 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13349 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13350 "# A[21] * B[15]\n\t"
wolfSSL 14:167253f4e170 13351 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13352 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13353 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13354 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13355 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13356 "# A[22] * B[14]\n\t"
wolfSSL 14:167253f4e170 13357 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13358 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13359 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13360 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13361 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13362 "# A[23] * B[13]\n\t"
wolfSSL 14:167253f4e170 13363 "movq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13364 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13365 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13366 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13367 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13368 "movq %%rbx, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 13369 "# A[14] * B[23]\n\t"
wolfSSL 14:167253f4e170 13370 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13371 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 13372 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13373 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13374 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13375 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13376 "# A[15] * B[22]\n\t"
wolfSSL 14:167253f4e170 13377 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13378 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13379 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13380 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13381 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13382 "# A[16] * B[21]\n\t"
wolfSSL 14:167253f4e170 13383 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13384 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13385 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13386 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13387 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13388 "# A[17] * B[20]\n\t"
wolfSSL 14:167253f4e170 13389 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13390 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13391 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13392 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13393 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13394 "# A[18] * B[19]\n\t"
wolfSSL 14:167253f4e170 13395 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13396 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13397 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13398 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13399 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13400 "# A[19] * B[18]\n\t"
wolfSSL 14:167253f4e170 13401 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13402 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13403 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13404 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13405 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13406 "# A[20] * B[17]\n\t"
wolfSSL 14:167253f4e170 13407 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13408 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13409 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13410 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13411 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13412 "# A[21] * B[16]\n\t"
wolfSSL 14:167253f4e170 13413 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13414 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13415 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13416 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13417 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13418 "# A[22] * B[15]\n\t"
wolfSSL 14:167253f4e170 13419 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13420 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13421 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13422 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13423 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13424 "# A[23] * B[14]\n\t"
wolfSSL 14:167253f4e170 13425 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13426 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13427 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13428 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13429 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13430 "movq %%rcx, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 13431 "# A[15] * B[23]\n\t"
wolfSSL 14:167253f4e170 13432 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13433 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 13434 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13435 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13436 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13437 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13438 "# A[16] * B[22]\n\t"
wolfSSL 14:167253f4e170 13439 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13440 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13441 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13442 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13443 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13444 "# A[17] * B[21]\n\t"
wolfSSL 14:167253f4e170 13445 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13446 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13447 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13448 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13449 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13450 "# A[18] * B[20]\n\t"
wolfSSL 14:167253f4e170 13451 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13452 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13453 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13454 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13455 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13456 "# A[19] * B[19]\n\t"
wolfSSL 14:167253f4e170 13457 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13458 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13459 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13460 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13461 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13462 "# A[20] * B[18]\n\t"
wolfSSL 14:167253f4e170 13463 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13464 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13465 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13466 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13467 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13468 "# A[21] * B[17]\n\t"
wolfSSL 14:167253f4e170 13469 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13470 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13471 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13472 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13473 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13474 "# A[22] * B[16]\n\t"
wolfSSL 14:167253f4e170 13475 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13476 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13477 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13478 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13479 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13480 "# A[23] * B[15]\n\t"
wolfSSL 14:167253f4e170 13481 "movq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13482 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13483 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13484 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13485 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13486 "movq %%r8, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 13487 "# A[16] * B[23]\n\t"
wolfSSL 14:167253f4e170 13488 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13489 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 13490 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13491 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13492 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13493 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13494 "# A[17] * B[22]\n\t"
wolfSSL 14:167253f4e170 13495 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13496 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13497 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13498 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13499 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13500 "# A[18] * B[21]\n\t"
wolfSSL 14:167253f4e170 13501 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13502 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13503 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13504 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13505 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13506 "# A[19] * B[20]\n\t"
wolfSSL 14:167253f4e170 13507 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13508 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13509 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13510 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13511 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13512 "# A[20] * B[19]\n\t"
wolfSSL 14:167253f4e170 13513 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13514 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13515 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13516 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13517 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13518 "# A[21] * B[18]\n\t"
wolfSSL 14:167253f4e170 13519 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13520 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13521 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13522 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13523 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13524 "# A[22] * B[17]\n\t"
wolfSSL 14:167253f4e170 13525 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13526 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13527 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13528 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13529 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13530 "# A[23] * B[16]\n\t"
wolfSSL 14:167253f4e170 13531 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13532 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13533 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13534 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13535 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13536 "movq %%rbx, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 13537 "# A[17] * B[23]\n\t"
wolfSSL 14:167253f4e170 13538 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13539 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 13540 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13541 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13542 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13543 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13544 "# A[18] * B[22]\n\t"
wolfSSL 14:167253f4e170 13545 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13546 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13547 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13548 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13549 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13550 "# A[19] * B[21]\n\t"
wolfSSL 14:167253f4e170 13551 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13552 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13553 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13554 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13555 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13556 "# A[20] * B[20]\n\t"
wolfSSL 14:167253f4e170 13557 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13558 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13559 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13560 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13561 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13562 "# A[21] * B[19]\n\t"
wolfSSL 14:167253f4e170 13563 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13564 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13565 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13566 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13567 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13568 "# A[22] * B[18]\n\t"
wolfSSL 14:167253f4e170 13569 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13570 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13571 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13572 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13573 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13574 "# A[23] * B[17]\n\t"
wolfSSL 14:167253f4e170 13575 "movq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13576 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13577 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13578 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13579 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13580 "movq %%rcx, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 13581 "# A[18] * B[23]\n\t"
wolfSSL 14:167253f4e170 13582 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13583 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 13584 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13585 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13586 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13587 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13588 "# A[19] * B[22]\n\t"
wolfSSL 14:167253f4e170 13589 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13590 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13591 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13592 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13593 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13594 "# A[20] * B[21]\n\t"
wolfSSL 14:167253f4e170 13595 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13596 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13597 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13598 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13599 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13600 "# A[21] * B[20]\n\t"
wolfSSL 14:167253f4e170 13601 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13602 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13603 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13604 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13605 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13606 "# A[22] * B[19]\n\t"
wolfSSL 14:167253f4e170 13607 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13608 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13609 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13610 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13611 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13612 "# A[23] * B[18]\n\t"
wolfSSL 14:167253f4e170 13613 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13614 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13615 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13616 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13617 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13618 "movq %%r8, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 13619 "# A[19] * B[23]\n\t"
wolfSSL 14:167253f4e170 13620 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13621 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 13622 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13623 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13624 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13625 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13626 "# A[20] * B[22]\n\t"
wolfSSL 14:167253f4e170 13627 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13628 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13629 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13630 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13631 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13632 "# A[21] * B[21]\n\t"
wolfSSL 14:167253f4e170 13633 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13634 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13635 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13636 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13637 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13638 "# A[22] * B[20]\n\t"
wolfSSL 14:167253f4e170 13639 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13640 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13641 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13642 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13643 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13644 "# A[23] * B[19]\n\t"
wolfSSL 14:167253f4e170 13645 "movq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13646 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13647 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13648 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13649 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13650 "movq %%rbx, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 13651 "# A[20] * B[23]\n\t"
wolfSSL 14:167253f4e170 13652 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13653 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 13654 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13655 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13656 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13657 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13658 "# A[21] * B[22]\n\t"
wolfSSL 14:167253f4e170 13659 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13660 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13661 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13662 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13663 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13664 "# A[22] * B[21]\n\t"
wolfSSL 14:167253f4e170 13665 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13666 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13667 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13668 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13669 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13670 "# A[23] * B[20]\n\t"
wolfSSL 14:167253f4e170 13671 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13672 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13673 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13674 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13675 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 13676 "movq %%rcx, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 13677 "# A[21] * B[23]\n\t"
wolfSSL 14:167253f4e170 13678 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13679 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 13680 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13681 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13682 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13683 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13684 "# A[22] * B[22]\n\t"
wolfSSL 14:167253f4e170 13685 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13686 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13687 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13688 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13689 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13690 "# A[23] * B[21]\n\t"
wolfSSL 14:167253f4e170 13691 "movq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13692 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13693 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13694 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 13695 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13696 "movq %%r8, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 13697 "# A[22] * B[23]\n\t"
wolfSSL 14:167253f4e170 13698 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13699 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 13700 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13701 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13702 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13703 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13704 "# A[23] * B[22]\n\t"
wolfSSL 14:167253f4e170 13705 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13706 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13707 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 13708 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13709 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13710 "movq %%rbx, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 13711 "# A[23] * B[23]\n\t"
wolfSSL 14:167253f4e170 13712 "movq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 13713 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 13714 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13715 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13716 "movq %%rcx, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 13717 "movq %%r8, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 13718 :
wolfSSL 14:167253f4e170 13719 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 13720 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 13721 );
wolfSSL 14:167253f4e170 13722
wolfSSL 14:167253f4e170 13723 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 13724 }
wolfSSL 14:167253f4e170 13725
wolfSSL 14:167253f4e170 13726 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 13727 *
wolfSSL 14:167253f4e170 13728 * r A single precision integer.
wolfSSL 14:167253f4e170 13729 * a A single precision integer.
wolfSSL 14:167253f4e170 13730 */
wolfSSL 14:167253f4e170 13731 SP_NOINLINE static void sp_3072_sqr_24(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 13732 {
wolfSSL 14:167253f4e170 13733 sp_digit tmp[24];
wolfSSL 14:167253f4e170 13734
wolfSSL 14:167253f4e170 13735 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 13736 "# A[0] * A[0]\n\t"
wolfSSL 14:167253f4e170 13737 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13738 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 13739 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 13740 "movq %%rax, (%[tmp])\n\t"
wolfSSL 14:167253f4e170 13741 "movq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13742 "# A[0] * A[1]\n\t"
wolfSSL 14:167253f4e170 13743 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13744 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13745 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13746 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13747 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13748 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13749 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13750 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13751 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13752 "movq %%r8, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13753 "# A[0] * A[2]\n\t"
wolfSSL 14:167253f4e170 13754 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13755 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13756 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13757 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 13758 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13759 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13760 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 13761 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13762 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13763 "# A[1] * A[1]\n\t"
wolfSSL 14:167253f4e170 13764 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13765 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 13766 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 13767 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13768 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 13769 "movq %%r9, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13770 "# A[0] * A[3]\n\t"
wolfSSL 14:167253f4e170 13771 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13772 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13773 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 13774 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13775 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13776 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 13777 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13778 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13779 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 13780 "# A[1] * A[2]\n\t"
wolfSSL 14:167253f4e170 13781 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13782 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13783 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13784 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13785 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 13786 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 13787 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 13788 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 13789 "movq %%rcx, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13790 "# A[0] * A[4]\n\t"
wolfSSL 14:167253f4e170 13791 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13792 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13793 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13794 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13795 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13796 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13797 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13798 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13799 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13800 "# A[1] * A[3]\n\t"
wolfSSL 14:167253f4e170 13801 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13802 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13803 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13804 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13805 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13806 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13807 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13808 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13809 "# A[2] * A[2]\n\t"
wolfSSL 14:167253f4e170 13810 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13811 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 13812 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 13813 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 13814 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 13815 "movq %%r8, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13816 "# A[0] * A[5]\n\t"
wolfSSL 14:167253f4e170 13817 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13818 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13819 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13820 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13821 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13822 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13823 "# A[1] * A[4]\n\t"
wolfSSL 14:167253f4e170 13824 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13825 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13826 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13827 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13828 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13829 "# A[2] * A[3]\n\t"
wolfSSL 14:167253f4e170 13830 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13831 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 13832 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13833 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13834 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13835 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 13836 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 13837 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13838 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 13839 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 13840 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 13841 "movq %%r9, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13842 "# A[0] * A[6]\n\t"
wolfSSL 14:167253f4e170 13843 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13844 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13845 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 13846 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13847 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13848 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13849 "# A[1] * A[5]\n\t"
wolfSSL 14:167253f4e170 13850 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13851 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13852 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13853 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13854 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13855 "# A[2] * A[4]\n\t"
wolfSSL 14:167253f4e170 13856 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13857 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 13858 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13859 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13860 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13861 "# A[3] * A[3]\n\t"
wolfSSL 14:167253f4e170 13862 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13863 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 13864 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 13865 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 13866 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13867 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13868 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13869 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13870 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 13871 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 13872 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 13873 "movq %%rcx, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13874 "# A[0] * A[7]\n\t"
wolfSSL 14:167253f4e170 13875 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13876 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13877 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13878 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13879 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13880 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13881 "# A[1] * A[6]\n\t"
wolfSSL 14:167253f4e170 13882 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13883 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13884 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13885 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13886 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13887 "# A[2] * A[5]\n\t"
wolfSSL 14:167253f4e170 13888 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13889 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 13890 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13891 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13892 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13893 "# A[3] * A[4]\n\t"
wolfSSL 14:167253f4e170 13894 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13895 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 13896 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13897 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13898 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13899 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 13900 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 13901 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13902 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 13903 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 13904 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 13905 "movq %%r8, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13906 "# A[0] * A[8]\n\t"
wolfSSL 14:167253f4e170 13907 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13908 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13909 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 13910 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13911 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13912 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13913 "# A[1] * A[7]\n\t"
wolfSSL 14:167253f4e170 13914 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13915 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13916 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13917 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13918 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13919 "# A[2] * A[6]\n\t"
wolfSSL 14:167253f4e170 13920 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13921 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 13922 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13923 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13924 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13925 "# A[3] * A[5]\n\t"
wolfSSL 14:167253f4e170 13926 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13927 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 13928 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13929 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13930 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13931 "# A[4] * A[4]\n\t"
wolfSSL 14:167253f4e170 13932 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13933 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 13934 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 13935 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 13936 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13937 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13938 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13939 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13940 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 13941 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 13942 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 13943 "movq %%r9, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13944 "# A[0] * A[9]\n\t"
wolfSSL 14:167253f4e170 13945 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13946 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13947 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 13948 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13949 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13950 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13951 "# A[1] * A[8]\n\t"
wolfSSL 14:167253f4e170 13952 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13953 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13954 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13955 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13956 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13957 "# A[2] * A[7]\n\t"
wolfSSL 14:167253f4e170 13958 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13959 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 13960 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13961 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13962 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13963 "# A[3] * A[6]\n\t"
wolfSSL 14:167253f4e170 13964 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13965 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 13966 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13967 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13968 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13969 "# A[4] * A[5]\n\t"
wolfSSL 14:167253f4e170 13970 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13971 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 13972 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13973 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13974 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13975 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 13976 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 13977 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13978 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 13979 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 13980 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 13981 "movq %%rcx, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 13982 "# A[0] * A[10]\n\t"
wolfSSL 14:167253f4e170 13983 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13984 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 13985 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 13986 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 13987 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13988 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13989 "# A[1] * A[9]\n\t"
wolfSSL 14:167253f4e170 13990 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13991 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 13992 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13993 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 13994 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 13995 "# A[2] * A[8]\n\t"
wolfSSL 14:167253f4e170 13996 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 13997 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 13998 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 13999 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14000 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14001 "# A[3] * A[7]\n\t"
wolfSSL 14:167253f4e170 14002 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14003 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14004 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14005 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14006 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14007 "# A[4] * A[6]\n\t"
wolfSSL 14:167253f4e170 14008 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14009 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14010 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14011 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14012 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14013 "# A[5] * A[5]\n\t"
wolfSSL 14:167253f4e170 14014 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14015 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14016 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14017 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14018 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14019 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14020 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14021 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14022 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 14023 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 14024 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 14025 "movq %%r8, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14026 "# A[0] * A[11]\n\t"
wolfSSL 14:167253f4e170 14027 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14028 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14029 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 14030 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14031 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14032 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14033 "# A[1] * A[10]\n\t"
wolfSSL 14:167253f4e170 14034 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14035 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14036 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14037 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14038 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14039 "# A[2] * A[9]\n\t"
wolfSSL 14:167253f4e170 14040 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14041 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14042 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14043 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14044 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14045 "# A[3] * A[8]\n\t"
wolfSSL 14:167253f4e170 14046 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14047 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14048 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14049 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14050 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14051 "# A[4] * A[7]\n\t"
wolfSSL 14:167253f4e170 14052 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14053 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14054 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14055 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14056 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14057 "# A[5] * A[6]\n\t"
wolfSSL 14:167253f4e170 14058 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14059 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14060 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14061 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14062 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14063 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14064 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14065 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14066 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 14067 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 14068 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 14069 "movq %%r9, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14070 "# A[0] * A[12]\n\t"
wolfSSL 14:167253f4e170 14071 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14072 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14073 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 14074 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14075 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14076 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14077 "# A[1] * A[11]\n\t"
wolfSSL 14:167253f4e170 14078 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14079 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14080 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14081 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14082 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14083 "# A[2] * A[10]\n\t"
wolfSSL 14:167253f4e170 14084 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14085 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14086 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14087 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14088 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14089 "# A[3] * A[9]\n\t"
wolfSSL 14:167253f4e170 14090 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14091 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14092 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14093 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14094 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14095 "# A[4] * A[8]\n\t"
wolfSSL 14:167253f4e170 14096 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14097 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14098 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14099 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14100 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14101 "# A[5] * A[7]\n\t"
wolfSSL 14:167253f4e170 14102 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14103 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14104 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14105 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14106 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14107 "# A[6] * A[6]\n\t"
wolfSSL 14:167253f4e170 14108 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14109 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14110 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14111 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14112 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14113 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14114 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14115 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14116 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 14117 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 14118 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 14119 "movq %%rcx, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14120 "# A[0] * A[13]\n\t"
wolfSSL 14:167253f4e170 14121 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14122 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14123 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 14124 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14125 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14126 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14127 "# A[1] * A[12]\n\t"
wolfSSL 14:167253f4e170 14128 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14129 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14130 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14131 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14132 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14133 "# A[2] * A[11]\n\t"
wolfSSL 14:167253f4e170 14134 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14135 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14136 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14137 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14138 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14139 "# A[3] * A[10]\n\t"
wolfSSL 14:167253f4e170 14140 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14141 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14142 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14143 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14144 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14145 "# A[4] * A[9]\n\t"
wolfSSL 14:167253f4e170 14146 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14147 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14148 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14149 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14150 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14151 "# A[5] * A[8]\n\t"
wolfSSL 14:167253f4e170 14152 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14153 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14154 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14155 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14156 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14157 "# A[6] * A[7]\n\t"
wolfSSL 14:167253f4e170 14158 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14159 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14160 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14161 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14162 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14163 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14164 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14165 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14166 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 14167 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 14168 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 14169 "movq %%r8, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14170 "# A[0] * A[14]\n\t"
wolfSSL 14:167253f4e170 14171 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14172 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14173 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 14174 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14175 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14176 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14177 "# A[1] * A[13]\n\t"
wolfSSL 14:167253f4e170 14178 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14179 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14180 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14181 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14182 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14183 "# A[2] * A[12]\n\t"
wolfSSL 14:167253f4e170 14184 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14185 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14186 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14187 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14188 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14189 "# A[3] * A[11]\n\t"
wolfSSL 14:167253f4e170 14190 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14191 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14192 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14193 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14194 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14195 "# A[4] * A[10]\n\t"
wolfSSL 14:167253f4e170 14196 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14197 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14198 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14199 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14200 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14201 "# A[5] * A[9]\n\t"
wolfSSL 14:167253f4e170 14202 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14203 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14204 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14205 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14206 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14207 "# A[6] * A[8]\n\t"
wolfSSL 14:167253f4e170 14208 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14209 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14210 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14211 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14212 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14213 "# A[7] * A[7]\n\t"
wolfSSL 14:167253f4e170 14214 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14215 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14216 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14217 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14218 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14219 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14220 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14221 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14222 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 14223 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 14224 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 14225 "movq %%r9, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14226 "# A[0] * A[15]\n\t"
wolfSSL 14:167253f4e170 14227 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14228 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14229 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 14230 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14231 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14232 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14233 "# A[1] * A[14]\n\t"
wolfSSL 14:167253f4e170 14234 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14235 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14236 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14237 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14238 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14239 "# A[2] * A[13]\n\t"
wolfSSL 14:167253f4e170 14240 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14241 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14242 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14243 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14244 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14245 "# A[3] * A[12]\n\t"
wolfSSL 14:167253f4e170 14246 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14247 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14248 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14249 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14250 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14251 "# A[4] * A[11]\n\t"
wolfSSL 14:167253f4e170 14252 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14253 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14254 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14255 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14256 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14257 "# A[5] * A[10]\n\t"
wolfSSL 14:167253f4e170 14258 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14259 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14260 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14261 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14262 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14263 "# A[6] * A[9]\n\t"
wolfSSL 14:167253f4e170 14264 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14265 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14266 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14267 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14268 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14269 "# A[7] * A[8]\n\t"
wolfSSL 14:167253f4e170 14270 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14271 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14272 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14273 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14274 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14275 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14276 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14277 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14278 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 14279 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 14280 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 14281 "movq %%rcx, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14282 "# A[0] * A[16]\n\t"
wolfSSL 14:167253f4e170 14283 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14284 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14285 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 14286 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14287 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14288 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14289 "# A[1] * A[15]\n\t"
wolfSSL 14:167253f4e170 14290 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14291 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14292 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14293 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14294 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14295 "# A[2] * A[14]\n\t"
wolfSSL 14:167253f4e170 14296 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14297 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14298 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14299 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14300 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14301 "# A[3] * A[13]\n\t"
wolfSSL 14:167253f4e170 14302 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14303 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14304 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14305 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14306 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14307 "# A[4] * A[12]\n\t"
wolfSSL 14:167253f4e170 14308 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14309 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14310 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14311 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14312 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14313 "# A[5] * A[11]\n\t"
wolfSSL 14:167253f4e170 14314 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14315 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14316 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14317 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14318 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14319 "# A[6] * A[10]\n\t"
wolfSSL 14:167253f4e170 14320 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14321 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14322 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14323 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14324 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14325 "# A[7] * A[9]\n\t"
wolfSSL 14:167253f4e170 14326 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14327 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14328 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14329 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14330 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14331 "# A[8] * A[8]\n\t"
wolfSSL 14:167253f4e170 14332 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14333 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14334 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14335 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14336 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14337 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14338 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14339 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14340 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 14341 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 14342 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 14343 "movq %%r8, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14344 "# A[0] * A[17]\n\t"
wolfSSL 14:167253f4e170 14345 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14346 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14347 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 14348 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14349 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14350 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14351 "# A[1] * A[16]\n\t"
wolfSSL 14:167253f4e170 14352 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14353 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14354 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14355 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14356 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14357 "# A[2] * A[15]\n\t"
wolfSSL 14:167253f4e170 14358 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14359 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14360 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14361 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14362 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14363 "# A[3] * A[14]\n\t"
wolfSSL 14:167253f4e170 14364 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14365 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14366 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14367 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14368 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14369 "# A[4] * A[13]\n\t"
wolfSSL 14:167253f4e170 14370 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14371 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14372 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14373 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14374 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14375 "# A[5] * A[12]\n\t"
wolfSSL 14:167253f4e170 14376 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14377 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14378 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14379 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14380 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14381 "# A[6] * A[11]\n\t"
wolfSSL 14:167253f4e170 14382 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14383 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14384 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14385 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14386 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14387 "# A[7] * A[10]\n\t"
wolfSSL 14:167253f4e170 14388 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14389 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14390 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14391 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14392 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14393 "# A[8] * A[9]\n\t"
wolfSSL 14:167253f4e170 14394 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14395 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14396 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14397 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14398 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14399 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14400 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14401 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14402 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 14403 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 14404 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 14405 "movq %%r9, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14406 "# A[0] * A[18]\n\t"
wolfSSL 14:167253f4e170 14407 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14408 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14409 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 14410 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14411 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14412 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14413 "# A[1] * A[17]\n\t"
wolfSSL 14:167253f4e170 14414 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14415 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14416 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14417 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14418 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14419 "# A[2] * A[16]\n\t"
wolfSSL 14:167253f4e170 14420 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14421 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14422 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14423 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14424 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14425 "# A[3] * A[15]\n\t"
wolfSSL 14:167253f4e170 14426 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14427 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14428 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14429 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14430 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14431 "# A[4] * A[14]\n\t"
wolfSSL 14:167253f4e170 14432 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14433 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14434 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14435 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14436 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14437 "# A[5] * A[13]\n\t"
wolfSSL 14:167253f4e170 14438 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14439 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14440 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14441 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14442 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14443 "# A[6] * A[12]\n\t"
wolfSSL 14:167253f4e170 14444 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14445 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14446 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14447 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14448 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14449 "# A[7] * A[11]\n\t"
wolfSSL 14:167253f4e170 14450 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14451 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14452 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14453 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14454 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14455 "# A[8] * A[10]\n\t"
wolfSSL 14:167253f4e170 14456 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14457 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14458 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14459 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14460 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14461 "# A[9] * A[9]\n\t"
wolfSSL 14:167253f4e170 14462 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14463 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14464 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14465 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14466 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14467 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14468 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14469 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14470 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 14471 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 14472 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 14473 "movq %%rcx, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14474 "# A[0] * A[19]\n\t"
wolfSSL 14:167253f4e170 14475 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14476 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14477 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 14478 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14479 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14480 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14481 "# A[1] * A[18]\n\t"
wolfSSL 14:167253f4e170 14482 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14483 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14484 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14485 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14486 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14487 "# A[2] * A[17]\n\t"
wolfSSL 14:167253f4e170 14488 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14489 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14490 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14491 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14492 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14493 "# A[3] * A[16]\n\t"
wolfSSL 14:167253f4e170 14494 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14495 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14496 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14497 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14498 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14499 "# A[4] * A[15]\n\t"
wolfSSL 14:167253f4e170 14500 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14501 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14502 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14503 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14504 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14505 "# A[5] * A[14]\n\t"
wolfSSL 14:167253f4e170 14506 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14507 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14508 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14509 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14510 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14511 "# A[6] * A[13]\n\t"
wolfSSL 14:167253f4e170 14512 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14513 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14514 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14515 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14516 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14517 "# A[7] * A[12]\n\t"
wolfSSL 14:167253f4e170 14518 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14519 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14520 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14521 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14522 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14523 "# A[8] * A[11]\n\t"
wolfSSL 14:167253f4e170 14524 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14525 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14526 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14527 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14528 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14529 "# A[9] * A[10]\n\t"
wolfSSL 14:167253f4e170 14530 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14531 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14532 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14533 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14534 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14535 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14536 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14537 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14538 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 14539 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 14540 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 14541 "movq %%r8, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14542 "# A[0] * A[20]\n\t"
wolfSSL 14:167253f4e170 14543 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14544 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14545 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 14546 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14547 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14548 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14549 "# A[1] * A[19]\n\t"
wolfSSL 14:167253f4e170 14550 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14551 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14552 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14553 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14554 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14555 "# A[2] * A[18]\n\t"
wolfSSL 14:167253f4e170 14556 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14557 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14558 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14559 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14560 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14561 "# A[3] * A[17]\n\t"
wolfSSL 14:167253f4e170 14562 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14563 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14564 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14565 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14566 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14567 "# A[4] * A[16]\n\t"
wolfSSL 14:167253f4e170 14568 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14569 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14570 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14571 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14572 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14573 "# A[5] * A[15]\n\t"
wolfSSL 14:167253f4e170 14574 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14575 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14576 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14577 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14578 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14579 "# A[6] * A[14]\n\t"
wolfSSL 14:167253f4e170 14580 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14581 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14582 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14583 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14584 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14585 "# A[7] * A[13]\n\t"
wolfSSL 14:167253f4e170 14586 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14587 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14588 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14589 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14590 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14591 "# A[8] * A[12]\n\t"
wolfSSL 14:167253f4e170 14592 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14593 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14594 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14595 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14596 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14597 "# A[9] * A[11]\n\t"
wolfSSL 14:167253f4e170 14598 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14599 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14600 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14601 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14602 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14603 "# A[10] * A[10]\n\t"
wolfSSL 14:167253f4e170 14604 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14605 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14606 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14607 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14608 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14609 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14610 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14611 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14612 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 14613 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 14614 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 14615 "movq %%r9, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14616 "# A[0] * A[21]\n\t"
wolfSSL 14:167253f4e170 14617 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14618 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14619 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 14620 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14621 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14622 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14623 "# A[1] * A[20]\n\t"
wolfSSL 14:167253f4e170 14624 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14625 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14626 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14627 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14628 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14629 "# A[2] * A[19]\n\t"
wolfSSL 14:167253f4e170 14630 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14631 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14632 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14633 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14634 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14635 "# A[3] * A[18]\n\t"
wolfSSL 14:167253f4e170 14636 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14637 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14638 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14639 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14640 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14641 "# A[4] * A[17]\n\t"
wolfSSL 14:167253f4e170 14642 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14643 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14644 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14645 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14646 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14647 "# A[5] * A[16]\n\t"
wolfSSL 14:167253f4e170 14648 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14649 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14650 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14651 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14652 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14653 "# A[6] * A[15]\n\t"
wolfSSL 14:167253f4e170 14654 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14655 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14656 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14657 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14658 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14659 "# A[7] * A[14]\n\t"
wolfSSL 14:167253f4e170 14660 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14661 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14662 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14663 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14664 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14665 "# A[8] * A[13]\n\t"
wolfSSL 14:167253f4e170 14666 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14667 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14668 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14669 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14670 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14671 "# A[9] * A[12]\n\t"
wolfSSL 14:167253f4e170 14672 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14673 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14674 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14675 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14676 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14677 "# A[10] * A[11]\n\t"
wolfSSL 14:167253f4e170 14678 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14679 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 14680 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14681 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14682 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14683 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14684 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14685 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14686 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 14687 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 14688 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 14689 "movq %%rcx, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14690 "# A[0] * A[22]\n\t"
wolfSSL 14:167253f4e170 14691 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14692 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14693 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 14694 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14695 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14696 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14697 "# A[1] * A[21]\n\t"
wolfSSL 14:167253f4e170 14698 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14699 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14700 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14701 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14702 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14703 "# A[2] * A[20]\n\t"
wolfSSL 14:167253f4e170 14704 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14705 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14706 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14707 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14708 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14709 "# A[3] * A[19]\n\t"
wolfSSL 14:167253f4e170 14710 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14711 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14712 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14713 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14714 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14715 "# A[4] * A[18]\n\t"
wolfSSL 14:167253f4e170 14716 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14717 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14718 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14719 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14720 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14721 "# A[5] * A[17]\n\t"
wolfSSL 14:167253f4e170 14722 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14723 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14724 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14725 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14726 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14727 "# A[6] * A[16]\n\t"
wolfSSL 14:167253f4e170 14728 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14729 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14730 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14731 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14732 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14733 "# A[7] * A[15]\n\t"
wolfSSL 14:167253f4e170 14734 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14735 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14736 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14737 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14738 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14739 "# A[8] * A[14]\n\t"
wolfSSL 14:167253f4e170 14740 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14741 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14742 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14743 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14744 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14745 "# A[9] * A[13]\n\t"
wolfSSL 14:167253f4e170 14746 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14747 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14748 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14749 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14750 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14751 "# A[10] * A[12]\n\t"
wolfSSL 14:167253f4e170 14752 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14753 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 14754 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14755 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14756 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14757 "# A[11] * A[11]\n\t"
wolfSSL 14:167253f4e170 14758 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14759 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14760 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14761 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14762 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14763 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14764 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14765 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14766 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 14767 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 14768 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 14769 "movq %%r8, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14770 "# A[0] * A[23]\n\t"
wolfSSL 14:167253f4e170 14771 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14772 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 14773 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 14774 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14775 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14776 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14777 "# A[1] * A[22]\n\t"
wolfSSL 14:167253f4e170 14778 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14779 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14780 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14781 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14782 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14783 "# A[2] * A[21]\n\t"
wolfSSL 14:167253f4e170 14784 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14785 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14786 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14787 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14788 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14789 "# A[3] * A[20]\n\t"
wolfSSL 14:167253f4e170 14790 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14791 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14792 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14793 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14794 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14795 "# A[4] * A[19]\n\t"
wolfSSL 14:167253f4e170 14796 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14797 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14798 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14799 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14800 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14801 "# A[5] * A[18]\n\t"
wolfSSL 14:167253f4e170 14802 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14803 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14804 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14805 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14806 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14807 "# A[6] * A[17]\n\t"
wolfSSL 14:167253f4e170 14808 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14809 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14810 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14811 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14812 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14813 "# A[7] * A[16]\n\t"
wolfSSL 14:167253f4e170 14814 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14815 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14816 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14817 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14818 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14819 "# A[8] * A[15]\n\t"
wolfSSL 14:167253f4e170 14820 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14821 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14822 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14823 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14824 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14825 "# A[9] * A[14]\n\t"
wolfSSL 14:167253f4e170 14826 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14827 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14828 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14829 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14830 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14831 "# A[10] * A[13]\n\t"
wolfSSL 14:167253f4e170 14832 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14833 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 14834 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14835 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14836 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14837 "# A[11] * A[12]\n\t"
wolfSSL 14:167253f4e170 14838 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14839 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 14840 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14841 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14842 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14843 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14844 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14845 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14846 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 14847 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 14848 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 14849 "movq %%r9, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 14850 "# A[1] * A[23]\n\t"
wolfSSL 14:167253f4e170 14851 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14852 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 14853 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 14854 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14855 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14856 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14857 "# A[2] * A[22]\n\t"
wolfSSL 14:167253f4e170 14858 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14859 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14860 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14861 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14862 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14863 "# A[3] * A[21]\n\t"
wolfSSL 14:167253f4e170 14864 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14865 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14866 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14867 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14868 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14869 "# A[4] * A[20]\n\t"
wolfSSL 14:167253f4e170 14870 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14871 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14872 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14873 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14874 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14875 "# A[5] * A[19]\n\t"
wolfSSL 14:167253f4e170 14876 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14877 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14878 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14879 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14880 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14881 "# A[6] * A[18]\n\t"
wolfSSL 14:167253f4e170 14882 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14883 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14884 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14885 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14886 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14887 "# A[7] * A[17]\n\t"
wolfSSL 14:167253f4e170 14888 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14889 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14890 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14891 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14892 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14893 "# A[8] * A[16]\n\t"
wolfSSL 14:167253f4e170 14894 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14895 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14896 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14897 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14898 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14899 "# A[9] * A[15]\n\t"
wolfSSL 14:167253f4e170 14900 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14901 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14902 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14903 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14904 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14905 "# A[10] * A[14]\n\t"
wolfSSL 14:167253f4e170 14906 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14907 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 14908 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14909 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14910 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14911 "# A[11] * A[13]\n\t"
wolfSSL 14:167253f4e170 14912 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14913 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 14914 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14915 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14916 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14917 "# A[12] * A[12]\n\t"
wolfSSL 14:167253f4e170 14918 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14919 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 14920 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14921 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14922 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14923 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14924 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14925 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14926 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 14927 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 14928 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 14929 "movq %%rcx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 14930 "# A[2] * A[23]\n\t"
wolfSSL 14:167253f4e170 14931 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14932 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 14933 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 14934 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 14935 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14936 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14937 "# A[3] * A[22]\n\t"
wolfSSL 14:167253f4e170 14938 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14939 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 14940 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14941 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14942 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14943 "# A[4] * A[21]\n\t"
wolfSSL 14:167253f4e170 14944 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14945 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 14946 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14947 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14948 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14949 "# A[5] * A[20]\n\t"
wolfSSL 14:167253f4e170 14950 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14951 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 14952 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14953 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14954 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14955 "# A[6] * A[19]\n\t"
wolfSSL 14:167253f4e170 14956 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14957 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 14958 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14959 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14960 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14961 "# A[7] * A[18]\n\t"
wolfSSL 14:167253f4e170 14962 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14963 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 14964 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14965 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14966 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14967 "# A[8] * A[17]\n\t"
wolfSSL 14:167253f4e170 14968 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14969 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 14970 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14971 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14972 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14973 "# A[9] * A[16]\n\t"
wolfSSL 14:167253f4e170 14974 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14975 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 14976 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14977 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14978 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14979 "# A[10] * A[15]\n\t"
wolfSSL 14:167253f4e170 14980 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14981 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 14982 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14983 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14984 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14985 "# A[11] * A[14]\n\t"
wolfSSL 14:167253f4e170 14986 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14987 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 14988 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14989 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14990 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14991 "# A[12] * A[13]\n\t"
wolfSSL 14:167253f4e170 14992 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 14993 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 14994 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 14995 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 14996 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 14997 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 14998 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 14999 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15000 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 15001 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 15002 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 15003 "movq %%r8, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 15004 "# A[3] * A[23]\n\t"
wolfSSL 14:167253f4e170 15005 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15006 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 15007 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15008 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15009 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15010 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15011 "# A[4] * A[22]\n\t"
wolfSSL 14:167253f4e170 15012 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15013 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 15014 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15015 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15016 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15017 "# A[5] * A[21]\n\t"
wolfSSL 14:167253f4e170 15018 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15019 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 15020 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15021 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15022 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15023 "# A[6] * A[20]\n\t"
wolfSSL 14:167253f4e170 15024 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15025 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 15026 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15027 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15028 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15029 "# A[7] * A[19]\n\t"
wolfSSL 14:167253f4e170 15030 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15031 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 15032 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15033 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15034 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15035 "# A[8] * A[18]\n\t"
wolfSSL 14:167253f4e170 15036 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15037 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 15038 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15039 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15040 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15041 "# A[9] * A[17]\n\t"
wolfSSL 14:167253f4e170 15042 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15043 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15044 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15045 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15046 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15047 "# A[10] * A[16]\n\t"
wolfSSL 14:167253f4e170 15048 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15049 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15050 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15051 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15052 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15053 "# A[11] * A[15]\n\t"
wolfSSL 14:167253f4e170 15054 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15055 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15056 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15057 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15058 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15059 "# A[12] * A[14]\n\t"
wolfSSL 14:167253f4e170 15060 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15061 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15062 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15063 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15064 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15065 "# A[13] * A[13]\n\t"
wolfSSL 14:167253f4e170 15066 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15067 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15068 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15069 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15070 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15071 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15072 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15073 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15074 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 15075 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 15076 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 15077 "movq %%r9, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 15078 "# A[4] * A[23]\n\t"
wolfSSL 14:167253f4e170 15079 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15080 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 15081 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15082 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15083 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15084 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15085 "# A[5] * A[22]\n\t"
wolfSSL 14:167253f4e170 15086 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15087 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 15088 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15089 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15090 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15091 "# A[6] * A[21]\n\t"
wolfSSL 14:167253f4e170 15092 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15093 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 15094 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15095 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15096 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15097 "# A[7] * A[20]\n\t"
wolfSSL 14:167253f4e170 15098 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15099 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 15100 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15101 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15102 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15103 "# A[8] * A[19]\n\t"
wolfSSL 14:167253f4e170 15104 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15105 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 15106 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15107 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15108 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15109 "# A[9] * A[18]\n\t"
wolfSSL 14:167253f4e170 15110 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15111 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15112 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15113 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15114 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15115 "# A[10] * A[17]\n\t"
wolfSSL 14:167253f4e170 15116 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15117 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15118 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15119 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15120 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15121 "# A[11] * A[16]\n\t"
wolfSSL 14:167253f4e170 15122 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15123 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15124 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15125 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15126 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15127 "# A[12] * A[15]\n\t"
wolfSSL 14:167253f4e170 15128 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15129 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15130 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15131 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15132 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15133 "# A[13] * A[14]\n\t"
wolfSSL 14:167253f4e170 15134 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15135 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15136 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15137 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15138 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15139 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15140 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15141 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15142 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 15143 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 15144 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 15145 "movq %%rcx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 15146 "# A[5] * A[23]\n\t"
wolfSSL 14:167253f4e170 15147 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15148 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 15149 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15150 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15151 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15152 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15153 "# A[6] * A[22]\n\t"
wolfSSL 14:167253f4e170 15154 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15155 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 15156 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15157 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15158 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15159 "# A[7] * A[21]\n\t"
wolfSSL 14:167253f4e170 15160 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15161 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 15162 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15163 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15164 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15165 "# A[8] * A[20]\n\t"
wolfSSL 14:167253f4e170 15166 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15167 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 15168 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15169 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15170 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15171 "# A[9] * A[19]\n\t"
wolfSSL 14:167253f4e170 15172 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15173 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15174 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15175 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15176 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15177 "# A[10] * A[18]\n\t"
wolfSSL 14:167253f4e170 15178 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15179 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15180 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15181 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15182 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15183 "# A[11] * A[17]\n\t"
wolfSSL 14:167253f4e170 15184 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15185 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15186 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15187 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15188 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15189 "# A[12] * A[16]\n\t"
wolfSSL 14:167253f4e170 15190 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15191 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15192 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15193 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15194 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15195 "# A[13] * A[15]\n\t"
wolfSSL 14:167253f4e170 15196 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15197 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15198 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15199 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15200 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15201 "# A[14] * A[14]\n\t"
wolfSSL 14:167253f4e170 15202 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15203 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15204 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15205 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15206 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15207 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15208 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15209 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15210 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 15211 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 15212 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 15213 "movq %%r8, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 15214 "# A[6] * A[23]\n\t"
wolfSSL 14:167253f4e170 15215 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15216 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 15217 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15218 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15219 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15220 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15221 "# A[7] * A[22]\n\t"
wolfSSL 14:167253f4e170 15222 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15223 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 15224 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15225 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15226 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15227 "# A[8] * A[21]\n\t"
wolfSSL 14:167253f4e170 15228 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15229 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 15230 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15231 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15232 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15233 "# A[9] * A[20]\n\t"
wolfSSL 14:167253f4e170 15234 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15235 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15236 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15237 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15238 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15239 "# A[10] * A[19]\n\t"
wolfSSL 14:167253f4e170 15240 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15241 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15242 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15243 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15244 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15245 "# A[11] * A[18]\n\t"
wolfSSL 14:167253f4e170 15246 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15247 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15248 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15249 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15250 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15251 "# A[12] * A[17]\n\t"
wolfSSL 14:167253f4e170 15252 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15253 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15254 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15255 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15256 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15257 "# A[13] * A[16]\n\t"
wolfSSL 14:167253f4e170 15258 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15259 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15260 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15261 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15262 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15263 "# A[14] * A[15]\n\t"
wolfSSL 14:167253f4e170 15264 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15265 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15266 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15267 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15268 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15269 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15270 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15271 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15272 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 15273 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 15274 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 15275 "movq %%r9, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 15276 "# A[7] * A[23]\n\t"
wolfSSL 14:167253f4e170 15277 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15278 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 15279 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15280 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15281 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15282 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15283 "# A[8] * A[22]\n\t"
wolfSSL 14:167253f4e170 15284 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15285 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 15286 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15287 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15288 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15289 "# A[9] * A[21]\n\t"
wolfSSL 14:167253f4e170 15290 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15291 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15292 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15293 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15294 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15295 "# A[10] * A[20]\n\t"
wolfSSL 14:167253f4e170 15296 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15297 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15298 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15299 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15300 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15301 "# A[11] * A[19]\n\t"
wolfSSL 14:167253f4e170 15302 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15303 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15304 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15305 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15306 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15307 "# A[12] * A[18]\n\t"
wolfSSL 14:167253f4e170 15308 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15309 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15310 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15311 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15312 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15313 "# A[13] * A[17]\n\t"
wolfSSL 14:167253f4e170 15314 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15315 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15316 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15317 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15318 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15319 "# A[14] * A[16]\n\t"
wolfSSL 14:167253f4e170 15320 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15321 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15322 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15323 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15324 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15325 "# A[15] * A[15]\n\t"
wolfSSL 14:167253f4e170 15326 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15327 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15328 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15329 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15330 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15331 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15332 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15333 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15334 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 15335 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 15336 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 15337 "movq %%rcx, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 15338 "# A[8] * A[23]\n\t"
wolfSSL 14:167253f4e170 15339 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15340 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 15341 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15342 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15343 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15344 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15345 "# A[9] * A[22]\n\t"
wolfSSL 14:167253f4e170 15346 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15347 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15348 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15349 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15350 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15351 "# A[10] * A[21]\n\t"
wolfSSL 14:167253f4e170 15352 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15353 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15354 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15355 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15356 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15357 "# A[11] * A[20]\n\t"
wolfSSL 14:167253f4e170 15358 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15359 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15360 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15361 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15362 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15363 "# A[12] * A[19]\n\t"
wolfSSL 14:167253f4e170 15364 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15365 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15366 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15367 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15368 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15369 "# A[13] * A[18]\n\t"
wolfSSL 14:167253f4e170 15370 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15371 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15372 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15373 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15374 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15375 "# A[14] * A[17]\n\t"
wolfSSL 14:167253f4e170 15376 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15377 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15378 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15379 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15380 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15381 "# A[15] * A[16]\n\t"
wolfSSL 14:167253f4e170 15382 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15383 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15384 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15385 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15386 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15387 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15388 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15389 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15390 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 15391 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 15392 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 15393 "movq %%r8, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 15394 "# A[9] * A[23]\n\t"
wolfSSL 14:167253f4e170 15395 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15396 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 15397 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15398 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15399 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15400 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15401 "# A[10] * A[22]\n\t"
wolfSSL 14:167253f4e170 15402 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15403 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15404 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15405 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15406 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15407 "# A[11] * A[21]\n\t"
wolfSSL 14:167253f4e170 15408 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15409 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15410 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15411 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15412 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15413 "# A[12] * A[20]\n\t"
wolfSSL 14:167253f4e170 15414 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15415 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15416 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15417 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15418 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15419 "# A[13] * A[19]\n\t"
wolfSSL 14:167253f4e170 15420 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15421 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15422 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15423 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15424 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15425 "# A[14] * A[18]\n\t"
wolfSSL 14:167253f4e170 15426 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15427 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15428 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15429 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15430 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15431 "# A[15] * A[17]\n\t"
wolfSSL 14:167253f4e170 15432 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15433 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15434 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15435 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15436 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15437 "# A[16] * A[16]\n\t"
wolfSSL 14:167253f4e170 15438 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15439 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15440 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15441 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15442 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15443 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15444 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15445 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15446 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 15447 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 15448 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 15449 "movq %%r9, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 15450 "# A[10] * A[23]\n\t"
wolfSSL 14:167253f4e170 15451 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15452 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 15453 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15454 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15455 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15456 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15457 "# A[11] * A[22]\n\t"
wolfSSL 14:167253f4e170 15458 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15459 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15460 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15461 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15462 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15463 "# A[12] * A[21]\n\t"
wolfSSL 14:167253f4e170 15464 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15465 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15466 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15467 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15468 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15469 "# A[13] * A[20]\n\t"
wolfSSL 14:167253f4e170 15470 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15471 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15472 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15473 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15474 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15475 "# A[14] * A[19]\n\t"
wolfSSL 14:167253f4e170 15476 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15477 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15478 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15479 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15480 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15481 "# A[15] * A[18]\n\t"
wolfSSL 14:167253f4e170 15482 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15483 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15484 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15485 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15486 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15487 "# A[16] * A[17]\n\t"
wolfSSL 14:167253f4e170 15488 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15489 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15490 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15491 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15492 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15493 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15494 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15495 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15496 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 15497 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 15498 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 15499 "movq %%rcx, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 15500 "# A[11] * A[23]\n\t"
wolfSSL 14:167253f4e170 15501 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15502 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 15503 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15504 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15505 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15506 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15507 "# A[12] * A[22]\n\t"
wolfSSL 14:167253f4e170 15508 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15509 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15510 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15511 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15512 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15513 "# A[13] * A[21]\n\t"
wolfSSL 14:167253f4e170 15514 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15515 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15516 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15517 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15518 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15519 "# A[14] * A[20]\n\t"
wolfSSL 14:167253f4e170 15520 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15521 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15522 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15523 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15524 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15525 "# A[15] * A[19]\n\t"
wolfSSL 14:167253f4e170 15526 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15527 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15528 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15529 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15530 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15531 "# A[16] * A[18]\n\t"
wolfSSL 14:167253f4e170 15532 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15533 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15534 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15535 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15536 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15537 "# A[17] * A[17]\n\t"
wolfSSL 14:167253f4e170 15538 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15539 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15540 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15541 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15542 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15543 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15544 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15545 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15546 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 15547 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 15548 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 15549 "movq %%r8, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 15550 "# A[12] * A[23]\n\t"
wolfSSL 14:167253f4e170 15551 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15552 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 15553 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15554 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15555 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15556 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15557 "# A[13] * A[22]\n\t"
wolfSSL 14:167253f4e170 15558 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15559 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15560 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15561 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15562 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15563 "# A[14] * A[21]\n\t"
wolfSSL 14:167253f4e170 15564 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15565 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15566 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15567 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15568 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15569 "# A[15] * A[20]\n\t"
wolfSSL 14:167253f4e170 15570 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15571 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15572 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15573 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15574 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15575 "# A[16] * A[19]\n\t"
wolfSSL 14:167253f4e170 15576 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15577 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15578 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15579 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15580 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15581 "# A[17] * A[18]\n\t"
wolfSSL 14:167253f4e170 15582 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15583 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 15584 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15585 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15586 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15587 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15588 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15589 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15590 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 15591 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 15592 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 15593 "movq %%r9, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 15594 "# A[13] * A[23]\n\t"
wolfSSL 14:167253f4e170 15595 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15596 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 15597 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15598 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15599 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15600 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15601 "# A[14] * A[22]\n\t"
wolfSSL 14:167253f4e170 15602 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15603 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15604 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15605 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15606 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15607 "# A[15] * A[21]\n\t"
wolfSSL 14:167253f4e170 15608 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15609 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15610 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15611 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15612 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15613 "# A[16] * A[20]\n\t"
wolfSSL 14:167253f4e170 15614 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15615 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15616 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15617 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15618 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15619 "# A[17] * A[19]\n\t"
wolfSSL 14:167253f4e170 15620 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15621 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 15622 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15623 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15624 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15625 "# A[18] * A[18]\n\t"
wolfSSL 14:167253f4e170 15626 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15627 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15628 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15629 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15630 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15631 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15632 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15633 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15634 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 15635 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 15636 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 15637 "movq %%rcx, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 15638 "# A[14] * A[23]\n\t"
wolfSSL 14:167253f4e170 15639 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15640 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 15641 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15642 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15643 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15644 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15645 "# A[15] * A[22]\n\t"
wolfSSL 14:167253f4e170 15646 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15647 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15648 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15649 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15650 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15651 "# A[16] * A[21]\n\t"
wolfSSL 14:167253f4e170 15652 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15653 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15654 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15655 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15656 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15657 "# A[17] * A[20]\n\t"
wolfSSL 14:167253f4e170 15658 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15659 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 15660 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15661 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15662 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15663 "# A[18] * A[19]\n\t"
wolfSSL 14:167253f4e170 15664 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15665 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 15666 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15667 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15668 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15669 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15670 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15671 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15672 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 15673 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 15674 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 15675 "movq %%r8, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 15676 "# A[15] * A[23]\n\t"
wolfSSL 14:167253f4e170 15677 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15678 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 15679 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15680 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15681 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15682 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15683 "# A[16] * A[22]\n\t"
wolfSSL 14:167253f4e170 15684 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15685 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15686 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15687 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15688 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15689 "# A[17] * A[21]\n\t"
wolfSSL 14:167253f4e170 15690 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15691 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 15692 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15693 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15694 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15695 "# A[18] * A[20]\n\t"
wolfSSL 14:167253f4e170 15696 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15697 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 15698 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15699 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15700 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15701 "# A[19] * A[19]\n\t"
wolfSSL 14:167253f4e170 15702 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15703 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15704 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15705 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15706 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15707 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15708 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15709 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15710 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 15711 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 15712 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 15713 "movq %%r9, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 15714 "# A[16] * A[23]\n\t"
wolfSSL 14:167253f4e170 15715 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15716 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 15717 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15718 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15719 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15720 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15721 "# A[17] * A[22]\n\t"
wolfSSL 14:167253f4e170 15722 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15723 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 15724 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15725 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15726 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15727 "# A[18] * A[21]\n\t"
wolfSSL 14:167253f4e170 15728 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15729 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 15730 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15731 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15732 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15733 "# A[19] * A[20]\n\t"
wolfSSL 14:167253f4e170 15734 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15735 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 15736 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15737 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15738 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15739 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15740 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15741 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15742 "addq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 15743 "adcq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 15744 "adcq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 15745 "movq %%rcx, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 15746 "# A[17] * A[23]\n\t"
wolfSSL 14:167253f4e170 15747 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15748 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 15749 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15750 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15751 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15752 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15753 "# A[18] * A[22]\n\t"
wolfSSL 14:167253f4e170 15754 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15755 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 15756 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15757 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15758 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15759 "# A[19] * A[21]\n\t"
wolfSSL 14:167253f4e170 15760 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15761 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 15762 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15763 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15764 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15765 "# A[20] * A[20]\n\t"
wolfSSL 14:167253f4e170 15766 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15767 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15768 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15769 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15770 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15771 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15772 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15773 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15774 "addq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 15775 "adcq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 15776 "adcq %%r12, %%rcx\n\t"
wolfSSL 14:167253f4e170 15777 "movq %%r8, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 15778 "# A[18] * A[23]\n\t"
wolfSSL 14:167253f4e170 15779 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15780 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 15781 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15782 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15783 "movq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15784 "movq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15785 "# A[19] * A[22]\n\t"
wolfSSL 14:167253f4e170 15786 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15787 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 15788 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15789 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15790 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15791 "# A[20] * A[21]\n\t"
wolfSSL 14:167253f4e170 15792 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15793 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 15794 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 15795 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 15796 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 15797 "addq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 15798 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 15799 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 15800 "addq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 15801 "adcq %%r11, %%rcx\n\t"
wolfSSL 14:167253f4e170 15802 "adcq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 15803 "movq %%r9, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 15804 "# A[19] * A[23]\n\t"
wolfSSL 14:167253f4e170 15805 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15806 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 15807 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15808 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15809 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15810 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15811 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15812 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15813 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15814 "# A[20] * A[22]\n\t"
wolfSSL 14:167253f4e170 15815 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15816 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 15817 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15818 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15819 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15820 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15821 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15822 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15823 "# A[21] * A[21]\n\t"
wolfSSL 14:167253f4e170 15824 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15825 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15826 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15827 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15828 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15829 "movq %%rcx, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 15830 "# A[20] * A[23]\n\t"
wolfSSL 14:167253f4e170 15831 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15832 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 15833 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15834 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 15835 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 15836 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 15837 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 15838 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 15839 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 15840 "# A[21] * A[22]\n\t"
wolfSSL 14:167253f4e170 15841 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15842 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 15843 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 15844 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 15845 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 15846 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 15847 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 15848 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 15849 "movq %%r8, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 15850 "# A[21] * A[23]\n\t"
wolfSSL 14:167253f4e170 15851 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15852 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 15853 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 15854 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 15855 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15856 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 15857 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 15858 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15859 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 15860 "# A[22] * A[22]\n\t"
wolfSSL 14:167253f4e170 15861 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15862 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15863 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 15864 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 15865 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 15866 "movq %%r9, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 15867 "# A[22] * A[23]\n\t"
wolfSSL 14:167253f4e170 15868 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15869 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 15870 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 15871 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15872 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15873 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15874 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 15875 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 15876 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 15877 "movq %%rcx, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 15878 "# A[23] * A[23]\n\t"
wolfSSL 14:167253f4e170 15879 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 15880 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 15881 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 15882 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 15883 "movq %%r8, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 15884 "movq %%r9, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 15885 :
wolfSSL 14:167253f4e170 15886 : [r] "r" (r), [a] "r" (a), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 15887 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 15888 );
wolfSSL 14:167253f4e170 15889
wolfSSL 14:167253f4e170 15890 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 15891 }
wolfSSL 14:167253f4e170 15892
wolfSSL 14:167253f4e170 15893 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 15894 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 15895 *
wolfSSL 14:167253f4e170 15896 * r Result of multiplication.
wolfSSL 14:167253f4e170 15897 * a First number to multiply.
wolfSSL 14:167253f4e170 15898 * b Second number to multiply.
wolfSSL 14:167253f4e170 15899 */
wolfSSL 14:167253f4e170 15900 SP_NOINLINE static void sp_3072_mul_avx2_24(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 15901 const sp_digit* b)
wolfSSL 14:167253f4e170 15902 {
wolfSSL 14:167253f4e170 15903 sp_digit tmp[2*24];
wolfSSL 14:167253f4e170 15904
wolfSSL 14:167253f4e170 15905 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 15906 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 15907 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 15908 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 15909 "mulx 0(%[b]), %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 15910 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 15911 "mulx 8(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15912 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15913 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 15914 "mulx 16(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15915 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15916 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 15917 "mulx 24(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15918 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15919 "movq %%r10, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 15920 "movq %%r11, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 15921 "movq %%r12, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 15922 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 15923 "# A[0] * B[4]\n\t"
wolfSSL 14:167253f4e170 15924 "mulx 32(%[b]), %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15925 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15926 "# A[0] * B[5]\n\t"
wolfSSL 14:167253f4e170 15927 "mulx 40(%[b]), %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15928 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15929 "# A[0] * B[6]\n\t"
wolfSSL 14:167253f4e170 15930 "mulx 48(%[b]), %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15931 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15932 "# A[0] * B[7]\n\t"
wolfSSL 14:167253f4e170 15933 "mulx 56(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15934 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15935 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 15936 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 15937 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 15938 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 15939 "# A[0] * B[8]\n\t"
wolfSSL 14:167253f4e170 15940 "mulx 64(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15941 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15942 "# A[0] * B[9]\n\t"
wolfSSL 14:167253f4e170 15943 "mulx 72(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15944 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15945 "# A[0] * B[10]\n\t"
wolfSSL 14:167253f4e170 15946 "mulx 80(%[b]), %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15947 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15948 "# A[0] * B[11]\n\t"
wolfSSL 14:167253f4e170 15949 "mulx 88(%[b]), %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15950 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15951 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 15952 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 15953 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 15954 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 15955 "# A[0] * B[12]\n\t"
wolfSSL 14:167253f4e170 15956 "mulx 96(%[b]), %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15957 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15958 "# A[0] * B[13]\n\t"
wolfSSL 14:167253f4e170 15959 "mulx 104(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15960 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15961 "# A[0] * B[14]\n\t"
wolfSSL 14:167253f4e170 15962 "mulx 112(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15963 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15964 "# A[0] * B[15]\n\t"
wolfSSL 14:167253f4e170 15965 "mulx 120(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15966 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15967 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 15968 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 15969 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 15970 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 15971 "# A[0] * B[16]\n\t"
wolfSSL 14:167253f4e170 15972 "mulx 128(%[b]), %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15973 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15974 "# A[0] * B[17]\n\t"
wolfSSL 14:167253f4e170 15975 "mulx 136(%[b]), %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15976 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15977 "# A[0] * B[18]\n\t"
wolfSSL 14:167253f4e170 15978 "mulx 144(%[b]), %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15979 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15980 "# A[0] * B[19]\n\t"
wolfSSL 14:167253f4e170 15981 "mulx 152(%[b]), %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15982 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 15983 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 15984 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 15985 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 15986 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 15987 "# A[0] * B[20]\n\t"
wolfSSL 14:167253f4e170 15988 "mulx 160(%[b]), %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15989 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 15990 "# A[0] * B[21]\n\t"
wolfSSL 14:167253f4e170 15991 "mulx 168(%[b]), %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15992 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 15993 "# A[0] * B[22]\n\t"
wolfSSL 14:167253f4e170 15994 "mulx 176(%[b]), %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15995 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 15996 "# A[0] * B[23]\n\t"
wolfSSL 14:167253f4e170 15997 "mulx 184(%[b]), %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 15998 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 15999 "adcxq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 16000 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16001 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16002 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16003 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16004 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16005 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16006 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16007 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16008 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16009 "movq 8(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16010 "movq 16(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16011 "movq 24(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16012 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16013 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16014 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 16015 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16016 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16017 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16018 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 16019 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16020 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16021 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16022 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 16023 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16024 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16025 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16026 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 16027 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16028 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16029 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16030 "movq %%r11, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 16031 "movq %%r12, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 16032 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 16033 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 16034 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16035 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16036 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16037 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16038 "# A[1] * B[4]\n\t"
wolfSSL 14:167253f4e170 16039 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16040 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16041 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16042 "# A[1] * B[5]\n\t"
wolfSSL 14:167253f4e170 16043 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16044 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16045 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16046 "# A[1] * B[6]\n\t"
wolfSSL 14:167253f4e170 16047 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16048 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16049 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16050 "# A[1] * B[7]\n\t"
wolfSSL 14:167253f4e170 16051 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16052 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16053 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16054 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 16055 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 16056 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16057 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16058 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16059 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16060 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16061 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16062 "# A[1] * B[8]\n\t"
wolfSSL 14:167253f4e170 16063 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16064 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16065 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16066 "# A[1] * B[9]\n\t"
wolfSSL 14:167253f4e170 16067 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16068 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16069 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16070 "# A[1] * B[10]\n\t"
wolfSSL 14:167253f4e170 16071 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16072 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16073 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16074 "# A[1] * B[11]\n\t"
wolfSSL 14:167253f4e170 16075 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16076 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16077 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16078 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16079 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16080 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16081 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16082 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16083 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16084 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16085 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16086 "# A[1] * B[12]\n\t"
wolfSSL 14:167253f4e170 16087 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16088 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16089 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16090 "# A[1] * B[13]\n\t"
wolfSSL 14:167253f4e170 16091 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16092 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16093 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16094 "# A[1] * B[14]\n\t"
wolfSSL 14:167253f4e170 16095 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16096 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16097 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16098 "# A[1] * B[15]\n\t"
wolfSSL 14:167253f4e170 16099 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16100 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16101 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16102 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16103 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16104 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16105 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16106 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16107 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16108 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16109 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16110 "# A[1] * B[16]\n\t"
wolfSSL 14:167253f4e170 16111 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16112 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16113 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16114 "# A[1] * B[17]\n\t"
wolfSSL 14:167253f4e170 16115 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16116 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16117 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16118 "# A[1] * B[18]\n\t"
wolfSSL 14:167253f4e170 16119 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16120 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16121 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16122 "# A[1] * B[19]\n\t"
wolfSSL 14:167253f4e170 16123 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16124 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16125 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16126 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16127 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16128 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 16129 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16130 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16131 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16132 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16133 "# A[1] * B[20]\n\t"
wolfSSL 14:167253f4e170 16134 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16135 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16136 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16137 "# A[1] * B[21]\n\t"
wolfSSL 14:167253f4e170 16138 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16139 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16140 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16141 "# A[1] * B[22]\n\t"
wolfSSL 14:167253f4e170 16142 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16143 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16144 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16145 "# A[1] * B[23]\n\t"
wolfSSL 14:167253f4e170 16146 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16147 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 16148 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16149 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16150 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 16151 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16152 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16153 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16154 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16155 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16156 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16157 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16158 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 16159 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16160 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16161 "movq 16(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16162 "movq 24(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16163 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16164 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16165 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16166 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 16167 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16168 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16169 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16170 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 16171 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16172 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16173 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16174 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 16175 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16176 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16177 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16178 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 16179 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16180 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16181 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16182 "movq %%r12, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 16183 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 16184 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 16185 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 16186 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16187 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16188 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16189 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16190 "# A[2] * B[4]\n\t"
wolfSSL 14:167253f4e170 16191 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16192 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16193 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16194 "# A[2] * B[5]\n\t"
wolfSSL 14:167253f4e170 16195 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16196 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16197 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16198 "# A[2] * B[6]\n\t"
wolfSSL 14:167253f4e170 16199 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16200 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16201 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16202 "# A[2] * B[7]\n\t"
wolfSSL 14:167253f4e170 16203 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16204 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16205 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16206 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 16207 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16208 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16209 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16210 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16211 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16212 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16213 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16214 "# A[2] * B[8]\n\t"
wolfSSL 14:167253f4e170 16215 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16216 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16217 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16218 "# A[2] * B[9]\n\t"
wolfSSL 14:167253f4e170 16219 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16220 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16221 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16222 "# A[2] * B[10]\n\t"
wolfSSL 14:167253f4e170 16223 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16224 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16225 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16226 "# A[2] * B[11]\n\t"
wolfSSL 14:167253f4e170 16227 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16228 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16229 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16230 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16231 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16232 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16233 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16234 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16235 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16236 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16237 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16238 "# A[2] * B[12]\n\t"
wolfSSL 14:167253f4e170 16239 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16240 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16241 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16242 "# A[2] * B[13]\n\t"
wolfSSL 14:167253f4e170 16243 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16244 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16245 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16246 "# A[2] * B[14]\n\t"
wolfSSL 14:167253f4e170 16247 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16248 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16249 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16250 "# A[2] * B[15]\n\t"
wolfSSL 14:167253f4e170 16251 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16252 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16253 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16254 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16255 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16256 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16257 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16258 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16259 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16260 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16261 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16262 "# A[2] * B[16]\n\t"
wolfSSL 14:167253f4e170 16263 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16264 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16265 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16266 "# A[2] * B[17]\n\t"
wolfSSL 14:167253f4e170 16267 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16268 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16269 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16270 "# A[2] * B[18]\n\t"
wolfSSL 14:167253f4e170 16271 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16272 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16273 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16274 "# A[2] * B[19]\n\t"
wolfSSL 14:167253f4e170 16275 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16276 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16277 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16278 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16279 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 16280 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16281 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16282 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16283 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16284 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16285 "# A[2] * B[20]\n\t"
wolfSSL 14:167253f4e170 16286 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16287 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16288 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16289 "# A[2] * B[21]\n\t"
wolfSSL 14:167253f4e170 16290 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16291 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16292 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16293 "# A[2] * B[22]\n\t"
wolfSSL 14:167253f4e170 16294 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16295 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16296 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16297 "# A[2] * B[23]\n\t"
wolfSSL 14:167253f4e170 16298 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16299 "movq %%r15, %%r12\n\t"
wolfSSL 14:167253f4e170 16300 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16301 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16302 "adcxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 16303 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16304 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16305 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16306 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16307 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16308 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16309 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 16310 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 16311 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16312 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16313 "movq 24(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16314 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16315 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16316 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16317 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16318 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 16319 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16320 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16321 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16322 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 16323 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16324 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16325 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16326 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 16327 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16328 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16329 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16330 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 16331 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16332 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16333 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16334 "movq %%r13, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 16335 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 16336 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 16337 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 16338 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16339 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16340 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16341 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16342 "# A[3] * B[4]\n\t"
wolfSSL 14:167253f4e170 16343 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16344 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16345 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16346 "# A[3] * B[5]\n\t"
wolfSSL 14:167253f4e170 16347 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16348 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16349 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16350 "# A[3] * B[6]\n\t"
wolfSSL 14:167253f4e170 16351 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16352 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16353 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16354 "# A[3] * B[7]\n\t"
wolfSSL 14:167253f4e170 16355 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16356 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16357 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16358 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16359 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16360 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16361 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16362 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16363 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16364 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16365 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16366 "# A[3] * B[8]\n\t"
wolfSSL 14:167253f4e170 16367 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16368 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16369 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16370 "# A[3] * B[9]\n\t"
wolfSSL 14:167253f4e170 16371 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16372 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16373 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16374 "# A[3] * B[10]\n\t"
wolfSSL 14:167253f4e170 16375 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16376 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16377 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16378 "# A[3] * B[11]\n\t"
wolfSSL 14:167253f4e170 16379 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16380 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16381 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16382 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16383 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16384 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16385 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16386 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16387 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16388 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16389 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16390 "# A[3] * B[12]\n\t"
wolfSSL 14:167253f4e170 16391 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16392 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16393 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16394 "# A[3] * B[13]\n\t"
wolfSSL 14:167253f4e170 16395 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16396 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16397 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16398 "# A[3] * B[14]\n\t"
wolfSSL 14:167253f4e170 16399 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16400 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16401 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16402 "# A[3] * B[15]\n\t"
wolfSSL 14:167253f4e170 16403 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16404 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16405 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16406 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16407 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16408 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16409 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16410 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16411 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16412 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16413 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16414 "# A[3] * B[16]\n\t"
wolfSSL 14:167253f4e170 16415 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16416 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16417 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16418 "# A[3] * B[17]\n\t"
wolfSSL 14:167253f4e170 16419 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16420 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16421 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16422 "# A[3] * B[18]\n\t"
wolfSSL 14:167253f4e170 16423 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16424 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16425 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16426 "# A[3] * B[19]\n\t"
wolfSSL 14:167253f4e170 16427 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16428 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16429 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16430 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 16431 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16432 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16433 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16434 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16435 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16436 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16437 "# A[3] * B[20]\n\t"
wolfSSL 14:167253f4e170 16438 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16439 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16440 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16441 "# A[3] * B[21]\n\t"
wolfSSL 14:167253f4e170 16442 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16443 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16444 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16445 "# A[3] * B[22]\n\t"
wolfSSL 14:167253f4e170 16446 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16447 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16448 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16449 "# A[3] * B[23]\n\t"
wolfSSL 14:167253f4e170 16450 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16451 "movq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 16452 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16453 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16454 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 16455 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16456 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16457 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16458 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16459 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16460 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 16461 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 16462 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 16463 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16464 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16465 "movq 32(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16466 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16467 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16468 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16469 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16470 "# A[4] * B[0]\n\t"
wolfSSL 14:167253f4e170 16471 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16472 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16473 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16474 "# A[4] * B[1]\n\t"
wolfSSL 14:167253f4e170 16475 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16476 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16477 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16478 "# A[4] * B[2]\n\t"
wolfSSL 14:167253f4e170 16479 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16480 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16481 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16482 "# A[4] * B[3]\n\t"
wolfSSL 14:167253f4e170 16483 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16484 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16485 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16486 "movq %%r14, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 16487 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 16488 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 16489 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16490 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16491 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16492 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16493 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16494 "# A[4] * B[4]\n\t"
wolfSSL 14:167253f4e170 16495 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16496 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16497 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16498 "# A[4] * B[5]\n\t"
wolfSSL 14:167253f4e170 16499 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16500 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16501 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16502 "# A[4] * B[6]\n\t"
wolfSSL 14:167253f4e170 16503 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16504 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16505 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16506 "# A[4] * B[7]\n\t"
wolfSSL 14:167253f4e170 16507 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16508 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16509 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16510 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16511 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16512 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16513 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16514 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16515 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16516 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16517 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16518 "# A[4] * B[8]\n\t"
wolfSSL 14:167253f4e170 16519 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16520 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16521 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16522 "# A[4] * B[9]\n\t"
wolfSSL 14:167253f4e170 16523 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16524 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16525 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16526 "# A[4] * B[10]\n\t"
wolfSSL 14:167253f4e170 16527 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16528 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16529 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16530 "# A[4] * B[11]\n\t"
wolfSSL 14:167253f4e170 16531 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16532 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16533 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16534 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16535 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16536 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16537 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16538 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16539 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16540 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16541 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16542 "# A[4] * B[12]\n\t"
wolfSSL 14:167253f4e170 16543 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16544 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16545 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16546 "# A[4] * B[13]\n\t"
wolfSSL 14:167253f4e170 16547 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16548 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16549 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16550 "# A[4] * B[14]\n\t"
wolfSSL 14:167253f4e170 16551 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16552 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16553 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16554 "# A[4] * B[15]\n\t"
wolfSSL 14:167253f4e170 16555 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16556 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16557 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16558 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16559 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16560 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16561 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 16562 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16563 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16564 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16565 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16566 "# A[4] * B[16]\n\t"
wolfSSL 14:167253f4e170 16567 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16568 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16569 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16570 "# A[4] * B[17]\n\t"
wolfSSL 14:167253f4e170 16571 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16572 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16573 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16574 "# A[4] * B[18]\n\t"
wolfSSL 14:167253f4e170 16575 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16576 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16577 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16578 "# A[4] * B[19]\n\t"
wolfSSL 14:167253f4e170 16579 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16580 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16581 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16582 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16583 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16584 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16585 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16586 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16587 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16588 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16589 "# A[4] * B[20]\n\t"
wolfSSL 14:167253f4e170 16590 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16591 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16592 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16593 "# A[4] * B[21]\n\t"
wolfSSL 14:167253f4e170 16594 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16595 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16596 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16597 "# A[4] * B[22]\n\t"
wolfSSL 14:167253f4e170 16598 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16599 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16600 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16601 "# A[4] * B[23]\n\t"
wolfSSL 14:167253f4e170 16602 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16603 "movq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 16604 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16605 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16606 "adcxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 16607 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16608 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16609 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16610 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16611 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 16612 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 16613 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 16614 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 16615 "movq 40(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16616 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16617 "movq 40(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16618 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16619 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16620 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16621 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16622 "# A[5] * B[0]\n\t"
wolfSSL 14:167253f4e170 16623 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16624 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16625 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16626 "# A[5] * B[1]\n\t"
wolfSSL 14:167253f4e170 16627 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16628 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16629 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16630 "# A[5] * B[2]\n\t"
wolfSSL 14:167253f4e170 16631 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16632 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16633 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16634 "# A[5] * B[3]\n\t"
wolfSSL 14:167253f4e170 16635 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16636 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16637 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16638 "movq %%rax, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 16639 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 16640 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16641 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16642 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16643 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16644 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16645 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16646 "# A[5] * B[4]\n\t"
wolfSSL 14:167253f4e170 16647 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16648 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16649 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16650 "# A[5] * B[5]\n\t"
wolfSSL 14:167253f4e170 16651 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16652 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16653 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16654 "# A[5] * B[6]\n\t"
wolfSSL 14:167253f4e170 16655 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16656 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16657 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16658 "# A[5] * B[7]\n\t"
wolfSSL 14:167253f4e170 16659 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16660 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16661 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16662 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16663 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16664 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16665 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16666 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16667 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16668 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16669 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16670 "# A[5] * B[8]\n\t"
wolfSSL 14:167253f4e170 16671 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16672 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16673 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16674 "# A[5] * B[9]\n\t"
wolfSSL 14:167253f4e170 16675 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16676 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16677 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16678 "# A[5] * B[10]\n\t"
wolfSSL 14:167253f4e170 16679 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16680 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16681 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16682 "# A[5] * B[11]\n\t"
wolfSSL 14:167253f4e170 16683 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16684 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16685 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16686 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16687 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16688 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16689 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16690 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16691 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16692 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16693 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16694 "# A[5] * B[12]\n\t"
wolfSSL 14:167253f4e170 16695 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16696 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16697 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16698 "# A[5] * B[13]\n\t"
wolfSSL 14:167253f4e170 16699 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16700 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16701 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16702 "# A[5] * B[14]\n\t"
wolfSSL 14:167253f4e170 16703 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16704 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16705 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16706 "# A[5] * B[15]\n\t"
wolfSSL 14:167253f4e170 16707 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16708 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16709 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16710 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16711 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16712 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 16713 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16714 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16715 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16716 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16717 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16718 "# A[5] * B[16]\n\t"
wolfSSL 14:167253f4e170 16719 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16720 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16721 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16722 "# A[5] * B[17]\n\t"
wolfSSL 14:167253f4e170 16723 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16724 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16725 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16726 "# A[5] * B[18]\n\t"
wolfSSL 14:167253f4e170 16727 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16728 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16729 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16730 "# A[5] * B[19]\n\t"
wolfSSL 14:167253f4e170 16731 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16732 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16733 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16734 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16735 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16736 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16737 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16738 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16739 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16740 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16741 "# A[5] * B[20]\n\t"
wolfSSL 14:167253f4e170 16742 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16743 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16744 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16745 "# A[5] * B[21]\n\t"
wolfSSL 14:167253f4e170 16746 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16747 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16748 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16749 "# A[5] * B[22]\n\t"
wolfSSL 14:167253f4e170 16750 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16751 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16752 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16753 "# A[5] * B[23]\n\t"
wolfSSL 14:167253f4e170 16754 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16755 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 16756 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16757 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16758 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 16759 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16760 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16761 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16762 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 16763 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 16764 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 16765 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 16766 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 16767 "movq 48(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16768 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16769 "movq 48(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16770 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16771 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16772 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16773 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16774 "# A[6] * B[0]\n\t"
wolfSSL 14:167253f4e170 16775 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16776 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16777 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16778 "# A[6] * B[1]\n\t"
wolfSSL 14:167253f4e170 16779 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16780 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16781 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16782 "# A[6] * B[2]\n\t"
wolfSSL 14:167253f4e170 16783 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16784 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16785 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16786 "# A[6] * B[3]\n\t"
wolfSSL 14:167253f4e170 16787 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16788 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16789 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16790 "movq %%r10, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 16791 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16792 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16793 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16794 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16795 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16796 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16797 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16798 "# A[6] * B[4]\n\t"
wolfSSL 14:167253f4e170 16799 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16800 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16801 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16802 "# A[6] * B[5]\n\t"
wolfSSL 14:167253f4e170 16803 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16804 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16805 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16806 "# A[6] * B[6]\n\t"
wolfSSL 14:167253f4e170 16807 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16808 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16809 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16810 "# A[6] * B[7]\n\t"
wolfSSL 14:167253f4e170 16811 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16812 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16813 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16814 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16815 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16816 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16817 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16818 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16819 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16820 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16821 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16822 "# A[6] * B[8]\n\t"
wolfSSL 14:167253f4e170 16823 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16824 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16825 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16826 "# A[6] * B[9]\n\t"
wolfSSL 14:167253f4e170 16827 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16828 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16829 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16830 "# A[6] * B[10]\n\t"
wolfSSL 14:167253f4e170 16831 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16832 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16833 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16834 "# A[6] * B[11]\n\t"
wolfSSL 14:167253f4e170 16835 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16836 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16837 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16838 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16839 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16840 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16841 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16842 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16843 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16844 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16845 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16846 "# A[6] * B[12]\n\t"
wolfSSL 14:167253f4e170 16847 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16848 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16849 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16850 "# A[6] * B[13]\n\t"
wolfSSL 14:167253f4e170 16851 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16852 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16853 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16854 "# A[6] * B[14]\n\t"
wolfSSL 14:167253f4e170 16855 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16856 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16857 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16858 "# A[6] * B[15]\n\t"
wolfSSL 14:167253f4e170 16859 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16860 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16861 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16862 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16863 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 16864 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 16865 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 16866 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16867 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16868 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16869 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16870 "# A[6] * B[16]\n\t"
wolfSSL 14:167253f4e170 16871 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16872 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16873 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16874 "# A[6] * B[17]\n\t"
wolfSSL 14:167253f4e170 16875 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16876 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16877 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16878 "# A[6] * B[18]\n\t"
wolfSSL 14:167253f4e170 16879 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16880 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16881 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16882 "# A[6] * B[19]\n\t"
wolfSSL 14:167253f4e170 16883 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16884 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16885 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16886 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 16887 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 16888 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 16889 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 16890 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16891 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16892 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16893 "# A[6] * B[20]\n\t"
wolfSSL 14:167253f4e170 16894 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16895 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16896 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16897 "# A[6] * B[21]\n\t"
wolfSSL 14:167253f4e170 16898 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16899 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16900 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16901 "# A[6] * B[22]\n\t"
wolfSSL 14:167253f4e170 16902 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16903 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16904 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16905 "# A[6] * B[23]\n\t"
wolfSSL 14:167253f4e170 16906 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16907 "movq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 16908 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16909 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16910 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 16911 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16912 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16913 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 16914 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 16915 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 16916 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 16917 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 16918 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 16919 "movq 56(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 16920 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 16921 "movq 56(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16922 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16923 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16924 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16925 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16926 "# A[7] * B[0]\n\t"
wolfSSL 14:167253f4e170 16927 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16928 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16929 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16930 "# A[7] * B[1]\n\t"
wolfSSL 14:167253f4e170 16931 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16932 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16933 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16934 "# A[7] * B[2]\n\t"
wolfSSL 14:167253f4e170 16935 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16936 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16937 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16938 "# A[7] * B[3]\n\t"
wolfSSL 14:167253f4e170 16939 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16940 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16941 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16942 "movq %%r11, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 16943 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 16944 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 16945 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 16946 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16947 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16948 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16949 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16950 "# A[7] * B[4]\n\t"
wolfSSL 14:167253f4e170 16951 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16952 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16953 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16954 "# A[7] * B[5]\n\t"
wolfSSL 14:167253f4e170 16955 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16956 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16957 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16958 "# A[7] * B[6]\n\t"
wolfSSL 14:167253f4e170 16959 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16960 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 16961 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 16962 "# A[7] * B[7]\n\t"
wolfSSL 14:167253f4e170 16963 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16964 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 16965 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 16966 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 16967 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 16968 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 16969 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 16970 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16971 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16972 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 16973 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 16974 "# A[7] * B[8]\n\t"
wolfSSL 14:167253f4e170 16975 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16976 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 16977 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 16978 "# A[7] * B[9]\n\t"
wolfSSL 14:167253f4e170 16979 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16980 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 16981 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 16982 "# A[7] * B[10]\n\t"
wolfSSL 14:167253f4e170 16983 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16984 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 16985 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 16986 "# A[7] * B[11]\n\t"
wolfSSL 14:167253f4e170 16987 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 16988 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 16989 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 16990 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 16991 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 16992 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 16993 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 16994 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 16995 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 16996 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 16997 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 16998 "# A[7] * B[12]\n\t"
wolfSSL 14:167253f4e170 16999 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17000 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17001 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17002 "# A[7] * B[13]\n\t"
wolfSSL 14:167253f4e170 17003 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17004 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17005 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17006 "# A[7] * B[14]\n\t"
wolfSSL 14:167253f4e170 17007 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17008 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17009 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17010 "# A[7] * B[15]\n\t"
wolfSSL 14:167253f4e170 17011 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17012 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17013 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17014 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17015 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17016 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17017 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17018 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17019 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17020 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17021 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17022 "# A[7] * B[16]\n\t"
wolfSSL 14:167253f4e170 17023 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17024 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17025 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17026 "# A[7] * B[17]\n\t"
wolfSSL 14:167253f4e170 17027 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17028 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17029 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17030 "# A[7] * B[18]\n\t"
wolfSSL 14:167253f4e170 17031 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17032 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17033 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17034 "# A[7] * B[19]\n\t"
wolfSSL 14:167253f4e170 17035 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17036 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17037 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17038 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17039 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17040 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17041 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17042 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17043 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17044 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17045 "# A[7] * B[20]\n\t"
wolfSSL 14:167253f4e170 17046 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17047 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17048 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17049 "# A[7] * B[21]\n\t"
wolfSSL 14:167253f4e170 17050 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17051 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17052 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17053 "# A[7] * B[22]\n\t"
wolfSSL 14:167253f4e170 17054 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17055 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17056 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17057 "# A[7] * B[23]\n\t"
wolfSSL 14:167253f4e170 17058 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17059 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 17060 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17061 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17062 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 17063 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17064 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17065 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17066 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17067 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17068 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17069 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17070 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17071 "movq 64(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17072 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17073 "movq 64(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17074 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17075 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17076 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17077 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17078 "# A[8] * B[0]\n\t"
wolfSSL 14:167253f4e170 17079 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17080 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17081 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17082 "# A[8] * B[1]\n\t"
wolfSSL 14:167253f4e170 17083 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17084 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17085 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17086 "# A[8] * B[2]\n\t"
wolfSSL 14:167253f4e170 17087 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17088 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17089 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17090 "# A[8] * B[3]\n\t"
wolfSSL 14:167253f4e170 17091 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17092 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17093 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17094 "movq %%r12, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 17095 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 17096 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 17097 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 17098 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17099 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17100 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17101 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17102 "# A[8] * B[4]\n\t"
wolfSSL 14:167253f4e170 17103 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17104 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17105 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17106 "# A[8] * B[5]\n\t"
wolfSSL 14:167253f4e170 17107 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17108 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17109 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17110 "# A[8] * B[6]\n\t"
wolfSSL 14:167253f4e170 17111 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17112 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17113 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17114 "# A[8] * B[7]\n\t"
wolfSSL 14:167253f4e170 17115 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17116 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17117 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17118 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 17119 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 17120 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 17121 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 17122 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17123 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17124 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17125 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17126 "# A[8] * B[8]\n\t"
wolfSSL 14:167253f4e170 17127 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17128 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17129 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17130 "# A[8] * B[9]\n\t"
wolfSSL 14:167253f4e170 17131 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17132 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17133 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17134 "# A[8] * B[10]\n\t"
wolfSSL 14:167253f4e170 17135 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17136 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17137 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17138 "# A[8] * B[11]\n\t"
wolfSSL 14:167253f4e170 17139 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17140 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17141 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17142 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 17143 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 17144 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 17145 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17146 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17147 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17148 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17149 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17150 "# A[8] * B[12]\n\t"
wolfSSL 14:167253f4e170 17151 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17152 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17153 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17154 "# A[8] * B[13]\n\t"
wolfSSL 14:167253f4e170 17155 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17156 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17157 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17158 "# A[8] * B[14]\n\t"
wolfSSL 14:167253f4e170 17159 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17160 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17161 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17162 "# A[8] * B[15]\n\t"
wolfSSL 14:167253f4e170 17163 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17164 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17165 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17166 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17167 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17168 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17169 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17170 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17171 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17172 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17173 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17174 "# A[8] * B[16]\n\t"
wolfSSL 14:167253f4e170 17175 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17176 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17177 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17178 "# A[8] * B[17]\n\t"
wolfSSL 14:167253f4e170 17179 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17180 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17181 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17182 "# A[8] * B[18]\n\t"
wolfSSL 14:167253f4e170 17183 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17184 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17185 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17186 "# A[8] * B[19]\n\t"
wolfSSL 14:167253f4e170 17187 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17188 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17189 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17190 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17191 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17192 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17193 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17194 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17195 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17196 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17197 "# A[8] * B[20]\n\t"
wolfSSL 14:167253f4e170 17198 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17199 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17200 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17201 "# A[8] * B[21]\n\t"
wolfSSL 14:167253f4e170 17202 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17203 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17204 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17205 "# A[8] * B[22]\n\t"
wolfSSL 14:167253f4e170 17206 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17207 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17208 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17209 "# A[8] * B[23]\n\t"
wolfSSL 14:167253f4e170 17210 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17211 "movq %%r15, %%r12\n\t"
wolfSSL 14:167253f4e170 17212 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17213 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17214 "adcxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 17215 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17216 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17217 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17218 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17219 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17220 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17221 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17222 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 17223 "movq 72(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17224 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17225 "movq 72(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17226 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17227 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17228 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17229 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17230 "# A[9] * B[0]\n\t"
wolfSSL 14:167253f4e170 17231 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17232 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17233 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17234 "# A[9] * B[1]\n\t"
wolfSSL 14:167253f4e170 17235 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17236 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17237 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17238 "# A[9] * B[2]\n\t"
wolfSSL 14:167253f4e170 17239 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17240 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17241 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17242 "# A[9] * B[3]\n\t"
wolfSSL 14:167253f4e170 17243 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17244 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17245 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17246 "movq %%r13, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 17247 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 17248 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 17249 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 17250 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17251 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17252 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17253 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17254 "# A[9] * B[4]\n\t"
wolfSSL 14:167253f4e170 17255 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17256 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17257 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17258 "# A[9] * B[5]\n\t"
wolfSSL 14:167253f4e170 17259 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17260 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17261 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17262 "# A[9] * B[6]\n\t"
wolfSSL 14:167253f4e170 17263 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17264 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17265 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17266 "# A[9] * B[7]\n\t"
wolfSSL 14:167253f4e170 17267 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17268 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17269 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17270 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 17271 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 17272 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 17273 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 17274 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17275 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17276 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17277 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17278 "# A[9] * B[8]\n\t"
wolfSSL 14:167253f4e170 17279 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17280 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17281 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17282 "# A[9] * B[9]\n\t"
wolfSSL 14:167253f4e170 17283 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17284 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17285 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17286 "# A[9] * B[10]\n\t"
wolfSSL 14:167253f4e170 17287 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17288 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17289 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17290 "# A[9] * B[11]\n\t"
wolfSSL 14:167253f4e170 17291 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17292 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17293 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17294 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 17295 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 17296 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17297 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17298 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17299 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17300 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17301 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17302 "# A[9] * B[12]\n\t"
wolfSSL 14:167253f4e170 17303 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17304 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17305 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17306 "# A[9] * B[13]\n\t"
wolfSSL 14:167253f4e170 17307 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17308 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17309 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17310 "# A[9] * B[14]\n\t"
wolfSSL 14:167253f4e170 17311 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17312 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17313 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17314 "# A[9] * B[15]\n\t"
wolfSSL 14:167253f4e170 17315 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17316 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17317 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17318 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17319 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17320 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17321 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17322 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17323 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17324 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17325 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17326 "# A[9] * B[16]\n\t"
wolfSSL 14:167253f4e170 17327 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17328 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17329 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17330 "# A[9] * B[17]\n\t"
wolfSSL 14:167253f4e170 17331 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17332 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17333 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17334 "# A[9] * B[18]\n\t"
wolfSSL 14:167253f4e170 17335 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17336 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17337 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17338 "# A[9] * B[19]\n\t"
wolfSSL 14:167253f4e170 17339 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17340 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17341 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17342 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17343 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17344 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17345 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17346 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17347 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17348 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17349 "# A[9] * B[20]\n\t"
wolfSSL 14:167253f4e170 17350 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17351 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17352 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17353 "# A[9] * B[21]\n\t"
wolfSSL 14:167253f4e170 17354 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17355 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17356 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17357 "# A[9] * B[22]\n\t"
wolfSSL 14:167253f4e170 17358 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17359 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17360 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17361 "# A[9] * B[23]\n\t"
wolfSSL 14:167253f4e170 17362 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17363 "movq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 17364 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17365 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17366 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 17367 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17368 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17369 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17370 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17371 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17372 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17373 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 17374 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 17375 "movq 80(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17376 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17377 "movq 80(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17378 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17379 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17380 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17381 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17382 "# A[10] * B[0]\n\t"
wolfSSL 14:167253f4e170 17383 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17384 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17385 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17386 "# A[10] * B[1]\n\t"
wolfSSL 14:167253f4e170 17387 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17388 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17389 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17390 "# A[10] * B[2]\n\t"
wolfSSL 14:167253f4e170 17391 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17392 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17393 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17394 "# A[10] * B[3]\n\t"
wolfSSL 14:167253f4e170 17395 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17396 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17397 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17398 "movq %%r14, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 17399 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 17400 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 17401 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 17402 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17403 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17404 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17405 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17406 "# A[10] * B[4]\n\t"
wolfSSL 14:167253f4e170 17407 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17408 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17409 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17410 "# A[10] * B[5]\n\t"
wolfSSL 14:167253f4e170 17411 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17412 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17413 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17414 "# A[10] * B[6]\n\t"
wolfSSL 14:167253f4e170 17415 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17416 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17417 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17418 "# A[10] * B[7]\n\t"
wolfSSL 14:167253f4e170 17419 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17420 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17421 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17422 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 17423 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 17424 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 17425 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 17426 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17427 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17428 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17429 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17430 "# A[10] * B[8]\n\t"
wolfSSL 14:167253f4e170 17431 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17432 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17433 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17434 "# A[10] * B[9]\n\t"
wolfSSL 14:167253f4e170 17435 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17436 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17437 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17438 "# A[10] * B[10]\n\t"
wolfSSL 14:167253f4e170 17439 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17440 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17441 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17442 "# A[10] * B[11]\n\t"
wolfSSL 14:167253f4e170 17443 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17444 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17445 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17446 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 17447 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17448 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17449 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17450 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17451 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17452 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17453 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17454 "# A[10] * B[12]\n\t"
wolfSSL 14:167253f4e170 17455 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17456 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17457 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17458 "# A[10] * B[13]\n\t"
wolfSSL 14:167253f4e170 17459 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17460 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17461 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17462 "# A[10] * B[14]\n\t"
wolfSSL 14:167253f4e170 17463 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17464 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17465 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17466 "# A[10] * B[15]\n\t"
wolfSSL 14:167253f4e170 17467 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17468 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17469 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17470 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17471 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17472 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17473 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17474 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17475 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17476 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17477 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17478 "# A[10] * B[16]\n\t"
wolfSSL 14:167253f4e170 17479 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17480 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17481 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17482 "# A[10] * B[17]\n\t"
wolfSSL 14:167253f4e170 17483 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17484 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17485 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17486 "# A[10] * B[18]\n\t"
wolfSSL 14:167253f4e170 17487 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17488 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17489 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17490 "# A[10] * B[19]\n\t"
wolfSSL 14:167253f4e170 17491 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17492 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17493 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17494 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17495 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17496 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17497 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17498 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17499 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17500 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17501 "# A[10] * B[20]\n\t"
wolfSSL 14:167253f4e170 17502 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17503 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17504 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17505 "# A[10] * B[21]\n\t"
wolfSSL 14:167253f4e170 17506 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17507 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17508 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17509 "# A[10] * B[22]\n\t"
wolfSSL 14:167253f4e170 17510 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17511 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17512 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17513 "# A[10] * B[23]\n\t"
wolfSSL 14:167253f4e170 17514 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17515 "movq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 17516 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17517 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17518 "adcxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 17519 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17520 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17521 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17522 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17523 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17524 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 17525 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 17526 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 17527 "movq 88(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17528 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17529 "movq 88(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17530 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17531 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17532 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17533 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17534 "# A[11] * B[0]\n\t"
wolfSSL 14:167253f4e170 17535 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17536 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17537 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17538 "# A[11] * B[1]\n\t"
wolfSSL 14:167253f4e170 17539 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17540 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17541 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17542 "# A[11] * B[2]\n\t"
wolfSSL 14:167253f4e170 17543 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17544 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17545 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17546 "# A[11] * B[3]\n\t"
wolfSSL 14:167253f4e170 17547 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17548 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17549 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17550 "movq %%rax, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 17551 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 17552 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 17553 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 17554 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17555 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17556 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17557 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17558 "# A[11] * B[4]\n\t"
wolfSSL 14:167253f4e170 17559 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17560 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17561 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17562 "# A[11] * B[5]\n\t"
wolfSSL 14:167253f4e170 17563 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17564 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17565 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17566 "# A[11] * B[6]\n\t"
wolfSSL 14:167253f4e170 17567 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17568 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17569 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17570 "# A[11] * B[7]\n\t"
wolfSSL 14:167253f4e170 17571 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17572 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17573 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17574 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 17575 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 17576 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 17577 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 17578 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17579 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17580 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17581 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17582 "# A[11] * B[8]\n\t"
wolfSSL 14:167253f4e170 17583 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17584 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17585 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17586 "# A[11] * B[9]\n\t"
wolfSSL 14:167253f4e170 17587 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17588 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17589 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17590 "# A[11] * B[10]\n\t"
wolfSSL 14:167253f4e170 17591 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17592 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17593 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17594 "# A[11] * B[11]\n\t"
wolfSSL 14:167253f4e170 17595 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17596 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17597 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17598 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17599 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17600 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17601 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17602 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17603 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17604 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17605 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17606 "# A[11] * B[12]\n\t"
wolfSSL 14:167253f4e170 17607 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17608 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17609 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17610 "# A[11] * B[13]\n\t"
wolfSSL 14:167253f4e170 17611 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17612 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17613 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17614 "# A[11] * B[14]\n\t"
wolfSSL 14:167253f4e170 17615 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17616 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17617 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17618 "# A[11] * B[15]\n\t"
wolfSSL 14:167253f4e170 17619 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17620 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17621 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17622 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17623 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17624 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17625 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17626 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17627 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17628 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17629 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17630 "# A[11] * B[16]\n\t"
wolfSSL 14:167253f4e170 17631 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17632 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17633 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17634 "# A[11] * B[17]\n\t"
wolfSSL 14:167253f4e170 17635 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17636 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17637 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17638 "# A[11] * B[18]\n\t"
wolfSSL 14:167253f4e170 17639 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17640 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17641 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17642 "# A[11] * B[19]\n\t"
wolfSSL 14:167253f4e170 17643 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17644 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17645 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17646 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17647 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17648 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17649 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17650 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17651 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17652 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17653 "# A[11] * B[20]\n\t"
wolfSSL 14:167253f4e170 17654 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17655 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17656 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17657 "# A[11] * B[21]\n\t"
wolfSSL 14:167253f4e170 17658 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17659 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17660 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17661 "# A[11] * B[22]\n\t"
wolfSSL 14:167253f4e170 17662 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17663 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17664 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17665 "# A[11] * B[23]\n\t"
wolfSSL 14:167253f4e170 17666 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17667 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 17668 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17669 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17670 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 17671 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17672 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17673 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17674 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17675 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 17676 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 17677 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 17678 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 17679 "movq 96(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17680 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17681 "movq 96(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17682 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17683 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17684 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17685 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17686 "# A[12] * B[0]\n\t"
wolfSSL 14:167253f4e170 17687 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17688 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17689 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17690 "# A[12] * B[1]\n\t"
wolfSSL 14:167253f4e170 17691 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17692 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17693 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17694 "# A[12] * B[2]\n\t"
wolfSSL 14:167253f4e170 17695 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17696 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17697 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17698 "# A[12] * B[3]\n\t"
wolfSSL 14:167253f4e170 17699 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17700 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17701 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17702 "movq %%r10, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 17703 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 17704 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 17705 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 17706 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17707 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17708 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17709 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17710 "# A[12] * B[4]\n\t"
wolfSSL 14:167253f4e170 17711 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17712 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17713 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17714 "# A[12] * B[5]\n\t"
wolfSSL 14:167253f4e170 17715 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17716 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17717 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17718 "# A[12] * B[6]\n\t"
wolfSSL 14:167253f4e170 17719 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17720 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17721 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17722 "# A[12] * B[7]\n\t"
wolfSSL 14:167253f4e170 17723 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17724 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17725 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17726 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 17727 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 17728 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 17729 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17730 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17731 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17732 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17733 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17734 "# A[12] * B[8]\n\t"
wolfSSL 14:167253f4e170 17735 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17736 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17737 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17738 "# A[12] * B[9]\n\t"
wolfSSL 14:167253f4e170 17739 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17740 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17741 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17742 "# A[12] * B[10]\n\t"
wolfSSL 14:167253f4e170 17743 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17744 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17745 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17746 "# A[12] * B[11]\n\t"
wolfSSL 14:167253f4e170 17747 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17748 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17749 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17750 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17751 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17752 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17753 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17754 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17755 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17756 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17757 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17758 "# A[12] * B[12]\n\t"
wolfSSL 14:167253f4e170 17759 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17760 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17761 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17762 "# A[12] * B[13]\n\t"
wolfSSL 14:167253f4e170 17763 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17764 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17765 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17766 "# A[12] * B[14]\n\t"
wolfSSL 14:167253f4e170 17767 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17768 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17769 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17770 "# A[12] * B[15]\n\t"
wolfSSL 14:167253f4e170 17771 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17772 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17773 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17774 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17775 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17776 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17777 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17778 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17779 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17780 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17781 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17782 "# A[12] * B[16]\n\t"
wolfSSL 14:167253f4e170 17783 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17784 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17785 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17786 "# A[12] * B[17]\n\t"
wolfSSL 14:167253f4e170 17787 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17788 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17789 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17790 "# A[12] * B[18]\n\t"
wolfSSL 14:167253f4e170 17791 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17792 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17793 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17794 "# A[12] * B[19]\n\t"
wolfSSL 14:167253f4e170 17795 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17796 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17797 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17798 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17799 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17800 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17801 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17802 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17803 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17804 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17805 "# A[12] * B[20]\n\t"
wolfSSL 14:167253f4e170 17806 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17807 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17808 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17809 "# A[12] * B[21]\n\t"
wolfSSL 14:167253f4e170 17810 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17811 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17812 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17813 "# A[12] * B[22]\n\t"
wolfSSL 14:167253f4e170 17814 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17815 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17816 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17817 "# A[12] * B[23]\n\t"
wolfSSL 14:167253f4e170 17818 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17819 "movq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 17820 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17821 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17822 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 17823 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17824 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17825 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17826 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 17827 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 17828 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 17829 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 17830 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 17831 "movq 104(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17832 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17833 "movq 104(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17834 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17835 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17836 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17837 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17838 "# A[13] * B[0]\n\t"
wolfSSL 14:167253f4e170 17839 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17840 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17841 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17842 "# A[13] * B[1]\n\t"
wolfSSL 14:167253f4e170 17843 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17844 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17845 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17846 "# A[13] * B[2]\n\t"
wolfSSL 14:167253f4e170 17847 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17848 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17849 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17850 "# A[13] * B[3]\n\t"
wolfSSL 14:167253f4e170 17851 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17852 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17853 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17854 "movq %%r11, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 17855 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 17856 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 17857 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 17858 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17859 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17860 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17861 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17862 "# A[13] * B[4]\n\t"
wolfSSL 14:167253f4e170 17863 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17864 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17865 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17866 "# A[13] * B[5]\n\t"
wolfSSL 14:167253f4e170 17867 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17868 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17869 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17870 "# A[13] * B[6]\n\t"
wolfSSL 14:167253f4e170 17871 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17872 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17873 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17874 "# A[13] * B[7]\n\t"
wolfSSL 14:167253f4e170 17875 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17876 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17877 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17878 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 17879 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 17880 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 17881 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 17882 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17883 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17884 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17885 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17886 "# A[13] * B[8]\n\t"
wolfSSL 14:167253f4e170 17887 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17888 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17889 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17890 "# A[13] * B[9]\n\t"
wolfSSL 14:167253f4e170 17891 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17892 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17893 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17894 "# A[13] * B[10]\n\t"
wolfSSL 14:167253f4e170 17895 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17896 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17897 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17898 "# A[13] * B[11]\n\t"
wolfSSL 14:167253f4e170 17899 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17900 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17901 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17902 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 17903 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 17904 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 17905 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 17906 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17907 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17908 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17909 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17910 "# A[13] * B[12]\n\t"
wolfSSL 14:167253f4e170 17911 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17912 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17913 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17914 "# A[13] * B[13]\n\t"
wolfSSL 14:167253f4e170 17915 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17916 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17917 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17918 "# A[13] * B[14]\n\t"
wolfSSL 14:167253f4e170 17919 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17920 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17921 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17922 "# A[13] * B[15]\n\t"
wolfSSL 14:167253f4e170 17923 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17924 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17925 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17926 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 17927 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 17928 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 17929 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 17930 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17931 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 17932 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17933 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17934 "# A[13] * B[16]\n\t"
wolfSSL 14:167253f4e170 17935 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17936 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17937 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17938 "# A[13] * B[17]\n\t"
wolfSSL 14:167253f4e170 17939 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17940 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17941 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17942 "# A[13] * B[18]\n\t"
wolfSSL 14:167253f4e170 17943 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17944 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 17945 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 17946 "# A[13] * B[19]\n\t"
wolfSSL 14:167253f4e170 17947 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17948 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17949 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17950 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 17951 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 17952 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 17953 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 17954 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17955 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17956 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17957 "# A[13] * B[20]\n\t"
wolfSSL 14:167253f4e170 17958 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17959 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17960 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17961 "# A[13] * B[21]\n\t"
wolfSSL 14:167253f4e170 17962 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17963 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 17964 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 17965 "# A[13] * B[22]\n\t"
wolfSSL 14:167253f4e170 17966 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17967 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 17968 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 17969 "# A[13] * B[23]\n\t"
wolfSSL 14:167253f4e170 17970 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17971 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 17972 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 17973 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 17974 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 17975 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17976 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17977 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 17978 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 17979 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 17980 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 17981 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 17982 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 17983 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 17984 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 17985 "movq 112(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 17986 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 17987 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 17988 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 17989 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 17990 "# A[14] * B[0]\n\t"
wolfSSL 14:167253f4e170 17991 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17992 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 17993 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 17994 "# A[14] * B[1]\n\t"
wolfSSL 14:167253f4e170 17995 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 17996 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 17997 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 17998 "# A[14] * B[2]\n\t"
wolfSSL 14:167253f4e170 17999 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18000 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18001 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18002 "# A[14] * B[3]\n\t"
wolfSSL 14:167253f4e170 18003 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18004 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18005 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18006 "movq %%r12, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 18007 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 18008 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 18009 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 18010 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18011 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18012 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18013 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18014 "# A[14] * B[4]\n\t"
wolfSSL 14:167253f4e170 18015 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18016 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18017 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18018 "# A[14] * B[5]\n\t"
wolfSSL 14:167253f4e170 18019 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18020 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18021 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18022 "# A[14] * B[6]\n\t"
wolfSSL 14:167253f4e170 18023 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18024 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18025 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18026 "# A[14] * B[7]\n\t"
wolfSSL 14:167253f4e170 18027 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18028 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18029 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18030 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 18031 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 18032 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18033 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18034 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18035 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18036 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18037 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18038 "# A[14] * B[8]\n\t"
wolfSSL 14:167253f4e170 18039 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18040 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18041 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18042 "# A[14] * B[9]\n\t"
wolfSSL 14:167253f4e170 18043 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18044 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18045 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18046 "# A[14] * B[10]\n\t"
wolfSSL 14:167253f4e170 18047 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18048 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18049 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18050 "# A[14] * B[11]\n\t"
wolfSSL 14:167253f4e170 18051 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18052 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18053 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18054 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18055 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18056 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18057 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18058 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18059 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18060 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18061 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18062 "# A[14] * B[12]\n\t"
wolfSSL 14:167253f4e170 18063 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18064 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18065 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18066 "# A[14] * B[13]\n\t"
wolfSSL 14:167253f4e170 18067 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18068 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18069 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18070 "# A[14] * B[14]\n\t"
wolfSSL 14:167253f4e170 18071 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18072 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18073 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18074 "# A[14] * B[15]\n\t"
wolfSSL 14:167253f4e170 18075 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18076 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18077 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18078 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18079 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18080 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18081 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18082 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18083 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18084 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18085 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18086 "# A[14] * B[16]\n\t"
wolfSSL 14:167253f4e170 18087 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18088 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18089 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18090 "# A[14] * B[17]\n\t"
wolfSSL 14:167253f4e170 18091 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18092 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18093 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18094 "# A[14] * B[18]\n\t"
wolfSSL 14:167253f4e170 18095 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18096 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18097 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18098 "# A[14] * B[19]\n\t"
wolfSSL 14:167253f4e170 18099 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18100 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18101 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18102 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18103 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18104 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18105 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18106 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18107 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18108 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18109 "# A[14] * B[20]\n\t"
wolfSSL 14:167253f4e170 18110 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18111 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18112 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18113 "# A[14] * B[21]\n\t"
wolfSSL 14:167253f4e170 18114 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18115 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18116 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18117 "# A[14] * B[22]\n\t"
wolfSSL 14:167253f4e170 18118 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18119 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18120 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18121 "# A[14] * B[23]\n\t"
wolfSSL 14:167253f4e170 18122 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18123 "movq %%r15, %%r12\n\t"
wolfSSL 14:167253f4e170 18124 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18125 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18126 "adcxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 18127 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18128 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18129 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18130 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18131 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18132 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 18133 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 18134 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 18135 "movq 120(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 18136 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 18137 "movq 120(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18138 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18139 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18140 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18141 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18142 "# A[15] * B[0]\n\t"
wolfSSL 14:167253f4e170 18143 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18144 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18145 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18146 "# A[15] * B[1]\n\t"
wolfSSL 14:167253f4e170 18147 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18148 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18149 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18150 "# A[15] * B[2]\n\t"
wolfSSL 14:167253f4e170 18151 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18152 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18153 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18154 "# A[15] * B[3]\n\t"
wolfSSL 14:167253f4e170 18155 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18156 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18157 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18158 "movq %%r13, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 18159 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 18160 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 18161 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 18162 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18163 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18164 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18165 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18166 "# A[15] * B[4]\n\t"
wolfSSL 14:167253f4e170 18167 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18168 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18169 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18170 "# A[15] * B[5]\n\t"
wolfSSL 14:167253f4e170 18171 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18172 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18173 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18174 "# A[15] * B[6]\n\t"
wolfSSL 14:167253f4e170 18175 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18176 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18177 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18178 "# A[15] * B[7]\n\t"
wolfSSL 14:167253f4e170 18179 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18180 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18181 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18182 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 18183 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18184 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18185 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18186 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18187 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18188 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18189 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18190 "# A[15] * B[8]\n\t"
wolfSSL 14:167253f4e170 18191 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18192 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18193 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18194 "# A[15] * B[9]\n\t"
wolfSSL 14:167253f4e170 18195 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18196 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18197 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18198 "# A[15] * B[10]\n\t"
wolfSSL 14:167253f4e170 18199 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18200 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18201 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18202 "# A[15] * B[11]\n\t"
wolfSSL 14:167253f4e170 18203 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18204 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18205 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18206 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18207 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18208 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18209 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18210 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18211 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18212 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18213 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18214 "# A[15] * B[12]\n\t"
wolfSSL 14:167253f4e170 18215 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18216 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18217 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18218 "# A[15] * B[13]\n\t"
wolfSSL 14:167253f4e170 18219 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18220 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18221 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18222 "# A[15] * B[14]\n\t"
wolfSSL 14:167253f4e170 18223 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18224 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18225 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18226 "# A[15] * B[15]\n\t"
wolfSSL 14:167253f4e170 18227 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18228 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18229 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18230 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18231 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18232 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18233 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18234 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18235 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18236 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18237 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18238 "# A[15] * B[16]\n\t"
wolfSSL 14:167253f4e170 18239 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18240 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18241 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18242 "# A[15] * B[17]\n\t"
wolfSSL 14:167253f4e170 18243 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18244 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18245 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18246 "# A[15] * B[18]\n\t"
wolfSSL 14:167253f4e170 18247 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18248 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18249 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18250 "# A[15] * B[19]\n\t"
wolfSSL 14:167253f4e170 18251 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18252 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18253 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18254 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18255 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18256 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18257 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18258 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18259 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18260 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18261 "# A[15] * B[20]\n\t"
wolfSSL 14:167253f4e170 18262 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18263 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18264 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18265 "# A[15] * B[21]\n\t"
wolfSSL 14:167253f4e170 18266 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18267 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18268 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18269 "# A[15] * B[22]\n\t"
wolfSSL 14:167253f4e170 18270 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18271 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18272 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18273 "# A[15] * B[23]\n\t"
wolfSSL 14:167253f4e170 18274 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18275 "movq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 18276 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18277 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18278 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 18279 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18280 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18281 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18282 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18283 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 18284 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 18285 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 18286 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 18287 "movq 128(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 18288 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 18289 "movq 128(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18290 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18291 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18292 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18293 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18294 "# A[16] * B[0]\n\t"
wolfSSL 14:167253f4e170 18295 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18296 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18297 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18298 "# A[16] * B[1]\n\t"
wolfSSL 14:167253f4e170 18299 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18300 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18301 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18302 "# A[16] * B[2]\n\t"
wolfSSL 14:167253f4e170 18303 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18304 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18305 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18306 "# A[16] * B[3]\n\t"
wolfSSL 14:167253f4e170 18307 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18308 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18309 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18310 "movq %%r14, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 18311 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 18312 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 18313 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 18314 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18315 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18316 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18317 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18318 "# A[16] * B[4]\n\t"
wolfSSL 14:167253f4e170 18319 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18320 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18321 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18322 "# A[16] * B[5]\n\t"
wolfSSL 14:167253f4e170 18323 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18324 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18325 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18326 "# A[16] * B[6]\n\t"
wolfSSL 14:167253f4e170 18327 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18328 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18329 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18330 "# A[16] * B[7]\n\t"
wolfSSL 14:167253f4e170 18331 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18332 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18333 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18334 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18335 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18336 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18337 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18338 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18339 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18340 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18341 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18342 "# A[16] * B[8]\n\t"
wolfSSL 14:167253f4e170 18343 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18344 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18345 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18346 "# A[16] * B[9]\n\t"
wolfSSL 14:167253f4e170 18347 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18348 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18349 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18350 "# A[16] * B[10]\n\t"
wolfSSL 14:167253f4e170 18351 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18352 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18353 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18354 "# A[16] * B[11]\n\t"
wolfSSL 14:167253f4e170 18355 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18356 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18357 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18358 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18359 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18360 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18361 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18362 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18363 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18364 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18365 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18366 "# A[16] * B[12]\n\t"
wolfSSL 14:167253f4e170 18367 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18368 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18369 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18370 "# A[16] * B[13]\n\t"
wolfSSL 14:167253f4e170 18371 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18372 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18373 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18374 "# A[16] * B[14]\n\t"
wolfSSL 14:167253f4e170 18375 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18376 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18377 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18378 "# A[16] * B[15]\n\t"
wolfSSL 14:167253f4e170 18379 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18380 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18381 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18382 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18383 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18384 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18385 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18386 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18387 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18388 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18389 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18390 "# A[16] * B[16]\n\t"
wolfSSL 14:167253f4e170 18391 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18392 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18393 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18394 "# A[16] * B[17]\n\t"
wolfSSL 14:167253f4e170 18395 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18396 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18397 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18398 "# A[16] * B[18]\n\t"
wolfSSL 14:167253f4e170 18399 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18400 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18401 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18402 "# A[16] * B[19]\n\t"
wolfSSL 14:167253f4e170 18403 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18404 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18405 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18406 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18407 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18408 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18409 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18410 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18411 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18412 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18413 "# A[16] * B[20]\n\t"
wolfSSL 14:167253f4e170 18414 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18415 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18416 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18417 "# A[16] * B[21]\n\t"
wolfSSL 14:167253f4e170 18418 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18419 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18420 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18421 "# A[16] * B[22]\n\t"
wolfSSL 14:167253f4e170 18422 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18423 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18424 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18425 "# A[16] * B[23]\n\t"
wolfSSL 14:167253f4e170 18426 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18427 "movq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 18428 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18429 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18430 "adcxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 18431 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18432 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18433 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18434 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 18435 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 18436 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 18437 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 18438 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 18439 "movq 136(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 18440 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 18441 "movq 136(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18442 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18443 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18444 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18445 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18446 "# A[17] * B[0]\n\t"
wolfSSL 14:167253f4e170 18447 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18448 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18449 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18450 "# A[17] * B[1]\n\t"
wolfSSL 14:167253f4e170 18451 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18452 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18453 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18454 "# A[17] * B[2]\n\t"
wolfSSL 14:167253f4e170 18455 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18456 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18457 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18458 "# A[17] * B[3]\n\t"
wolfSSL 14:167253f4e170 18459 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18460 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18461 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18462 "movq %%rax, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 18463 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 18464 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 18465 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18466 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18467 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18468 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18469 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18470 "# A[17] * B[4]\n\t"
wolfSSL 14:167253f4e170 18471 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18472 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18473 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18474 "# A[17] * B[5]\n\t"
wolfSSL 14:167253f4e170 18475 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18476 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18477 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18478 "# A[17] * B[6]\n\t"
wolfSSL 14:167253f4e170 18479 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18480 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18481 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18482 "# A[17] * B[7]\n\t"
wolfSSL 14:167253f4e170 18483 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18484 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18485 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18486 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18487 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18488 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18489 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18490 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18491 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18492 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18493 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18494 "# A[17] * B[8]\n\t"
wolfSSL 14:167253f4e170 18495 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18496 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18497 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18498 "# A[17] * B[9]\n\t"
wolfSSL 14:167253f4e170 18499 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18500 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18501 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18502 "# A[17] * B[10]\n\t"
wolfSSL 14:167253f4e170 18503 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18504 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18505 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18506 "# A[17] * B[11]\n\t"
wolfSSL 14:167253f4e170 18507 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18508 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18509 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18510 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18511 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18512 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18513 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18514 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18515 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18516 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18517 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18518 "# A[17] * B[12]\n\t"
wolfSSL 14:167253f4e170 18519 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18520 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18521 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18522 "# A[17] * B[13]\n\t"
wolfSSL 14:167253f4e170 18523 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18524 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18525 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18526 "# A[17] * B[14]\n\t"
wolfSSL 14:167253f4e170 18527 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18528 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18529 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18530 "# A[17] * B[15]\n\t"
wolfSSL 14:167253f4e170 18531 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18532 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18533 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18534 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18535 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18536 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18537 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18538 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18539 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18540 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18541 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18542 "# A[17] * B[16]\n\t"
wolfSSL 14:167253f4e170 18543 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18544 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18545 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18546 "# A[17] * B[17]\n\t"
wolfSSL 14:167253f4e170 18547 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18548 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18549 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18550 "# A[17] * B[18]\n\t"
wolfSSL 14:167253f4e170 18551 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18552 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18553 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18554 "# A[17] * B[19]\n\t"
wolfSSL 14:167253f4e170 18555 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18556 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18557 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18558 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18559 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18560 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18561 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 18562 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18563 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18564 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18565 "# A[17] * B[20]\n\t"
wolfSSL 14:167253f4e170 18566 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18567 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18568 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18569 "# A[17] * B[21]\n\t"
wolfSSL 14:167253f4e170 18570 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18571 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18572 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18573 "# A[17] * B[22]\n\t"
wolfSSL 14:167253f4e170 18574 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18575 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18576 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18577 "# A[17] * B[23]\n\t"
wolfSSL 14:167253f4e170 18578 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18579 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 18580 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18581 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18582 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 18583 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18584 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18585 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18586 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 18587 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 18588 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 18589 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 18590 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 18591 "movq 144(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 18592 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 18593 "movq 144(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18594 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18595 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18596 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18597 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18598 "# A[18] * B[0]\n\t"
wolfSSL 14:167253f4e170 18599 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18600 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18601 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18602 "# A[18] * B[1]\n\t"
wolfSSL 14:167253f4e170 18603 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18604 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18605 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18606 "# A[18] * B[2]\n\t"
wolfSSL 14:167253f4e170 18607 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18608 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18609 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18610 "# A[18] * B[3]\n\t"
wolfSSL 14:167253f4e170 18611 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18612 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18613 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18614 "movq %%r10, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 18615 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 18616 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18617 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18618 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18619 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18620 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18621 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18622 "# A[18] * B[4]\n\t"
wolfSSL 14:167253f4e170 18623 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18624 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18625 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18626 "# A[18] * B[5]\n\t"
wolfSSL 14:167253f4e170 18627 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18628 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18629 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18630 "# A[18] * B[6]\n\t"
wolfSSL 14:167253f4e170 18631 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18632 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18633 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18634 "# A[18] * B[7]\n\t"
wolfSSL 14:167253f4e170 18635 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18636 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18637 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18638 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18639 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18640 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18641 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18642 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18643 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18644 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18645 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18646 "# A[18] * B[8]\n\t"
wolfSSL 14:167253f4e170 18647 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18648 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18649 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18650 "# A[18] * B[9]\n\t"
wolfSSL 14:167253f4e170 18651 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18652 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18653 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18654 "# A[18] * B[10]\n\t"
wolfSSL 14:167253f4e170 18655 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18656 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18657 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18658 "# A[18] * B[11]\n\t"
wolfSSL 14:167253f4e170 18659 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18660 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18661 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18662 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18663 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18664 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18665 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18666 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18667 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18668 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18669 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18670 "# A[18] * B[12]\n\t"
wolfSSL 14:167253f4e170 18671 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18672 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18673 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18674 "# A[18] * B[13]\n\t"
wolfSSL 14:167253f4e170 18675 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18676 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18677 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18678 "# A[18] * B[14]\n\t"
wolfSSL 14:167253f4e170 18679 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18680 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18681 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18682 "# A[18] * B[15]\n\t"
wolfSSL 14:167253f4e170 18683 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18684 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18685 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18686 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18687 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18688 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18689 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18690 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18691 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18692 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18693 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18694 "# A[18] * B[16]\n\t"
wolfSSL 14:167253f4e170 18695 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18696 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18697 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18698 "# A[18] * B[17]\n\t"
wolfSSL 14:167253f4e170 18699 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18700 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18701 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18702 "# A[18] * B[18]\n\t"
wolfSSL 14:167253f4e170 18703 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18704 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18705 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18706 "# A[18] * B[19]\n\t"
wolfSSL 14:167253f4e170 18707 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18708 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18709 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18710 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18711 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18712 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 18713 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 18714 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18715 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18716 "movq 328(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18717 "# A[18] * B[20]\n\t"
wolfSSL 14:167253f4e170 18718 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18719 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18720 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18721 "# A[18] * B[21]\n\t"
wolfSSL 14:167253f4e170 18722 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18723 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18724 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18725 "# A[18] * B[22]\n\t"
wolfSSL 14:167253f4e170 18726 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18727 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18728 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18729 "# A[18] * B[23]\n\t"
wolfSSL 14:167253f4e170 18730 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18731 "movq %%r15, %%r10\n\t"
wolfSSL 14:167253f4e170 18732 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18733 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18734 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 18735 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18736 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18737 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18738 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 18739 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 18740 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 18741 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 18742 "movq %%r10, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 18743 "movq 152(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 18744 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 18745 "movq 152(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18746 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18747 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18748 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18749 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18750 "# A[19] * B[0]\n\t"
wolfSSL 14:167253f4e170 18751 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18752 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18753 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18754 "# A[19] * B[1]\n\t"
wolfSSL 14:167253f4e170 18755 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18756 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18757 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18758 "# A[19] * B[2]\n\t"
wolfSSL 14:167253f4e170 18759 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18760 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18761 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18762 "# A[19] * B[3]\n\t"
wolfSSL 14:167253f4e170 18763 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18764 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18765 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18766 "movq %%r11, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 18767 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18768 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18769 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18770 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18771 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18772 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18773 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18774 "# A[19] * B[4]\n\t"
wolfSSL 14:167253f4e170 18775 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18776 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18777 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18778 "# A[19] * B[5]\n\t"
wolfSSL 14:167253f4e170 18779 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18780 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18781 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18782 "# A[19] * B[6]\n\t"
wolfSSL 14:167253f4e170 18783 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18784 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18785 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18786 "# A[19] * B[7]\n\t"
wolfSSL 14:167253f4e170 18787 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18788 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18789 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18790 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18791 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18792 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18793 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18794 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18795 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18796 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18797 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18798 "# A[19] * B[8]\n\t"
wolfSSL 14:167253f4e170 18799 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18800 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18801 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18802 "# A[19] * B[9]\n\t"
wolfSSL 14:167253f4e170 18803 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18804 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18805 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18806 "# A[19] * B[10]\n\t"
wolfSSL 14:167253f4e170 18807 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18808 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18809 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18810 "# A[19] * B[11]\n\t"
wolfSSL 14:167253f4e170 18811 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18812 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18813 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18814 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18815 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18816 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18817 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18818 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18819 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18820 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18821 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18822 "# A[19] * B[12]\n\t"
wolfSSL 14:167253f4e170 18823 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18824 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18825 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18826 "# A[19] * B[13]\n\t"
wolfSSL 14:167253f4e170 18827 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18828 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18829 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18830 "# A[19] * B[14]\n\t"
wolfSSL 14:167253f4e170 18831 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18832 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18833 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18834 "# A[19] * B[15]\n\t"
wolfSSL 14:167253f4e170 18835 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18836 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18837 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18838 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18839 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18840 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18841 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18842 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18843 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18844 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18845 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18846 "# A[19] * B[16]\n\t"
wolfSSL 14:167253f4e170 18847 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18848 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18849 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18850 "# A[19] * B[17]\n\t"
wolfSSL 14:167253f4e170 18851 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18852 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18853 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18854 "# A[19] * B[18]\n\t"
wolfSSL 14:167253f4e170 18855 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18856 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18857 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18858 "# A[19] * B[19]\n\t"
wolfSSL 14:167253f4e170 18859 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18860 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18861 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18862 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18863 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 18864 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 18865 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 18866 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18867 "movq 328(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18868 "movq 336(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18869 "# A[19] * B[20]\n\t"
wolfSSL 14:167253f4e170 18870 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18871 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18872 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18873 "# A[19] * B[21]\n\t"
wolfSSL 14:167253f4e170 18874 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18875 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18876 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18877 "# A[19] * B[22]\n\t"
wolfSSL 14:167253f4e170 18878 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18879 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18880 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18881 "# A[19] * B[23]\n\t"
wolfSSL 14:167253f4e170 18882 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18883 "movq %%r15, %%r11\n\t"
wolfSSL 14:167253f4e170 18884 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18885 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18886 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 18887 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18888 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18889 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 18890 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 18891 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 18892 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 18893 "movq %%r10, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 18894 "movq %%r11, 344(%[t])\n\t"
wolfSSL 14:167253f4e170 18895 "movq 160(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 18896 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 18897 "movq 160(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18898 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18899 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18900 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18901 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18902 "# A[20] * B[0]\n\t"
wolfSSL 14:167253f4e170 18903 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18904 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18905 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18906 "# A[20] * B[1]\n\t"
wolfSSL 14:167253f4e170 18907 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18908 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18909 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18910 "# A[20] * B[2]\n\t"
wolfSSL 14:167253f4e170 18911 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18912 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18913 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18914 "# A[20] * B[3]\n\t"
wolfSSL 14:167253f4e170 18915 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18916 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18917 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18918 "movq %%r12, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 18919 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 18920 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 18921 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 18922 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18923 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18924 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18925 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18926 "# A[20] * B[4]\n\t"
wolfSSL 14:167253f4e170 18927 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18928 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18929 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18930 "# A[20] * B[5]\n\t"
wolfSSL 14:167253f4e170 18931 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18932 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18933 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18934 "# A[20] * B[6]\n\t"
wolfSSL 14:167253f4e170 18935 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18936 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18937 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18938 "# A[20] * B[7]\n\t"
wolfSSL 14:167253f4e170 18939 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18940 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18941 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18942 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 18943 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 18944 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 18945 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 18946 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18947 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18948 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18949 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18950 "# A[20] * B[8]\n\t"
wolfSSL 14:167253f4e170 18951 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18952 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18953 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18954 "# A[20] * B[9]\n\t"
wolfSSL 14:167253f4e170 18955 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18956 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18957 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18958 "# A[20] * B[10]\n\t"
wolfSSL 14:167253f4e170 18959 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18960 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 18961 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 18962 "# A[20] * B[11]\n\t"
wolfSSL 14:167253f4e170 18963 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18964 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 18965 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 18966 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 18967 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 18968 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 18969 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 18970 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18971 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18972 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 18973 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 18974 "# A[20] * B[12]\n\t"
wolfSSL 14:167253f4e170 18975 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18976 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 18977 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 18978 "# A[20] * B[13]\n\t"
wolfSSL 14:167253f4e170 18979 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18980 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 18981 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 18982 "# A[20] * B[14]\n\t"
wolfSSL 14:167253f4e170 18983 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18984 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 18985 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 18986 "# A[20] * B[15]\n\t"
wolfSSL 14:167253f4e170 18987 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 18988 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 18989 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 18990 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 18991 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 18992 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 18993 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 18994 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 18995 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 18996 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 18997 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 18998 "# A[20] * B[16]\n\t"
wolfSSL 14:167253f4e170 18999 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19000 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19001 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19002 "# A[20] * B[17]\n\t"
wolfSSL 14:167253f4e170 19003 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19004 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19005 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19006 "# A[20] * B[18]\n\t"
wolfSSL 14:167253f4e170 19007 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19008 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19009 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19010 "# A[20] * B[19]\n\t"
wolfSSL 14:167253f4e170 19011 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19012 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19013 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19014 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 19015 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 19016 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 19017 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 19018 "movq 328(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19019 "movq 336(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19020 "movq 344(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19021 "# A[20] * B[20]\n\t"
wolfSSL 14:167253f4e170 19022 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19023 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19024 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19025 "# A[20] * B[21]\n\t"
wolfSSL 14:167253f4e170 19026 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19027 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19028 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19029 "# A[20] * B[22]\n\t"
wolfSSL 14:167253f4e170 19030 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19031 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19032 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19033 "# A[20] * B[23]\n\t"
wolfSSL 14:167253f4e170 19034 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19035 "movq %%r15, %%r12\n\t"
wolfSSL 14:167253f4e170 19036 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19037 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19038 "adcxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19039 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19040 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19041 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19042 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 19043 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 19044 "movq %%r10, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 19045 "movq %%r11, 344(%[t])\n\t"
wolfSSL 14:167253f4e170 19046 "movq %%r12, 352(%[t])\n\t"
wolfSSL 14:167253f4e170 19047 "movq 168(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19048 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 19049 "movq 168(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19050 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19051 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19052 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19053 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19054 "# A[21] * B[0]\n\t"
wolfSSL 14:167253f4e170 19055 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19056 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19057 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19058 "# A[21] * B[1]\n\t"
wolfSSL 14:167253f4e170 19059 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19060 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19061 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19062 "# A[21] * B[2]\n\t"
wolfSSL 14:167253f4e170 19063 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19064 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19065 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19066 "# A[21] * B[3]\n\t"
wolfSSL 14:167253f4e170 19067 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19068 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19069 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19070 "movq %%r13, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 19071 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 19072 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 19073 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 19074 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19075 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19076 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19077 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19078 "# A[21] * B[4]\n\t"
wolfSSL 14:167253f4e170 19079 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19080 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19081 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19082 "# A[21] * B[5]\n\t"
wolfSSL 14:167253f4e170 19083 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19084 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19085 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19086 "# A[21] * B[6]\n\t"
wolfSSL 14:167253f4e170 19087 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19088 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19089 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19090 "# A[21] * B[7]\n\t"
wolfSSL 14:167253f4e170 19091 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19092 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19093 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19094 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 19095 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 19096 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 19097 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 19098 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19099 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19100 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19101 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19102 "# A[21] * B[8]\n\t"
wolfSSL 14:167253f4e170 19103 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19104 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19105 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19106 "# A[21] * B[9]\n\t"
wolfSSL 14:167253f4e170 19107 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19108 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19109 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19110 "# A[21] * B[10]\n\t"
wolfSSL 14:167253f4e170 19111 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19112 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19113 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19114 "# A[21] * B[11]\n\t"
wolfSSL 14:167253f4e170 19115 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19116 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19117 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19118 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 19119 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 19120 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 19121 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 19122 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19123 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19124 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19125 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19126 "# A[21] * B[12]\n\t"
wolfSSL 14:167253f4e170 19127 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19128 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19129 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19130 "# A[21] * B[13]\n\t"
wolfSSL 14:167253f4e170 19131 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19132 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19133 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19134 "# A[21] * B[14]\n\t"
wolfSSL 14:167253f4e170 19135 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19136 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19137 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19138 "# A[21] * B[15]\n\t"
wolfSSL 14:167253f4e170 19139 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19140 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19141 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19142 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 19143 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 19144 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 19145 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 19146 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19147 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19148 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19149 "movq 328(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19150 "# A[21] * B[16]\n\t"
wolfSSL 14:167253f4e170 19151 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19152 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19153 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19154 "# A[21] * B[17]\n\t"
wolfSSL 14:167253f4e170 19155 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19156 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19157 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19158 "# A[21] * B[18]\n\t"
wolfSSL 14:167253f4e170 19159 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19160 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19161 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19162 "# A[21] * B[19]\n\t"
wolfSSL 14:167253f4e170 19163 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19164 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19165 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19166 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 19167 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 19168 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 19169 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 19170 "movq 336(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19171 "movq 344(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19172 "movq 352(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19173 "# A[21] * B[20]\n\t"
wolfSSL 14:167253f4e170 19174 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19175 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19176 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19177 "# A[21] * B[21]\n\t"
wolfSSL 14:167253f4e170 19178 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19179 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19180 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19181 "# A[21] * B[22]\n\t"
wolfSSL 14:167253f4e170 19182 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19183 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19184 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19185 "# A[21] * B[23]\n\t"
wolfSSL 14:167253f4e170 19186 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19187 "movq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 19188 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19189 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19190 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19191 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19192 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19193 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19194 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 19195 "movq %%r10, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 19196 "movq %%r11, 344(%[t])\n\t"
wolfSSL 14:167253f4e170 19197 "movq %%r12, 352(%[t])\n\t"
wolfSSL 14:167253f4e170 19198 "movq %%r13, 360(%[t])\n\t"
wolfSSL 14:167253f4e170 19199 "movq 176(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19200 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 19201 "movq 176(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19202 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19203 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19204 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19205 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19206 "# A[22] * B[0]\n\t"
wolfSSL 14:167253f4e170 19207 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19208 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19209 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19210 "# A[22] * B[1]\n\t"
wolfSSL 14:167253f4e170 19211 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19212 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19213 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19214 "# A[22] * B[2]\n\t"
wolfSSL 14:167253f4e170 19215 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19216 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19217 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19218 "# A[22] * B[3]\n\t"
wolfSSL 14:167253f4e170 19219 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19220 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19221 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19222 "movq %%r14, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 19223 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 19224 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 19225 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 19226 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19227 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19228 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19229 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19230 "# A[22] * B[4]\n\t"
wolfSSL 14:167253f4e170 19231 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19232 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19233 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19234 "# A[22] * B[5]\n\t"
wolfSSL 14:167253f4e170 19235 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19236 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19237 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19238 "# A[22] * B[6]\n\t"
wolfSSL 14:167253f4e170 19239 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19240 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19241 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19242 "# A[22] * B[7]\n\t"
wolfSSL 14:167253f4e170 19243 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19244 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19245 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19246 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 19247 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 19248 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 19249 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 19250 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19251 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19252 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19253 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19254 "# A[22] * B[8]\n\t"
wolfSSL 14:167253f4e170 19255 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19256 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19257 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19258 "# A[22] * B[9]\n\t"
wolfSSL 14:167253f4e170 19259 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19260 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19261 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19262 "# A[22] * B[10]\n\t"
wolfSSL 14:167253f4e170 19263 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19264 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19265 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19266 "# A[22] * B[11]\n\t"
wolfSSL 14:167253f4e170 19267 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19268 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19269 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19270 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 19271 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 19272 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 19273 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 19274 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19275 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19276 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19277 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19278 "# A[22] * B[12]\n\t"
wolfSSL 14:167253f4e170 19279 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19280 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19281 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19282 "# A[22] * B[13]\n\t"
wolfSSL 14:167253f4e170 19283 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19284 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19285 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19286 "# A[22] * B[14]\n\t"
wolfSSL 14:167253f4e170 19287 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19288 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19289 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19290 "# A[22] * B[15]\n\t"
wolfSSL 14:167253f4e170 19291 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19292 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19293 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19294 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 19295 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 19296 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 19297 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 19298 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19299 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19300 "movq 328(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19301 "movq 336(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19302 "# A[22] * B[16]\n\t"
wolfSSL 14:167253f4e170 19303 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19304 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19305 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19306 "# A[22] * B[17]\n\t"
wolfSSL 14:167253f4e170 19307 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19308 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19309 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19310 "# A[22] * B[18]\n\t"
wolfSSL 14:167253f4e170 19311 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19312 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19313 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19314 "# A[22] * B[19]\n\t"
wolfSSL 14:167253f4e170 19315 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19316 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19317 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19318 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 19319 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 19320 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 19321 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 19322 "movq 344(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19323 "movq 352(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19324 "movq 360(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19325 "# A[22] * B[20]\n\t"
wolfSSL 14:167253f4e170 19326 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19327 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19328 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19329 "# A[22] * B[21]\n\t"
wolfSSL 14:167253f4e170 19330 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19331 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19332 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19333 "# A[22] * B[22]\n\t"
wolfSSL 14:167253f4e170 19334 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19335 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19336 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19337 "# A[22] * B[23]\n\t"
wolfSSL 14:167253f4e170 19338 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19339 "movq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 19340 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19341 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19342 "adcxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19343 "movq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19344 "adoxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19345 "adcxq %%r15, %%rcx\n\t"
wolfSSL 14:167253f4e170 19346 "movq %%r10, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 19347 "movq %%r11, 344(%[t])\n\t"
wolfSSL 14:167253f4e170 19348 "movq %%r12, 352(%[t])\n\t"
wolfSSL 14:167253f4e170 19349 "movq %%r13, 360(%[t])\n\t"
wolfSSL 14:167253f4e170 19350 "movq %%r14, 368(%[t])\n\t"
wolfSSL 14:167253f4e170 19351 "movq 184(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19352 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 19353 "movq 184(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19354 "movq 192(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19355 "movq 200(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19356 "movq 208(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19357 "movq 216(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19358 "# A[23] * B[0]\n\t"
wolfSSL 14:167253f4e170 19359 "mulx 0(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19360 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19361 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19362 "# A[23] * B[1]\n\t"
wolfSSL 14:167253f4e170 19363 "mulx 8(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19364 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19365 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19366 "# A[23] * B[2]\n\t"
wolfSSL 14:167253f4e170 19367 "mulx 16(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19368 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19369 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19370 "# A[23] * B[3]\n\t"
wolfSSL 14:167253f4e170 19371 "mulx 24(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19372 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19373 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19374 "movq %%rax, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 19375 "movq %%r10, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 19376 "movq %%r11, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 19377 "movq %%r12, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 19378 "movq 224(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19379 "movq 232(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19380 "movq 240(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19381 "movq 248(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19382 "# A[23] * B[4]\n\t"
wolfSSL 14:167253f4e170 19383 "mulx 32(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19384 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19385 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19386 "# A[23] * B[5]\n\t"
wolfSSL 14:167253f4e170 19387 "mulx 40(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19388 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19389 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19390 "# A[23] * B[6]\n\t"
wolfSSL 14:167253f4e170 19391 "mulx 48(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19392 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19393 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19394 "# A[23] * B[7]\n\t"
wolfSSL 14:167253f4e170 19395 "mulx 56(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19396 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19397 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19398 "movq %%r13, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 19399 "movq %%r14, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 19400 "movq %%rax, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 19401 "movq %%r10, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 19402 "movq 256(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19403 "movq 264(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19404 "movq 272(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19405 "movq 280(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19406 "# A[23] * B[8]\n\t"
wolfSSL 14:167253f4e170 19407 "mulx 64(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19408 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19409 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19410 "# A[23] * B[9]\n\t"
wolfSSL 14:167253f4e170 19411 "mulx 72(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19412 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19413 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19414 "# A[23] * B[10]\n\t"
wolfSSL 14:167253f4e170 19415 "mulx 80(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19416 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19417 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19418 "# A[23] * B[11]\n\t"
wolfSSL 14:167253f4e170 19419 "mulx 88(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19420 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19421 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19422 "movq %%r11, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 19423 "movq %%r12, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 19424 "movq %%r13, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 19425 "movq %%r14, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 19426 "movq 288(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19427 "movq 296(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19428 "movq 304(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19429 "movq 312(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19430 "# A[23] * B[12]\n\t"
wolfSSL 14:167253f4e170 19431 "mulx 96(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19432 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19433 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19434 "# A[23] * B[13]\n\t"
wolfSSL 14:167253f4e170 19435 "mulx 104(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19436 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19437 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19438 "# A[23] * B[14]\n\t"
wolfSSL 14:167253f4e170 19439 "mulx 112(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19440 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19441 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19442 "# A[23] * B[15]\n\t"
wolfSSL 14:167253f4e170 19443 "mulx 120(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19444 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19445 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19446 "movq %%rax, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 19447 "movq %%r10, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 19448 "movq %%r11, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 19449 "movq %%r12, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 19450 "movq 320(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19451 "movq 328(%[t]), %%rax\n\t"
wolfSSL 14:167253f4e170 19452 "movq 336(%[t]), %%r10\n\t"
wolfSSL 14:167253f4e170 19453 "movq 344(%[t]), %%r11\n\t"
wolfSSL 14:167253f4e170 19454 "# A[23] * B[16]\n\t"
wolfSSL 14:167253f4e170 19455 "mulx 128(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19456 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19457 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19458 "# A[23] * B[17]\n\t"
wolfSSL 14:167253f4e170 19459 "mulx 136(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19460 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19461 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19462 "# A[23] * B[18]\n\t"
wolfSSL 14:167253f4e170 19463 "mulx 144(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19464 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 19465 "adoxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 19466 "# A[23] * B[19]\n\t"
wolfSSL 14:167253f4e170 19467 "mulx 152(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19468 "adcxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19469 "adoxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 19470 "movq %%r13, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 19471 "movq %%r14, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 19472 "movq %%rax, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 19473 "movq %%r10, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 19474 "movq 352(%[t]), %%r12\n\t"
wolfSSL 14:167253f4e170 19475 "movq 360(%[t]), %%r13\n\t"
wolfSSL 14:167253f4e170 19476 "movq 368(%[t]), %%r14\n\t"
wolfSSL 14:167253f4e170 19477 "# A[23] * B[20]\n\t"
wolfSSL 14:167253f4e170 19478 "mulx 160(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19479 "adcxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19480 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 19481 "# A[23] * B[21]\n\t"
wolfSSL 14:167253f4e170 19482 "mulx 168(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19483 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19484 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19485 "# A[23] * B[22]\n\t"
wolfSSL 14:167253f4e170 19486 "mulx 176(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19487 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19488 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19489 "# A[23] * B[23]\n\t"
wolfSSL 14:167253f4e170 19490 "mulx 184(%[b]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19491 "movq %%r15, %%rax\n\t"
wolfSSL 14:167253f4e170 19492 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19493 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 19494 "adcxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 19495 "movq %%r11, 344(%[t])\n\t"
wolfSSL 14:167253f4e170 19496 "movq %%r12, 352(%[t])\n\t"
wolfSSL 14:167253f4e170 19497 "movq %%r13, 360(%[t])\n\t"
wolfSSL 14:167253f4e170 19498 "movq %%r14, 368(%[t])\n\t"
wolfSSL 14:167253f4e170 19499 "movq %%rax, 376(%[t])\n\t"
wolfSSL 14:167253f4e170 19500 :
wolfSSL 14:167253f4e170 19501 : [a] "r" (a), [b] "r" (b), [t] "r" (tmp)
wolfSSL 14:167253f4e170 19502 : "memory", "rax", "rdx", "rcx",
wolfSSL 14:167253f4e170 19503 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 19504 );
wolfSSL 14:167253f4e170 19505
wolfSSL 14:167253f4e170 19506 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 19507 }
wolfSSL 14:167253f4e170 19508 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 19509
wolfSSL 14:167253f4e170 19510 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 19511 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 19512 *
wolfSSL 14:167253f4e170 19513 * r A single precision integer.
wolfSSL 14:167253f4e170 19514 * a A single precision integer.
wolfSSL 14:167253f4e170 19515 */
wolfSSL 14:167253f4e170 19516 SP_NOINLINE static void sp_3072_sqr_avx2_24(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 19517 {
wolfSSL 14:167253f4e170 19518 sp_digit tmp[48];
wolfSSL 14:167253f4e170 19519
wolfSSL 14:167253f4e170 19520 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 19521 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 19522 "# Diagonal 1\n\t"
wolfSSL 14:167253f4e170 19523 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 19524 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 19525 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 19526 "xorq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 19527 "xorq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 19528 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 19529 "# A[1] x A[0]\n\t"
wolfSSL 14:167253f4e170 19530 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19531 "mulxq 8(%[a]), %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 19532 "# A[2] x A[0]\n\t"
wolfSSL 14:167253f4e170 19533 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19534 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19535 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19536 "# A[3] x A[0]\n\t"
wolfSSL 14:167253f4e170 19537 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19538 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19539 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19540 "# A[4] x A[0]\n\t"
wolfSSL 14:167253f4e170 19541 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19542 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19543 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19544 "# A[5] x A[0]\n\t"
wolfSSL 14:167253f4e170 19545 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19546 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19547 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19548 "movq %%r10, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19549 "movq %%r11, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19550 "movq %%r12, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19551 "movq %%r13, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19552 "movq %%r14, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19553 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19554 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19555 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19556 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19557 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19558 "# A[6] x A[0]\n\t"
wolfSSL 14:167253f4e170 19559 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19560 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19561 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19562 "# A[7] x A[0]\n\t"
wolfSSL 14:167253f4e170 19563 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19564 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19565 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19566 "# A[8] x A[0]\n\t"
wolfSSL 14:167253f4e170 19567 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19568 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19569 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19570 "# A[9] x A[0]\n\t"
wolfSSL 14:167253f4e170 19571 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19572 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19573 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19574 "# A[10] x A[0]\n\t"
wolfSSL 14:167253f4e170 19575 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19576 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19577 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19578 "movq %%r15, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19579 "movq %%r10, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19580 "movq %%r11, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19581 "movq %%r12, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19582 "movq %%r13, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19583 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 19584 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19585 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19586 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19587 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19588 "# A[11] x A[0]\n\t"
wolfSSL 14:167253f4e170 19589 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19590 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19591 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19592 "# A[12] x A[0]\n\t"
wolfSSL 14:167253f4e170 19593 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19594 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19595 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19596 "# A[13] x A[0]\n\t"
wolfSSL 14:167253f4e170 19597 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19598 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19599 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19600 "# A[14] x A[0]\n\t"
wolfSSL 14:167253f4e170 19601 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19602 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19603 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19604 "# A[15] x A[0]\n\t"
wolfSSL 14:167253f4e170 19605 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19606 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19607 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19608 "movq %%r14, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19609 "movq %%r15, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19610 "movq %%r10, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19611 "movq %%r11, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19612 "movq %%r12, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19613 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19614 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 19615 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 19616 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 19617 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19618 "# A[16] x A[0]\n\t"
wolfSSL 14:167253f4e170 19619 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19620 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19621 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19622 "# A[17] x A[0]\n\t"
wolfSSL 14:167253f4e170 19623 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19624 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19625 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19626 "# A[18] x A[0]\n\t"
wolfSSL 14:167253f4e170 19627 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19628 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19629 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19630 "# A[19] x A[0]\n\t"
wolfSSL 14:167253f4e170 19631 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19632 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19633 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19634 "# A[20] x A[0]\n\t"
wolfSSL 14:167253f4e170 19635 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19636 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19637 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19638 "movq %%r13, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19639 "movq %%r14, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19640 "movq %%r15, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19641 "movq %%r10, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19642 "movq %%r11, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19643 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19644 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19645 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 19646 "# A[21] x A[0]\n\t"
wolfSSL 14:167253f4e170 19647 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19648 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19649 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19650 "# A[22] x A[0]\n\t"
wolfSSL 14:167253f4e170 19651 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19652 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19653 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19654 "# A[23] x A[0]\n\t"
wolfSSL 14:167253f4e170 19655 "mulxq 184(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19656 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19657 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19658 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19659 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19660 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19661 "# Carry\n\t"
wolfSSL 14:167253f4e170 19662 "adcxq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 19663 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19664 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19665 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19666 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19667 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 19668 "# Diagonal 2\n\t"
wolfSSL 14:167253f4e170 19669 "movq 24(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19670 "movq 32(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19671 "movq 40(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19672 "movq 48(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19673 "movq 56(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19674 "movq 64(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19675 "# A[2] x A[1]\n\t"
wolfSSL 14:167253f4e170 19676 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19677 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19678 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19679 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19680 "# A[3] x A[1]\n\t"
wolfSSL 14:167253f4e170 19681 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19682 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19683 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19684 "# A[4] x A[1]\n\t"
wolfSSL 14:167253f4e170 19685 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19686 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19687 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19688 "# A[5] x A[1]\n\t"
wolfSSL 14:167253f4e170 19689 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19690 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19691 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19692 "# A[6] x A[1]\n\t"
wolfSSL 14:167253f4e170 19693 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19694 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19695 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19696 "movq %%r15, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19697 "movq %%r10, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19698 "movq %%r11, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19699 "movq %%r12, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19700 "movq %%r13, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19701 "movq 72(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19702 "movq 80(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19703 "movq 88(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19704 "movq 96(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19705 "movq 104(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19706 "# A[7] x A[1]\n\t"
wolfSSL 14:167253f4e170 19707 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19708 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19709 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19710 "# A[8] x A[1]\n\t"
wolfSSL 14:167253f4e170 19711 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19712 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19713 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19714 "# A[9] x A[1]\n\t"
wolfSSL 14:167253f4e170 19715 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19716 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19717 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19718 "# A[10] x A[1]\n\t"
wolfSSL 14:167253f4e170 19719 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19720 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19721 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19722 "# A[11] x A[1]\n\t"
wolfSSL 14:167253f4e170 19723 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19724 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19725 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19726 "movq %%r14, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19727 "movq %%r15, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19728 "movq %%r10, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19729 "movq %%r11, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19730 "movq %%r12, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19731 "movq 112(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19732 "movq 120(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19733 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19734 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19735 "movq 144(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19736 "# A[12] x A[1]\n\t"
wolfSSL 14:167253f4e170 19737 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19738 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19739 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19740 "# A[13] x A[1]\n\t"
wolfSSL 14:167253f4e170 19741 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19742 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19743 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19744 "# A[14] x A[1]\n\t"
wolfSSL 14:167253f4e170 19745 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19746 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19747 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19748 "# A[15] x A[1]\n\t"
wolfSSL 14:167253f4e170 19749 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19750 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19751 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19752 "# A[16] x A[1]\n\t"
wolfSSL 14:167253f4e170 19753 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19754 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19755 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19756 "movq %%r13, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19757 "movq %%r14, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19758 "movq %%r15, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19759 "movq %%r10, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19760 "movq %%r11, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19761 "movq 152(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19762 "movq 160(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19763 "movq 168(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19764 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19765 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19766 "# A[17] x A[1]\n\t"
wolfSSL 14:167253f4e170 19767 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19768 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19769 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19770 "# A[18] x A[1]\n\t"
wolfSSL 14:167253f4e170 19771 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19772 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19773 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19774 "# A[19] x A[1]\n\t"
wolfSSL 14:167253f4e170 19775 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19776 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19777 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19778 "# A[20] x A[1]\n\t"
wolfSSL 14:167253f4e170 19779 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19780 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19781 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19782 "# A[21] x A[1]\n\t"
wolfSSL 14:167253f4e170 19783 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19784 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19785 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19786 "movq %%r12, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19787 "movq %%r13, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19788 "movq %%r14, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19789 "movq %%r15, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19790 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19791 "movq 192(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19792 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19793 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 19794 "# A[22] x A[1]\n\t"
wolfSSL 14:167253f4e170 19795 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19796 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19797 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19798 "# A[23] x A[1]\n\t"
wolfSSL 14:167253f4e170 19799 "mulxq 184(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19800 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19801 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19802 "# A[23] x A[2]\n\t"
wolfSSL 14:167253f4e170 19803 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19804 "mulxq 184(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19805 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19806 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19807 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19808 "movq %%r12, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19809 "movq %%r13, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19810 "# Carry\n\t"
wolfSSL 14:167253f4e170 19811 "adcxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 19812 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19813 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19814 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19815 "movq %%r14, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19816 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 19817 "# Diagonal 3\n\t"
wolfSSL 14:167253f4e170 19818 "movq 40(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19819 "movq 48(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19820 "movq 56(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19821 "movq 64(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19822 "movq 72(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19823 "movq 80(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19824 "# A[3] x A[2]\n\t"
wolfSSL 14:167253f4e170 19825 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19826 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19827 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19828 "# A[4] x A[2]\n\t"
wolfSSL 14:167253f4e170 19829 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19830 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19831 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19832 "# A[5] x A[2]\n\t"
wolfSSL 14:167253f4e170 19833 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19834 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19835 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19836 "# A[6] x A[2]\n\t"
wolfSSL 14:167253f4e170 19837 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19838 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19839 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19840 "# A[7] x A[2]\n\t"
wolfSSL 14:167253f4e170 19841 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19842 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19843 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19844 "movq %%r14, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19845 "movq %%r15, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19846 "movq %%r10, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19847 "movq %%r11, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19848 "movq %%r12, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19849 "movq 88(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19850 "movq 96(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19851 "movq 104(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19852 "movq 112(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19853 "movq 120(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19854 "# A[8] x A[2]\n\t"
wolfSSL 14:167253f4e170 19855 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19856 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19857 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19858 "# A[9] x A[2]\n\t"
wolfSSL 14:167253f4e170 19859 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19860 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19861 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19862 "# A[10] x A[2]\n\t"
wolfSSL 14:167253f4e170 19863 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19864 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19865 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19866 "# A[11] x A[2]\n\t"
wolfSSL 14:167253f4e170 19867 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19868 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19869 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19870 "# A[12] x A[2]\n\t"
wolfSSL 14:167253f4e170 19871 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19872 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19873 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19874 "movq %%r13, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19875 "movq %%r14, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19876 "movq %%r15, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19877 "movq %%r10, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19878 "movq %%r11, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19879 "movq 128(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19880 "movq 136(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19881 "movq 144(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19882 "movq 152(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19883 "movq 160(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19884 "# A[13] x A[2]\n\t"
wolfSSL 14:167253f4e170 19885 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19886 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19887 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19888 "# A[14] x A[2]\n\t"
wolfSSL 14:167253f4e170 19889 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19890 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19891 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19892 "# A[15] x A[2]\n\t"
wolfSSL 14:167253f4e170 19893 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19894 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19895 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19896 "# A[16] x A[2]\n\t"
wolfSSL 14:167253f4e170 19897 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19898 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19899 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19900 "# A[17] x A[2]\n\t"
wolfSSL 14:167253f4e170 19901 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19902 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19903 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19904 "movq %%r12, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19905 "movq %%r13, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19906 "movq %%r14, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19907 "movq %%r15, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19908 "movq %%r10, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19909 "movq 168(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19910 "movq 176(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19911 "movq 184(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19912 "movq 192(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19913 "movq 200(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19914 "# A[18] x A[2]\n\t"
wolfSSL 14:167253f4e170 19915 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19916 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19917 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19918 "# A[19] x A[2]\n\t"
wolfSSL 14:167253f4e170 19919 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19920 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19921 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19922 "# A[20] x A[2]\n\t"
wolfSSL 14:167253f4e170 19923 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19924 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19925 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19926 "# A[21] x A[2]\n\t"
wolfSSL 14:167253f4e170 19927 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19928 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19929 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19930 "# A[22] x A[2]\n\t"
wolfSSL 14:167253f4e170 19931 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19932 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19933 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19934 "movq %%r11, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19935 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19936 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19937 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19938 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19939 "movq 208(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19940 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 19941 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 19942 "# A[22] x A[3]\n\t"
wolfSSL 14:167253f4e170 19943 "movq 176(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19944 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19945 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19946 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19947 "# A[22] x A[4]\n\t"
wolfSSL 14:167253f4e170 19948 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19949 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19950 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19951 "# A[22] x A[5]\n\t"
wolfSSL 14:167253f4e170 19952 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19953 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 19954 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 19955 "movq %%r10, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19956 "movq %%r11, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19957 "movq %%r12, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19958 "# Carry\n\t"
wolfSSL 14:167253f4e170 19959 "adcxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 19960 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19961 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19962 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 19963 "movq %%r13, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19964 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 19965 "# Diagonal 4\n\t"
wolfSSL 14:167253f4e170 19966 "movq 56(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19967 "movq 64(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 19968 "movq 72(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 19969 "movq 80(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 19970 "movq 88(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 19971 "movq 96(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 19972 "# A[4] x A[3]\n\t"
wolfSSL 14:167253f4e170 19973 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 19974 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19975 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 19976 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 19977 "# A[5] x A[3]\n\t"
wolfSSL 14:167253f4e170 19978 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19979 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 19980 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 19981 "# A[6] x A[3]\n\t"
wolfSSL 14:167253f4e170 19982 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19983 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 19984 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 19985 "# A[7] x A[3]\n\t"
wolfSSL 14:167253f4e170 19986 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19987 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 19988 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 19989 "# A[8] x A[3]\n\t"
wolfSSL 14:167253f4e170 19990 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 19991 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 19992 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 19993 "movq %%r13, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19994 "movq %%r14, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19995 "movq %%r15, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19996 "movq %%r10, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19997 "movq %%r11, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 19998 "movq 104(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 19999 "movq 112(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20000 "movq 120(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20001 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20002 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20003 "# A[9] x A[3]\n\t"
wolfSSL 14:167253f4e170 20004 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20005 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20006 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20007 "# A[10] x A[3]\n\t"
wolfSSL 14:167253f4e170 20008 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20009 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20010 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20011 "# A[11] x A[3]\n\t"
wolfSSL 14:167253f4e170 20012 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20013 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20014 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20015 "# A[12] x A[3]\n\t"
wolfSSL 14:167253f4e170 20016 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20017 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20018 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20019 "# A[13] x A[3]\n\t"
wolfSSL 14:167253f4e170 20020 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20021 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20022 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20023 "movq %%r12, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20024 "movq %%r13, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20025 "movq %%r14, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20026 "movq %%r15, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20027 "movq %%r10, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20028 "movq 144(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20029 "movq 152(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20030 "movq 160(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20031 "movq 168(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20032 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20033 "# A[14] x A[3]\n\t"
wolfSSL 14:167253f4e170 20034 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20035 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20036 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20037 "# A[15] x A[3]\n\t"
wolfSSL 14:167253f4e170 20038 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20039 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20040 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20041 "# A[16] x A[3]\n\t"
wolfSSL 14:167253f4e170 20042 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20043 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20044 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20045 "# A[17] x A[3]\n\t"
wolfSSL 14:167253f4e170 20046 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20047 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20048 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20049 "# A[18] x A[3]\n\t"
wolfSSL 14:167253f4e170 20050 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20051 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20052 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20053 "movq %%r11, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20054 "movq %%r12, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20055 "movq %%r13, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20056 "movq %%r14, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20057 "movq %%r15, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20058 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20059 "movq 192(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20060 "movq 200(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20061 "movq 208(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20062 "movq 216(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20063 "# A[19] x A[3]\n\t"
wolfSSL 14:167253f4e170 20064 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20065 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20066 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20067 "# A[20] x A[3]\n\t"
wolfSSL 14:167253f4e170 20068 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20069 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20070 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20071 "# A[21] x A[3]\n\t"
wolfSSL 14:167253f4e170 20072 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20073 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20074 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20075 "# A[21] x A[4]\n\t"
wolfSSL 14:167253f4e170 20076 "movq 168(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20077 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20078 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20079 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20080 "# A[21] x A[5]\n\t"
wolfSSL 14:167253f4e170 20081 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20082 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20083 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20084 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20085 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20086 "movq %%r12, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20087 "movq %%r13, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20088 "movq %%r14, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20089 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20090 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 20091 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 20092 "# A[21] x A[6]\n\t"
wolfSSL 14:167253f4e170 20093 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20094 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20095 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20096 "# A[21] x A[7]\n\t"
wolfSSL 14:167253f4e170 20097 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20098 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20099 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20100 "# A[21] x A[8]\n\t"
wolfSSL 14:167253f4e170 20101 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20102 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20103 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20104 "movq %%r15, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20105 "movq %%r10, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20106 "movq %%r11, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20107 "# Carry\n\t"
wolfSSL 14:167253f4e170 20108 "adcxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 20109 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20110 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20111 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20112 "movq %%r12, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20113 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 20114 "# Diagonal 5\n\t"
wolfSSL 14:167253f4e170 20115 "movq 72(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20116 "movq 80(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20117 "movq 88(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20118 "movq 96(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20119 "movq 104(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20120 "movq 112(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20121 "# A[5] x A[4]\n\t"
wolfSSL 14:167253f4e170 20122 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20123 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20124 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20125 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20126 "# A[6] x A[4]\n\t"
wolfSSL 14:167253f4e170 20127 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20128 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20129 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20130 "# A[7] x A[4]\n\t"
wolfSSL 14:167253f4e170 20131 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20132 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20133 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20134 "# A[8] x A[4]\n\t"
wolfSSL 14:167253f4e170 20135 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20136 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20137 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20138 "# A[9] x A[4]\n\t"
wolfSSL 14:167253f4e170 20139 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20140 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20141 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20142 "movq %%r12, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20143 "movq %%r13, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20144 "movq %%r14, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20145 "movq %%r15, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20146 "movq %%r10, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20147 "movq 120(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20148 "movq 128(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20149 "movq 136(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20150 "movq 144(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20151 "movq 152(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20152 "# A[10] x A[4]\n\t"
wolfSSL 14:167253f4e170 20153 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20154 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20155 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20156 "# A[11] x A[4]\n\t"
wolfSSL 14:167253f4e170 20157 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20158 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20159 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20160 "# A[12] x A[4]\n\t"
wolfSSL 14:167253f4e170 20161 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20162 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20163 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20164 "# A[13] x A[4]\n\t"
wolfSSL 14:167253f4e170 20165 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20166 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20167 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20168 "# A[14] x A[4]\n\t"
wolfSSL 14:167253f4e170 20169 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20170 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20171 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20172 "movq %%r11, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20173 "movq %%r12, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20174 "movq %%r13, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20175 "movq %%r14, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20176 "movq %%r15, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20177 "movq 160(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20178 "movq 168(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20179 "movq 176(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20180 "movq 184(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20181 "movq 192(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20182 "# A[15] x A[4]\n\t"
wolfSSL 14:167253f4e170 20183 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20184 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20185 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20186 "# A[16] x A[4]\n\t"
wolfSSL 14:167253f4e170 20187 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20188 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20189 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20190 "# A[17] x A[4]\n\t"
wolfSSL 14:167253f4e170 20191 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20192 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20193 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20194 "# A[18] x A[4]\n\t"
wolfSSL 14:167253f4e170 20195 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20196 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20197 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20198 "# A[19] x A[4]\n\t"
wolfSSL 14:167253f4e170 20199 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20200 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20201 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20202 "movq %%r10, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20203 "movq %%r11, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20204 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20205 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20206 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20207 "movq 200(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20208 "movq 208(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20209 "movq 216(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20210 "movq 224(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20211 "movq 232(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20212 "# A[20] x A[4]\n\t"
wolfSSL 14:167253f4e170 20213 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20214 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20215 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20216 "# A[20] x A[5]\n\t"
wolfSSL 14:167253f4e170 20217 "movq 160(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20218 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20219 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20220 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20221 "# A[20] x A[6]\n\t"
wolfSSL 14:167253f4e170 20222 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20223 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20224 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20225 "# A[20] x A[7]\n\t"
wolfSSL 14:167253f4e170 20226 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20227 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20228 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20229 "# A[20] x A[8]\n\t"
wolfSSL 14:167253f4e170 20230 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20231 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20232 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20233 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20234 "movq %%r10, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20235 "movq %%r11, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20236 "movq %%r12, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20237 "movq %%r13, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20238 "movq 240(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20239 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 20240 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 20241 "# A[20] x A[9]\n\t"
wolfSSL 14:167253f4e170 20242 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20243 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20244 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20245 "# A[20] x A[10]\n\t"
wolfSSL 14:167253f4e170 20246 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20247 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20248 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20249 "# A[20] x A[11]\n\t"
wolfSSL 14:167253f4e170 20250 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20251 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20252 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20253 "movq %%r14, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20254 "movq %%r15, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20255 "movq %%r10, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20256 "# Carry\n\t"
wolfSSL 14:167253f4e170 20257 "adcxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 20258 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20259 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20260 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20261 "movq %%r11, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20262 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 20263 "# Diagonal 6\n\t"
wolfSSL 14:167253f4e170 20264 "movq 88(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20265 "movq 96(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20266 "movq 104(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20267 "movq 112(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20268 "movq 120(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20269 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20270 "# A[6] x A[5]\n\t"
wolfSSL 14:167253f4e170 20271 "movq 40(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20272 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20273 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20274 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20275 "# A[7] x A[5]\n\t"
wolfSSL 14:167253f4e170 20276 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20277 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20278 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20279 "# A[8] x A[5]\n\t"
wolfSSL 14:167253f4e170 20280 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20281 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20282 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20283 "# A[9] x A[5]\n\t"
wolfSSL 14:167253f4e170 20284 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20285 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20286 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20287 "# A[10] x A[5]\n\t"
wolfSSL 14:167253f4e170 20288 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20289 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20290 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20291 "movq %%r11, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20292 "movq %%r12, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20293 "movq %%r13, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20294 "movq %%r14, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20295 "movq %%r15, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20296 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20297 "movq 144(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20298 "movq 152(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20299 "movq 160(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20300 "movq 168(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20301 "# A[11] x A[5]\n\t"
wolfSSL 14:167253f4e170 20302 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20303 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20304 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20305 "# A[12] x A[5]\n\t"
wolfSSL 14:167253f4e170 20306 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20307 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20308 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20309 "# A[13] x A[5]\n\t"
wolfSSL 14:167253f4e170 20310 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20311 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20312 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20313 "# A[14] x A[5]\n\t"
wolfSSL 14:167253f4e170 20314 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20315 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20316 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20317 "# A[15] x A[5]\n\t"
wolfSSL 14:167253f4e170 20318 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20319 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20320 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20321 "movq %%r10, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20322 "movq %%r11, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20323 "movq %%r12, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20324 "movq %%r13, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20325 "movq %%r14, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20326 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20327 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20328 "movq 192(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20329 "movq 200(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20330 "movq 208(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20331 "# A[16] x A[5]\n\t"
wolfSSL 14:167253f4e170 20332 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20333 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20334 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20335 "# A[17] x A[5]\n\t"
wolfSSL 14:167253f4e170 20336 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20337 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20338 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20339 "# A[18] x A[5]\n\t"
wolfSSL 14:167253f4e170 20340 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20341 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20342 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20343 "# A[19] x A[5]\n\t"
wolfSSL 14:167253f4e170 20344 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20345 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20346 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20347 "# A[19] x A[6]\n\t"
wolfSSL 14:167253f4e170 20348 "movq 152(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20349 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20350 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20351 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20352 "movq %%r15, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20353 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20354 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20355 "movq %%r12, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20356 "movq %%r13, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20357 "movq 216(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20358 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20359 "movq 232(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20360 "movq 240(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20361 "movq 248(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20362 "# A[19] x A[7]\n\t"
wolfSSL 14:167253f4e170 20363 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20364 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20365 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20366 "# A[19] x A[8]\n\t"
wolfSSL 14:167253f4e170 20367 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20368 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20369 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20370 "# A[19] x A[9]\n\t"
wolfSSL 14:167253f4e170 20371 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20372 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20373 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20374 "# A[19] x A[10]\n\t"
wolfSSL 14:167253f4e170 20375 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20376 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20377 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20378 "# A[19] x A[11]\n\t"
wolfSSL 14:167253f4e170 20379 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20380 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20381 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20382 "movq %%r14, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20383 "movq %%r15, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20384 "movq %%r10, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20385 "movq %%r11, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20386 "movq %%r12, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20387 "movq 256(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20388 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 20389 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 20390 "# A[19] x A[12]\n\t"
wolfSSL 14:167253f4e170 20391 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20392 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20393 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20394 "# A[19] x A[13]\n\t"
wolfSSL 14:167253f4e170 20395 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20396 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20397 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20398 "# A[19] x A[14]\n\t"
wolfSSL 14:167253f4e170 20399 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20400 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20401 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20402 "movq %%r13, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20403 "movq %%r14, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20404 "movq %%r15, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20405 "# Carry\n\t"
wolfSSL 14:167253f4e170 20406 "adcxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 20407 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20408 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20409 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20410 "movq %%r10, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20411 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 20412 "# Diagonal 7\n\t"
wolfSSL 14:167253f4e170 20413 "movq 104(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20414 "movq 112(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20415 "movq 120(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20416 "movq 128(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20417 "movq 136(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20418 "movq 144(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20419 "# A[7] x A[6]\n\t"
wolfSSL 14:167253f4e170 20420 "movq 48(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20421 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20422 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20423 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20424 "# A[8] x A[6]\n\t"
wolfSSL 14:167253f4e170 20425 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20426 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20427 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20428 "# A[9] x A[6]\n\t"
wolfSSL 14:167253f4e170 20429 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20430 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20431 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20432 "# A[10] x A[6]\n\t"
wolfSSL 14:167253f4e170 20433 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20434 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20435 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20436 "# A[11] x A[6]\n\t"
wolfSSL 14:167253f4e170 20437 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20438 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20439 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20440 "movq %%r10, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20441 "movq %%r11, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20442 "movq %%r12, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20443 "movq %%r13, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20444 "movq %%r14, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20445 "movq 152(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20446 "movq 160(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20447 "movq 168(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20448 "movq 176(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20449 "movq 184(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20450 "# A[12] x A[6]\n\t"
wolfSSL 14:167253f4e170 20451 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20452 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20453 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20454 "# A[13] x A[6]\n\t"
wolfSSL 14:167253f4e170 20455 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20456 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20457 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20458 "# A[14] x A[6]\n\t"
wolfSSL 14:167253f4e170 20459 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20460 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20461 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20462 "# A[15] x A[6]\n\t"
wolfSSL 14:167253f4e170 20463 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20464 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20465 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20466 "# A[16] x A[6]\n\t"
wolfSSL 14:167253f4e170 20467 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20468 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20469 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20470 "movq %%r15, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20471 "movq %%r10, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20472 "movq %%r11, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20473 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20474 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20475 "movq 192(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20476 "movq 200(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20477 "movq 208(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20478 "movq 216(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20479 "movq 224(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20480 "# A[17] x A[6]\n\t"
wolfSSL 14:167253f4e170 20481 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20482 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20483 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20484 "# A[18] x A[6]\n\t"
wolfSSL 14:167253f4e170 20485 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20486 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20487 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20488 "# A[18] x A[7]\n\t"
wolfSSL 14:167253f4e170 20489 "movq 144(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20490 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20491 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20492 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20493 "# A[18] x A[8]\n\t"
wolfSSL 14:167253f4e170 20494 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20495 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20496 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20497 "# A[18] x A[9]\n\t"
wolfSSL 14:167253f4e170 20498 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20499 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20500 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20501 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20502 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20503 "movq %%r10, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20504 "movq %%r11, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20505 "movq %%r12, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20506 "movq 232(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20507 "movq 240(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20508 "movq 248(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20509 "movq 256(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20510 "movq 264(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20511 "# A[18] x A[10]\n\t"
wolfSSL 14:167253f4e170 20512 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20513 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20514 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20515 "# A[18] x A[11]\n\t"
wolfSSL 14:167253f4e170 20516 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20517 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20518 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20519 "# A[18] x A[12]\n\t"
wolfSSL 14:167253f4e170 20520 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20521 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20522 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20523 "# A[18] x A[13]\n\t"
wolfSSL 14:167253f4e170 20524 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20525 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20526 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20527 "# A[18] x A[14]\n\t"
wolfSSL 14:167253f4e170 20528 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20529 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20530 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20531 "movq %%r13, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20532 "movq %%r14, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20533 "movq %%r15, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20534 "movq %%r10, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20535 "movq %%r11, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20536 "movq 272(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20537 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 20538 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 20539 "# A[18] x A[15]\n\t"
wolfSSL 14:167253f4e170 20540 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20541 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20542 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20543 "# A[18] x A[16]\n\t"
wolfSSL 14:167253f4e170 20544 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20545 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20546 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20547 "# A[18] x A[17]\n\t"
wolfSSL 14:167253f4e170 20548 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20549 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20550 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20551 "movq %%r12, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20552 "movq %%r13, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20553 "movq %%r14, 280(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20554 "# Carry\n\t"
wolfSSL 14:167253f4e170 20555 "adcxq %%r9, %%r15\n\t"
wolfSSL 14:167253f4e170 20556 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20557 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20558 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20559 "movq %%r15, 288(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20560 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 20561 "# Diagonal 8\n\t"
wolfSSL 14:167253f4e170 20562 "movq 120(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20563 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20564 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20565 "movq 144(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20566 "movq 152(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20567 "movq 160(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20568 "# A[8] x A[7]\n\t"
wolfSSL 14:167253f4e170 20569 "movq 56(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20570 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20571 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20572 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20573 "# A[9] x A[7]\n\t"
wolfSSL 14:167253f4e170 20574 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20575 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20576 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20577 "# A[10] x A[7]\n\t"
wolfSSL 14:167253f4e170 20578 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20579 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20580 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20581 "# A[11] x A[7]\n\t"
wolfSSL 14:167253f4e170 20582 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20583 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20584 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20585 "# A[12] x A[7]\n\t"
wolfSSL 14:167253f4e170 20586 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20587 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20588 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20589 "movq %%r15, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20590 "movq %%r10, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20591 "movq %%r11, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20592 "movq %%r12, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20593 "movq %%r13, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20594 "movq 168(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20595 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20596 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20597 "movq 192(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20598 "movq 200(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20599 "# A[13] x A[7]\n\t"
wolfSSL 14:167253f4e170 20600 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20601 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20602 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20603 "# A[14] x A[7]\n\t"
wolfSSL 14:167253f4e170 20604 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20605 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20606 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20607 "# A[15] x A[7]\n\t"
wolfSSL 14:167253f4e170 20608 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20609 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20610 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20611 "# A[16] x A[7]\n\t"
wolfSSL 14:167253f4e170 20612 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20613 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20614 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20615 "# A[17] x A[7]\n\t"
wolfSSL 14:167253f4e170 20616 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20617 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20618 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20619 "movq %%r14, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20620 "movq %%r15, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20621 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20622 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20623 "movq %%r12, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20624 "movq 208(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20625 "movq 216(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20626 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20627 "movq 232(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20628 "movq 240(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20629 "# A[17] x A[8]\n\t"
wolfSSL 14:167253f4e170 20630 "movq 136(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20631 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20632 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20633 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20634 "# A[17] x A[9]\n\t"
wolfSSL 14:167253f4e170 20635 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20636 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20637 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20638 "# A[17] x A[10]\n\t"
wolfSSL 14:167253f4e170 20639 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20640 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20641 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20642 "# A[17] x A[11]\n\t"
wolfSSL 14:167253f4e170 20643 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20644 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20645 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20646 "# A[17] x A[12]\n\t"
wolfSSL 14:167253f4e170 20647 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20648 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20649 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20650 "movq %%r13, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20651 "movq %%r14, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20652 "movq %%r15, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20653 "movq %%r10, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20654 "movq %%r11, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20655 "movq 248(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20656 "movq 256(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20657 "movq 264(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20658 "movq 272(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20659 "movq 280(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20660 "# A[17] x A[13]\n\t"
wolfSSL 14:167253f4e170 20661 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20662 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20663 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20664 "# A[17] x A[14]\n\t"
wolfSSL 14:167253f4e170 20665 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20666 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20667 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20668 "# A[17] x A[15]\n\t"
wolfSSL 14:167253f4e170 20669 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20670 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20671 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20672 "# A[17] x A[16]\n\t"
wolfSSL 14:167253f4e170 20673 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20674 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20675 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20676 "# A[19] x A[15]\n\t"
wolfSSL 14:167253f4e170 20677 "movq 152(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20678 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20679 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20680 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20681 "movq %%r12, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20682 "movq %%r13, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20683 "movq %%r14, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20684 "movq %%r15, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20685 "movq %%r10, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20686 "movq 288(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20687 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 20688 "movq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 20689 "# A[19] x A[16]\n\t"
wolfSSL 14:167253f4e170 20690 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20691 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20692 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20693 "# A[19] x A[17]\n\t"
wolfSSL 14:167253f4e170 20694 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20695 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20696 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20697 "# A[19] x A[18]\n\t"
wolfSSL 14:167253f4e170 20698 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20699 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20700 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20701 "movq %%r11, 280(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20702 "movq %%r12, 288(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20703 "movq %%r13, 296(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20704 "# Carry\n\t"
wolfSSL 14:167253f4e170 20705 "adcxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 20706 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20707 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20708 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20709 "movq %%r14, 304(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20710 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 20711 "# Diagonal 9\n\t"
wolfSSL 14:167253f4e170 20712 "movq 136(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20713 "movq 144(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20714 "movq 152(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20715 "movq 160(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20716 "movq 168(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20717 "movq 176(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20718 "# A[9] x A[8]\n\t"
wolfSSL 14:167253f4e170 20719 "movq 64(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20720 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20721 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20722 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20723 "# A[10] x A[8]\n\t"
wolfSSL 14:167253f4e170 20724 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20725 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20726 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20727 "# A[11] x A[8]\n\t"
wolfSSL 14:167253f4e170 20728 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20729 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20730 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20731 "# A[12] x A[8]\n\t"
wolfSSL 14:167253f4e170 20732 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20733 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20734 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20735 "# A[13] x A[8]\n\t"
wolfSSL 14:167253f4e170 20736 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20737 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20738 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20739 "movq %%r14, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20740 "movq %%r15, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20741 "movq %%r10, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20742 "movq %%r11, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20743 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20744 "movq 184(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20745 "movq 192(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20746 "movq 200(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20747 "movq 208(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20748 "movq 216(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20749 "# A[14] x A[8]\n\t"
wolfSSL 14:167253f4e170 20750 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20751 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20752 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20753 "# A[15] x A[8]\n\t"
wolfSSL 14:167253f4e170 20754 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20755 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20756 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20757 "# A[16] x A[8]\n\t"
wolfSSL 14:167253f4e170 20758 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20759 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20760 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20761 "# A[16] x A[9]\n\t"
wolfSSL 14:167253f4e170 20762 "movq 128(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20763 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20764 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20765 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20766 "# A[16] x A[10]\n\t"
wolfSSL 14:167253f4e170 20767 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20768 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20769 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20770 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20771 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20772 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20773 "movq %%r10, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20774 "movq %%r11, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20775 "movq 224(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20776 "movq 232(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20777 "movq 240(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20778 "movq 248(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20779 "movq 256(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20780 "# A[16] x A[11]\n\t"
wolfSSL 14:167253f4e170 20781 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20782 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20783 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20784 "# A[16] x A[12]\n\t"
wolfSSL 14:167253f4e170 20785 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20786 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20787 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20788 "# A[16] x A[13]\n\t"
wolfSSL 14:167253f4e170 20789 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20790 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20791 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20792 "# A[16] x A[14]\n\t"
wolfSSL 14:167253f4e170 20793 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20794 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20795 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20796 "# A[16] x A[15]\n\t"
wolfSSL 14:167253f4e170 20797 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20798 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20799 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20800 "movq %%r12, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20801 "movq %%r13, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20802 "movq %%r14, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20803 "movq %%r15, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20804 "movq %%r10, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20805 "movq 264(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20806 "movq 272(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20807 "movq 280(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20808 "movq 288(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20809 "movq 296(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20810 "# A[20] x A[12]\n\t"
wolfSSL 14:167253f4e170 20811 "movq 160(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20812 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20813 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20814 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20815 "# A[20] x A[13]\n\t"
wolfSSL 14:167253f4e170 20816 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20817 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20818 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20819 "# A[20] x A[14]\n\t"
wolfSSL 14:167253f4e170 20820 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20821 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20822 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20823 "# A[20] x A[15]\n\t"
wolfSSL 14:167253f4e170 20824 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20825 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20826 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20827 "# A[20] x A[16]\n\t"
wolfSSL 14:167253f4e170 20828 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20829 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20830 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20831 "movq %%r11, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20832 "movq %%r12, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20833 "movq %%r13, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20834 "movq %%r14, 280(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20835 "movq %%r15, 288(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20836 "movq 304(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20837 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 20838 "movq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 20839 "# A[20] x A[17]\n\t"
wolfSSL 14:167253f4e170 20840 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20841 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20842 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20843 "# A[20] x A[18]\n\t"
wolfSSL 14:167253f4e170 20844 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20845 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20846 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20847 "# A[20] x A[19]\n\t"
wolfSSL 14:167253f4e170 20848 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20849 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20850 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20851 "movq %%r10, 296(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20852 "movq %%r11, 304(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20853 "movq %%r12, 312(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20854 "# Carry\n\t"
wolfSSL 14:167253f4e170 20855 "adcxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 20856 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20857 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20858 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 20859 "movq %%r13, 320(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20860 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 20861 "# Diagonal 10\n\t"
wolfSSL 14:167253f4e170 20862 "movq 152(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20863 "movq 160(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20864 "movq 168(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20865 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20866 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20867 "movq 192(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20868 "# A[10] x A[9]\n\t"
wolfSSL 14:167253f4e170 20869 "movq 72(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20870 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20871 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20872 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20873 "# A[11] x A[9]\n\t"
wolfSSL 14:167253f4e170 20874 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20875 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20876 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20877 "# A[12] x A[9]\n\t"
wolfSSL 14:167253f4e170 20878 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20879 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20880 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20881 "# A[13] x A[9]\n\t"
wolfSSL 14:167253f4e170 20882 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20883 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20884 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20885 "# A[14] x A[9]\n\t"
wolfSSL 14:167253f4e170 20886 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20887 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20888 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20889 "movq %%r13, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20890 "movq %%r14, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20891 "movq %%r15, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20892 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20893 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20894 "movq 200(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20895 "movq 208(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20896 "movq 216(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20897 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20898 "movq 232(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20899 "# A[15] x A[9]\n\t"
wolfSSL 14:167253f4e170 20900 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20901 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20902 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20903 "# A[15] x A[10]\n\t"
wolfSSL 14:167253f4e170 20904 "movq 120(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20905 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20906 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20907 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20908 "# A[15] x A[11]\n\t"
wolfSSL 14:167253f4e170 20909 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20910 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20911 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20912 "# A[15] x A[12]\n\t"
wolfSSL 14:167253f4e170 20913 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20914 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20915 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20916 "# A[15] x A[13]\n\t"
wolfSSL 14:167253f4e170 20917 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20918 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20919 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20920 "movq %%r12, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20921 "movq %%r13, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20922 "movq %%r14, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20923 "movq %%r15, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20924 "movq %%r10, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20925 "movq 240(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20926 "movq 248(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20927 "movq 256(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20928 "movq 264(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20929 "movq 272(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20930 "# A[15] x A[14]\n\t"
wolfSSL 14:167253f4e170 20931 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20932 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20933 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20934 "# A[21] x A[9]\n\t"
wolfSSL 14:167253f4e170 20935 "movq 168(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 20936 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20937 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20938 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20939 "# A[21] x A[10]\n\t"
wolfSSL 14:167253f4e170 20940 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20941 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20942 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20943 "# A[21] x A[11]\n\t"
wolfSSL 14:167253f4e170 20944 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20945 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20946 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20947 "# A[21] x A[12]\n\t"
wolfSSL 14:167253f4e170 20948 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20949 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20950 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20951 "movq %%r11, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20952 "movq %%r12, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20953 "movq %%r13, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20954 "movq %%r14, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20955 "movq %%r15, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20956 "movq 280(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 20957 "movq 288(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 20958 "movq 296(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 20959 "movq 304(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 20960 "movq 312(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 20961 "# A[21] x A[13]\n\t"
wolfSSL 14:167253f4e170 20962 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20963 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20964 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20965 "# A[21] x A[14]\n\t"
wolfSSL 14:167253f4e170 20966 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20967 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 20968 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 20969 "# A[21] x A[15]\n\t"
wolfSSL 14:167253f4e170 20970 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20971 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 20972 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 20973 "# A[21] x A[16]\n\t"
wolfSSL 14:167253f4e170 20974 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20975 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 20976 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 20977 "# A[21] x A[17]\n\t"
wolfSSL 14:167253f4e170 20978 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20979 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 20980 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 20981 "movq %%r10, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20982 "movq %%r11, 280(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20983 "movq %%r12, 288(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20984 "movq %%r13, 296(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20985 "movq %%r14, 304(%[tmp])\n\t"
wolfSSL 14:167253f4e170 20986 "movq 320(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 20987 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 20988 "movq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 20989 "# A[21] x A[18]\n\t"
wolfSSL 14:167253f4e170 20990 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20991 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 20992 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 20993 "# A[21] x A[19]\n\t"
wolfSSL 14:167253f4e170 20994 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20995 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 20996 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 20997 "# A[21] x A[20]\n\t"
wolfSSL 14:167253f4e170 20998 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 20999 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21000 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21001 "movq %%r15, 312(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21002 "movq %%r10, 320(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21003 "movq %%r11, 328(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21004 "# Carry\n\t"
wolfSSL 14:167253f4e170 21005 "adcxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 21006 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21007 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21008 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21009 "movq %%r12, 336(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21010 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 21011 "# Diagonal 11\n\t"
wolfSSL 14:167253f4e170 21012 "movq 168(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21013 "movq 176(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21014 "movq 184(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21015 "movq 192(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21016 "movq 200(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21017 "movq 208(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21018 "# A[11] x A[10]\n\t"
wolfSSL 14:167253f4e170 21019 "movq 80(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21020 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21021 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21022 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21023 "# A[12] x A[10]\n\t"
wolfSSL 14:167253f4e170 21024 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21025 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21026 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21027 "# A[13] x A[10]\n\t"
wolfSSL 14:167253f4e170 21028 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21029 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21030 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21031 "# A[14] x A[10]\n\t"
wolfSSL 14:167253f4e170 21032 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21033 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21034 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21035 "# A[14] x A[11]\n\t"
wolfSSL 14:167253f4e170 21036 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21037 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21038 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21039 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21040 "movq %%r12, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21041 "movq %%r13, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21042 "movq %%r14, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21043 "movq %%r15, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21044 "movq %%r10, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21045 "movq 216(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21046 "movq 224(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21047 "movq 232(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21048 "movq 240(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21049 "movq 248(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21050 "# A[14] x A[12]\n\t"
wolfSSL 14:167253f4e170 21051 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21052 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21053 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21054 "# A[14] x A[13]\n\t"
wolfSSL 14:167253f4e170 21055 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21056 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21057 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21058 "# A[22] x A[6]\n\t"
wolfSSL 14:167253f4e170 21059 "movq 176(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21060 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21061 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21062 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21063 "# A[22] x A[7]\n\t"
wolfSSL 14:167253f4e170 21064 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21065 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21066 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21067 "# A[22] x A[8]\n\t"
wolfSSL 14:167253f4e170 21068 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21069 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21070 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21071 "movq %%r11, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21072 "movq %%r12, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21073 "movq %%r13, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21074 "movq %%r14, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21075 "movq %%r15, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21076 "movq 256(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21077 "movq 264(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21078 "movq 272(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21079 "movq 280(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21080 "movq 288(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21081 "# A[22] x A[9]\n\t"
wolfSSL 14:167253f4e170 21082 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21083 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21084 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21085 "# A[22] x A[10]\n\t"
wolfSSL 14:167253f4e170 21086 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21087 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21088 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21089 "# A[22] x A[11]\n\t"
wolfSSL 14:167253f4e170 21090 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21091 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21092 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21093 "# A[22] x A[12]\n\t"
wolfSSL 14:167253f4e170 21094 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21095 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21096 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21097 "# A[22] x A[13]\n\t"
wolfSSL 14:167253f4e170 21098 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21099 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21100 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21101 "movq %%r10, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21102 "movq %%r11, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21103 "movq %%r12, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21104 "movq %%r13, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21105 "movq %%r14, 280(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21106 "movq 296(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21107 "movq 304(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21108 "movq 312(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21109 "movq 320(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21110 "movq 328(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21111 "# A[22] x A[14]\n\t"
wolfSSL 14:167253f4e170 21112 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21113 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21114 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21115 "# A[22] x A[15]\n\t"
wolfSSL 14:167253f4e170 21116 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21117 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21118 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21119 "# A[22] x A[16]\n\t"
wolfSSL 14:167253f4e170 21120 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21121 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21122 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21123 "# A[22] x A[17]\n\t"
wolfSSL 14:167253f4e170 21124 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21125 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21126 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21127 "# A[22] x A[18]\n\t"
wolfSSL 14:167253f4e170 21128 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21129 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21130 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21131 "movq %%r15, 288(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21132 "movq %%r10, 296(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21133 "movq %%r11, 304(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21134 "movq %%r12, 312(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21135 "movq %%r13, 320(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21136 "movq 336(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21137 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 21138 "movq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 21139 "# A[22] x A[19]\n\t"
wolfSSL 14:167253f4e170 21140 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21141 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21142 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21143 "# A[22] x A[20]\n\t"
wolfSSL 14:167253f4e170 21144 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21145 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21146 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21147 "# A[22] x A[21]\n\t"
wolfSSL 14:167253f4e170 21148 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21149 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21150 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21151 "movq %%r14, 328(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21152 "movq %%r15, 336(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21153 "movq %%r10, 344(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21154 "# Carry\n\t"
wolfSSL 14:167253f4e170 21155 "adcxq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 21156 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21157 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21158 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21159 "movq %%r11, 352(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21160 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 21161 "# Diagonal 12\n\t"
wolfSSL 14:167253f4e170 21162 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21163 "movq 192(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21164 "movq 200(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21165 "movq 208(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21166 "movq 216(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21167 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21168 "# A[12] x A[11]\n\t"
wolfSSL 14:167253f4e170 21169 "movq 88(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21170 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21171 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21172 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21173 "# A[13] x A[11]\n\t"
wolfSSL 14:167253f4e170 21174 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21175 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21176 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21177 "# A[13] x A[12]\n\t"
wolfSSL 14:167253f4e170 21178 "movq 96(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21179 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21180 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21181 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21182 "# A[23] x A[3]\n\t"
wolfSSL 14:167253f4e170 21183 "movq 184(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21184 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21185 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21186 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21187 "# A[23] x A[4]\n\t"
wolfSSL 14:167253f4e170 21188 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21189 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21190 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21191 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21192 "movq %%r12, 192(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21193 "movq %%r13, 200(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21194 "movq %%r14, 208(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21195 "movq %%r15, 216(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21196 "movq 232(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21197 "movq 240(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21198 "movq 248(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21199 "movq 256(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21200 "movq 264(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21201 "# A[23] x A[5]\n\t"
wolfSSL 14:167253f4e170 21202 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21203 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21204 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21205 "# A[23] x A[6]\n\t"
wolfSSL 14:167253f4e170 21206 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21207 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21208 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21209 "# A[23] x A[7]\n\t"
wolfSSL 14:167253f4e170 21210 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21211 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21212 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21213 "# A[23] x A[8]\n\t"
wolfSSL 14:167253f4e170 21214 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21215 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21216 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21217 "# A[23] x A[9]\n\t"
wolfSSL 14:167253f4e170 21218 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21219 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21220 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21221 "movq %%r10, 224(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21222 "movq %%r11, 232(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21223 "movq %%r12, 240(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21224 "movq %%r13, 248(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21225 "movq %%r14, 256(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21226 "movq 272(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21227 "movq 280(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21228 "movq 288(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21229 "movq 296(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21230 "movq 304(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21231 "# A[23] x A[10]\n\t"
wolfSSL 14:167253f4e170 21232 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21233 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21234 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21235 "# A[23] x A[11]\n\t"
wolfSSL 14:167253f4e170 21236 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21237 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21238 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21239 "# A[23] x A[12]\n\t"
wolfSSL 14:167253f4e170 21240 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21241 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21242 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21243 "# A[23] x A[13]\n\t"
wolfSSL 14:167253f4e170 21244 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21245 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21246 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21247 "# A[23] x A[14]\n\t"
wolfSSL 14:167253f4e170 21248 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21249 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21250 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21251 "movq %%r15, 264(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21252 "movq %%r10, 272(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21253 "movq %%r11, 280(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21254 "movq %%r12, 288(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21255 "movq %%r13, 296(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21256 "movq 312(%[tmp]), %%r15\n\t"
wolfSSL 14:167253f4e170 21257 "movq 320(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21258 "movq 328(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21259 "movq 336(%[tmp]), %%r12\n\t"
wolfSSL 14:167253f4e170 21260 "movq 344(%[tmp]), %%r13\n\t"
wolfSSL 14:167253f4e170 21261 "# A[23] x A[15]\n\t"
wolfSSL 14:167253f4e170 21262 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21263 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21264 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21265 "# A[23] x A[16]\n\t"
wolfSSL 14:167253f4e170 21266 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21267 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21268 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21269 "# A[23] x A[17]\n\t"
wolfSSL 14:167253f4e170 21270 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21271 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21272 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21273 "# A[23] x A[18]\n\t"
wolfSSL 14:167253f4e170 21274 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21275 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 21276 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 21277 "# A[23] x A[19]\n\t"
wolfSSL 14:167253f4e170 21278 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21279 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 21280 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 21281 "movq %%r14, 304(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21282 "movq %%r15, 312(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21283 "movq %%r10, 320(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21284 "movq %%r11, 328(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21285 "movq %%r12, 336(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21286 "movq 352(%[tmp]), %%r14\n\t"
wolfSSL 14:167253f4e170 21287 "movq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 21288 "movq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 21289 "# A[23] x A[20]\n\t"
wolfSSL 14:167253f4e170 21290 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21291 "adcxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 21292 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 21293 "# A[23] x A[21]\n\t"
wolfSSL 14:167253f4e170 21294 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21295 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 21296 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 21297 "# A[23] x A[22]\n\t"
wolfSSL 14:167253f4e170 21298 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21299 "adcxq %%rax, %%r15\n\t"
wolfSSL 14:167253f4e170 21300 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 21301 "movq %%r13, 344(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21302 "movq %%r14, 352(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21303 "movq %%r15, 360(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21304 "# Carry\n\t"
wolfSSL 14:167253f4e170 21305 "adcxq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 21306 "movq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21307 "adcxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21308 "adoxq %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 21309 "movq %%r10, 368(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21310 "movq %%r9, 376(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21311 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 21312 "# Double and Add in A[i] x A[i]\n\t"
wolfSSL 14:167253f4e170 21313 "movq 8(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21314 "# A[0] x A[0]\n\t"
wolfSSL 14:167253f4e170 21315 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21316 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21317 "movq %%rax, 0(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21318 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21319 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21320 "movq %%r11, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21321 "movq 16(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21322 "movq 24(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21323 "# A[1] x A[1]\n\t"
wolfSSL 14:167253f4e170 21324 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21325 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21326 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21327 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21328 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21329 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21330 "movq %%r10, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21331 "movq %%r11, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21332 "movq 32(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21333 "movq 40(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21334 "# A[2] x A[2]\n\t"
wolfSSL 14:167253f4e170 21335 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21336 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21337 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21338 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21339 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21340 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21341 "movq %%r10, 32(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21342 "movq %%r11, 40(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21343 "movq 48(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21344 "movq 56(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21345 "# A[3] x A[3]\n\t"
wolfSSL 14:167253f4e170 21346 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21347 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21348 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21349 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21350 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21351 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21352 "movq %%r10, 48(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21353 "movq %%r11, 56(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21354 "movq 64(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21355 "movq 72(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21356 "# A[4] x A[4]\n\t"
wolfSSL 14:167253f4e170 21357 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21358 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21359 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21360 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21361 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21362 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21363 "movq %%r10, 64(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21364 "movq %%r11, 72(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21365 "movq 80(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21366 "movq 88(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21367 "# A[5] x A[5]\n\t"
wolfSSL 14:167253f4e170 21368 "movq 40(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21369 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21370 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21371 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21372 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21373 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21374 "movq %%r10, 80(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21375 "movq %%r11, 88(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21376 "movq 96(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21377 "movq 104(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21378 "# A[6] x A[6]\n\t"
wolfSSL 14:167253f4e170 21379 "movq 48(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21380 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21381 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21382 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21383 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21384 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21385 "movq %%r10, 96(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21386 "movq %%r11, 104(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21387 "movq 112(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21388 "movq 120(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21389 "# A[7] x A[7]\n\t"
wolfSSL 14:167253f4e170 21390 "movq 56(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21391 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21392 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21393 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21394 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21395 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21396 "movq %%r10, 112(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21397 "movq %%r11, 120(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21398 "movq 128(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21399 "movq 136(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21400 "# A[8] x A[8]\n\t"
wolfSSL 14:167253f4e170 21401 "movq 64(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21402 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21403 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21404 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21405 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21406 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21407 "movq %%r10, 128(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21408 "movq %%r11, 136(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21409 "movq 144(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21410 "movq 152(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21411 "# A[9] x A[9]\n\t"
wolfSSL 14:167253f4e170 21412 "movq 72(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21413 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21414 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21415 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21416 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21417 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21418 "movq %%r10, 144(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21419 "movq %%r11, 152(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21420 "movq 160(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21421 "movq 168(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21422 "# A[10] x A[10]\n\t"
wolfSSL 14:167253f4e170 21423 "movq 80(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21424 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21425 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21426 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21427 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21428 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21429 "movq %%r10, 160(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21430 "movq %%r11, 168(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21431 "movq 176(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21432 "movq 184(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21433 "# A[11] x A[11]\n\t"
wolfSSL 14:167253f4e170 21434 "movq 88(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21435 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21436 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21437 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21438 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21439 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21440 "movq %%r10, 176(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21441 "movq %%r11, 184(%[tmp])\n\t"
wolfSSL 14:167253f4e170 21442 "movq 192(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21443 "movq 200(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21444 "# A[12] x A[12]\n\t"
wolfSSL 14:167253f4e170 21445 "movq 96(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21446 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21447 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21448 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21449 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21450 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21451 "movq %%r10, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 21452 "movq %%r11, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 21453 "movq 208(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21454 "movq 216(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21455 "# A[13] x A[13]\n\t"
wolfSSL 14:167253f4e170 21456 "movq 104(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21457 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21458 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21459 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21460 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21461 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21462 "movq %%r10, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 21463 "movq %%r11, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 21464 "movq 224(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21465 "movq 232(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21466 "# A[14] x A[14]\n\t"
wolfSSL 14:167253f4e170 21467 "movq 112(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21468 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21469 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21470 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21471 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21472 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21473 "movq %%r10, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 21474 "movq %%r11, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 21475 "movq 240(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21476 "movq 248(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21477 "# A[15] x A[15]\n\t"
wolfSSL 14:167253f4e170 21478 "movq 120(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21479 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21480 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21481 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21482 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21483 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21484 "movq %%r10, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 21485 "movq %%r11, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 21486 "movq 256(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21487 "movq 264(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21488 "# A[16] x A[16]\n\t"
wolfSSL 14:167253f4e170 21489 "movq 128(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21490 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21491 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21492 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21493 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21494 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21495 "movq %%r10, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 21496 "movq %%r11, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 21497 "movq 272(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21498 "movq 280(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21499 "# A[17] x A[17]\n\t"
wolfSSL 14:167253f4e170 21500 "movq 136(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21501 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21502 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21503 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21504 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21505 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21506 "movq %%r10, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 21507 "movq %%r11, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 21508 "movq 288(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21509 "movq 296(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21510 "# A[18] x A[18]\n\t"
wolfSSL 14:167253f4e170 21511 "movq 144(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21512 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21513 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21514 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21515 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21516 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21517 "movq %%r10, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 21518 "movq %%r11, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 21519 "movq 304(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21520 "movq 312(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21521 "# A[19] x A[19]\n\t"
wolfSSL 14:167253f4e170 21522 "movq 152(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21523 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21524 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21525 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21526 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21527 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21528 "movq %%r10, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 21529 "movq %%r11, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 21530 "movq 320(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21531 "movq 328(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21532 "# A[20] x A[20]\n\t"
wolfSSL 14:167253f4e170 21533 "movq 160(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21534 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21535 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21536 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21537 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21538 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21539 "movq %%r10, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 21540 "movq %%r11, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 21541 "movq 336(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21542 "movq 344(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21543 "# A[21] x A[21]\n\t"
wolfSSL 14:167253f4e170 21544 "movq 168(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21545 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21546 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21547 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21548 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21549 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21550 "movq %%r10, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 21551 "movq %%r11, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 21552 "movq 352(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21553 "movq 360(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21554 "# A[22] x A[22]\n\t"
wolfSSL 14:167253f4e170 21555 "movq 176(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21556 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21557 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21558 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21559 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21560 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21561 "movq %%r10, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 21562 "movq %%r11, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 21563 "movq 368(%[tmp]), %%r10\n\t"
wolfSSL 14:167253f4e170 21564 "movq 376(%[tmp]), %%r11\n\t"
wolfSSL 14:167253f4e170 21565 "# A[23] x A[23]\n\t"
wolfSSL 14:167253f4e170 21566 "movq 184(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21567 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 21568 "adoxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 21569 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 21570 "adoxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 21571 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 21572 "movq %%r10, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 21573 "movq %%r11, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 21574 :
wolfSSL 14:167253f4e170 21575 : [r] "r" (r), [a] "r" (a), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 21576 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 21577 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 21578 );
wolfSSL 14:167253f4e170 21579
wolfSSL 14:167253f4e170 21580 XMEMCPY(r, tmp, sizeof(tmp)/2);
wolfSSL 14:167253f4e170 21581 }
wolfSSL 14:167253f4e170 21582 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 21583
wolfSSL 14:167253f4e170 21584 /* Add b to a into r. (r = a + b)
wolfSSL 14:167253f4e170 21585 *
wolfSSL 14:167253f4e170 21586 * r A single precision integer.
wolfSSL 14:167253f4e170 21587 * a A single precision integer.
wolfSSL 14:167253f4e170 21588 * b A single precision integer.
wolfSSL 14:167253f4e170 21589 */
wolfSSL 14:167253f4e170 21590 SP_NOINLINE static sp_digit sp_3072_add_24(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 21591 const sp_digit* b)
wolfSSL 14:167253f4e170 21592 {
wolfSSL 14:167253f4e170 21593 sp_digit c = 0;
wolfSSL 14:167253f4e170 21594
wolfSSL 14:167253f4e170 21595 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 21596 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21597 "addq (%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21598 "movq %%rax, (%[r])\n\t"
wolfSSL 14:167253f4e170 21599 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21600 "adcq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21601 "movq %%rax, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 21602 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21603 "adcq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21604 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 21605 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21606 "adcq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21607 "movq %%rax, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 21608 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21609 "adcq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21610 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 21611 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21612 "adcq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21613 "movq %%rax, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 21614 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21615 "adcq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21616 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 21617 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21618 "adcq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21619 "movq %%rax, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 21620 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21621 "adcq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21622 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 21623 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21624 "adcq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21625 "movq %%rax, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 21626 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21627 "adcq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21628 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 21629 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21630 "adcq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21631 "movq %%rax, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 21632 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21633 "adcq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21634 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 21635 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21636 "adcq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21637 "movq %%rax, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 21638 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21639 "adcq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21640 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 21641 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21642 "adcq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21643 "movq %%rax, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 21644 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21645 "adcq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21646 "movq %%rax, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 21647 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21648 "adcq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21649 "movq %%rax, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 21650 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21651 "adcq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21652 "movq %%rax, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 21653 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21654 "adcq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21655 "movq %%rax, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 21656 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21657 "adcq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21658 "movq %%rax, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 21659 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21660 "adcq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21661 "movq %%rax, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 21662 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21663 "adcq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21664 "movq %%rax, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 21665 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21666 "adcq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21667 "movq %%rax, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 21668 "adcq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 21669 : [c] "+r" (c)
wolfSSL 14:167253f4e170 21670 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 21671 : "memory", "rax"
wolfSSL 14:167253f4e170 21672 );
wolfSSL 14:167253f4e170 21673
wolfSSL 14:167253f4e170 21674 return c;
wolfSSL 14:167253f4e170 21675 }
wolfSSL 14:167253f4e170 21676
wolfSSL 14:167253f4e170 21677 /* Sub b from a into a. (a -= b)
wolfSSL 14:167253f4e170 21678 *
wolfSSL 14:167253f4e170 21679 * a A single precision integer and result.
wolfSSL 14:167253f4e170 21680 * b A single precision integer.
wolfSSL 14:167253f4e170 21681 */
wolfSSL 14:167253f4e170 21682 SP_NOINLINE static sp_digit sp_3072_sub_in_place_48(sp_digit* a,
wolfSSL 14:167253f4e170 21683 const sp_digit* b)
wolfSSL 14:167253f4e170 21684 {
wolfSSL 14:167253f4e170 21685 sp_digit c = 0;
wolfSSL 14:167253f4e170 21686
wolfSSL 14:167253f4e170 21687 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 21688 "movq 0(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21689 "movq 8(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21690 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21691 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21692 "subq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21693 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21694 "movq %%r8, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 21695 "movq 16(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21696 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21697 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21698 "movq %%r9, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 21699 "movq 24(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21700 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21701 "movq 32(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21702 "movq %%r8, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 21703 "movq 32(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21704 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21705 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21706 "movq %%r9, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 21707 "movq 40(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21708 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21709 "movq 48(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21710 "movq %%r8, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 21711 "movq 48(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21712 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21713 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21714 "movq %%r9, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 21715 "movq 56(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21716 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21717 "movq 64(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21718 "movq %%r8, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 21719 "movq 64(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21720 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21721 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21722 "movq %%r9, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 21723 "movq 72(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21724 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21725 "movq 80(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21726 "movq %%r8, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 21727 "movq 80(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21728 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21729 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21730 "movq %%r9, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 21731 "movq 88(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21732 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21733 "movq 96(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21734 "movq %%r8, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 21735 "movq 96(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21736 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21737 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21738 "movq %%r9, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 21739 "movq 104(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21740 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21741 "movq 112(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21742 "movq %%r8, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 21743 "movq 112(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21744 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21745 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21746 "movq %%r9, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 21747 "movq 120(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21748 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21749 "movq 128(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21750 "movq %%r8, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 21751 "movq 128(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21752 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21753 "movq 136(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21754 "movq %%r9, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 21755 "movq 136(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21756 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21757 "movq 144(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21758 "movq %%r8, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 21759 "movq 144(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21760 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21761 "movq 152(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21762 "movq %%r9, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 21763 "movq 152(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21764 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21765 "movq 160(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21766 "movq %%r8, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 21767 "movq 160(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21768 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21769 "movq 168(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21770 "movq %%r9, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 21771 "movq 168(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21772 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21773 "movq 176(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21774 "movq %%r8, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 21775 "movq 176(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21776 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21777 "movq 184(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21778 "movq %%r9, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 21779 "movq 184(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21780 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21781 "movq 192(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21782 "movq %%r8, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 21783 "movq 192(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21784 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21785 "movq 200(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21786 "movq %%r9, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 21787 "movq 200(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21788 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21789 "movq 208(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21790 "movq %%r8, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 21791 "movq 208(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21792 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21793 "movq 216(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21794 "movq %%r9, 200(%[a])\n\t"
wolfSSL 14:167253f4e170 21795 "movq 216(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21796 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21797 "movq 224(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21798 "movq %%r8, 208(%[a])\n\t"
wolfSSL 14:167253f4e170 21799 "movq 224(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21800 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21801 "movq 232(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21802 "movq %%r9, 216(%[a])\n\t"
wolfSSL 14:167253f4e170 21803 "movq 232(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21804 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21805 "movq 240(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21806 "movq %%r8, 224(%[a])\n\t"
wolfSSL 14:167253f4e170 21807 "movq 240(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21808 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21809 "movq 248(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21810 "movq %%r9, 232(%[a])\n\t"
wolfSSL 14:167253f4e170 21811 "movq 248(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21812 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21813 "movq 256(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21814 "movq %%r8, 240(%[a])\n\t"
wolfSSL 14:167253f4e170 21815 "movq 256(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21816 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21817 "movq 264(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21818 "movq %%r9, 248(%[a])\n\t"
wolfSSL 14:167253f4e170 21819 "movq 264(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21820 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21821 "movq 272(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21822 "movq %%r8, 256(%[a])\n\t"
wolfSSL 14:167253f4e170 21823 "movq 272(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21824 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21825 "movq 280(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21826 "movq %%r9, 264(%[a])\n\t"
wolfSSL 14:167253f4e170 21827 "movq 280(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21828 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21829 "movq 288(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21830 "movq %%r8, 272(%[a])\n\t"
wolfSSL 14:167253f4e170 21831 "movq 288(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21832 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21833 "movq 296(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21834 "movq %%r9, 280(%[a])\n\t"
wolfSSL 14:167253f4e170 21835 "movq 296(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21836 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21837 "movq 304(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21838 "movq %%r8, 288(%[a])\n\t"
wolfSSL 14:167253f4e170 21839 "movq 304(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21840 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21841 "movq 312(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21842 "movq %%r9, 296(%[a])\n\t"
wolfSSL 14:167253f4e170 21843 "movq 312(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21844 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21845 "movq 320(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21846 "movq %%r8, 304(%[a])\n\t"
wolfSSL 14:167253f4e170 21847 "movq 320(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21848 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21849 "movq 328(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21850 "movq %%r9, 312(%[a])\n\t"
wolfSSL 14:167253f4e170 21851 "movq 328(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21852 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21853 "movq 336(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21854 "movq %%r8, 320(%[a])\n\t"
wolfSSL 14:167253f4e170 21855 "movq 336(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21856 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21857 "movq 344(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21858 "movq %%r9, 328(%[a])\n\t"
wolfSSL 14:167253f4e170 21859 "movq 344(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21860 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21861 "movq 352(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21862 "movq %%r8, 336(%[a])\n\t"
wolfSSL 14:167253f4e170 21863 "movq 352(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21864 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21865 "movq 360(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21866 "movq %%r9, 344(%[a])\n\t"
wolfSSL 14:167253f4e170 21867 "movq 360(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21868 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21869 "movq 368(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 21870 "movq %%r8, 352(%[a])\n\t"
wolfSSL 14:167253f4e170 21871 "movq 368(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 21872 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21873 "movq 376(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 21874 "movq %%r9, 360(%[a])\n\t"
wolfSSL 14:167253f4e170 21875 "movq 376(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 21876 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 21877 "movq %%r8, 368(%[a])\n\t"
wolfSSL 14:167253f4e170 21878 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 21879 "movq %%r9, 376(%[a])\n\t"
wolfSSL 14:167253f4e170 21880 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 21881 : [c] "+r" (c)
wolfSSL 14:167253f4e170 21882 : [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 21883 : "memory", "rdx", "rcx", "r8", "r9"
wolfSSL 14:167253f4e170 21884 );
wolfSSL 14:167253f4e170 21885
wolfSSL 14:167253f4e170 21886 return c;
wolfSSL 14:167253f4e170 21887 }
wolfSSL 14:167253f4e170 21888
wolfSSL 14:167253f4e170 21889 /* Add b to a into r. (r = a + b)
wolfSSL 14:167253f4e170 21890 *
wolfSSL 14:167253f4e170 21891 * r A single precision integer.
wolfSSL 14:167253f4e170 21892 * a A single precision integer.
wolfSSL 14:167253f4e170 21893 * b A single precision integer.
wolfSSL 14:167253f4e170 21894 */
wolfSSL 14:167253f4e170 21895 SP_NOINLINE static sp_digit sp_3072_add_48(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 21896 const sp_digit* b)
wolfSSL 14:167253f4e170 21897 {
wolfSSL 14:167253f4e170 21898 sp_digit c = 0;
wolfSSL 14:167253f4e170 21899
wolfSSL 14:167253f4e170 21900 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 21901 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21902 "addq (%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21903 "movq %%rax, (%[r])\n\t"
wolfSSL 14:167253f4e170 21904 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21905 "adcq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21906 "movq %%rax, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 21907 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21908 "adcq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21909 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 21910 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21911 "adcq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21912 "movq %%rax, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 21913 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21914 "adcq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21915 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 21916 "movq 40(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21917 "adcq 40(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21918 "movq %%rax, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 21919 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21920 "adcq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21921 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 21922 "movq 56(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21923 "adcq 56(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21924 "movq %%rax, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 21925 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21926 "adcq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21927 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 21928 "movq 72(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21929 "adcq 72(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21930 "movq %%rax, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 21931 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21932 "adcq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21933 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 21934 "movq 88(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21935 "adcq 88(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21936 "movq %%rax, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 21937 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21938 "adcq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21939 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 21940 "movq 104(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21941 "adcq 104(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21942 "movq %%rax, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 21943 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21944 "adcq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21945 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 21946 "movq 120(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21947 "adcq 120(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21948 "movq %%rax, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 21949 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21950 "adcq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21951 "movq %%rax, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 21952 "movq 136(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21953 "adcq 136(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21954 "movq %%rax, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 21955 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21956 "adcq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21957 "movq %%rax, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 21958 "movq 152(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21959 "adcq 152(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21960 "movq %%rax, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 21961 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21962 "adcq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21963 "movq %%rax, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 21964 "movq 168(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21965 "adcq 168(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21966 "movq %%rax, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 21967 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21968 "adcq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21969 "movq %%rax, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 21970 "movq 184(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21971 "adcq 184(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21972 "movq %%rax, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 21973 "movq 192(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21974 "adcq 192(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21975 "movq %%rax, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 21976 "movq 200(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21977 "adcq 200(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21978 "movq %%rax, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 21979 "movq 208(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21980 "adcq 208(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21981 "movq %%rax, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 21982 "movq 216(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21983 "adcq 216(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21984 "movq %%rax, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 21985 "movq 224(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21986 "adcq 224(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21987 "movq %%rax, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 21988 "movq 232(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21989 "adcq 232(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21990 "movq %%rax, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 21991 "movq 240(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21992 "adcq 240(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21993 "movq %%rax, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 21994 "movq 248(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21995 "adcq 248(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21996 "movq %%rax, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 21997 "movq 256(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 21998 "adcq 256(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 21999 "movq %%rax, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 22000 "movq 264(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22001 "adcq 264(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22002 "movq %%rax, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 22003 "movq 272(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22004 "adcq 272(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22005 "movq %%rax, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 22006 "movq 280(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22007 "adcq 280(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22008 "movq %%rax, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 22009 "movq 288(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22010 "adcq 288(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22011 "movq %%rax, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 22012 "movq 296(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22013 "adcq 296(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22014 "movq %%rax, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 22015 "movq 304(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22016 "adcq 304(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22017 "movq %%rax, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 22018 "movq 312(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22019 "adcq 312(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22020 "movq %%rax, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 22021 "movq 320(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22022 "adcq 320(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22023 "movq %%rax, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 22024 "movq 328(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22025 "adcq 328(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22026 "movq %%rax, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 22027 "movq 336(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22028 "adcq 336(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22029 "movq %%rax, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 22030 "movq 344(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22031 "adcq 344(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22032 "movq %%rax, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 22033 "movq 352(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22034 "adcq 352(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22035 "movq %%rax, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 22036 "movq 360(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22037 "adcq 360(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22038 "movq %%rax, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 22039 "movq 368(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22040 "adcq 368(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22041 "movq %%rax, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 22042 "movq 376(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22043 "adcq 376(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22044 "movq %%rax, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 22045 "adcq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 22046 : [c] "+r" (c)
wolfSSL 14:167253f4e170 22047 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 22048 : "memory", "rax"
wolfSSL 14:167253f4e170 22049 );
wolfSSL 14:167253f4e170 22050
wolfSSL 14:167253f4e170 22051 return c;
wolfSSL 14:167253f4e170 22052 }
wolfSSL 14:167253f4e170 22053
wolfSSL 14:167253f4e170 22054 /* AND m into each word of a and store in r.
wolfSSL 14:167253f4e170 22055 *
wolfSSL 14:167253f4e170 22056 * r A single precision integer.
wolfSSL 14:167253f4e170 22057 * a A single precision integer.
wolfSSL 14:167253f4e170 22058 * m Mask to AND against each digit.
wolfSSL 14:167253f4e170 22059 */
wolfSSL 14:167253f4e170 22060 static void sp_3072_mask_24(sp_digit* r, sp_digit* a, sp_digit m)
wolfSSL 14:167253f4e170 22061 {
wolfSSL 14:167253f4e170 22062 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 22063 int i;
wolfSSL 14:167253f4e170 22064
wolfSSL 14:167253f4e170 22065 for (i=0; i<24; i++)
wolfSSL 14:167253f4e170 22066 r[i] = a[i] & m;
wolfSSL 14:167253f4e170 22067 #else
wolfSSL 14:167253f4e170 22068 int i;
wolfSSL 14:167253f4e170 22069
wolfSSL 14:167253f4e170 22070 for (i = 0; i < 24; i += 8) {
wolfSSL 14:167253f4e170 22071 r[i+0] = a[i+0] & m;
wolfSSL 14:167253f4e170 22072 r[i+1] = a[i+1] & m;
wolfSSL 14:167253f4e170 22073 r[i+2] = a[i+2] & m;
wolfSSL 14:167253f4e170 22074 r[i+3] = a[i+3] & m;
wolfSSL 14:167253f4e170 22075 r[i+4] = a[i+4] & m;
wolfSSL 14:167253f4e170 22076 r[i+5] = a[i+5] & m;
wolfSSL 14:167253f4e170 22077 r[i+6] = a[i+6] & m;
wolfSSL 14:167253f4e170 22078 r[i+7] = a[i+7] & m;
wolfSSL 14:167253f4e170 22079 }
wolfSSL 14:167253f4e170 22080 #endif
wolfSSL 14:167253f4e170 22081 }
wolfSSL 14:167253f4e170 22082
wolfSSL 14:167253f4e170 22083 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 22084 *
wolfSSL 14:167253f4e170 22085 * r A single precision integer.
wolfSSL 14:167253f4e170 22086 * a A single precision integer.
wolfSSL 14:167253f4e170 22087 * b A single precision integer.
wolfSSL 14:167253f4e170 22088 */
wolfSSL 14:167253f4e170 22089 SP_NOINLINE static void sp_3072_mul_48(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 22090 const sp_digit* b)
wolfSSL 14:167253f4e170 22091 {
wolfSSL 14:167253f4e170 22092 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 22093 sp_digit z1[48];
wolfSSL 14:167253f4e170 22094 sp_digit a1[24];
wolfSSL 14:167253f4e170 22095 sp_digit b1[24];
wolfSSL 14:167253f4e170 22096 sp_digit z2[48];
wolfSSL 14:167253f4e170 22097 sp_digit u, ca, cb;
wolfSSL 14:167253f4e170 22098
wolfSSL 14:167253f4e170 22099 ca = sp_3072_add_24(a1, a, &a[24]);
wolfSSL 14:167253f4e170 22100 cb = sp_3072_add_24(b1, b, &b[24]);
wolfSSL 14:167253f4e170 22101 u = ca & cb;
wolfSSL 14:167253f4e170 22102 sp_3072_mul_24(z1, a1, b1);
wolfSSL 14:167253f4e170 22103 sp_3072_mul_24(z2, &a[24], &b[24]);
wolfSSL 14:167253f4e170 22104 sp_3072_mul_24(z0, a, b);
wolfSSL 14:167253f4e170 22105 sp_3072_mask_24(r + 48, a1, 0 - cb);
wolfSSL 14:167253f4e170 22106 sp_3072_mask_24(b1, b1, 0 - ca);
wolfSSL 14:167253f4e170 22107 u += sp_3072_add_24(r + 48, r + 48, b1);
wolfSSL 14:167253f4e170 22108 u += sp_3072_sub_in_place_48(z1, z2);
wolfSSL 14:167253f4e170 22109 u += sp_3072_sub_in_place_48(z1, z0);
wolfSSL 14:167253f4e170 22110 u += sp_3072_add_48(r + 24, r + 24, z1);
wolfSSL 14:167253f4e170 22111 r[72] = u;
wolfSSL 14:167253f4e170 22112 XMEMSET(r + 72 + 1, 0, sizeof(sp_digit) * (24 - 1));
wolfSSL 14:167253f4e170 22113 sp_3072_add_48(r + 48, r + 48, z2);
wolfSSL 14:167253f4e170 22114 }
wolfSSL 14:167253f4e170 22115
wolfSSL 14:167253f4e170 22116 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 22117 *
wolfSSL 14:167253f4e170 22118 * r A single precision integer.
wolfSSL 14:167253f4e170 22119 * a A single precision integer.
wolfSSL 14:167253f4e170 22120 */
wolfSSL 14:167253f4e170 22121 SP_NOINLINE static void sp_3072_sqr_48(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 22122 {
wolfSSL 14:167253f4e170 22123 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 22124 sp_digit z2[48];
wolfSSL 14:167253f4e170 22125 sp_digit z1[48];
wolfSSL 14:167253f4e170 22126 sp_digit a1[24];
wolfSSL 14:167253f4e170 22127 sp_digit u;
wolfSSL 14:167253f4e170 22128
wolfSSL 14:167253f4e170 22129 u = sp_3072_add_24(a1, a, &a[24]);
wolfSSL 14:167253f4e170 22130 sp_3072_sqr_24(z1, a1);
wolfSSL 14:167253f4e170 22131 sp_3072_sqr_24(z2, &a[24]);
wolfSSL 14:167253f4e170 22132 sp_3072_sqr_24(z0, a);
wolfSSL 14:167253f4e170 22133 sp_3072_mask_24(r + 48, a1, 0 - u);
wolfSSL 14:167253f4e170 22134 u += sp_3072_add_24(r + 48, r + 48, r + 48);
wolfSSL 14:167253f4e170 22135 u += sp_3072_sub_in_place_48(z1, z2);
wolfSSL 14:167253f4e170 22136 u += sp_3072_sub_in_place_48(z1, z0);
wolfSSL 14:167253f4e170 22137 u += sp_3072_add_48(r + 24, r + 24, z1);
wolfSSL 14:167253f4e170 22138 r[72] = u;
wolfSSL 14:167253f4e170 22139 XMEMSET(r + 72 + 1, 0, sizeof(sp_digit) * (24 - 1));
wolfSSL 14:167253f4e170 22140 sp_3072_add_48(r + 48, r + 48, z2);
wolfSSL 14:167253f4e170 22141 }
wolfSSL 14:167253f4e170 22142
wolfSSL 14:167253f4e170 22143 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 22144 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 22145 *
wolfSSL 14:167253f4e170 22146 * r A single precision integer.
wolfSSL 14:167253f4e170 22147 * a A single precision integer.
wolfSSL 14:167253f4e170 22148 * b A single precision integer.
wolfSSL 14:167253f4e170 22149 */
wolfSSL 14:167253f4e170 22150 SP_NOINLINE static void sp_3072_mul_avx2_48(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 22151 const sp_digit* b)
wolfSSL 14:167253f4e170 22152 {
wolfSSL 14:167253f4e170 22153 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 22154 sp_digit z1[48];
wolfSSL 14:167253f4e170 22155 sp_digit a1[24];
wolfSSL 14:167253f4e170 22156 sp_digit b1[24];
wolfSSL 14:167253f4e170 22157 sp_digit z2[48];
wolfSSL 14:167253f4e170 22158 sp_digit u, ca, cb;
wolfSSL 14:167253f4e170 22159
wolfSSL 14:167253f4e170 22160 ca = sp_3072_add_24(a1, a, &a[24]);
wolfSSL 14:167253f4e170 22161 cb = sp_3072_add_24(b1, b, &b[24]);
wolfSSL 14:167253f4e170 22162 u = ca & cb;
wolfSSL 14:167253f4e170 22163 sp_3072_mul_avx2_24(z1, a1, b1);
wolfSSL 14:167253f4e170 22164 sp_3072_mul_avx2_24(z2, &a[24], &b[24]);
wolfSSL 14:167253f4e170 22165 sp_3072_mul_avx2_24(z0, a, b);
wolfSSL 14:167253f4e170 22166 sp_3072_mask_24(r + 48, a1, 0 - cb);
wolfSSL 14:167253f4e170 22167 sp_3072_mask_24(b1, b1, 0 - ca);
wolfSSL 14:167253f4e170 22168 u += sp_3072_add_24(r + 48, r + 48, b1);
wolfSSL 14:167253f4e170 22169 u += sp_3072_sub_in_place_48(z1, z2);
wolfSSL 14:167253f4e170 22170 u += sp_3072_sub_in_place_48(z1, z0);
wolfSSL 14:167253f4e170 22171 u += sp_3072_add_48(r + 24, r + 24, z1);
wolfSSL 14:167253f4e170 22172 r[72] = u;
wolfSSL 14:167253f4e170 22173 XMEMSET(r + 72 + 1, 0, sizeof(sp_digit) * (24 - 1));
wolfSSL 14:167253f4e170 22174 sp_3072_add_48(r + 48, r + 48, z2);
wolfSSL 14:167253f4e170 22175 }
wolfSSL 14:167253f4e170 22176 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 22177
wolfSSL 14:167253f4e170 22178 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 22179 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 22180 *
wolfSSL 14:167253f4e170 22181 * r A single precision integer.
wolfSSL 14:167253f4e170 22182 * a A single precision integer.
wolfSSL 14:167253f4e170 22183 */
wolfSSL 14:167253f4e170 22184 SP_NOINLINE static void sp_3072_sqr_avx2_48(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 22185 {
wolfSSL 14:167253f4e170 22186 sp_digit* z0 = r;
wolfSSL 14:167253f4e170 22187 sp_digit z2[48];
wolfSSL 14:167253f4e170 22188 sp_digit z1[48];
wolfSSL 14:167253f4e170 22189 sp_digit a1[24];
wolfSSL 14:167253f4e170 22190 sp_digit u;
wolfSSL 14:167253f4e170 22191
wolfSSL 14:167253f4e170 22192 u = sp_3072_add_24(a1, a, &a[24]);
wolfSSL 14:167253f4e170 22193 sp_3072_sqr_avx2_24(z1, a1);
wolfSSL 14:167253f4e170 22194 sp_3072_sqr_avx2_24(z2, &a[24]);
wolfSSL 14:167253f4e170 22195 sp_3072_sqr_avx2_24(z0, a);
wolfSSL 14:167253f4e170 22196 sp_3072_mask_24(r + 48, a1, 0 - u);
wolfSSL 14:167253f4e170 22197 u += sp_3072_add_24(r + 48, r + 48, r + 48);
wolfSSL 14:167253f4e170 22198 u += sp_3072_sub_in_place_48(z1, z2);
wolfSSL 14:167253f4e170 22199 u += sp_3072_sub_in_place_48(z1, z0);
wolfSSL 14:167253f4e170 22200 u += sp_3072_add_48(r + 24, r + 24, z1);
wolfSSL 14:167253f4e170 22201 r[72] = u;
wolfSSL 14:167253f4e170 22202 XMEMSET(r + 72 + 1, 0, sizeof(sp_digit) * (24 - 1));
wolfSSL 14:167253f4e170 22203 sp_3072_add_48(r + 48, r + 48, z2);
wolfSSL 14:167253f4e170 22204 }
wolfSSL 14:167253f4e170 22205 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 22206
wolfSSL 14:167253f4e170 22207 #if !defined(SP_RSA_PRIVATE_EXP_D) && defined(WOLFSSL_HAVE_SP_RSA)
wolfSSL 14:167253f4e170 22208 #endif /* !SP_RSA_PRIVATE_EXP_D && WOLFSSL_HAVE_SP_RSA */
wolfSSL 14:167253f4e170 22209
wolfSSL 14:167253f4e170 22210 /* Caclulate the bottom digit of -1/a mod 2^n.
wolfSSL 14:167253f4e170 22211 *
wolfSSL 14:167253f4e170 22212 * a A single precision number.
wolfSSL 14:167253f4e170 22213 * rho Bottom word of inverse.
wolfSSL 14:167253f4e170 22214 */
wolfSSL 14:167253f4e170 22215 static void sp_3072_mont_setup(sp_digit* a, sp_digit* rho)
wolfSSL 14:167253f4e170 22216 {
wolfSSL 14:167253f4e170 22217 sp_digit x, b;
wolfSSL 14:167253f4e170 22218
wolfSSL 14:167253f4e170 22219 b = a[0];
wolfSSL 14:167253f4e170 22220 x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */
wolfSSL 14:167253f4e170 22221 x *= 2 - b * x; /* here x*a==1 mod 2**8 */
wolfSSL 14:167253f4e170 22222 x *= 2 - b * x; /* here x*a==1 mod 2**16 */
wolfSSL 14:167253f4e170 22223 x *= 2 - b * x; /* here x*a==1 mod 2**32 */
wolfSSL 14:167253f4e170 22224 x *= 2 - b * x; /* here x*a==1 mod 2**64 */
wolfSSL 14:167253f4e170 22225
wolfSSL 14:167253f4e170 22226 /* rho = -1/m mod b */
wolfSSL 14:167253f4e170 22227 *rho = -x;
wolfSSL 14:167253f4e170 22228 }
wolfSSL 14:167253f4e170 22229
wolfSSL 14:167253f4e170 22230 #if !defined(SP_RSA_PRIVATE_EXP_D) && defined(WOLFSSL_HAVE_SP_RSA)
wolfSSL 14:167253f4e170 22231 /* Sub b from a into a. (a -= b)
wolfSSL 14:167253f4e170 22232 *
wolfSSL 14:167253f4e170 22233 * a A single precision integer and result.
wolfSSL 14:167253f4e170 22234 * b A single precision integer.
wolfSSL 14:167253f4e170 22235 */
wolfSSL 14:167253f4e170 22236 SP_NOINLINE static sp_digit sp_3072_sub_in_place_24(sp_digit* a,
wolfSSL 14:167253f4e170 22237 const sp_digit* b)
wolfSSL 14:167253f4e170 22238 {
wolfSSL 14:167253f4e170 22239 sp_digit c = 0;
wolfSSL 14:167253f4e170 22240
wolfSSL 14:167253f4e170 22241 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 22242 "movq 0(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22243 "movq 8(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22244 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22245 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22246 "subq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22247 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22248 "movq %%r8, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 22249 "movq 16(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22250 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22251 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22252 "movq %%r9, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 22253 "movq 24(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22254 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22255 "movq 32(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22256 "movq %%r8, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 22257 "movq 32(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22258 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22259 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22260 "movq %%r9, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 22261 "movq 40(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22262 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22263 "movq 48(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22264 "movq %%r8, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 22265 "movq 48(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22266 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22267 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22268 "movq %%r9, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 22269 "movq 56(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22270 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22271 "movq 64(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22272 "movq %%r8, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 22273 "movq 64(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22274 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22275 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22276 "movq %%r9, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 22277 "movq 72(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22278 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22279 "movq 80(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22280 "movq %%r8, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 22281 "movq 80(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22282 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22283 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22284 "movq %%r9, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 22285 "movq 88(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22286 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22287 "movq 96(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22288 "movq %%r8, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 22289 "movq 96(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22290 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22291 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22292 "movq %%r9, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 22293 "movq 104(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22294 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22295 "movq 112(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22296 "movq %%r8, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 22297 "movq 112(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22298 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22299 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22300 "movq %%r9, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 22301 "movq 120(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22302 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22303 "movq 128(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22304 "movq %%r8, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 22305 "movq 128(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22306 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22307 "movq 136(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22308 "movq %%r9, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 22309 "movq 136(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22310 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22311 "movq 144(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22312 "movq %%r8, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 22313 "movq 144(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22314 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22315 "movq 152(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22316 "movq %%r9, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 22317 "movq 152(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22318 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22319 "movq 160(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22320 "movq %%r8, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 22321 "movq 160(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22322 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22323 "movq 168(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22324 "movq %%r9, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 22325 "movq 168(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22326 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22327 "movq 176(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22328 "movq %%r8, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 22329 "movq 176(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 22330 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22331 "movq 184(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22332 "movq %%r9, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 22333 "movq 184(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 22334 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22335 "movq %%r8, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 22336 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 22337 "movq %%r9, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 22338 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 22339 : [c] "+r" (c)
wolfSSL 14:167253f4e170 22340 : [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 22341 : "memory", "rdx", "rcx", "r8", "r9"
wolfSSL 14:167253f4e170 22342 );
wolfSSL 14:167253f4e170 22343
wolfSSL 14:167253f4e170 22344 return c;
wolfSSL 14:167253f4e170 22345 }
wolfSSL 14:167253f4e170 22346
wolfSSL 14:167253f4e170 22347 /* r = 2^n mod m where n is the number of bits to reduce by.
wolfSSL 14:167253f4e170 22348 * Given m must be 3072 bits, just need to subtract.
wolfSSL 14:167253f4e170 22349 *
wolfSSL 14:167253f4e170 22350 * r A single precision number.
wolfSSL 14:167253f4e170 22351 * m A signle precision number.
wolfSSL 14:167253f4e170 22352 */
wolfSSL 14:167253f4e170 22353 static void sp_3072_mont_norm_24(sp_digit* r, sp_digit* m)
wolfSSL 14:167253f4e170 22354 {
wolfSSL 14:167253f4e170 22355 XMEMSET(r, 0, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 22356
wolfSSL 14:167253f4e170 22357 /* r = 2^n mod m */
wolfSSL 14:167253f4e170 22358 sp_3072_sub_in_place_24(r, m);
wolfSSL 14:167253f4e170 22359 }
wolfSSL 14:167253f4e170 22360
wolfSSL 14:167253f4e170 22361 /* Conditionally subtract b from a using the mask m.
wolfSSL 14:167253f4e170 22362 * m is -1 to subtract and 0 when not copying.
wolfSSL 14:167253f4e170 22363 *
wolfSSL 14:167253f4e170 22364 * r A single precision number representing condition subtract result.
wolfSSL 14:167253f4e170 22365 * a A single precision number to subtract from.
wolfSSL 14:167253f4e170 22366 * b A single precision number to subtract.
wolfSSL 14:167253f4e170 22367 * m Mask value to apply.
wolfSSL 14:167253f4e170 22368 */
wolfSSL 14:167253f4e170 22369 static sp_digit sp_3072_cond_sub_24(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 22370 sp_digit m)
wolfSSL 14:167253f4e170 22371 {
wolfSSL 14:167253f4e170 22372 sp_digit t[24];
wolfSSL 14:167253f4e170 22373 sp_digit c = 0;
wolfSSL 14:167253f4e170 22374
wolfSSL 14:167253f4e170 22375 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 22376 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22377 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22378 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22379 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22380 "movq %%rax, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 22381 "movq %%rcx, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 22382 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22383 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22384 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22385 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22386 "movq %%rax, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 22387 "movq %%rcx, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 22388 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22389 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22390 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22391 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22392 "movq %%rax, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 22393 "movq %%rcx, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 22394 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22395 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22396 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22397 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22398 "movq %%rax, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 22399 "movq %%rcx, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 22400 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22401 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22402 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22403 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22404 "movq %%rax, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 22405 "movq %%rcx, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 22406 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22407 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22408 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22409 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22410 "movq %%rax, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 22411 "movq %%rcx, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 22412 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22413 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22414 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22415 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22416 "movq %%rax, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 22417 "movq %%rcx, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 22418 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22419 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22420 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22421 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22422 "movq %%rax, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 22423 "movq %%rcx, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 22424 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22425 "movq 136(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22426 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22427 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22428 "movq %%rax, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 22429 "movq %%rcx, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 22430 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22431 "movq 152(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22432 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22433 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22434 "movq %%rax, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 22435 "movq %%rcx, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 22436 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22437 "movq 168(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22438 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22439 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22440 "movq %%rax, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 22441 "movq %%rcx, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 22442 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 22443 "movq 184(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22444 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 22445 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 22446 "movq %%rax, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 22447 "movq %%rcx, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 22448 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22449 "movq (%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22450 "subq %%rdx,%%rax\n\t"
wolfSSL 14:167253f4e170 22451 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22452 "movq 8(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22453 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22454 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 22455 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22456 "movq 16(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22457 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22458 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 22459 "movq 24(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22460 "movq 24(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22461 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22462 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 22463 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22464 "movq 32(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22465 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22466 "movq %%rcx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 22467 "movq 40(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22468 "movq 40(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22469 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22470 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 22471 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22472 "movq 48(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22473 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22474 "movq %%rcx, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 22475 "movq 56(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22476 "movq 56(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22477 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22478 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 22479 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22480 "movq 64(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22481 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22482 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 22483 "movq 72(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22484 "movq 72(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22485 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22486 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 22487 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22488 "movq 80(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22489 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22490 "movq %%rcx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 22491 "movq 88(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22492 "movq 88(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22493 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22494 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 22495 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22496 "movq 96(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22497 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22498 "movq %%rcx, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 22499 "movq 104(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22500 "movq 104(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22501 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22502 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 22503 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22504 "movq 112(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22505 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22506 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 22507 "movq 120(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22508 "movq 120(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22509 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22510 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 22511 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22512 "movq 128(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22513 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22514 "movq %%rcx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 22515 "movq 136(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22516 "movq 136(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22517 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22518 "movq %%rax, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 22519 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22520 "movq 144(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22521 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22522 "movq %%rcx, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 22523 "movq 152(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22524 "movq 152(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22525 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22526 "movq %%rax, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 22527 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22528 "movq 160(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22529 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22530 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 22531 "movq 168(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22532 "movq 168(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22533 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22534 "movq %%rax, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 22535 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 22536 "movq 176(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22537 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 22538 "movq %%rcx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 22539 "movq 184(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 22540 "movq 184(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 22541 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22542 "movq %%rax, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 22543 "movq %%rcx, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 22544 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 22545 : [c] "+r" (c)
wolfSSL 14:167253f4e170 22546 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m), [t] "r" (t)
wolfSSL 14:167253f4e170 22547 : "memory", "rax", "rcx", "rdx"
wolfSSL 14:167253f4e170 22548 );
wolfSSL 14:167253f4e170 22549
wolfSSL 14:167253f4e170 22550 return c;
wolfSSL 14:167253f4e170 22551 }
wolfSSL 14:167253f4e170 22552
wolfSSL 14:167253f4e170 22553 /* Reduce the number back to 3072 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 22554 *
wolfSSL 14:167253f4e170 22555 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 22556 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 22557 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 22558 */
wolfSSL 14:167253f4e170 22559 SP_NOINLINE static void sp_3072_mont_reduce_24(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 22560 sp_digit mp)
wolfSSL 14:167253f4e170 22561 {
wolfSSL 14:167253f4e170 22562 sp_digit ca = 0;
wolfSSL 14:167253f4e170 22563
wolfSSL 14:167253f4e170 22564 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 22565 "# i = 0\n\t"
wolfSSL 14:167253f4e170 22566 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22567 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 22568 "movq 8(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 22569 "\nL_mont_loop_24:\n\t"
wolfSSL 14:167253f4e170 22570 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 22571 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 22572 "imulq %[mp], %%r10\n\t"
wolfSSL 14:167253f4e170 22573 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 22574 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22575 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22576 "mulq 0(%[m])\n\t"
wolfSSL 14:167253f4e170 22577 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 22578 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22579 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 22580 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22581 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22582 "mulq 8(%[m])\n\t"
wolfSSL 14:167253f4e170 22583 "movq %%r13, %%r12\n\t"
wolfSSL 14:167253f4e170 22584 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 22585 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22586 "addq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 22587 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22588 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 22589 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22590 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22591 "mulq 16(%[m])\n\t"
wolfSSL 14:167253f4e170 22592 "movq 16(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 22593 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 22594 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22595 "addq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 22596 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22597 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 22598 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22599 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22600 "mulq 24(%[m])\n\t"
wolfSSL 14:167253f4e170 22601 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22602 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22603 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22604 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22605 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 22606 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22607 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 22608 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22609 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22610 "mulq 32(%[m])\n\t"
wolfSSL 14:167253f4e170 22611 "movq 32(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22612 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22613 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22614 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22615 "movq %%r11, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 22616 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22617 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 22618 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22619 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22620 "mulq 40(%[m])\n\t"
wolfSSL 14:167253f4e170 22621 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22622 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22623 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22624 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22625 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 22626 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22627 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 22628 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22629 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22630 "mulq 48(%[m])\n\t"
wolfSSL 14:167253f4e170 22631 "movq 48(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22632 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22633 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22634 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22635 "movq %%r11, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 22636 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22637 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 22638 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22639 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22640 "mulq 56(%[m])\n\t"
wolfSSL 14:167253f4e170 22641 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22642 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22643 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22644 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22645 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 22646 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22647 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 22648 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22649 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22650 "mulq 64(%[m])\n\t"
wolfSSL 14:167253f4e170 22651 "movq 64(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22652 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22653 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22654 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22655 "movq %%r11, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 22656 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22657 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 22658 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22659 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22660 "mulq 72(%[m])\n\t"
wolfSSL 14:167253f4e170 22661 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22662 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22663 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22664 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22665 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 22666 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22667 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 22668 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22669 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22670 "mulq 80(%[m])\n\t"
wolfSSL 14:167253f4e170 22671 "movq 80(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22672 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22673 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22674 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22675 "movq %%r11, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 22676 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22677 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 22678 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22679 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22680 "mulq 88(%[m])\n\t"
wolfSSL 14:167253f4e170 22681 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22682 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22683 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22684 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22685 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 22686 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22687 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 22688 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22689 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22690 "mulq 96(%[m])\n\t"
wolfSSL 14:167253f4e170 22691 "movq 96(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22692 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22693 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22694 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22695 "movq %%r11, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 22696 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22697 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 22698 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22699 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22700 "mulq 104(%[m])\n\t"
wolfSSL 14:167253f4e170 22701 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22702 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22703 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22704 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22705 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 22706 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22707 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 22708 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22709 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22710 "mulq 112(%[m])\n\t"
wolfSSL 14:167253f4e170 22711 "movq 112(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22712 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22713 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22714 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22715 "movq %%r11, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 22716 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22717 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 22718 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22719 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22720 "mulq 120(%[m])\n\t"
wolfSSL 14:167253f4e170 22721 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22722 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22723 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22724 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22725 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 22726 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22727 "# a[i+16] += m[16] * mu\n\t"
wolfSSL 14:167253f4e170 22728 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22729 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22730 "mulq 128(%[m])\n\t"
wolfSSL 14:167253f4e170 22731 "movq 128(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22732 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22733 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22734 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22735 "movq %%r11, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 22736 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22737 "# a[i+17] += m[17] * mu\n\t"
wolfSSL 14:167253f4e170 22738 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22739 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22740 "mulq 136(%[m])\n\t"
wolfSSL 14:167253f4e170 22741 "movq 136(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22742 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22743 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22744 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22745 "movq %%r11, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 22746 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22747 "# a[i+18] += m[18] * mu\n\t"
wolfSSL 14:167253f4e170 22748 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22749 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22750 "mulq 144(%[m])\n\t"
wolfSSL 14:167253f4e170 22751 "movq 144(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22752 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22753 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22754 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22755 "movq %%r11, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 22756 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22757 "# a[i+19] += m[19] * mu\n\t"
wolfSSL 14:167253f4e170 22758 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22759 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22760 "mulq 152(%[m])\n\t"
wolfSSL 14:167253f4e170 22761 "movq 152(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22762 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22763 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22764 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22765 "movq %%r11, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 22766 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22767 "# a[i+20] += m[20] * mu\n\t"
wolfSSL 14:167253f4e170 22768 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22769 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22770 "mulq 160(%[m])\n\t"
wolfSSL 14:167253f4e170 22771 "movq 160(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22772 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22773 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22774 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22775 "movq %%r11, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 22776 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22777 "# a[i+21] += m[21] * mu\n\t"
wolfSSL 14:167253f4e170 22778 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22779 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22780 "mulq 168(%[m])\n\t"
wolfSSL 14:167253f4e170 22781 "movq 168(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22782 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22783 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22784 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22785 "movq %%r11, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 22786 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22787 "# a[i+22] += m[22] * mu\n\t"
wolfSSL 14:167253f4e170 22788 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22789 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 22790 "mulq 176(%[m])\n\t"
wolfSSL 14:167253f4e170 22791 "movq 176(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22792 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 22793 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 22794 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 22795 "movq %%r11, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 22796 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 22797 "# a[i+23] += m[23] * mu\n\t"
wolfSSL 14:167253f4e170 22798 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 22799 "mulq 184(%[m])\n\t"
wolfSSL 14:167253f4e170 22800 "movq 184(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 22801 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 22802 "adcq %[ca], %%rdx\n\t"
wolfSSL 14:167253f4e170 22803 "movq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 22804 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 22805 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 22806 "movq %%r11, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 22807 "adcq %%rdx, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 22808 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 22809 "# i += 1\n\t"
wolfSSL 14:167253f4e170 22810 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 22811 "addq $8, %%rcx\n\t"
wolfSSL 14:167253f4e170 22812 "cmpq $192, %%rcx\n\t"
wolfSSL 14:167253f4e170 22813 "jl L_mont_loop_24\n\t"
wolfSSL 14:167253f4e170 22814 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 22815 "movq %%r13, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 22816 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 22817 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 22818 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 22819 "r12", "r13"
wolfSSL 14:167253f4e170 22820 );
wolfSSL 14:167253f4e170 22821
wolfSSL 14:167253f4e170 22822 sp_3072_cond_sub_24(a - 24, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 22823 }
wolfSSL 14:167253f4e170 22824
wolfSSL 14:167253f4e170 22825 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 22826 * (r = a * b mod m)
wolfSSL 14:167253f4e170 22827 *
wolfSSL 14:167253f4e170 22828 * r Result of multiplication.
wolfSSL 14:167253f4e170 22829 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 22830 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 22831 * m Modulus (prime).
wolfSSL 14:167253f4e170 22832 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 22833 */
wolfSSL 14:167253f4e170 22834 static void sp_3072_mont_mul_24(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 22835 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 22836 {
wolfSSL 14:167253f4e170 22837 sp_3072_mul_24(r, a, b);
wolfSSL 14:167253f4e170 22838 sp_3072_mont_reduce_24(r, m, mp);
wolfSSL 14:167253f4e170 22839 }
wolfSSL 14:167253f4e170 22840
wolfSSL 14:167253f4e170 22841 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 22842 *
wolfSSL 14:167253f4e170 22843 * r Result of squaring.
wolfSSL 14:167253f4e170 22844 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 22845 * m Modulus (prime).
wolfSSL 14:167253f4e170 22846 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 22847 */
wolfSSL 14:167253f4e170 22848 static void sp_3072_mont_sqr_24(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 22849 sp_digit mp)
wolfSSL 14:167253f4e170 22850 {
wolfSSL 14:167253f4e170 22851 sp_3072_sqr_24(r, a);
wolfSSL 14:167253f4e170 22852 sp_3072_mont_reduce_24(r, m, mp);
wolfSSL 14:167253f4e170 22853 }
wolfSSL 14:167253f4e170 22854
wolfSSL 14:167253f4e170 22855 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 22856 *
wolfSSL 14:167253f4e170 22857 * r A single precision integer.
wolfSSL 14:167253f4e170 22858 * a A single precision integer.
wolfSSL 14:167253f4e170 22859 * b A single precision digit.
wolfSSL 14:167253f4e170 22860 */
wolfSSL 14:167253f4e170 22861 SP_NOINLINE static void sp_3072_mul_d_24(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 22862 const sp_digit b)
wolfSSL 14:167253f4e170 22863 {
wolfSSL 14:167253f4e170 22864 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 22865 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 22866 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22867 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22868 "mulq (%[a])\n\t"
wolfSSL 14:167253f4e170 22869 "movq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 22870 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22871 "movq %%rbx, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 22872 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 22873 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22874 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22875 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 22876 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 22877 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 22878 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22879 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 22880 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 22881 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22882 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22883 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 22884 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 22885 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 22886 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22887 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 22888 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 22889 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22890 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22891 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 22892 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 22893 "movq %%rbx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 22894 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22895 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22896 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 22897 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22898 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22899 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 22900 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 22901 "movq %%rcx, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 22902 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22903 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 22904 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 22905 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22906 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22907 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 22908 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 22909 "movq %%r8, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 22910 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22911 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 22912 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 22913 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22914 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22915 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 22916 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 22917 "movq %%rbx, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 22918 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22919 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22920 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 22921 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22922 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22923 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 22924 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 22925 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 22926 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22927 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 22928 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 22929 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22930 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22931 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 22932 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 22933 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 22934 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22935 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 22936 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 22937 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22938 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22939 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 22940 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 22941 "movq %%rbx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 22942 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22943 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22944 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 22945 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22946 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22947 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 22948 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 22949 "movq %%rcx, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 22950 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22951 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 22952 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 22953 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22954 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22955 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 22956 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 22957 "movq %%r8, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 22958 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22959 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 22960 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 22961 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22962 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22963 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 22964 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 22965 "movq %%rbx, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 22966 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22967 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22968 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 22969 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22970 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22971 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 22972 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 22973 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 22974 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22975 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 22976 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 22977 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22978 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22979 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 22980 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 22981 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 22982 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22983 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 22984 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 22985 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22986 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 22987 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 22988 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 22989 "movq %%rbx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 22990 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 22991 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 22992 "# A[16] * B\n\t"
wolfSSL 14:167253f4e170 22993 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 22994 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 22995 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 22996 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 22997 "movq %%rcx, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 22998 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 22999 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 23000 "# A[17] * B\n\t"
wolfSSL 14:167253f4e170 23001 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23002 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 23003 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 23004 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23005 "movq %%r8, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 23006 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23007 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 23008 "# A[18] * B\n\t"
wolfSSL 14:167253f4e170 23009 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23010 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 23011 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 23012 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 23013 "movq %%rbx, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 23014 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 23015 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 23016 "# A[19] * B\n\t"
wolfSSL 14:167253f4e170 23017 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23018 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23019 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 23020 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23021 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 23022 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23023 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 23024 "# A[20] * B\n\t"
wolfSSL 14:167253f4e170 23025 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23026 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 23027 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 23028 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23029 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 23030 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23031 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 23032 "# A[21] * B\n\t"
wolfSSL 14:167253f4e170 23033 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23034 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 23035 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 23036 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 23037 "movq %%rbx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 23038 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 23039 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 23040 "# A[22] * B\n\t"
wolfSSL 14:167253f4e170 23041 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23042 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23043 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 23044 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23045 "movq %%rcx, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 23046 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23047 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 23048 "# A[23] * B\n\t"
wolfSSL 14:167253f4e170 23049 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 23050 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 23051 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23052 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23053 "movq %%r8, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 23054 "movq %%rbx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 23055 :
wolfSSL 14:167253f4e170 23056 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 23057 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 23058 );
wolfSSL 14:167253f4e170 23059 }
wolfSSL 14:167253f4e170 23060
wolfSSL 14:167253f4e170 23061 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23062 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 23063 *
wolfSSL 14:167253f4e170 23064 * r A single precision integer.
wolfSSL 14:167253f4e170 23065 * a A single precision integer.
wolfSSL 14:167253f4e170 23066 * b A single precision digit.
wolfSSL 14:167253f4e170 23067 */
wolfSSL 14:167253f4e170 23068 SP_NOINLINE static void sp_3072_mul_d_avx2_24(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 23069 const sp_digit b)
wolfSSL 14:167253f4e170 23070 {
wolfSSL 14:167253f4e170 23071 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 23072 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 23073 "movq %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 23074 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 23075 "mulxq (%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 23076 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 23077 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 23078 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23079 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23080 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23081 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 23082 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23083 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 23084 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23085 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23086 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23087 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 23088 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23089 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 23090 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23091 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23092 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23093 "movq %%r9, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 23094 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23095 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 23096 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23097 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23098 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23099 "movq %%r8, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 23100 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23101 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 23102 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23103 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23104 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23105 "movq %%r9, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 23106 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23107 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 23108 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23109 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23110 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23111 "movq %%r8, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 23112 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23113 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 23114 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23115 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23116 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23117 "movq %%r9, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 23118 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23119 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 23120 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23121 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23122 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23123 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 23124 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23125 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 23126 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23127 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23128 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23129 "movq %%r9, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 23130 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23131 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 23132 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23133 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23134 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23135 "movq %%r8, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 23136 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23137 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 23138 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23139 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23140 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23141 "movq %%r9, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 23142 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23143 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 23144 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23145 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23146 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23147 "movq %%r8, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 23148 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23149 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 23150 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23151 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23152 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23153 "movq %%r9, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 23154 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23155 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 23156 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23157 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23158 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23159 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 23160 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23161 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 23162 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23163 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23164 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23165 "movq %%r9, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 23166 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23167 "# A[16] * B\n\t"
wolfSSL 14:167253f4e170 23168 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23169 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23170 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23171 "movq %%r8, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 23172 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23173 "# A[17] * B\n\t"
wolfSSL 14:167253f4e170 23174 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23175 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23176 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23177 "movq %%r9, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 23178 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23179 "# A[18] * B\n\t"
wolfSSL 14:167253f4e170 23180 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23181 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23182 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23183 "movq %%r8, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 23184 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23185 "# A[19] * B\n\t"
wolfSSL 14:167253f4e170 23186 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23187 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23188 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23189 "movq %%r9, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 23190 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23191 "# A[20] * B\n\t"
wolfSSL 14:167253f4e170 23192 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23193 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23194 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23195 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 23196 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23197 "# A[21] * B\n\t"
wolfSSL 14:167253f4e170 23198 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23199 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23200 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23201 "movq %%r9, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 23202 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23203 "# A[22] * B\n\t"
wolfSSL 14:167253f4e170 23204 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23205 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 23206 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23207 "movq %%r8, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 23208 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 23209 "# A[23] * B\n\t"
wolfSSL 14:167253f4e170 23210 "mulxq 184(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 23211 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23212 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 23213 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 23214 "adcxq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 23215 "movq %%r9, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 23216 "movq %%r8, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 23217 :
wolfSSL 14:167253f4e170 23218 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 23219 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10"
wolfSSL 14:167253f4e170 23220 );
wolfSSL 14:167253f4e170 23221 }
wolfSSL 14:167253f4e170 23222 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 23223
wolfSSL 14:167253f4e170 23224 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
wolfSSL 14:167253f4e170 23225 *
wolfSSL 14:167253f4e170 23226 * d1 The high order half of the number to divide.
wolfSSL 14:167253f4e170 23227 * d0 The low order half of the number to divide.
wolfSSL 14:167253f4e170 23228 * div The dividend.
wolfSSL 14:167253f4e170 23229 * returns the result of the division.
wolfSSL 14:167253f4e170 23230 */
wolfSSL 14:167253f4e170 23231 static sp_digit div_3072_word_24(sp_digit d1, sp_digit d0, sp_digit div)
wolfSSL 14:167253f4e170 23232 {
wolfSSL 14:167253f4e170 23233 sp_digit r;
wolfSSL 14:167253f4e170 23234
wolfSSL 14:167253f4e170 23235 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 23236 "movq %[d0], %%rax\n\t"
wolfSSL 14:167253f4e170 23237 "movq %[d1], %%rdx\n\t"
wolfSSL 14:167253f4e170 23238 "divq %[div]\n\t"
wolfSSL 14:167253f4e170 23239 "movq %%rax, %[r]\n\t"
wolfSSL 14:167253f4e170 23240 : [r] "=r" (r)
wolfSSL 14:167253f4e170 23241 : [d1] "r" (d1), [d0] "r" (d0), [div] "r" (div)
wolfSSL 14:167253f4e170 23242 : "rax", "rdx"
wolfSSL 14:167253f4e170 23243 );
wolfSSL 14:167253f4e170 23244
wolfSSL 14:167253f4e170 23245 return r;
wolfSSL 14:167253f4e170 23246 }
wolfSSL 14:167253f4e170 23247
wolfSSL 14:167253f4e170 23248 /* Compare a with b in constant time.
wolfSSL 14:167253f4e170 23249 *
wolfSSL 14:167253f4e170 23250 * a A single precision integer.
wolfSSL 14:167253f4e170 23251 * b A single precision integer.
wolfSSL 14:167253f4e170 23252 * return -ve, 0 or +ve if a is less than, equal to or greater than b
wolfSSL 14:167253f4e170 23253 * respectively.
wolfSSL 14:167253f4e170 23254 */
wolfSSL 14:167253f4e170 23255 static int64_t sp_3072_cmp_24(sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 23256 {
wolfSSL 14:167253f4e170 23257 sp_digit r = -1;
wolfSSL 14:167253f4e170 23258 sp_digit one = 1;
wolfSSL 14:167253f4e170 23259
wolfSSL 14:167253f4e170 23260 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 23261 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 23262 "movq $-1, %%rdx\n\t"
wolfSSL 14:167253f4e170 23263 "movq 184(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23264 "movq 184(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23265 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23266 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23267 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23268 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23269 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23270 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23271 "movq 176(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23272 "movq 176(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23273 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23274 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23275 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23276 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23277 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23278 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23279 "movq 168(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23280 "movq 168(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23281 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23282 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23283 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23284 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23285 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23286 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23287 "movq 160(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23288 "movq 160(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23289 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23290 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23291 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23292 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23293 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23294 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23295 "movq 152(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23296 "movq 152(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23297 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23298 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23299 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23300 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23301 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23302 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23303 "movq 144(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23304 "movq 144(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23305 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23306 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23307 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23308 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23309 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23310 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23311 "movq 136(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23312 "movq 136(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23313 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23314 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23315 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23316 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23317 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23318 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23319 "movq 128(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23320 "movq 128(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23321 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23322 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23323 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23324 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23325 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23326 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23327 "movq 120(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23328 "movq 120(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23329 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23330 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23331 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23332 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23333 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23334 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23335 "movq 112(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23336 "movq 112(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23337 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23338 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23339 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23340 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23341 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23342 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23343 "movq 104(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23344 "movq 104(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23345 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23346 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23347 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23348 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23349 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23350 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23351 "movq 96(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23352 "movq 96(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23353 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23354 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23355 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23356 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23357 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23358 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23359 "movq 88(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23360 "movq 88(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23361 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23362 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23363 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23364 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23365 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23366 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23367 "movq 80(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23368 "movq 80(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23369 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23370 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23371 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23372 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23373 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23374 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23375 "movq 72(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23376 "movq 72(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23377 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23378 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23379 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23380 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23381 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23382 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23383 "movq 64(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23384 "movq 64(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23385 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23386 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23387 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23388 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23389 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23390 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23391 "movq 56(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23392 "movq 56(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23393 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23394 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23395 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23396 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23397 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23398 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23399 "movq 48(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23400 "movq 48(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23401 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23402 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23403 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23404 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23405 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23406 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23407 "movq 40(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23408 "movq 40(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23409 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23410 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23411 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23412 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23413 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23414 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23415 "movq 32(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23416 "movq 32(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23417 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23418 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23419 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23420 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23421 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23422 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23423 "movq 24(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23424 "movq 24(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23425 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23426 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23427 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23428 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23429 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23430 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23431 "movq 16(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23432 "movq 16(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23433 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23434 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23435 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23436 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23437 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23438 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23439 "movq 8(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23440 "movq 8(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23441 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23442 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23443 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23444 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23445 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23446 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23447 "movq 0(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 23448 "movq 0(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 23449 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 23450 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23451 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 23452 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 23453 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23454 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 23455 "xorq %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 23456 : [r] "+r" (r)
wolfSSL 14:167253f4e170 23457 : [a] "r" (a), [b] "r" (b), [one] "r" (one)
wolfSSL 14:167253f4e170 23458 : "rax", "rdx", "rcx", "rbx", "r8"
wolfSSL 14:167253f4e170 23459 );
wolfSSL 14:167253f4e170 23460
wolfSSL 14:167253f4e170 23461 return r;
wolfSSL 14:167253f4e170 23462 }
wolfSSL 14:167253f4e170 23463
wolfSSL 14:167253f4e170 23464 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 23465 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 23466 *
wolfSSL 14:167253f4e170 23467 * a Nmber to be divided.
wolfSSL 14:167253f4e170 23468 * d Number to divide with.
wolfSSL 14:167253f4e170 23469 * m Multiplier result.
wolfSSL 14:167253f4e170 23470 * r Remainder from the division.
wolfSSL 14:167253f4e170 23471 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 23472 */
wolfSSL 14:167253f4e170 23473 static WC_INLINE int sp_3072_div_24(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 23474 sp_digit* r)
wolfSSL 14:167253f4e170 23475 {
wolfSSL 14:167253f4e170 23476 sp_digit t1[48], t2[25];
wolfSSL 14:167253f4e170 23477 sp_digit div, r1;
wolfSSL 14:167253f4e170 23478 int i;
wolfSSL 14:167253f4e170 23479 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23480 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 23481 #endif
wolfSSL 14:167253f4e170 23482
wolfSSL 14:167253f4e170 23483 (void)m;
wolfSSL 14:167253f4e170 23484
wolfSSL 14:167253f4e170 23485 div = d[23];
wolfSSL 14:167253f4e170 23486 XMEMCPY(t1, a, sizeof(*t1) * 2 * 24);
wolfSSL 14:167253f4e170 23487 for (i=23; i>=0; i--) {
wolfSSL 14:167253f4e170 23488 r1 = div_3072_word_24(t1[24 + i], t1[24 + i - 1], div);
wolfSSL 14:167253f4e170 23489
wolfSSL 14:167253f4e170 23490 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23491 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 23492 sp_3072_mul_d_avx2_24(t2, d, r1);
wolfSSL 14:167253f4e170 23493 else
wolfSSL 14:167253f4e170 23494 #endif
wolfSSL 14:167253f4e170 23495 sp_3072_mul_d_24(t2, d, r1);
wolfSSL 14:167253f4e170 23496 t1[24 + i] += sp_3072_sub_in_place_24(&t1[i], t2);
wolfSSL 14:167253f4e170 23497 t1[24 + i] -= t2[24];
wolfSSL 14:167253f4e170 23498 sp_3072_mask_24(t2, d, t1[24 + i]);
wolfSSL 14:167253f4e170 23499 t1[24 + i] += sp_3072_add_24(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 23500 sp_3072_mask_24(t2, d, t1[24 + i]);
wolfSSL 14:167253f4e170 23501 t1[24 + i] += sp_3072_add_24(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 23502 }
wolfSSL 14:167253f4e170 23503
wolfSSL 14:167253f4e170 23504 r1 = sp_3072_cmp_24(t1, d) >= 0;
wolfSSL 14:167253f4e170 23505 sp_3072_cond_sub_24(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 23506
wolfSSL 14:167253f4e170 23507 return MP_OKAY;
wolfSSL 14:167253f4e170 23508 }
wolfSSL 14:167253f4e170 23509
wolfSSL 14:167253f4e170 23510 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 23511 *
wolfSSL 14:167253f4e170 23512 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 23513 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 23514 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 23515 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 23516 */
wolfSSL 14:167253f4e170 23517 static WC_INLINE int sp_3072_mod_24(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 23518 {
wolfSSL 14:167253f4e170 23519 return sp_3072_div_24(a, m, NULL, r);
wolfSSL 14:167253f4e170 23520 }
wolfSSL 14:167253f4e170 23521
wolfSSL 14:167253f4e170 23522 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 23523 *
wolfSSL 14:167253f4e170 23524 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 23525 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 23526 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 23527 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 23528 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 23529 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 23530 */
wolfSSL 14:167253f4e170 23531 static int sp_3072_mod_exp_24(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 23532 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 23533 {
wolfSSL 14:167253f4e170 23534 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 23535 sp_digit t[32][48];
wolfSSL 14:167253f4e170 23536 #else
wolfSSL 14:167253f4e170 23537 sp_digit* t[32];
wolfSSL 14:167253f4e170 23538 sp_digit* td;
wolfSSL 14:167253f4e170 23539 #endif
wolfSSL 14:167253f4e170 23540 sp_digit* norm;
wolfSSL 14:167253f4e170 23541 sp_digit mp = 1;
wolfSSL 14:167253f4e170 23542 sp_digit n;
wolfSSL 14:167253f4e170 23543 sp_digit mask;
wolfSSL 14:167253f4e170 23544 int i;
wolfSSL 14:167253f4e170 23545 int c, y;
wolfSSL 14:167253f4e170 23546 int err = MP_OKAY;
wolfSSL 14:167253f4e170 23547
wolfSSL 14:167253f4e170 23548 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 23549 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 48, NULL,
wolfSSL 14:167253f4e170 23550 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 23551 if (td == NULL)
wolfSSL 14:167253f4e170 23552 err = MEMORY_E;
wolfSSL 14:167253f4e170 23553
wolfSSL 14:167253f4e170 23554 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 23555 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 23556 t[i] = td + i * 48;
wolfSSL 14:167253f4e170 23557 norm = t[0];
wolfSSL 14:167253f4e170 23558 }
wolfSSL 14:167253f4e170 23559 #else
wolfSSL 14:167253f4e170 23560 norm = t[0];
wolfSSL 14:167253f4e170 23561 #endif
wolfSSL 14:167253f4e170 23562
wolfSSL 14:167253f4e170 23563 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 23564 sp_3072_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 23565 sp_3072_mont_norm_24(norm, m);
wolfSSL 14:167253f4e170 23566
wolfSSL 14:167253f4e170 23567 XMEMSET(t[1], 0, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23568 if (reduceA) {
wolfSSL 14:167253f4e170 23569 err = sp_3072_mod_24(t[1] + 24, a, m);
wolfSSL 14:167253f4e170 23570 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 23571 err = sp_3072_mod_24(t[1], t[1], m);
wolfSSL 14:167253f4e170 23572 }
wolfSSL 14:167253f4e170 23573 else {
wolfSSL 14:167253f4e170 23574 XMEMCPY(t[1] + 24, a, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23575 err = sp_3072_mod_24(t[1], t[1], m);
wolfSSL 14:167253f4e170 23576 }
wolfSSL 14:167253f4e170 23577 }
wolfSSL 14:167253f4e170 23578
wolfSSL 14:167253f4e170 23579 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 23580 sp_3072_mont_sqr_24(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 23581 sp_3072_mont_mul_24(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 23582 sp_3072_mont_sqr_24(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 23583 sp_3072_mont_mul_24(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 23584 sp_3072_mont_sqr_24(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 23585 sp_3072_mont_mul_24(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 23586 sp_3072_mont_sqr_24(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 23587 sp_3072_mont_mul_24(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 23588 sp_3072_mont_sqr_24(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 23589 sp_3072_mont_mul_24(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 23590 sp_3072_mont_sqr_24(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 23591 sp_3072_mont_mul_24(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 23592 sp_3072_mont_sqr_24(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 23593 sp_3072_mont_mul_24(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 23594 sp_3072_mont_sqr_24(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 23595 sp_3072_mont_mul_24(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 23596 sp_3072_mont_sqr_24(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 23597 sp_3072_mont_mul_24(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 23598 sp_3072_mont_sqr_24(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 23599 sp_3072_mont_mul_24(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 23600 sp_3072_mont_sqr_24(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 23601 sp_3072_mont_mul_24(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 23602 sp_3072_mont_sqr_24(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 23603 sp_3072_mont_mul_24(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 23604 sp_3072_mont_sqr_24(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 23605 sp_3072_mont_mul_24(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 23606 sp_3072_mont_sqr_24(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 23607 sp_3072_mont_mul_24(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 23608 sp_3072_mont_sqr_24(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 23609 sp_3072_mont_mul_24(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 23610
wolfSSL 14:167253f4e170 23611 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 23612 n = e[i--];
wolfSSL 14:167253f4e170 23613 y = n >> 59;
wolfSSL 14:167253f4e170 23614 n <<= 5;
wolfSSL 14:167253f4e170 23615 c = 59;
wolfSSL 14:167253f4e170 23616 XMEMCPY(r, t[y], sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23617 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 23618 if (c == 0) {
wolfSSL 14:167253f4e170 23619 n = e[i--];
wolfSSL 14:167253f4e170 23620 y = n >> 59;
wolfSSL 14:167253f4e170 23621 n <<= 5;
wolfSSL 14:167253f4e170 23622 c = 59;
wolfSSL 14:167253f4e170 23623 }
wolfSSL 14:167253f4e170 23624 else if (c < 5) {
wolfSSL 14:167253f4e170 23625 y = n >> 59;
wolfSSL 14:167253f4e170 23626 n = e[i--];
wolfSSL 14:167253f4e170 23627 c = 5 - c;
wolfSSL 14:167253f4e170 23628 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 23629 n <<= c;
wolfSSL 14:167253f4e170 23630 c = 64 - c;
wolfSSL 14:167253f4e170 23631 }
wolfSSL 14:167253f4e170 23632 else {
wolfSSL 14:167253f4e170 23633 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 23634 n <<= 5;
wolfSSL 14:167253f4e170 23635 c -= 5;
wolfSSL 14:167253f4e170 23636 }
wolfSSL 14:167253f4e170 23637
wolfSSL 14:167253f4e170 23638 sp_3072_mont_sqr_24(r, r, m, mp);
wolfSSL 14:167253f4e170 23639 sp_3072_mont_sqr_24(r, r, m, mp);
wolfSSL 14:167253f4e170 23640 sp_3072_mont_sqr_24(r, r, m, mp);
wolfSSL 14:167253f4e170 23641 sp_3072_mont_sqr_24(r, r, m, mp);
wolfSSL 14:167253f4e170 23642 sp_3072_mont_sqr_24(r, r, m, mp);
wolfSSL 14:167253f4e170 23643
wolfSSL 14:167253f4e170 23644 sp_3072_mont_mul_24(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 23645 }
wolfSSL 14:167253f4e170 23646 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 23647 for (; c > 0; c--)
wolfSSL 14:167253f4e170 23648 sp_3072_mont_sqr_24(r, r, m, mp);
wolfSSL 14:167253f4e170 23649 sp_3072_mont_mul_24(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 23650
wolfSSL 14:167253f4e170 23651 XMEMSET(&r[24], 0, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23652 sp_3072_mont_reduce_24(r, m, mp);
wolfSSL 14:167253f4e170 23653
wolfSSL 14:167253f4e170 23654 mask = 0 - (sp_3072_cmp_24(r, m) >= 0);
wolfSSL 14:167253f4e170 23655 sp_3072_cond_sub_24(r, r, m, mask);
wolfSSL 14:167253f4e170 23656 }
wolfSSL 14:167253f4e170 23657
wolfSSL 14:167253f4e170 23658 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 23659 if (td != NULL)
wolfSSL 14:167253f4e170 23660 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 23661 #endif
wolfSSL 14:167253f4e170 23662
wolfSSL 14:167253f4e170 23663 return err;
wolfSSL 14:167253f4e170 23664 }
wolfSSL 14:167253f4e170 23665
wolfSSL 14:167253f4e170 23666 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23667 /* Reduce the number back to 3072 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 23668 *
wolfSSL 14:167253f4e170 23669 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 23670 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 23671 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 23672 */
wolfSSL 14:167253f4e170 23673 SP_NOINLINE static void sp_3072_mont_reduce_avx2_24(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 23674 sp_digit mp)
wolfSSL 14:167253f4e170 23675 {
wolfSSL 14:167253f4e170 23676 sp_digit ca = 0;
wolfSSL 14:167253f4e170 23677
wolfSSL 14:167253f4e170 23678 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 23679 "# i = 0\n\t"
wolfSSL 14:167253f4e170 23680 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 23681 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 23682 "\nL_mont_loop_avx2_24:\n\t"
wolfSSL 14:167253f4e170 23683 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 23684 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 23685 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 23686 "movq %%r12, %%rdx\n\t"
wolfSSL 14:167253f4e170 23687 "mulxq %[mp], %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 23688 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 23689 "mulxq 0(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23690 "movq 8(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 23691 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23692 "adoxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 23693 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 23694 "mulxq 8(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23695 "movq 16(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23696 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 23697 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23698 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 23699 "mulxq 16(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23700 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23701 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23702 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23703 "movq %%r10, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 23704 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 23705 "mulxq 24(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23706 "movq 32(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23707 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23708 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23709 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 23710 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 23711 "mulxq 32(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23712 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23713 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23714 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23715 "movq %%r10, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 23716 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 23717 "mulxq 40(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23718 "movq 48(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23719 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23720 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23721 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 23722 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 23723 "mulxq 48(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23724 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23725 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23726 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23727 "movq %%r10, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 23728 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 23729 "mulxq 56(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23730 "movq 64(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23731 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23732 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23733 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 23734 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 23735 "mulxq 64(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23736 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23737 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23738 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23739 "movq %%r10, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 23740 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 23741 "mulxq 72(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23742 "movq 80(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23743 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23744 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23745 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 23746 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 23747 "mulxq 80(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23748 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23749 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23750 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23751 "movq %%r10, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 23752 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 23753 "mulxq 88(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23754 "movq 96(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23755 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23756 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23757 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 23758 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 23759 "mulxq 96(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23760 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23761 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23762 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23763 "movq %%r10, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 23764 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 23765 "mulxq 104(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23766 "movq 112(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23767 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23768 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23769 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 23770 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 23771 "mulxq 112(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23772 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23773 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23774 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23775 "movq %%r10, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 23776 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 23777 "mulxq 120(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23778 "movq 128(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23779 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23780 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23781 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 23782 "# a[i+16] += m[16] * mu\n\t"
wolfSSL 14:167253f4e170 23783 "mulxq 128(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23784 "movq 136(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23785 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23786 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23787 "movq %%r10, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 23788 "# a[i+17] += m[17] * mu\n\t"
wolfSSL 14:167253f4e170 23789 "mulxq 136(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23790 "movq 144(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23791 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23792 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23793 "movq %%r11, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 23794 "# a[i+18] += m[18] * mu\n\t"
wolfSSL 14:167253f4e170 23795 "mulxq 144(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23796 "movq 152(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23797 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23798 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23799 "movq %%r10, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 23800 "# a[i+19] += m[19] * mu\n\t"
wolfSSL 14:167253f4e170 23801 "mulxq 152(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23802 "movq 160(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23803 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23804 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23805 "movq %%r11, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 23806 "# a[i+20] += m[20] * mu\n\t"
wolfSSL 14:167253f4e170 23807 "mulxq 160(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23808 "movq 168(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23809 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23810 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23811 "movq %%r10, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 23812 "# a[i+21] += m[21] * mu\n\t"
wolfSSL 14:167253f4e170 23813 "mulxq 168(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23814 "movq 176(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23815 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23816 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23817 "movq %%r11, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 23818 "# a[i+22] += m[22] * mu\n\t"
wolfSSL 14:167253f4e170 23819 "mulxq 176(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23820 "movq 184(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 23821 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 23822 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 23823 "movq %%r10, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 23824 "# a[i+23] += m[23] * mu\n\t"
wolfSSL 14:167253f4e170 23825 "mulxq 184(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 23826 "movq 192(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 23827 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 23828 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 23829 "movq %%r11, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 23830 "adcxq %[ca], %%r10\n\t"
wolfSSL 14:167253f4e170 23831 "movq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 23832 "adoxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 23833 "adcxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 23834 "movq %%r10, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 23835 "# i += 1\n\t"
wolfSSL 14:167253f4e170 23836 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 23837 "addq $1, %%rcx\n\t"
wolfSSL 14:167253f4e170 23838 "cmpq $24, %%rcx\n\t"
wolfSSL 14:167253f4e170 23839 "jl L_mont_loop_avx2_24\n\t"
wolfSSL 14:167253f4e170 23840 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 23841 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 23842 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 23843 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 23844 );
wolfSSL 14:167253f4e170 23845
wolfSSL 14:167253f4e170 23846 sp_3072_cond_sub_24(a - 24, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 23847 }
wolfSSL 14:167253f4e170 23848 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 23849
wolfSSL 14:167253f4e170 23850 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23851 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 23852 * (r = a * b mod m)
wolfSSL 14:167253f4e170 23853 *
wolfSSL 14:167253f4e170 23854 * r Result of multiplication.
wolfSSL 14:167253f4e170 23855 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 23856 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 23857 * m Modulus (prime).
wolfSSL 14:167253f4e170 23858 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 23859 */
wolfSSL 14:167253f4e170 23860 static void sp_3072_mont_mul_avx2_24(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 23861 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 23862 {
wolfSSL 14:167253f4e170 23863 sp_3072_mul_avx2_24(r, a, b);
wolfSSL 14:167253f4e170 23864 sp_3072_mont_reduce_avx2_24(r, m, mp);
wolfSSL 14:167253f4e170 23865 }
wolfSSL 14:167253f4e170 23866
wolfSSL 14:167253f4e170 23867 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 23868 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23869 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 23870 *
wolfSSL 14:167253f4e170 23871 * r Result of squaring.
wolfSSL 14:167253f4e170 23872 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 23873 * m Modulus (prime).
wolfSSL 14:167253f4e170 23874 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 23875 */
wolfSSL 14:167253f4e170 23876 static void sp_3072_mont_sqr_avx2_24(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 23877 sp_digit mp)
wolfSSL 14:167253f4e170 23878 {
wolfSSL 14:167253f4e170 23879 sp_3072_sqr_avx2_24(r, a);
wolfSSL 14:167253f4e170 23880 sp_3072_mont_reduce_avx2_24(r, m, mp);
wolfSSL 14:167253f4e170 23881 }
wolfSSL 14:167253f4e170 23882
wolfSSL 14:167253f4e170 23883 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 23884 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 23885 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 23886 *
wolfSSL 14:167253f4e170 23887 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 23888 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 23889 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 23890 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 23891 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 23892 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 23893 */
wolfSSL 14:167253f4e170 23894 static int sp_3072_mod_exp_avx2_24(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 23895 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 23896 {
wolfSSL 14:167253f4e170 23897 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 23898 sp_digit t[32][48];
wolfSSL 14:167253f4e170 23899 #else
wolfSSL 14:167253f4e170 23900 sp_digit* t[32];
wolfSSL 14:167253f4e170 23901 sp_digit* td;
wolfSSL 14:167253f4e170 23902 #endif
wolfSSL 14:167253f4e170 23903 sp_digit* norm;
wolfSSL 14:167253f4e170 23904 sp_digit mp = 1;
wolfSSL 14:167253f4e170 23905 sp_digit n;
wolfSSL 14:167253f4e170 23906 sp_digit mask;
wolfSSL 14:167253f4e170 23907 int i;
wolfSSL 14:167253f4e170 23908 int c, y;
wolfSSL 14:167253f4e170 23909 int err = MP_OKAY;
wolfSSL 14:167253f4e170 23910
wolfSSL 14:167253f4e170 23911 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 23912 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 48, NULL,
wolfSSL 14:167253f4e170 23913 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 23914 if (td == NULL)
wolfSSL 14:167253f4e170 23915 err = MEMORY_E;
wolfSSL 14:167253f4e170 23916
wolfSSL 14:167253f4e170 23917 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 23918 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 23919 t[i] = td + i * 48;
wolfSSL 14:167253f4e170 23920 norm = t[0];
wolfSSL 14:167253f4e170 23921 }
wolfSSL 14:167253f4e170 23922 #else
wolfSSL 14:167253f4e170 23923 norm = t[0];
wolfSSL 14:167253f4e170 23924 #endif
wolfSSL 14:167253f4e170 23925
wolfSSL 14:167253f4e170 23926 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 23927 sp_3072_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 23928 sp_3072_mont_norm_24(norm, m);
wolfSSL 14:167253f4e170 23929
wolfSSL 14:167253f4e170 23930 XMEMSET(t[1], 0, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23931 if (reduceA) {
wolfSSL 14:167253f4e170 23932 err = sp_3072_mod_24(t[1] + 24, a, m);
wolfSSL 14:167253f4e170 23933 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 23934 err = sp_3072_mod_24(t[1], t[1], m);
wolfSSL 14:167253f4e170 23935 }
wolfSSL 14:167253f4e170 23936 else {
wolfSSL 14:167253f4e170 23937 XMEMCPY(t[1] + 24, a, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23938 err = sp_3072_mod_24(t[1], t[1], m);
wolfSSL 14:167253f4e170 23939 }
wolfSSL 14:167253f4e170 23940 }
wolfSSL 14:167253f4e170 23941
wolfSSL 14:167253f4e170 23942 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 23943 sp_3072_mont_sqr_avx2_24(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 23944 sp_3072_mont_mul_avx2_24(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 23945 sp_3072_mont_sqr_avx2_24(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 23946 sp_3072_mont_mul_avx2_24(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 23947 sp_3072_mont_sqr_avx2_24(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 23948 sp_3072_mont_mul_avx2_24(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 23949 sp_3072_mont_sqr_avx2_24(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 23950 sp_3072_mont_mul_avx2_24(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 23951 sp_3072_mont_sqr_avx2_24(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 23952 sp_3072_mont_mul_avx2_24(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 23953 sp_3072_mont_sqr_avx2_24(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 23954 sp_3072_mont_mul_avx2_24(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 23955 sp_3072_mont_sqr_avx2_24(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 23956 sp_3072_mont_mul_avx2_24(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 23957 sp_3072_mont_sqr_avx2_24(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 23958 sp_3072_mont_mul_avx2_24(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 23959 sp_3072_mont_sqr_avx2_24(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 23960 sp_3072_mont_mul_avx2_24(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 23961 sp_3072_mont_sqr_avx2_24(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 23962 sp_3072_mont_mul_avx2_24(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 23963 sp_3072_mont_sqr_avx2_24(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 23964 sp_3072_mont_mul_avx2_24(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 23965 sp_3072_mont_sqr_avx2_24(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 23966 sp_3072_mont_mul_avx2_24(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 23967 sp_3072_mont_sqr_avx2_24(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 23968 sp_3072_mont_mul_avx2_24(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 23969 sp_3072_mont_sqr_avx2_24(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 23970 sp_3072_mont_mul_avx2_24(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 23971 sp_3072_mont_sqr_avx2_24(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 23972 sp_3072_mont_mul_avx2_24(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 23973
wolfSSL 14:167253f4e170 23974 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 23975 n = e[i--];
wolfSSL 14:167253f4e170 23976 y = n >> 59;
wolfSSL 14:167253f4e170 23977 n <<= 5;
wolfSSL 14:167253f4e170 23978 c = 59;
wolfSSL 14:167253f4e170 23979 XMEMCPY(r, t[y], sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 23980 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 23981 if (c == 0) {
wolfSSL 14:167253f4e170 23982 n = e[i--];
wolfSSL 14:167253f4e170 23983 y = n >> 59;
wolfSSL 14:167253f4e170 23984 n <<= 5;
wolfSSL 14:167253f4e170 23985 c = 59;
wolfSSL 14:167253f4e170 23986 }
wolfSSL 14:167253f4e170 23987 else if (c < 5) {
wolfSSL 14:167253f4e170 23988 y = n >> 59;
wolfSSL 14:167253f4e170 23989 n = e[i--];
wolfSSL 14:167253f4e170 23990 c = 5 - c;
wolfSSL 14:167253f4e170 23991 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 23992 n <<= c;
wolfSSL 14:167253f4e170 23993 c = 64 - c;
wolfSSL 14:167253f4e170 23994 }
wolfSSL 14:167253f4e170 23995 else {
wolfSSL 14:167253f4e170 23996 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 23997 n <<= 5;
wolfSSL 14:167253f4e170 23998 c -= 5;
wolfSSL 14:167253f4e170 23999 }
wolfSSL 14:167253f4e170 24000
wolfSSL 14:167253f4e170 24001 sp_3072_mont_sqr_avx2_24(r, r, m, mp);
wolfSSL 14:167253f4e170 24002 sp_3072_mont_sqr_avx2_24(r, r, m, mp);
wolfSSL 14:167253f4e170 24003 sp_3072_mont_sqr_avx2_24(r, r, m, mp);
wolfSSL 14:167253f4e170 24004 sp_3072_mont_sqr_avx2_24(r, r, m, mp);
wolfSSL 14:167253f4e170 24005 sp_3072_mont_sqr_avx2_24(r, r, m, mp);
wolfSSL 14:167253f4e170 24006
wolfSSL 14:167253f4e170 24007 sp_3072_mont_mul_avx2_24(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 24008 }
wolfSSL 14:167253f4e170 24009 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 24010 for (; c > 0; c--)
wolfSSL 14:167253f4e170 24011 sp_3072_mont_sqr_avx2_24(r, r, m, mp);
wolfSSL 14:167253f4e170 24012 sp_3072_mont_mul_avx2_24(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 24013
wolfSSL 14:167253f4e170 24014 XMEMSET(&r[24], 0, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 24015 sp_3072_mont_reduce_avx2_24(r, m, mp);
wolfSSL 14:167253f4e170 24016
wolfSSL 14:167253f4e170 24017 mask = 0 - (sp_3072_cmp_24(r, m) >= 0);
wolfSSL 14:167253f4e170 24018 sp_3072_cond_sub_24(r, r, m, mask);
wolfSSL 14:167253f4e170 24019 }
wolfSSL 14:167253f4e170 24020
wolfSSL 14:167253f4e170 24021 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 24022 if (td != NULL)
wolfSSL 14:167253f4e170 24023 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 24024 #endif
wolfSSL 14:167253f4e170 24025
wolfSSL 14:167253f4e170 24026 return err;
wolfSSL 14:167253f4e170 24027 }
wolfSSL 14:167253f4e170 24028 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 24029
wolfSSL 14:167253f4e170 24030 #endif /* !SP_RSA_PRIVATE_EXP_D && WOLFSSL_HAVE_SP_RSA */
wolfSSL 14:167253f4e170 24031
wolfSSL 14:167253f4e170 24032 /* r = 2^n mod m where n is the number of bits to reduce by.
wolfSSL 14:167253f4e170 24033 * Given m must be 3072 bits, just need to subtract.
wolfSSL 14:167253f4e170 24034 *
wolfSSL 14:167253f4e170 24035 * r A single precision number.
wolfSSL 14:167253f4e170 24036 * m A signle precision number.
wolfSSL 14:167253f4e170 24037 */
wolfSSL 14:167253f4e170 24038 static void sp_3072_mont_norm_48(sp_digit* r, sp_digit* m)
wolfSSL 14:167253f4e170 24039 {
wolfSSL 14:167253f4e170 24040 XMEMSET(r, 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 24041
wolfSSL 14:167253f4e170 24042 /* r = 2^n mod m */
wolfSSL 14:167253f4e170 24043 sp_3072_sub_in_place_48(r, m);
wolfSSL 14:167253f4e170 24044 }
wolfSSL 14:167253f4e170 24045
wolfSSL 14:167253f4e170 24046 /* Conditionally subtract b from a using the mask m.
wolfSSL 14:167253f4e170 24047 * m is -1 to subtract and 0 when not copying.
wolfSSL 14:167253f4e170 24048 *
wolfSSL 14:167253f4e170 24049 * r A single precision number representing condition subtract result.
wolfSSL 14:167253f4e170 24050 * a A single precision number to subtract from.
wolfSSL 14:167253f4e170 24051 * b A single precision number to subtract.
wolfSSL 14:167253f4e170 24052 * m Mask value to apply.
wolfSSL 14:167253f4e170 24053 */
wolfSSL 14:167253f4e170 24054 static sp_digit sp_3072_cond_sub_48(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 24055 sp_digit m)
wolfSSL 14:167253f4e170 24056 {
wolfSSL 14:167253f4e170 24057 sp_digit t[48];
wolfSSL 14:167253f4e170 24058 sp_digit c = 0;
wolfSSL 14:167253f4e170 24059
wolfSSL 14:167253f4e170 24060 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 24061 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24062 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24063 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24064 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24065 "movq %%rax, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 24066 "movq %%rcx, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 24067 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24068 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24069 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24070 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24071 "movq %%rax, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 24072 "movq %%rcx, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 24073 "movq 32(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24074 "movq 40(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24075 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24076 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24077 "movq %%rax, 32(%[t])\n\t"
wolfSSL 14:167253f4e170 24078 "movq %%rcx, 40(%[t])\n\t"
wolfSSL 14:167253f4e170 24079 "movq 48(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24080 "movq 56(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24081 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24082 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24083 "movq %%rax, 48(%[t])\n\t"
wolfSSL 14:167253f4e170 24084 "movq %%rcx, 56(%[t])\n\t"
wolfSSL 14:167253f4e170 24085 "movq 64(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24086 "movq 72(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24087 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24088 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24089 "movq %%rax, 64(%[t])\n\t"
wolfSSL 14:167253f4e170 24090 "movq %%rcx, 72(%[t])\n\t"
wolfSSL 14:167253f4e170 24091 "movq 80(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24092 "movq 88(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24093 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24094 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24095 "movq %%rax, 80(%[t])\n\t"
wolfSSL 14:167253f4e170 24096 "movq %%rcx, 88(%[t])\n\t"
wolfSSL 14:167253f4e170 24097 "movq 96(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24098 "movq 104(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24099 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24100 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24101 "movq %%rax, 96(%[t])\n\t"
wolfSSL 14:167253f4e170 24102 "movq %%rcx, 104(%[t])\n\t"
wolfSSL 14:167253f4e170 24103 "movq 112(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24104 "movq 120(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24105 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24106 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24107 "movq %%rax, 112(%[t])\n\t"
wolfSSL 14:167253f4e170 24108 "movq %%rcx, 120(%[t])\n\t"
wolfSSL 14:167253f4e170 24109 "movq 128(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24110 "movq 136(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24111 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24112 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24113 "movq %%rax, 128(%[t])\n\t"
wolfSSL 14:167253f4e170 24114 "movq %%rcx, 136(%[t])\n\t"
wolfSSL 14:167253f4e170 24115 "movq 144(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24116 "movq 152(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24117 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24118 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24119 "movq %%rax, 144(%[t])\n\t"
wolfSSL 14:167253f4e170 24120 "movq %%rcx, 152(%[t])\n\t"
wolfSSL 14:167253f4e170 24121 "movq 160(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24122 "movq 168(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24123 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24124 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24125 "movq %%rax, 160(%[t])\n\t"
wolfSSL 14:167253f4e170 24126 "movq %%rcx, 168(%[t])\n\t"
wolfSSL 14:167253f4e170 24127 "movq 176(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24128 "movq 184(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24129 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24130 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24131 "movq %%rax, 176(%[t])\n\t"
wolfSSL 14:167253f4e170 24132 "movq %%rcx, 184(%[t])\n\t"
wolfSSL 14:167253f4e170 24133 "movq 192(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24134 "movq 200(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24135 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24136 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24137 "movq %%rax, 192(%[t])\n\t"
wolfSSL 14:167253f4e170 24138 "movq %%rcx, 200(%[t])\n\t"
wolfSSL 14:167253f4e170 24139 "movq 208(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24140 "movq 216(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24141 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24142 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24143 "movq %%rax, 208(%[t])\n\t"
wolfSSL 14:167253f4e170 24144 "movq %%rcx, 216(%[t])\n\t"
wolfSSL 14:167253f4e170 24145 "movq 224(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24146 "movq 232(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24147 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24148 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24149 "movq %%rax, 224(%[t])\n\t"
wolfSSL 14:167253f4e170 24150 "movq %%rcx, 232(%[t])\n\t"
wolfSSL 14:167253f4e170 24151 "movq 240(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24152 "movq 248(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24153 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24154 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24155 "movq %%rax, 240(%[t])\n\t"
wolfSSL 14:167253f4e170 24156 "movq %%rcx, 248(%[t])\n\t"
wolfSSL 14:167253f4e170 24157 "movq 256(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24158 "movq 264(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24159 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24160 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24161 "movq %%rax, 256(%[t])\n\t"
wolfSSL 14:167253f4e170 24162 "movq %%rcx, 264(%[t])\n\t"
wolfSSL 14:167253f4e170 24163 "movq 272(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24164 "movq 280(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24165 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24166 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24167 "movq %%rax, 272(%[t])\n\t"
wolfSSL 14:167253f4e170 24168 "movq %%rcx, 280(%[t])\n\t"
wolfSSL 14:167253f4e170 24169 "movq 288(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24170 "movq 296(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24171 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24172 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24173 "movq %%rax, 288(%[t])\n\t"
wolfSSL 14:167253f4e170 24174 "movq %%rcx, 296(%[t])\n\t"
wolfSSL 14:167253f4e170 24175 "movq 304(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24176 "movq 312(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24177 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24178 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24179 "movq %%rax, 304(%[t])\n\t"
wolfSSL 14:167253f4e170 24180 "movq %%rcx, 312(%[t])\n\t"
wolfSSL 14:167253f4e170 24181 "movq 320(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24182 "movq 328(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24183 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24184 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24185 "movq %%rax, 320(%[t])\n\t"
wolfSSL 14:167253f4e170 24186 "movq %%rcx, 328(%[t])\n\t"
wolfSSL 14:167253f4e170 24187 "movq 336(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24188 "movq 344(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24189 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24190 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24191 "movq %%rax, 336(%[t])\n\t"
wolfSSL 14:167253f4e170 24192 "movq %%rcx, 344(%[t])\n\t"
wolfSSL 14:167253f4e170 24193 "movq 352(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24194 "movq 360(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24195 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24196 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24197 "movq %%rax, 352(%[t])\n\t"
wolfSSL 14:167253f4e170 24198 "movq %%rcx, 360(%[t])\n\t"
wolfSSL 14:167253f4e170 24199 "movq 368(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 24200 "movq 376(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24201 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 24202 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 24203 "movq %%rax, 368(%[t])\n\t"
wolfSSL 14:167253f4e170 24204 "movq %%rcx, 376(%[t])\n\t"
wolfSSL 14:167253f4e170 24205 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24206 "movq (%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24207 "subq %%rdx,%%rax\n\t"
wolfSSL 14:167253f4e170 24208 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24209 "movq 8(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24210 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24211 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 24212 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24213 "movq 16(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24214 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24215 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 24216 "movq 24(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24217 "movq 24(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24218 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24219 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 24220 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24221 "movq 32(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24222 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24223 "movq %%rcx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 24224 "movq 40(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24225 "movq 40(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24226 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24227 "movq %%rax, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 24228 "movq 48(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24229 "movq 48(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24230 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24231 "movq %%rcx, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 24232 "movq 56(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24233 "movq 56(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24234 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24235 "movq %%rax, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 24236 "movq 64(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24237 "movq 64(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24238 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24239 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 24240 "movq 72(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24241 "movq 72(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24242 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24243 "movq %%rax, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 24244 "movq 80(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24245 "movq 80(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24246 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24247 "movq %%rcx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 24248 "movq 88(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24249 "movq 88(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24250 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24251 "movq %%rax, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 24252 "movq 96(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24253 "movq 96(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24254 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24255 "movq %%rcx, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 24256 "movq 104(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24257 "movq 104(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24258 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24259 "movq %%rax, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 24260 "movq 112(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24261 "movq 112(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24262 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24263 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 24264 "movq 120(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24265 "movq 120(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24266 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24267 "movq %%rax, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 24268 "movq 128(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24269 "movq 128(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24270 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24271 "movq %%rcx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 24272 "movq 136(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24273 "movq 136(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24274 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24275 "movq %%rax, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 24276 "movq 144(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24277 "movq 144(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24278 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24279 "movq %%rcx, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 24280 "movq 152(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24281 "movq 152(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24282 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24283 "movq %%rax, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 24284 "movq 160(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24285 "movq 160(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24286 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24287 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 24288 "movq 168(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24289 "movq 168(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24290 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24291 "movq %%rax, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 24292 "movq 176(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24293 "movq 176(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24294 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24295 "movq %%rcx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 24296 "movq 184(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24297 "movq 184(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24298 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24299 "movq %%rax, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 24300 "movq 192(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24301 "movq 192(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24302 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24303 "movq %%rcx, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 24304 "movq 200(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24305 "movq 200(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24306 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24307 "movq %%rax, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 24308 "movq 208(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24309 "movq 208(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24310 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24311 "movq %%rcx, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 24312 "movq 216(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24313 "movq 216(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24314 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24315 "movq %%rax, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 24316 "movq 224(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24317 "movq 224(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24318 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24319 "movq %%rcx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 24320 "movq 232(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24321 "movq 232(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24322 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24323 "movq %%rax, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 24324 "movq 240(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24325 "movq 240(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24326 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24327 "movq %%rcx, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 24328 "movq 248(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24329 "movq 248(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24330 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24331 "movq %%rax, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 24332 "movq 256(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24333 "movq 256(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24334 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24335 "movq %%rcx, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 24336 "movq 264(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24337 "movq 264(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24338 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24339 "movq %%rax, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 24340 "movq 272(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24341 "movq 272(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24342 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24343 "movq %%rcx, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 24344 "movq 280(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24345 "movq 280(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24346 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24347 "movq %%rax, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 24348 "movq 288(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24349 "movq 288(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24350 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24351 "movq %%rcx, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 24352 "movq 296(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24353 "movq 296(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24354 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24355 "movq %%rax, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 24356 "movq 304(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24357 "movq 304(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24358 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24359 "movq %%rcx, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 24360 "movq 312(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24361 "movq 312(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24362 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24363 "movq %%rax, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 24364 "movq 320(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24365 "movq 320(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24366 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24367 "movq %%rcx, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 24368 "movq 328(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24369 "movq 328(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24370 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24371 "movq %%rax, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 24372 "movq 336(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24373 "movq 336(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24374 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24375 "movq %%rcx, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 24376 "movq 344(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24377 "movq 344(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24378 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24379 "movq %%rax, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 24380 "movq 352(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24381 "movq 352(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24382 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24383 "movq %%rcx, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 24384 "movq 360(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24385 "movq 360(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24386 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24387 "movq %%rax, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 24388 "movq 368(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 24389 "movq 368(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24390 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 24391 "movq %%rcx, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 24392 "movq 376(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 24393 "movq 376(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 24394 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24395 "movq %%rax, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 24396 "movq %%rcx, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 24397 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 24398 : [c] "+r" (c)
wolfSSL 14:167253f4e170 24399 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m), [t] "r" (t)
wolfSSL 14:167253f4e170 24400 : "memory", "rax", "rcx", "rdx"
wolfSSL 14:167253f4e170 24401 );
wolfSSL 14:167253f4e170 24402
wolfSSL 14:167253f4e170 24403 return c;
wolfSSL 14:167253f4e170 24404 }
wolfSSL 14:167253f4e170 24405
wolfSSL 14:167253f4e170 24406 /* Reduce the number back to 3072 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 24407 *
wolfSSL 14:167253f4e170 24408 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 24409 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 24410 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 24411 */
wolfSSL 14:167253f4e170 24412 SP_NOINLINE static void sp_3072_mont_reduce_48(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 24413 sp_digit mp)
wolfSSL 14:167253f4e170 24414 {
wolfSSL 14:167253f4e170 24415 sp_digit ca = 0;
wolfSSL 14:167253f4e170 24416
wolfSSL 14:167253f4e170 24417 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 24418 "# i = 0\n\t"
wolfSSL 14:167253f4e170 24419 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24420 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 24421 "movq 8(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 24422 "\nL_mont_loop_48:\n\t"
wolfSSL 14:167253f4e170 24423 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 24424 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 24425 "imulq %[mp], %%r10\n\t"
wolfSSL 14:167253f4e170 24426 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 24427 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24428 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24429 "mulq 0(%[m])\n\t"
wolfSSL 14:167253f4e170 24430 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 24431 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24432 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 24433 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24434 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24435 "mulq 8(%[m])\n\t"
wolfSSL 14:167253f4e170 24436 "movq %%r13, %%r12\n\t"
wolfSSL 14:167253f4e170 24437 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 24438 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24439 "addq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 24440 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24441 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 24442 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24443 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24444 "mulq 16(%[m])\n\t"
wolfSSL 14:167253f4e170 24445 "movq 16(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 24446 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 24447 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24448 "addq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 24449 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24450 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 24451 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24452 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24453 "mulq 24(%[m])\n\t"
wolfSSL 14:167253f4e170 24454 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24455 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24456 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24457 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24458 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 24459 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24460 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 24461 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24462 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24463 "mulq 32(%[m])\n\t"
wolfSSL 14:167253f4e170 24464 "movq 32(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24465 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24466 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24467 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24468 "movq %%r11, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 24469 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24470 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 24471 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24472 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24473 "mulq 40(%[m])\n\t"
wolfSSL 14:167253f4e170 24474 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24475 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24476 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24477 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24478 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 24479 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24480 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 24481 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24482 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24483 "mulq 48(%[m])\n\t"
wolfSSL 14:167253f4e170 24484 "movq 48(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24485 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24486 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24487 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24488 "movq %%r11, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 24489 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24490 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 24491 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24492 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24493 "mulq 56(%[m])\n\t"
wolfSSL 14:167253f4e170 24494 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24495 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24496 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24497 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24498 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 24499 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24500 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 24501 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24502 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24503 "mulq 64(%[m])\n\t"
wolfSSL 14:167253f4e170 24504 "movq 64(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24505 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24506 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24507 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24508 "movq %%r11, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 24509 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24510 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 24511 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24512 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24513 "mulq 72(%[m])\n\t"
wolfSSL 14:167253f4e170 24514 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24515 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24516 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24517 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24518 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 24519 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24520 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 24521 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24522 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24523 "mulq 80(%[m])\n\t"
wolfSSL 14:167253f4e170 24524 "movq 80(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24525 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24526 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24527 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24528 "movq %%r11, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 24529 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24530 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 24531 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24532 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24533 "mulq 88(%[m])\n\t"
wolfSSL 14:167253f4e170 24534 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24535 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24536 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24537 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24538 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 24539 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24540 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 24541 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24542 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24543 "mulq 96(%[m])\n\t"
wolfSSL 14:167253f4e170 24544 "movq 96(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24545 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24546 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24547 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24548 "movq %%r11, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 24549 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24550 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 24551 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24552 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24553 "mulq 104(%[m])\n\t"
wolfSSL 14:167253f4e170 24554 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24555 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24556 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24557 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24558 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 24559 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24560 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 24561 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24562 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24563 "mulq 112(%[m])\n\t"
wolfSSL 14:167253f4e170 24564 "movq 112(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24565 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24566 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24567 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24568 "movq %%r11, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 24569 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24570 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 24571 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24572 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24573 "mulq 120(%[m])\n\t"
wolfSSL 14:167253f4e170 24574 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24575 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24576 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24577 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24578 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 24579 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24580 "# a[i+16] += m[16] * mu\n\t"
wolfSSL 14:167253f4e170 24581 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24582 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24583 "mulq 128(%[m])\n\t"
wolfSSL 14:167253f4e170 24584 "movq 128(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24585 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24586 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24587 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24588 "movq %%r11, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 24589 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24590 "# a[i+17] += m[17] * mu\n\t"
wolfSSL 14:167253f4e170 24591 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24592 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24593 "mulq 136(%[m])\n\t"
wolfSSL 14:167253f4e170 24594 "movq 136(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24595 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24596 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24597 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24598 "movq %%r11, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 24599 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24600 "# a[i+18] += m[18] * mu\n\t"
wolfSSL 14:167253f4e170 24601 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24602 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24603 "mulq 144(%[m])\n\t"
wolfSSL 14:167253f4e170 24604 "movq 144(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24605 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24606 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24607 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24608 "movq %%r11, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 24609 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24610 "# a[i+19] += m[19] * mu\n\t"
wolfSSL 14:167253f4e170 24611 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24612 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24613 "mulq 152(%[m])\n\t"
wolfSSL 14:167253f4e170 24614 "movq 152(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24615 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24616 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24617 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24618 "movq %%r11, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 24619 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24620 "# a[i+20] += m[20] * mu\n\t"
wolfSSL 14:167253f4e170 24621 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24622 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24623 "mulq 160(%[m])\n\t"
wolfSSL 14:167253f4e170 24624 "movq 160(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24625 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24626 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24627 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24628 "movq %%r11, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 24629 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24630 "# a[i+21] += m[21] * mu\n\t"
wolfSSL 14:167253f4e170 24631 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24632 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24633 "mulq 168(%[m])\n\t"
wolfSSL 14:167253f4e170 24634 "movq 168(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24635 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24636 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24637 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24638 "movq %%r11, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 24639 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24640 "# a[i+22] += m[22] * mu\n\t"
wolfSSL 14:167253f4e170 24641 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24642 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24643 "mulq 176(%[m])\n\t"
wolfSSL 14:167253f4e170 24644 "movq 176(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24645 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24646 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24647 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24648 "movq %%r11, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 24649 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24650 "# a[i+23] += m[23] * mu\n\t"
wolfSSL 14:167253f4e170 24651 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24652 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24653 "mulq 184(%[m])\n\t"
wolfSSL 14:167253f4e170 24654 "movq 184(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24655 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24656 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24657 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24658 "movq %%r11, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 24659 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24660 "# a[i+24] += m[24] * mu\n\t"
wolfSSL 14:167253f4e170 24661 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24662 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24663 "mulq 192(%[m])\n\t"
wolfSSL 14:167253f4e170 24664 "movq 192(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24665 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24666 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24667 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24668 "movq %%r11, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 24669 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24670 "# a[i+25] += m[25] * mu\n\t"
wolfSSL 14:167253f4e170 24671 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24672 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24673 "mulq 200(%[m])\n\t"
wolfSSL 14:167253f4e170 24674 "movq 200(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24675 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24676 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24677 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24678 "movq %%r11, 200(%[a])\n\t"
wolfSSL 14:167253f4e170 24679 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24680 "# a[i+26] += m[26] * mu\n\t"
wolfSSL 14:167253f4e170 24681 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24682 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24683 "mulq 208(%[m])\n\t"
wolfSSL 14:167253f4e170 24684 "movq 208(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24685 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24686 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24687 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24688 "movq %%r11, 208(%[a])\n\t"
wolfSSL 14:167253f4e170 24689 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24690 "# a[i+27] += m[27] * mu\n\t"
wolfSSL 14:167253f4e170 24691 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24692 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24693 "mulq 216(%[m])\n\t"
wolfSSL 14:167253f4e170 24694 "movq 216(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24695 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24696 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24697 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24698 "movq %%r11, 216(%[a])\n\t"
wolfSSL 14:167253f4e170 24699 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24700 "# a[i+28] += m[28] * mu\n\t"
wolfSSL 14:167253f4e170 24701 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24702 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24703 "mulq 224(%[m])\n\t"
wolfSSL 14:167253f4e170 24704 "movq 224(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24705 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24706 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24707 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24708 "movq %%r11, 224(%[a])\n\t"
wolfSSL 14:167253f4e170 24709 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24710 "# a[i+29] += m[29] * mu\n\t"
wolfSSL 14:167253f4e170 24711 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24712 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24713 "mulq 232(%[m])\n\t"
wolfSSL 14:167253f4e170 24714 "movq 232(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24715 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24716 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24717 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24718 "movq %%r11, 232(%[a])\n\t"
wolfSSL 14:167253f4e170 24719 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24720 "# a[i+30] += m[30] * mu\n\t"
wolfSSL 14:167253f4e170 24721 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24722 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24723 "mulq 240(%[m])\n\t"
wolfSSL 14:167253f4e170 24724 "movq 240(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24725 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24726 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24727 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24728 "movq %%r11, 240(%[a])\n\t"
wolfSSL 14:167253f4e170 24729 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24730 "# a[i+31] += m[31] * mu\n\t"
wolfSSL 14:167253f4e170 24731 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24732 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24733 "mulq 248(%[m])\n\t"
wolfSSL 14:167253f4e170 24734 "movq 248(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24735 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24736 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24737 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24738 "movq %%r11, 248(%[a])\n\t"
wolfSSL 14:167253f4e170 24739 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24740 "# a[i+32] += m[32] * mu\n\t"
wolfSSL 14:167253f4e170 24741 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24742 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24743 "mulq 256(%[m])\n\t"
wolfSSL 14:167253f4e170 24744 "movq 256(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24745 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24746 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24747 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24748 "movq %%r11, 256(%[a])\n\t"
wolfSSL 14:167253f4e170 24749 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24750 "# a[i+33] += m[33] * mu\n\t"
wolfSSL 14:167253f4e170 24751 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24752 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24753 "mulq 264(%[m])\n\t"
wolfSSL 14:167253f4e170 24754 "movq 264(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24755 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24756 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24757 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24758 "movq %%r11, 264(%[a])\n\t"
wolfSSL 14:167253f4e170 24759 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24760 "# a[i+34] += m[34] * mu\n\t"
wolfSSL 14:167253f4e170 24761 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24762 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24763 "mulq 272(%[m])\n\t"
wolfSSL 14:167253f4e170 24764 "movq 272(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24765 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24766 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24767 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24768 "movq %%r11, 272(%[a])\n\t"
wolfSSL 14:167253f4e170 24769 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24770 "# a[i+35] += m[35] * mu\n\t"
wolfSSL 14:167253f4e170 24771 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24772 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24773 "mulq 280(%[m])\n\t"
wolfSSL 14:167253f4e170 24774 "movq 280(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24775 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24776 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24777 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24778 "movq %%r11, 280(%[a])\n\t"
wolfSSL 14:167253f4e170 24779 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24780 "# a[i+36] += m[36] * mu\n\t"
wolfSSL 14:167253f4e170 24781 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24782 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24783 "mulq 288(%[m])\n\t"
wolfSSL 14:167253f4e170 24784 "movq 288(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24785 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24786 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24787 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24788 "movq %%r11, 288(%[a])\n\t"
wolfSSL 14:167253f4e170 24789 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24790 "# a[i+37] += m[37] * mu\n\t"
wolfSSL 14:167253f4e170 24791 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24792 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24793 "mulq 296(%[m])\n\t"
wolfSSL 14:167253f4e170 24794 "movq 296(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24795 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24796 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24797 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24798 "movq %%r11, 296(%[a])\n\t"
wolfSSL 14:167253f4e170 24799 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24800 "# a[i+38] += m[38] * mu\n\t"
wolfSSL 14:167253f4e170 24801 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24802 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24803 "mulq 304(%[m])\n\t"
wolfSSL 14:167253f4e170 24804 "movq 304(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24805 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24806 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24807 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24808 "movq %%r11, 304(%[a])\n\t"
wolfSSL 14:167253f4e170 24809 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24810 "# a[i+39] += m[39] * mu\n\t"
wolfSSL 14:167253f4e170 24811 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24812 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24813 "mulq 312(%[m])\n\t"
wolfSSL 14:167253f4e170 24814 "movq 312(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24815 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24816 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24817 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24818 "movq %%r11, 312(%[a])\n\t"
wolfSSL 14:167253f4e170 24819 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24820 "# a[i+40] += m[40] * mu\n\t"
wolfSSL 14:167253f4e170 24821 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24822 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24823 "mulq 320(%[m])\n\t"
wolfSSL 14:167253f4e170 24824 "movq 320(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24825 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24826 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24827 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24828 "movq %%r11, 320(%[a])\n\t"
wolfSSL 14:167253f4e170 24829 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24830 "# a[i+41] += m[41] * mu\n\t"
wolfSSL 14:167253f4e170 24831 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24832 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24833 "mulq 328(%[m])\n\t"
wolfSSL 14:167253f4e170 24834 "movq 328(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24835 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24836 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24837 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24838 "movq %%r11, 328(%[a])\n\t"
wolfSSL 14:167253f4e170 24839 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24840 "# a[i+42] += m[42] * mu\n\t"
wolfSSL 14:167253f4e170 24841 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24842 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24843 "mulq 336(%[m])\n\t"
wolfSSL 14:167253f4e170 24844 "movq 336(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24845 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24846 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24847 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24848 "movq %%r11, 336(%[a])\n\t"
wolfSSL 14:167253f4e170 24849 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24850 "# a[i+43] += m[43] * mu\n\t"
wolfSSL 14:167253f4e170 24851 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24852 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24853 "mulq 344(%[m])\n\t"
wolfSSL 14:167253f4e170 24854 "movq 344(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24855 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24856 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24857 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24858 "movq %%r11, 344(%[a])\n\t"
wolfSSL 14:167253f4e170 24859 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24860 "# a[i+44] += m[44] * mu\n\t"
wolfSSL 14:167253f4e170 24861 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24862 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24863 "mulq 352(%[m])\n\t"
wolfSSL 14:167253f4e170 24864 "movq 352(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24865 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24866 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24867 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24868 "movq %%r11, 352(%[a])\n\t"
wolfSSL 14:167253f4e170 24869 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24870 "# a[i+45] += m[45] * mu\n\t"
wolfSSL 14:167253f4e170 24871 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24872 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24873 "mulq 360(%[m])\n\t"
wolfSSL 14:167253f4e170 24874 "movq 360(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24875 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24876 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24877 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24878 "movq %%r11, 360(%[a])\n\t"
wolfSSL 14:167253f4e170 24879 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24880 "# a[i+46] += m[46] * mu\n\t"
wolfSSL 14:167253f4e170 24881 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24882 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 24883 "mulq 368(%[m])\n\t"
wolfSSL 14:167253f4e170 24884 "movq 368(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24885 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 24886 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 24887 "addq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 24888 "movq %%r11, 368(%[a])\n\t"
wolfSSL 14:167253f4e170 24889 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 24890 "# a[i+47] += m[47] * mu\n\t"
wolfSSL 14:167253f4e170 24891 "movq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 24892 "mulq 376(%[m])\n\t"
wolfSSL 14:167253f4e170 24893 "movq 376(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 24894 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 24895 "adcq %[ca], %%rdx\n\t"
wolfSSL 14:167253f4e170 24896 "movq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 24897 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 24898 "addq %%r9, %%r11\n\t"
wolfSSL 14:167253f4e170 24899 "movq %%r11, 376(%[a])\n\t"
wolfSSL 14:167253f4e170 24900 "adcq %%rdx, 384(%[a])\n\t"
wolfSSL 14:167253f4e170 24901 "adcq $0, %[ca]\n\t"
wolfSSL 14:167253f4e170 24902 "# i += 1\n\t"
wolfSSL 14:167253f4e170 24903 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 24904 "addq $8, %%rcx\n\t"
wolfSSL 14:167253f4e170 24905 "cmpq $384, %%rcx\n\t"
wolfSSL 14:167253f4e170 24906 "jl L_mont_loop_48\n\t"
wolfSSL 14:167253f4e170 24907 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 24908 "movq %%r13, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 24909 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 24910 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 24911 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 24912 "r12", "r13"
wolfSSL 14:167253f4e170 24913 );
wolfSSL 14:167253f4e170 24914
wolfSSL 14:167253f4e170 24915 sp_3072_cond_sub_48(a - 48, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 24916 }
wolfSSL 14:167253f4e170 24917
wolfSSL 14:167253f4e170 24918 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 24919 * (r = a * b mod m)
wolfSSL 14:167253f4e170 24920 *
wolfSSL 14:167253f4e170 24921 * r Result of multiplication.
wolfSSL 14:167253f4e170 24922 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 24923 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 24924 * m Modulus (prime).
wolfSSL 14:167253f4e170 24925 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 24926 */
wolfSSL 14:167253f4e170 24927 static void sp_3072_mont_mul_48(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 24928 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 24929 {
wolfSSL 14:167253f4e170 24930 sp_3072_mul_48(r, a, b);
wolfSSL 14:167253f4e170 24931 sp_3072_mont_reduce_48(r, m, mp);
wolfSSL 14:167253f4e170 24932 }
wolfSSL 14:167253f4e170 24933
wolfSSL 14:167253f4e170 24934 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 24935 *
wolfSSL 14:167253f4e170 24936 * r Result of squaring.
wolfSSL 14:167253f4e170 24937 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 24938 * m Modulus (prime).
wolfSSL 14:167253f4e170 24939 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 24940 */
wolfSSL 14:167253f4e170 24941 static void sp_3072_mont_sqr_48(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 24942 sp_digit mp)
wolfSSL 14:167253f4e170 24943 {
wolfSSL 14:167253f4e170 24944 sp_3072_sqr_48(r, a);
wolfSSL 14:167253f4e170 24945 sp_3072_mont_reduce_48(r, m, mp);
wolfSSL 14:167253f4e170 24946 }
wolfSSL 14:167253f4e170 24947
wolfSSL 14:167253f4e170 24948 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 24949 *
wolfSSL 14:167253f4e170 24950 * r A single precision integer.
wolfSSL 14:167253f4e170 24951 * a A single precision integer.
wolfSSL 14:167253f4e170 24952 * b A single precision digit.
wolfSSL 14:167253f4e170 24953 */
wolfSSL 14:167253f4e170 24954 SP_NOINLINE static void sp_3072_mul_d_48(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 24955 const sp_digit b)
wolfSSL 14:167253f4e170 24956 {
wolfSSL 14:167253f4e170 24957 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 24958 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 24959 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 24960 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24961 "mulq (%[a])\n\t"
wolfSSL 14:167253f4e170 24962 "movq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 24963 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24964 "movq %%rbx, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 24965 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 24966 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 24967 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 24968 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 24969 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 24970 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 24971 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24972 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 24973 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 24974 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 24975 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24976 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 24977 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 24978 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 24979 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 24980 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 24981 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 24982 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 24983 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 24984 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 24985 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 24986 "movq %%rbx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 24987 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 24988 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 24989 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 24990 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 24991 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 24992 "mulq 32(%[a])\n\t"
wolfSSL 14:167253f4e170 24993 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 24994 "movq %%rcx, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 24995 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 24996 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 24997 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 24998 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 24999 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25000 "mulq 40(%[a])\n\t"
wolfSSL 14:167253f4e170 25001 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25002 "movq %%r8, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 25003 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25004 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25005 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 25006 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25007 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25008 "mulq 48(%[a])\n\t"
wolfSSL 14:167253f4e170 25009 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25010 "movq %%rbx, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 25011 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25012 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25013 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 25014 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25015 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25016 "mulq 56(%[a])\n\t"
wolfSSL 14:167253f4e170 25017 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25018 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 25019 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25020 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25021 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 25022 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25023 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25024 "mulq 64(%[a])\n\t"
wolfSSL 14:167253f4e170 25025 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25026 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 25027 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25028 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25029 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 25030 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25031 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25032 "mulq 72(%[a])\n\t"
wolfSSL 14:167253f4e170 25033 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25034 "movq %%rbx, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 25035 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25036 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25037 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 25038 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25039 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25040 "mulq 80(%[a])\n\t"
wolfSSL 14:167253f4e170 25041 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25042 "movq %%rcx, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 25043 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25044 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25045 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 25046 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25047 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25048 "mulq 88(%[a])\n\t"
wolfSSL 14:167253f4e170 25049 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25050 "movq %%r8, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 25051 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25052 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25053 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 25054 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25055 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25056 "mulq 96(%[a])\n\t"
wolfSSL 14:167253f4e170 25057 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25058 "movq %%rbx, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 25059 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25060 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25061 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 25062 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25063 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25064 "mulq 104(%[a])\n\t"
wolfSSL 14:167253f4e170 25065 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25066 "movq %%rcx, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 25067 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25068 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25069 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 25070 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25071 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25072 "mulq 112(%[a])\n\t"
wolfSSL 14:167253f4e170 25073 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25074 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 25075 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25076 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25077 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 25078 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25079 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25080 "mulq 120(%[a])\n\t"
wolfSSL 14:167253f4e170 25081 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25082 "movq %%rbx, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 25083 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25084 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25085 "# A[16] * B\n\t"
wolfSSL 14:167253f4e170 25086 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25087 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25088 "mulq 128(%[a])\n\t"
wolfSSL 14:167253f4e170 25089 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25090 "movq %%rcx, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 25091 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25092 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25093 "# A[17] * B\n\t"
wolfSSL 14:167253f4e170 25094 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25095 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25096 "mulq 136(%[a])\n\t"
wolfSSL 14:167253f4e170 25097 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25098 "movq %%r8, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 25099 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25100 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25101 "# A[18] * B\n\t"
wolfSSL 14:167253f4e170 25102 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25103 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25104 "mulq 144(%[a])\n\t"
wolfSSL 14:167253f4e170 25105 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25106 "movq %%rbx, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 25107 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25108 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25109 "# A[19] * B\n\t"
wolfSSL 14:167253f4e170 25110 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25111 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25112 "mulq 152(%[a])\n\t"
wolfSSL 14:167253f4e170 25113 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25114 "movq %%rcx, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 25115 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25116 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25117 "# A[20] * B\n\t"
wolfSSL 14:167253f4e170 25118 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25119 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25120 "mulq 160(%[a])\n\t"
wolfSSL 14:167253f4e170 25121 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25122 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 25123 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25124 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25125 "# A[21] * B\n\t"
wolfSSL 14:167253f4e170 25126 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25127 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25128 "mulq 168(%[a])\n\t"
wolfSSL 14:167253f4e170 25129 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25130 "movq %%rbx, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 25131 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25132 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25133 "# A[22] * B\n\t"
wolfSSL 14:167253f4e170 25134 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25135 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25136 "mulq 176(%[a])\n\t"
wolfSSL 14:167253f4e170 25137 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25138 "movq %%rcx, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 25139 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25140 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25141 "# A[23] * B\n\t"
wolfSSL 14:167253f4e170 25142 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25143 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25144 "mulq 184(%[a])\n\t"
wolfSSL 14:167253f4e170 25145 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25146 "movq %%r8, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 25147 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25148 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25149 "# A[24] * B\n\t"
wolfSSL 14:167253f4e170 25150 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25151 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25152 "mulq 192(%[a])\n\t"
wolfSSL 14:167253f4e170 25153 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25154 "movq %%rbx, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 25155 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25156 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25157 "# A[25] * B\n\t"
wolfSSL 14:167253f4e170 25158 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25159 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25160 "mulq 200(%[a])\n\t"
wolfSSL 14:167253f4e170 25161 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25162 "movq %%rcx, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 25163 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25164 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25165 "# A[26] * B\n\t"
wolfSSL 14:167253f4e170 25166 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25167 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25168 "mulq 208(%[a])\n\t"
wolfSSL 14:167253f4e170 25169 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25170 "movq %%r8, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 25171 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25172 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25173 "# A[27] * B\n\t"
wolfSSL 14:167253f4e170 25174 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25175 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25176 "mulq 216(%[a])\n\t"
wolfSSL 14:167253f4e170 25177 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25178 "movq %%rbx, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 25179 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25180 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25181 "# A[28] * B\n\t"
wolfSSL 14:167253f4e170 25182 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25183 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25184 "mulq 224(%[a])\n\t"
wolfSSL 14:167253f4e170 25185 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25186 "movq %%rcx, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 25187 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25188 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25189 "# A[29] * B\n\t"
wolfSSL 14:167253f4e170 25190 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25191 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25192 "mulq 232(%[a])\n\t"
wolfSSL 14:167253f4e170 25193 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25194 "movq %%r8, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 25195 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25196 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25197 "# A[30] * B\n\t"
wolfSSL 14:167253f4e170 25198 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25199 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25200 "mulq 240(%[a])\n\t"
wolfSSL 14:167253f4e170 25201 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25202 "movq %%rbx, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 25203 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25204 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25205 "# A[31] * B\n\t"
wolfSSL 14:167253f4e170 25206 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25207 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25208 "mulq 248(%[a])\n\t"
wolfSSL 14:167253f4e170 25209 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25210 "movq %%rcx, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 25211 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25212 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25213 "# A[32] * B\n\t"
wolfSSL 14:167253f4e170 25214 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25215 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25216 "mulq 256(%[a])\n\t"
wolfSSL 14:167253f4e170 25217 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25218 "movq %%r8, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 25219 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25220 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25221 "# A[33] * B\n\t"
wolfSSL 14:167253f4e170 25222 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25223 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25224 "mulq 264(%[a])\n\t"
wolfSSL 14:167253f4e170 25225 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25226 "movq %%rbx, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 25227 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25228 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25229 "# A[34] * B\n\t"
wolfSSL 14:167253f4e170 25230 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25231 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25232 "mulq 272(%[a])\n\t"
wolfSSL 14:167253f4e170 25233 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25234 "movq %%rcx, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 25235 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25236 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25237 "# A[35] * B\n\t"
wolfSSL 14:167253f4e170 25238 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25239 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25240 "mulq 280(%[a])\n\t"
wolfSSL 14:167253f4e170 25241 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25242 "movq %%r8, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 25243 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25244 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25245 "# A[36] * B\n\t"
wolfSSL 14:167253f4e170 25246 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25247 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25248 "mulq 288(%[a])\n\t"
wolfSSL 14:167253f4e170 25249 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25250 "movq %%rbx, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 25251 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25252 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25253 "# A[37] * B\n\t"
wolfSSL 14:167253f4e170 25254 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25255 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25256 "mulq 296(%[a])\n\t"
wolfSSL 14:167253f4e170 25257 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25258 "movq %%rcx, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 25259 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25260 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25261 "# A[38] * B\n\t"
wolfSSL 14:167253f4e170 25262 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25263 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25264 "mulq 304(%[a])\n\t"
wolfSSL 14:167253f4e170 25265 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25266 "movq %%r8, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 25267 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25268 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25269 "# A[39] * B\n\t"
wolfSSL 14:167253f4e170 25270 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25271 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25272 "mulq 312(%[a])\n\t"
wolfSSL 14:167253f4e170 25273 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25274 "movq %%rbx, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 25275 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25276 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25277 "# A[40] * B\n\t"
wolfSSL 14:167253f4e170 25278 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25279 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25280 "mulq 320(%[a])\n\t"
wolfSSL 14:167253f4e170 25281 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25282 "movq %%rcx, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 25283 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25284 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25285 "# A[41] * B\n\t"
wolfSSL 14:167253f4e170 25286 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25287 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25288 "mulq 328(%[a])\n\t"
wolfSSL 14:167253f4e170 25289 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25290 "movq %%r8, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 25291 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25292 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25293 "# A[42] * B\n\t"
wolfSSL 14:167253f4e170 25294 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25295 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25296 "mulq 336(%[a])\n\t"
wolfSSL 14:167253f4e170 25297 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25298 "movq %%rbx, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 25299 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25300 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25301 "# A[43] * B\n\t"
wolfSSL 14:167253f4e170 25302 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25303 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25304 "mulq 344(%[a])\n\t"
wolfSSL 14:167253f4e170 25305 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25306 "movq %%rcx, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 25307 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25308 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25309 "# A[44] * B\n\t"
wolfSSL 14:167253f4e170 25310 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25311 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25312 "mulq 352(%[a])\n\t"
wolfSSL 14:167253f4e170 25313 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25314 "movq %%r8, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 25315 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25316 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 25317 "# A[45] * B\n\t"
wolfSSL 14:167253f4e170 25318 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25319 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 25320 "mulq 360(%[a])\n\t"
wolfSSL 14:167253f4e170 25321 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 25322 "movq %%rbx, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 25323 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25324 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 25325 "# A[46] * B\n\t"
wolfSSL 14:167253f4e170 25326 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25327 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25328 "mulq 368(%[a])\n\t"
wolfSSL 14:167253f4e170 25329 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25330 "movq %%rcx, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 25331 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25332 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 25333 "# A[47] * B\n\t"
wolfSSL 14:167253f4e170 25334 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 25335 "mulq 376(%[a])\n\t"
wolfSSL 14:167253f4e170 25336 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25337 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25338 "movq %%r8, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 25339 "movq %%rbx, 384(%[r])\n\t"
wolfSSL 14:167253f4e170 25340 :
wolfSSL 14:167253f4e170 25341 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 25342 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 25343 );
wolfSSL 14:167253f4e170 25344 }
wolfSSL 14:167253f4e170 25345
wolfSSL 14:167253f4e170 25346 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 25347 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 25348 *
wolfSSL 14:167253f4e170 25349 * r A single precision integer.
wolfSSL 14:167253f4e170 25350 * a A single precision integer.
wolfSSL 14:167253f4e170 25351 * b A single precision digit.
wolfSSL 14:167253f4e170 25352 */
wolfSSL 14:167253f4e170 25353 SP_NOINLINE static void sp_3072_mul_d_avx2_48(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 25354 const sp_digit b)
wolfSSL 14:167253f4e170 25355 {
wolfSSL 14:167253f4e170 25356 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 25357 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 25358 "movq %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 25359 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 25360 "mulxq (%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 25361 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 25362 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 25363 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25364 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25365 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25366 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 25367 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25368 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 25369 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25370 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25371 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25372 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 25373 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25374 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 25375 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25376 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25377 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25378 "movq %%r9, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 25379 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25380 "# A[4] * B\n\t"
wolfSSL 14:167253f4e170 25381 "mulxq 32(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25382 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25383 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25384 "movq %%r8, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 25385 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25386 "# A[5] * B\n\t"
wolfSSL 14:167253f4e170 25387 "mulxq 40(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25388 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25389 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25390 "movq %%r9, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 25391 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25392 "# A[6] * B\n\t"
wolfSSL 14:167253f4e170 25393 "mulxq 48(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25394 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25395 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25396 "movq %%r8, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 25397 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25398 "# A[7] * B\n\t"
wolfSSL 14:167253f4e170 25399 "mulxq 56(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25400 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25401 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25402 "movq %%r9, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 25403 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25404 "# A[8] * B\n\t"
wolfSSL 14:167253f4e170 25405 "mulxq 64(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25406 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25407 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25408 "movq %%r8, 64(%[r])\n\t"
wolfSSL 14:167253f4e170 25409 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25410 "# A[9] * B\n\t"
wolfSSL 14:167253f4e170 25411 "mulxq 72(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25412 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25413 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25414 "movq %%r9, 72(%[r])\n\t"
wolfSSL 14:167253f4e170 25415 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25416 "# A[10] * B\n\t"
wolfSSL 14:167253f4e170 25417 "mulxq 80(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25418 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25419 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25420 "movq %%r8, 80(%[r])\n\t"
wolfSSL 14:167253f4e170 25421 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25422 "# A[11] * B\n\t"
wolfSSL 14:167253f4e170 25423 "mulxq 88(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25424 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25425 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25426 "movq %%r9, 88(%[r])\n\t"
wolfSSL 14:167253f4e170 25427 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25428 "# A[12] * B\n\t"
wolfSSL 14:167253f4e170 25429 "mulxq 96(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25430 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25431 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25432 "movq %%r8, 96(%[r])\n\t"
wolfSSL 14:167253f4e170 25433 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25434 "# A[13] * B\n\t"
wolfSSL 14:167253f4e170 25435 "mulxq 104(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25436 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25437 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25438 "movq %%r9, 104(%[r])\n\t"
wolfSSL 14:167253f4e170 25439 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25440 "# A[14] * B\n\t"
wolfSSL 14:167253f4e170 25441 "mulxq 112(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25442 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25443 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25444 "movq %%r8, 112(%[r])\n\t"
wolfSSL 14:167253f4e170 25445 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25446 "# A[15] * B\n\t"
wolfSSL 14:167253f4e170 25447 "mulxq 120(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25448 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25449 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25450 "movq %%r9, 120(%[r])\n\t"
wolfSSL 14:167253f4e170 25451 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25452 "# A[16] * B\n\t"
wolfSSL 14:167253f4e170 25453 "mulxq 128(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25454 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25455 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25456 "movq %%r8, 128(%[r])\n\t"
wolfSSL 14:167253f4e170 25457 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25458 "# A[17] * B\n\t"
wolfSSL 14:167253f4e170 25459 "mulxq 136(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25460 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25461 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25462 "movq %%r9, 136(%[r])\n\t"
wolfSSL 14:167253f4e170 25463 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25464 "# A[18] * B\n\t"
wolfSSL 14:167253f4e170 25465 "mulxq 144(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25466 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25467 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25468 "movq %%r8, 144(%[r])\n\t"
wolfSSL 14:167253f4e170 25469 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25470 "# A[19] * B\n\t"
wolfSSL 14:167253f4e170 25471 "mulxq 152(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25472 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25473 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25474 "movq %%r9, 152(%[r])\n\t"
wolfSSL 14:167253f4e170 25475 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25476 "# A[20] * B\n\t"
wolfSSL 14:167253f4e170 25477 "mulxq 160(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25478 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25479 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25480 "movq %%r8, 160(%[r])\n\t"
wolfSSL 14:167253f4e170 25481 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25482 "# A[21] * B\n\t"
wolfSSL 14:167253f4e170 25483 "mulxq 168(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25484 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25485 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25486 "movq %%r9, 168(%[r])\n\t"
wolfSSL 14:167253f4e170 25487 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25488 "# A[22] * B\n\t"
wolfSSL 14:167253f4e170 25489 "mulxq 176(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25490 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25491 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25492 "movq %%r8, 176(%[r])\n\t"
wolfSSL 14:167253f4e170 25493 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25494 "# A[23] * B\n\t"
wolfSSL 14:167253f4e170 25495 "mulxq 184(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25496 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25497 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25498 "movq %%r9, 184(%[r])\n\t"
wolfSSL 14:167253f4e170 25499 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25500 "# A[24] * B\n\t"
wolfSSL 14:167253f4e170 25501 "mulxq 192(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25502 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25503 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25504 "movq %%r8, 192(%[r])\n\t"
wolfSSL 14:167253f4e170 25505 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25506 "# A[25] * B\n\t"
wolfSSL 14:167253f4e170 25507 "mulxq 200(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25508 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25509 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25510 "movq %%r9, 200(%[r])\n\t"
wolfSSL 14:167253f4e170 25511 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25512 "# A[26] * B\n\t"
wolfSSL 14:167253f4e170 25513 "mulxq 208(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25514 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25515 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25516 "movq %%r8, 208(%[r])\n\t"
wolfSSL 14:167253f4e170 25517 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25518 "# A[27] * B\n\t"
wolfSSL 14:167253f4e170 25519 "mulxq 216(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25520 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25521 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25522 "movq %%r9, 216(%[r])\n\t"
wolfSSL 14:167253f4e170 25523 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25524 "# A[28] * B\n\t"
wolfSSL 14:167253f4e170 25525 "mulxq 224(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25526 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25527 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25528 "movq %%r8, 224(%[r])\n\t"
wolfSSL 14:167253f4e170 25529 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25530 "# A[29] * B\n\t"
wolfSSL 14:167253f4e170 25531 "mulxq 232(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25532 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25533 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25534 "movq %%r9, 232(%[r])\n\t"
wolfSSL 14:167253f4e170 25535 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25536 "# A[30] * B\n\t"
wolfSSL 14:167253f4e170 25537 "mulxq 240(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25538 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25539 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25540 "movq %%r8, 240(%[r])\n\t"
wolfSSL 14:167253f4e170 25541 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25542 "# A[31] * B\n\t"
wolfSSL 14:167253f4e170 25543 "mulxq 248(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25544 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25545 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25546 "movq %%r9, 248(%[r])\n\t"
wolfSSL 14:167253f4e170 25547 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25548 "# A[32] * B\n\t"
wolfSSL 14:167253f4e170 25549 "mulxq 256(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25550 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25551 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25552 "movq %%r8, 256(%[r])\n\t"
wolfSSL 14:167253f4e170 25553 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25554 "# A[33] * B\n\t"
wolfSSL 14:167253f4e170 25555 "mulxq 264(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25556 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25557 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25558 "movq %%r9, 264(%[r])\n\t"
wolfSSL 14:167253f4e170 25559 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25560 "# A[34] * B\n\t"
wolfSSL 14:167253f4e170 25561 "mulxq 272(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25562 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25563 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25564 "movq %%r8, 272(%[r])\n\t"
wolfSSL 14:167253f4e170 25565 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25566 "# A[35] * B\n\t"
wolfSSL 14:167253f4e170 25567 "mulxq 280(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25568 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25569 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25570 "movq %%r9, 280(%[r])\n\t"
wolfSSL 14:167253f4e170 25571 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25572 "# A[36] * B\n\t"
wolfSSL 14:167253f4e170 25573 "mulxq 288(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25574 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25575 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25576 "movq %%r8, 288(%[r])\n\t"
wolfSSL 14:167253f4e170 25577 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25578 "# A[37] * B\n\t"
wolfSSL 14:167253f4e170 25579 "mulxq 296(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25580 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25581 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25582 "movq %%r9, 296(%[r])\n\t"
wolfSSL 14:167253f4e170 25583 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25584 "# A[38] * B\n\t"
wolfSSL 14:167253f4e170 25585 "mulxq 304(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25586 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25587 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25588 "movq %%r8, 304(%[r])\n\t"
wolfSSL 14:167253f4e170 25589 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25590 "# A[39] * B\n\t"
wolfSSL 14:167253f4e170 25591 "mulxq 312(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25592 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25593 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25594 "movq %%r9, 312(%[r])\n\t"
wolfSSL 14:167253f4e170 25595 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25596 "# A[40] * B\n\t"
wolfSSL 14:167253f4e170 25597 "mulxq 320(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25598 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25599 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25600 "movq %%r8, 320(%[r])\n\t"
wolfSSL 14:167253f4e170 25601 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25602 "# A[41] * B\n\t"
wolfSSL 14:167253f4e170 25603 "mulxq 328(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25604 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25605 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25606 "movq %%r9, 328(%[r])\n\t"
wolfSSL 14:167253f4e170 25607 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25608 "# A[42] * B\n\t"
wolfSSL 14:167253f4e170 25609 "mulxq 336(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25610 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25611 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25612 "movq %%r8, 336(%[r])\n\t"
wolfSSL 14:167253f4e170 25613 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25614 "# A[43] * B\n\t"
wolfSSL 14:167253f4e170 25615 "mulxq 344(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25616 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25617 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25618 "movq %%r9, 344(%[r])\n\t"
wolfSSL 14:167253f4e170 25619 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25620 "# A[44] * B\n\t"
wolfSSL 14:167253f4e170 25621 "mulxq 352(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25622 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25623 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25624 "movq %%r8, 352(%[r])\n\t"
wolfSSL 14:167253f4e170 25625 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25626 "# A[45] * B\n\t"
wolfSSL 14:167253f4e170 25627 "mulxq 360(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25628 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25629 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25630 "movq %%r9, 360(%[r])\n\t"
wolfSSL 14:167253f4e170 25631 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25632 "# A[46] * B\n\t"
wolfSSL 14:167253f4e170 25633 "mulxq 368(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25634 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 25635 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 25636 "movq %%r8, 368(%[r])\n\t"
wolfSSL 14:167253f4e170 25637 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 25638 "# A[47] * B\n\t"
wolfSSL 14:167253f4e170 25639 "mulxq 376(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 25640 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25641 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 25642 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 25643 "adcxq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 25644 "movq %%r9, 376(%[r])\n\t"
wolfSSL 14:167253f4e170 25645 "movq %%r8, 384(%[r])\n\t"
wolfSSL 14:167253f4e170 25646 :
wolfSSL 14:167253f4e170 25647 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 25648 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10"
wolfSSL 14:167253f4e170 25649 );
wolfSSL 14:167253f4e170 25650 }
wolfSSL 14:167253f4e170 25651 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 25652
wolfSSL 14:167253f4e170 25653 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
wolfSSL 14:167253f4e170 25654 *
wolfSSL 14:167253f4e170 25655 * d1 The high order half of the number to divide.
wolfSSL 14:167253f4e170 25656 * d0 The low order half of the number to divide.
wolfSSL 14:167253f4e170 25657 * div The dividend.
wolfSSL 14:167253f4e170 25658 * returns the result of the division.
wolfSSL 14:167253f4e170 25659 */
wolfSSL 14:167253f4e170 25660 static sp_digit div_3072_word_48(sp_digit d1, sp_digit d0, sp_digit div)
wolfSSL 14:167253f4e170 25661 {
wolfSSL 14:167253f4e170 25662 sp_digit r;
wolfSSL 14:167253f4e170 25663
wolfSSL 14:167253f4e170 25664 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 25665 "movq %[d0], %%rax\n\t"
wolfSSL 14:167253f4e170 25666 "movq %[d1], %%rdx\n\t"
wolfSSL 14:167253f4e170 25667 "divq %[div]\n\t"
wolfSSL 14:167253f4e170 25668 "movq %%rax, %[r]\n\t"
wolfSSL 14:167253f4e170 25669 : [r] "=r" (r)
wolfSSL 14:167253f4e170 25670 : [d1] "r" (d1), [d0] "r" (d0), [div] "r" (div)
wolfSSL 14:167253f4e170 25671 : "rax", "rdx"
wolfSSL 14:167253f4e170 25672 );
wolfSSL 14:167253f4e170 25673
wolfSSL 14:167253f4e170 25674 return r;
wolfSSL 14:167253f4e170 25675 }
wolfSSL 14:167253f4e170 25676
wolfSSL 14:167253f4e170 25677 /* AND m into each word of a and store in r.
wolfSSL 14:167253f4e170 25678 *
wolfSSL 14:167253f4e170 25679 * r A single precision integer.
wolfSSL 14:167253f4e170 25680 * a A single precision integer.
wolfSSL 14:167253f4e170 25681 * m Mask to AND against each digit.
wolfSSL 14:167253f4e170 25682 */
wolfSSL 14:167253f4e170 25683 static void sp_3072_mask_48(sp_digit* r, sp_digit* a, sp_digit m)
wolfSSL 14:167253f4e170 25684 {
wolfSSL 14:167253f4e170 25685 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 25686 int i;
wolfSSL 14:167253f4e170 25687
wolfSSL 14:167253f4e170 25688 for (i=0; i<48; i++)
wolfSSL 14:167253f4e170 25689 r[i] = a[i] & m;
wolfSSL 14:167253f4e170 25690 #else
wolfSSL 14:167253f4e170 25691 int i;
wolfSSL 14:167253f4e170 25692
wolfSSL 14:167253f4e170 25693 for (i = 0; i < 48; i += 8) {
wolfSSL 14:167253f4e170 25694 r[i+0] = a[i+0] & m;
wolfSSL 14:167253f4e170 25695 r[i+1] = a[i+1] & m;
wolfSSL 14:167253f4e170 25696 r[i+2] = a[i+2] & m;
wolfSSL 14:167253f4e170 25697 r[i+3] = a[i+3] & m;
wolfSSL 14:167253f4e170 25698 r[i+4] = a[i+4] & m;
wolfSSL 14:167253f4e170 25699 r[i+5] = a[i+5] & m;
wolfSSL 14:167253f4e170 25700 r[i+6] = a[i+6] & m;
wolfSSL 14:167253f4e170 25701 r[i+7] = a[i+7] & m;
wolfSSL 14:167253f4e170 25702 }
wolfSSL 14:167253f4e170 25703 #endif
wolfSSL 14:167253f4e170 25704 }
wolfSSL 14:167253f4e170 25705
wolfSSL 14:167253f4e170 25706 /* Compare a with b in constant time.
wolfSSL 14:167253f4e170 25707 *
wolfSSL 14:167253f4e170 25708 * a A single precision integer.
wolfSSL 14:167253f4e170 25709 * b A single precision integer.
wolfSSL 14:167253f4e170 25710 * return -ve, 0 or +ve if a is less than, equal to or greater than b
wolfSSL 14:167253f4e170 25711 * respectively.
wolfSSL 14:167253f4e170 25712 */
wolfSSL 14:167253f4e170 25713 static int64_t sp_3072_cmp_48(sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 25714 {
wolfSSL 14:167253f4e170 25715 sp_digit r = -1;
wolfSSL 14:167253f4e170 25716 sp_digit one = 1;
wolfSSL 14:167253f4e170 25717
wolfSSL 14:167253f4e170 25718 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 25719 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 25720 "movq $-1, %%rdx\n\t"
wolfSSL 14:167253f4e170 25721 "movq 376(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25722 "movq 376(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25723 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25724 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25725 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25726 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25727 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25728 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25729 "movq 368(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25730 "movq 368(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25731 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25732 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25733 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25734 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25735 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25736 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25737 "movq 360(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25738 "movq 360(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25739 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25740 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25741 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25742 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25743 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25744 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25745 "movq 352(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25746 "movq 352(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25747 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25748 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25749 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25750 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25751 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25752 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25753 "movq 344(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25754 "movq 344(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25755 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25756 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25757 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25758 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25759 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25760 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25761 "movq 336(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25762 "movq 336(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25763 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25764 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25765 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25766 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25767 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25768 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25769 "movq 328(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25770 "movq 328(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25771 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25772 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25773 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25774 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25775 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25776 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25777 "movq 320(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25778 "movq 320(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25779 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25780 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25781 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25782 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25783 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25784 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25785 "movq 312(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25786 "movq 312(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25787 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25788 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25789 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25790 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25791 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25792 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25793 "movq 304(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25794 "movq 304(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25795 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25796 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25797 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25798 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25799 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25800 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25801 "movq 296(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25802 "movq 296(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25803 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25804 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25805 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25806 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25807 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25808 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25809 "movq 288(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25810 "movq 288(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25811 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25812 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25813 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25814 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25815 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25816 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25817 "movq 280(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25818 "movq 280(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25819 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25820 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25821 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25822 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25823 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25824 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25825 "movq 272(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25826 "movq 272(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25827 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25828 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25829 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25830 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25831 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25832 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25833 "movq 264(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25834 "movq 264(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25835 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25836 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25837 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25838 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25839 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25840 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25841 "movq 256(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25842 "movq 256(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25843 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25844 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25845 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25846 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25847 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25848 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25849 "movq 248(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25850 "movq 248(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25851 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25852 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25853 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25854 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25855 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25856 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25857 "movq 240(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25858 "movq 240(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25859 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25860 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25861 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25862 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25863 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25864 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25865 "movq 232(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25866 "movq 232(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25867 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25868 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25869 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25870 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25871 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25872 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25873 "movq 224(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25874 "movq 224(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25875 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25876 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25877 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25878 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25879 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25880 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25881 "movq 216(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25882 "movq 216(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25883 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25884 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25885 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25886 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25887 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25888 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25889 "movq 208(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25890 "movq 208(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25891 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25892 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25893 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25894 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25895 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25896 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25897 "movq 200(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25898 "movq 200(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25899 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25900 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25901 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25902 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25903 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25904 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25905 "movq 192(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25906 "movq 192(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25907 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25908 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25909 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25910 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25911 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25912 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25913 "movq 184(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25914 "movq 184(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25915 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25916 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25917 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25918 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25919 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25920 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25921 "movq 176(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25922 "movq 176(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25923 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25924 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25925 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25926 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25927 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25928 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25929 "movq 168(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25930 "movq 168(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25931 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25932 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25933 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25934 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25935 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25936 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25937 "movq 160(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25938 "movq 160(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25939 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25940 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25941 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25942 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25943 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25944 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25945 "movq 152(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25946 "movq 152(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25947 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25948 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25949 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25950 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25951 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25952 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25953 "movq 144(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25954 "movq 144(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25955 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25956 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25957 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25958 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25959 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25960 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25961 "movq 136(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25962 "movq 136(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25963 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25964 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25965 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25966 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25967 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25968 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25969 "movq 128(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25970 "movq 128(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25971 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25972 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25973 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25974 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25975 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25976 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25977 "movq 120(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25978 "movq 120(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25979 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25980 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25981 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25982 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25983 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25984 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25985 "movq 112(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25986 "movq 112(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25987 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25988 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25989 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25990 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25991 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 25992 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 25993 "movq 104(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 25994 "movq 104(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 25995 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 25996 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 25997 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 25998 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 25999 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26000 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26001 "movq 96(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26002 "movq 96(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26003 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26004 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26005 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26006 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26007 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26008 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26009 "movq 88(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26010 "movq 88(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26011 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26012 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26013 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26014 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26015 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26016 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26017 "movq 80(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26018 "movq 80(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26019 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26020 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26021 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26022 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26023 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26024 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26025 "movq 72(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26026 "movq 72(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26027 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26028 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26029 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26030 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26031 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26032 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26033 "movq 64(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26034 "movq 64(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26035 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26036 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26037 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26038 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26039 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26040 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26041 "movq 56(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26042 "movq 56(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26043 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26044 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26045 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26046 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26047 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26048 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26049 "movq 48(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26050 "movq 48(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26051 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26052 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26053 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26054 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26055 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26056 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26057 "movq 40(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26058 "movq 40(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26059 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26060 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26061 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26062 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26063 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26064 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26065 "movq 32(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26066 "movq 32(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26067 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26068 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26069 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26070 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26071 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26072 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26073 "movq 24(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26074 "movq 24(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26075 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26076 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26077 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26078 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26079 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26080 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26081 "movq 16(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26082 "movq 16(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26083 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26084 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26085 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26086 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26087 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26088 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26089 "movq 8(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26090 "movq 8(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26091 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26092 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26093 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26094 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26095 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26096 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26097 "movq 0(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 26098 "movq 0(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 26099 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 26100 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26101 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 26102 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 26103 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26104 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 26105 "xorq %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 26106 : [r] "+r" (r)
wolfSSL 14:167253f4e170 26107 : [a] "r" (a), [b] "r" (b), [one] "r" (one)
wolfSSL 14:167253f4e170 26108 : "rax", "rdx", "rcx", "rbx", "r8"
wolfSSL 14:167253f4e170 26109 );
wolfSSL 14:167253f4e170 26110
wolfSSL 14:167253f4e170 26111 return r;
wolfSSL 14:167253f4e170 26112 }
wolfSSL 14:167253f4e170 26113
wolfSSL 14:167253f4e170 26114 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 26115 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 26116 *
wolfSSL 14:167253f4e170 26117 * a Nmber to be divided.
wolfSSL 14:167253f4e170 26118 * d Number to divide with.
wolfSSL 14:167253f4e170 26119 * m Multiplier result.
wolfSSL 14:167253f4e170 26120 * r Remainder from the division.
wolfSSL 14:167253f4e170 26121 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 26122 */
wolfSSL 14:167253f4e170 26123 static WC_INLINE int sp_3072_div_48(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 26124 sp_digit* r)
wolfSSL 14:167253f4e170 26125 {
wolfSSL 14:167253f4e170 26126 sp_digit t1[96], t2[49];
wolfSSL 14:167253f4e170 26127 sp_digit div, r1;
wolfSSL 14:167253f4e170 26128 int i;
wolfSSL 14:167253f4e170 26129 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26130 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 26131 #endif
wolfSSL 14:167253f4e170 26132
wolfSSL 14:167253f4e170 26133 (void)m;
wolfSSL 14:167253f4e170 26134
wolfSSL 14:167253f4e170 26135 div = d[47];
wolfSSL 14:167253f4e170 26136 XMEMCPY(t1, a, sizeof(*t1) * 2 * 48);
wolfSSL 14:167253f4e170 26137 for (i=47; i>=0; i--) {
wolfSSL 14:167253f4e170 26138 r1 = div_3072_word_48(t1[48 + i], t1[48 + i - 1], div);
wolfSSL 14:167253f4e170 26139
wolfSSL 14:167253f4e170 26140 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26141 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 26142 sp_3072_mul_d_avx2_48(t2, d, r1);
wolfSSL 14:167253f4e170 26143 else
wolfSSL 14:167253f4e170 26144 #endif
wolfSSL 14:167253f4e170 26145 sp_3072_mul_d_48(t2, d, r1);
wolfSSL 14:167253f4e170 26146 t1[48 + i] += sp_3072_sub_in_place_48(&t1[i], t2);
wolfSSL 14:167253f4e170 26147 t1[48 + i] -= t2[48];
wolfSSL 14:167253f4e170 26148 sp_3072_mask_48(t2, d, t1[48 + i]);
wolfSSL 14:167253f4e170 26149 t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 26150 sp_3072_mask_48(t2, d, t1[48 + i]);
wolfSSL 14:167253f4e170 26151 t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 26152 }
wolfSSL 14:167253f4e170 26153
wolfSSL 14:167253f4e170 26154 r1 = sp_3072_cmp_48(t1, d) >= 0;
wolfSSL 14:167253f4e170 26155 sp_3072_cond_sub_48(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 26156
wolfSSL 14:167253f4e170 26157 return MP_OKAY;
wolfSSL 14:167253f4e170 26158 }
wolfSSL 14:167253f4e170 26159
wolfSSL 14:167253f4e170 26160 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 26161 *
wolfSSL 14:167253f4e170 26162 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 26163 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 26164 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 26165 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 26166 */
wolfSSL 14:167253f4e170 26167 static WC_INLINE int sp_3072_mod_48(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 26168 {
wolfSSL 14:167253f4e170 26169 return sp_3072_div_48(a, m, NULL, r);
wolfSSL 14:167253f4e170 26170 }
wolfSSL 14:167253f4e170 26171
wolfSSL 14:167253f4e170 26172 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 26173 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 26174 *
wolfSSL 14:167253f4e170 26175 * a Nmber to be divided.
wolfSSL 14:167253f4e170 26176 * d Number to divide with.
wolfSSL 14:167253f4e170 26177 * m Multiplier result.
wolfSSL 14:167253f4e170 26178 * r Remainder from the division.
wolfSSL 14:167253f4e170 26179 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 26180 */
wolfSSL 14:167253f4e170 26181 static WC_INLINE int sp_3072_div_48_cond(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 26182 sp_digit* r)
wolfSSL 14:167253f4e170 26183 {
wolfSSL 14:167253f4e170 26184 sp_digit t1[96], t2[49];
wolfSSL 14:167253f4e170 26185 sp_digit div, r1;
wolfSSL 14:167253f4e170 26186 int i;
wolfSSL 14:167253f4e170 26187 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26188 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 26189 #endif
wolfSSL 14:167253f4e170 26190
wolfSSL 14:167253f4e170 26191 (void)m;
wolfSSL 14:167253f4e170 26192
wolfSSL 14:167253f4e170 26193 div = d[47];
wolfSSL 14:167253f4e170 26194 XMEMCPY(t1, a, sizeof(*t1) * 2 * 48);
wolfSSL 14:167253f4e170 26195 for (i=47; i>=0; i--) {
wolfSSL 14:167253f4e170 26196 r1 = div_3072_word_48(t1[48 + i], t1[48 + i - 1], div);
wolfSSL 14:167253f4e170 26197
wolfSSL 14:167253f4e170 26198 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26199 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 26200 sp_3072_mul_d_avx2_48(t2, d, r1);
wolfSSL 14:167253f4e170 26201 else
wolfSSL 14:167253f4e170 26202 #endif
wolfSSL 14:167253f4e170 26203 sp_3072_mul_d_48(t2, d, r1);
wolfSSL 14:167253f4e170 26204 t1[48 + i] += sp_3072_sub_in_place_48(&t1[i], t2);
wolfSSL 14:167253f4e170 26205 t1[48 + i] -= t2[48];
wolfSSL 14:167253f4e170 26206 if (t1[48 + i] != 0) {
wolfSSL 14:167253f4e170 26207 t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], d);
wolfSSL 14:167253f4e170 26208 if (t1[48 + i] != 0)
wolfSSL 14:167253f4e170 26209 t1[48 + i] += sp_3072_add_48(&t1[i], &t1[i], d);
wolfSSL 14:167253f4e170 26210 }
wolfSSL 14:167253f4e170 26211 }
wolfSSL 14:167253f4e170 26212
wolfSSL 14:167253f4e170 26213 r1 = sp_3072_cmp_48(t1, d) >= 0;
wolfSSL 14:167253f4e170 26214 sp_3072_cond_sub_48(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 26215
wolfSSL 14:167253f4e170 26216 return MP_OKAY;
wolfSSL 14:167253f4e170 26217 }
wolfSSL 14:167253f4e170 26218
wolfSSL 14:167253f4e170 26219 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 26220 *
wolfSSL 14:167253f4e170 26221 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 26222 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 26223 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 26224 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 26225 */
wolfSSL 14:167253f4e170 26226 static WC_INLINE int sp_3072_mod_48_cond(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 26227 {
wolfSSL 14:167253f4e170 26228 return sp_3072_div_48_cond(a, m, NULL, r);
wolfSSL 14:167253f4e170 26229 }
wolfSSL 14:167253f4e170 26230
wolfSSL 14:167253f4e170 26231 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH)
wolfSSL 14:167253f4e170 26232 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 26233 *
wolfSSL 14:167253f4e170 26234 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 26235 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 26236 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 26237 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 26238 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 26239 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 26240 */
wolfSSL 14:167253f4e170 26241 static int sp_3072_mod_exp_48(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 26242 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 26243 {
wolfSSL 14:167253f4e170 26244 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 26245 sp_digit t[32][96];
wolfSSL 14:167253f4e170 26246 #else
wolfSSL 14:167253f4e170 26247 sp_digit* t[32];
wolfSSL 14:167253f4e170 26248 sp_digit* td;
wolfSSL 14:167253f4e170 26249 #endif
wolfSSL 14:167253f4e170 26250 sp_digit* norm;
wolfSSL 14:167253f4e170 26251 sp_digit mp = 1;
wolfSSL 14:167253f4e170 26252 sp_digit n;
wolfSSL 14:167253f4e170 26253 sp_digit mask;
wolfSSL 14:167253f4e170 26254 int i;
wolfSSL 14:167253f4e170 26255 int c, y;
wolfSSL 14:167253f4e170 26256 int err = MP_OKAY;
wolfSSL 14:167253f4e170 26257
wolfSSL 14:167253f4e170 26258 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 26259 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 96, NULL,
wolfSSL 14:167253f4e170 26260 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 26261 if (td == NULL)
wolfSSL 14:167253f4e170 26262 err = MEMORY_E;
wolfSSL 14:167253f4e170 26263
wolfSSL 14:167253f4e170 26264 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26265 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 26266 t[i] = td + i * 96;
wolfSSL 14:167253f4e170 26267 norm = t[0];
wolfSSL 14:167253f4e170 26268 }
wolfSSL 14:167253f4e170 26269 #else
wolfSSL 14:167253f4e170 26270 norm = t[0];
wolfSSL 14:167253f4e170 26271 #endif
wolfSSL 14:167253f4e170 26272
wolfSSL 14:167253f4e170 26273 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26274 sp_3072_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 26275 sp_3072_mont_norm_48(norm, m);
wolfSSL 14:167253f4e170 26276
wolfSSL 14:167253f4e170 26277 XMEMSET(t[1], 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26278 if (reduceA) {
wolfSSL 14:167253f4e170 26279 err = sp_3072_mod_48(t[1] + 48, a, m);
wolfSSL 14:167253f4e170 26280 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 26281 err = sp_3072_mod_48(t[1], t[1], m);
wolfSSL 14:167253f4e170 26282 }
wolfSSL 14:167253f4e170 26283 else {
wolfSSL 14:167253f4e170 26284 XMEMCPY(t[1] + 48, a, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26285 err = sp_3072_mod_48(t[1], t[1], m);
wolfSSL 14:167253f4e170 26286 }
wolfSSL 14:167253f4e170 26287 }
wolfSSL 14:167253f4e170 26288
wolfSSL 14:167253f4e170 26289 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26290 sp_3072_mont_sqr_48(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 26291 sp_3072_mont_mul_48(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 26292 sp_3072_mont_sqr_48(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 26293 sp_3072_mont_mul_48(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 26294 sp_3072_mont_sqr_48(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 26295 sp_3072_mont_mul_48(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 26296 sp_3072_mont_sqr_48(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 26297 sp_3072_mont_mul_48(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 26298 sp_3072_mont_sqr_48(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 26299 sp_3072_mont_mul_48(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 26300 sp_3072_mont_sqr_48(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 26301 sp_3072_mont_mul_48(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 26302 sp_3072_mont_sqr_48(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 26303 sp_3072_mont_mul_48(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 26304 sp_3072_mont_sqr_48(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 26305 sp_3072_mont_mul_48(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 26306 sp_3072_mont_sqr_48(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 26307 sp_3072_mont_mul_48(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 26308 sp_3072_mont_sqr_48(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 26309 sp_3072_mont_mul_48(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 26310 sp_3072_mont_sqr_48(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 26311 sp_3072_mont_mul_48(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 26312 sp_3072_mont_sqr_48(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 26313 sp_3072_mont_mul_48(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 26314 sp_3072_mont_sqr_48(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 26315 sp_3072_mont_mul_48(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 26316 sp_3072_mont_sqr_48(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 26317 sp_3072_mont_mul_48(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 26318 sp_3072_mont_sqr_48(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 26319 sp_3072_mont_mul_48(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 26320
wolfSSL 14:167253f4e170 26321 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 26322 n = e[i--];
wolfSSL 14:167253f4e170 26323 y = n >> 59;
wolfSSL 14:167253f4e170 26324 n <<= 5;
wolfSSL 14:167253f4e170 26325 c = 59;
wolfSSL 14:167253f4e170 26326 XMEMCPY(r, t[y], sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26327 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 26328 if (c == 0) {
wolfSSL 14:167253f4e170 26329 n = e[i--];
wolfSSL 14:167253f4e170 26330 y = n >> 59;
wolfSSL 14:167253f4e170 26331 n <<= 5;
wolfSSL 14:167253f4e170 26332 c = 59;
wolfSSL 14:167253f4e170 26333 }
wolfSSL 14:167253f4e170 26334 else if (c < 5) {
wolfSSL 14:167253f4e170 26335 y = n >> 59;
wolfSSL 14:167253f4e170 26336 n = e[i--];
wolfSSL 14:167253f4e170 26337 c = 5 - c;
wolfSSL 14:167253f4e170 26338 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 26339 n <<= c;
wolfSSL 14:167253f4e170 26340 c = 64 - c;
wolfSSL 14:167253f4e170 26341 }
wolfSSL 14:167253f4e170 26342 else {
wolfSSL 14:167253f4e170 26343 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 26344 n <<= 5;
wolfSSL 14:167253f4e170 26345 c -= 5;
wolfSSL 14:167253f4e170 26346 }
wolfSSL 14:167253f4e170 26347
wolfSSL 14:167253f4e170 26348 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26349 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26350 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26351 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26352 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26353
wolfSSL 14:167253f4e170 26354 sp_3072_mont_mul_48(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 26355 }
wolfSSL 14:167253f4e170 26356 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 26357 for (; c > 0; c--)
wolfSSL 14:167253f4e170 26358 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26359 sp_3072_mont_mul_48(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 26360
wolfSSL 14:167253f4e170 26361 XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26362 sp_3072_mont_reduce_48(r, m, mp);
wolfSSL 14:167253f4e170 26363
wolfSSL 14:167253f4e170 26364 mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
wolfSSL 14:167253f4e170 26365 sp_3072_cond_sub_48(r, r, m, mask);
wolfSSL 14:167253f4e170 26366 }
wolfSSL 14:167253f4e170 26367
wolfSSL 14:167253f4e170 26368 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 26369 if (td != NULL)
wolfSSL 14:167253f4e170 26370 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 26371 #endif
wolfSSL 14:167253f4e170 26372
wolfSSL 14:167253f4e170 26373 return err;
wolfSSL 14:167253f4e170 26374 }
wolfSSL 14:167253f4e170 26375 #endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 26376
wolfSSL 14:167253f4e170 26377 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26378 /* Reduce the number back to 3072 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 26379 *
wolfSSL 14:167253f4e170 26380 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 26381 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 26382 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 26383 */
wolfSSL 14:167253f4e170 26384 SP_NOINLINE static void sp_3072_mont_reduce_avx2_48(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 26385 sp_digit mp)
wolfSSL 14:167253f4e170 26386 {
wolfSSL 14:167253f4e170 26387 sp_digit ca = 0;
wolfSSL 14:167253f4e170 26388
wolfSSL 14:167253f4e170 26389 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 26390 "# i = 0\n\t"
wolfSSL 14:167253f4e170 26391 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 26392 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 26393 "\nL_mont_loop_avx2_48:\n\t"
wolfSSL 14:167253f4e170 26394 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 26395 "movq %%r12, %%r10\n\t"
wolfSSL 14:167253f4e170 26396 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 26397 "movq %%r12, %%rdx\n\t"
wolfSSL 14:167253f4e170 26398 "mulxq %[mp], %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 26399 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 26400 "mulxq 0(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26401 "movq 8(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 26402 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26403 "adoxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 26404 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 26405 "mulxq 8(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26406 "movq 16(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26407 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 26408 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26409 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 26410 "mulxq 16(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26411 "movq 24(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26412 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26413 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26414 "movq %%r10, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 26415 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 26416 "mulxq 24(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26417 "movq 32(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26418 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26419 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26420 "movq %%r11, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 26421 "# a[i+4] += m[4] * mu\n\t"
wolfSSL 14:167253f4e170 26422 "mulxq 32(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26423 "movq 40(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26424 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26425 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26426 "movq %%r10, 32(%[a])\n\t"
wolfSSL 14:167253f4e170 26427 "# a[i+5] += m[5] * mu\n\t"
wolfSSL 14:167253f4e170 26428 "mulxq 40(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26429 "movq 48(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26430 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26431 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26432 "movq %%r11, 40(%[a])\n\t"
wolfSSL 14:167253f4e170 26433 "# a[i+6] += m[6] * mu\n\t"
wolfSSL 14:167253f4e170 26434 "mulxq 48(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26435 "movq 56(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26436 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26437 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26438 "movq %%r10, 48(%[a])\n\t"
wolfSSL 14:167253f4e170 26439 "# a[i+7] += m[7] * mu\n\t"
wolfSSL 14:167253f4e170 26440 "mulxq 56(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26441 "movq 64(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26442 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26443 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26444 "movq %%r11, 56(%[a])\n\t"
wolfSSL 14:167253f4e170 26445 "# a[i+8] += m[8] * mu\n\t"
wolfSSL 14:167253f4e170 26446 "mulxq 64(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26447 "movq 72(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26448 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26449 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26450 "movq %%r10, 64(%[a])\n\t"
wolfSSL 14:167253f4e170 26451 "# a[i+9] += m[9] * mu\n\t"
wolfSSL 14:167253f4e170 26452 "mulxq 72(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26453 "movq 80(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26454 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26455 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26456 "movq %%r11, 72(%[a])\n\t"
wolfSSL 14:167253f4e170 26457 "# a[i+10] += m[10] * mu\n\t"
wolfSSL 14:167253f4e170 26458 "mulxq 80(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26459 "movq 88(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26460 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26461 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26462 "movq %%r10, 80(%[a])\n\t"
wolfSSL 14:167253f4e170 26463 "# a[i+11] += m[11] * mu\n\t"
wolfSSL 14:167253f4e170 26464 "mulxq 88(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26465 "movq 96(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26466 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26467 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26468 "movq %%r11, 88(%[a])\n\t"
wolfSSL 14:167253f4e170 26469 "# a[i+12] += m[12] * mu\n\t"
wolfSSL 14:167253f4e170 26470 "mulxq 96(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26471 "movq 104(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26472 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26473 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26474 "movq %%r10, 96(%[a])\n\t"
wolfSSL 14:167253f4e170 26475 "# a[i+13] += m[13] * mu\n\t"
wolfSSL 14:167253f4e170 26476 "mulxq 104(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26477 "movq 112(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26478 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26479 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26480 "movq %%r11, 104(%[a])\n\t"
wolfSSL 14:167253f4e170 26481 "# a[i+14] += m[14] * mu\n\t"
wolfSSL 14:167253f4e170 26482 "mulxq 112(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26483 "movq 120(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26484 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26485 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26486 "movq %%r10, 112(%[a])\n\t"
wolfSSL 14:167253f4e170 26487 "# a[i+15] += m[15] * mu\n\t"
wolfSSL 14:167253f4e170 26488 "mulxq 120(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26489 "movq 128(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26490 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26491 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26492 "movq %%r11, 120(%[a])\n\t"
wolfSSL 14:167253f4e170 26493 "# a[i+16] += m[16] * mu\n\t"
wolfSSL 14:167253f4e170 26494 "mulxq 128(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26495 "movq 136(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26496 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26497 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26498 "movq %%r10, 128(%[a])\n\t"
wolfSSL 14:167253f4e170 26499 "# a[i+17] += m[17] * mu\n\t"
wolfSSL 14:167253f4e170 26500 "mulxq 136(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26501 "movq 144(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26502 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26503 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26504 "movq %%r11, 136(%[a])\n\t"
wolfSSL 14:167253f4e170 26505 "# a[i+18] += m[18] * mu\n\t"
wolfSSL 14:167253f4e170 26506 "mulxq 144(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26507 "movq 152(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26508 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26509 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26510 "movq %%r10, 144(%[a])\n\t"
wolfSSL 14:167253f4e170 26511 "# a[i+19] += m[19] * mu\n\t"
wolfSSL 14:167253f4e170 26512 "mulxq 152(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26513 "movq 160(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26514 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26515 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26516 "movq %%r11, 152(%[a])\n\t"
wolfSSL 14:167253f4e170 26517 "# a[i+20] += m[20] * mu\n\t"
wolfSSL 14:167253f4e170 26518 "mulxq 160(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26519 "movq 168(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26520 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26521 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26522 "movq %%r10, 160(%[a])\n\t"
wolfSSL 14:167253f4e170 26523 "# a[i+21] += m[21] * mu\n\t"
wolfSSL 14:167253f4e170 26524 "mulxq 168(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26525 "movq 176(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26526 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26527 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26528 "movq %%r11, 168(%[a])\n\t"
wolfSSL 14:167253f4e170 26529 "# a[i+22] += m[22] * mu\n\t"
wolfSSL 14:167253f4e170 26530 "mulxq 176(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26531 "movq 184(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26532 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26533 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26534 "movq %%r10, 176(%[a])\n\t"
wolfSSL 14:167253f4e170 26535 "# a[i+23] += m[23] * mu\n\t"
wolfSSL 14:167253f4e170 26536 "mulxq 184(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26537 "movq 192(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26538 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26539 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26540 "movq %%r11, 184(%[a])\n\t"
wolfSSL 14:167253f4e170 26541 "# a[i+24] += m[24] * mu\n\t"
wolfSSL 14:167253f4e170 26542 "mulxq 192(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26543 "movq 200(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26544 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26545 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26546 "movq %%r10, 192(%[a])\n\t"
wolfSSL 14:167253f4e170 26547 "# a[i+25] += m[25] * mu\n\t"
wolfSSL 14:167253f4e170 26548 "mulxq 200(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26549 "movq 208(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26550 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26551 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26552 "movq %%r11, 200(%[a])\n\t"
wolfSSL 14:167253f4e170 26553 "# a[i+26] += m[26] * mu\n\t"
wolfSSL 14:167253f4e170 26554 "mulxq 208(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26555 "movq 216(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26556 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26557 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26558 "movq %%r10, 208(%[a])\n\t"
wolfSSL 14:167253f4e170 26559 "# a[i+27] += m[27] * mu\n\t"
wolfSSL 14:167253f4e170 26560 "mulxq 216(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26561 "movq 224(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26562 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26563 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26564 "movq %%r11, 216(%[a])\n\t"
wolfSSL 14:167253f4e170 26565 "# a[i+28] += m[28] * mu\n\t"
wolfSSL 14:167253f4e170 26566 "mulxq 224(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26567 "movq 232(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26568 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26569 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26570 "movq %%r10, 224(%[a])\n\t"
wolfSSL 14:167253f4e170 26571 "# a[i+29] += m[29] * mu\n\t"
wolfSSL 14:167253f4e170 26572 "mulxq 232(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26573 "movq 240(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26574 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26575 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26576 "movq %%r11, 232(%[a])\n\t"
wolfSSL 14:167253f4e170 26577 "# a[i+30] += m[30] * mu\n\t"
wolfSSL 14:167253f4e170 26578 "mulxq 240(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26579 "movq 248(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26580 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26581 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26582 "movq %%r10, 240(%[a])\n\t"
wolfSSL 14:167253f4e170 26583 "# a[i+31] += m[31] * mu\n\t"
wolfSSL 14:167253f4e170 26584 "mulxq 248(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26585 "movq 256(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26586 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26587 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26588 "movq %%r11, 248(%[a])\n\t"
wolfSSL 14:167253f4e170 26589 "# a[i+32] += m[32] * mu\n\t"
wolfSSL 14:167253f4e170 26590 "mulxq 256(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26591 "movq 264(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26592 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26593 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26594 "movq %%r10, 256(%[a])\n\t"
wolfSSL 14:167253f4e170 26595 "# a[i+33] += m[33] * mu\n\t"
wolfSSL 14:167253f4e170 26596 "mulxq 264(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26597 "movq 272(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26598 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26599 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26600 "movq %%r11, 264(%[a])\n\t"
wolfSSL 14:167253f4e170 26601 "# a[i+34] += m[34] * mu\n\t"
wolfSSL 14:167253f4e170 26602 "mulxq 272(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26603 "movq 280(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26604 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26605 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26606 "movq %%r10, 272(%[a])\n\t"
wolfSSL 14:167253f4e170 26607 "# a[i+35] += m[35] * mu\n\t"
wolfSSL 14:167253f4e170 26608 "mulxq 280(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26609 "movq 288(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26610 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26611 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26612 "movq %%r11, 280(%[a])\n\t"
wolfSSL 14:167253f4e170 26613 "# a[i+36] += m[36] * mu\n\t"
wolfSSL 14:167253f4e170 26614 "mulxq 288(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26615 "movq 296(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26616 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26617 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26618 "movq %%r10, 288(%[a])\n\t"
wolfSSL 14:167253f4e170 26619 "# a[i+37] += m[37] * mu\n\t"
wolfSSL 14:167253f4e170 26620 "mulxq 296(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26621 "movq 304(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26622 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26623 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26624 "movq %%r11, 296(%[a])\n\t"
wolfSSL 14:167253f4e170 26625 "# a[i+38] += m[38] * mu\n\t"
wolfSSL 14:167253f4e170 26626 "mulxq 304(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26627 "movq 312(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26628 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26629 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26630 "movq %%r10, 304(%[a])\n\t"
wolfSSL 14:167253f4e170 26631 "# a[i+39] += m[39] * mu\n\t"
wolfSSL 14:167253f4e170 26632 "mulxq 312(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26633 "movq 320(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26634 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26635 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26636 "movq %%r11, 312(%[a])\n\t"
wolfSSL 14:167253f4e170 26637 "# a[i+40] += m[40] * mu\n\t"
wolfSSL 14:167253f4e170 26638 "mulxq 320(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26639 "movq 328(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26640 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26641 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26642 "movq %%r10, 320(%[a])\n\t"
wolfSSL 14:167253f4e170 26643 "# a[i+41] += m[41] * mu\n\t"
wolfSSL 14:167253f4e170 26644 "mulxq 328(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26645 "movq 336(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26646 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26647 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26648 "movq %%r11, 328(%[a])\n\t"
wolfSSL 14:167253f4e170 26649 "# a[i+42] += m[42] * mu\n\t"
wolfSSL 14:167253f4e170 26650 "mulxq 336(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26651 "movq 344(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26652 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26653 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26654 "movq %%r10, 336(%[a])\n\t"
wolfSSL 14:167253f4e170 26655 "# a[i+43] += m[43] * mu\n\t"
wolfSSL 14:167253f4e170 26656 "mulxq 344(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26657 "movq 352(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26658 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26659 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26660 "movq %%r11, 344(%[a])\n\t"
wolfSSL 14:167253f4e170 26661 "# a[i+44] += m[44] * mu\n\t"
wolfSSL 14:167253f4e170 26662 "mulxq 352(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26663 "movq 360(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26664 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26665 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26666 "movq %%r10, 352(%[a])\n\t"
wolfSSL 14:167253f4e170 26667 "# a[i+45] += m[45] * mu\n\t"
wolfSSL 14:167253f4e170 26668 "mulxq 360(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26669 "movq 368(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26670 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26671 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26672 "movq %%r11, 360(%[a])\n\t"
wolfSSL 14:167253f4e170 26673 "# a[i+46] += m[46] * mu\n\t"
wolfSSL 14:167253f4e170 26674 "mulxq 368(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26675 "movq 376(%[a]), %%r11\n\t"
wolfSSL 14:167253f4e170 26676 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 26677 "adoxq %%r8, %%r11\n\t"
wolfSSL 14:167253f4e170 26678 "movq %%r10, 368(%[a])\n\t"
wolfSSL 14:167253f4e170 26679 "# a[i+47] += m[47] * mu\n\t"
wolfSSL 14:167253f4e170 26680 "mulxq 376(%[m]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 26681 "movq 384(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 26682 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 26683 "adoxq %%r8, %%r10\n\t"
wolfSSL 14:167253f4e170 26684 "movq %%r11, 376(%[a])\n\t"
wolfSSL 14:167253f4e170 26685 "adcxq %[ca], %%r10\n\t"
wolfSSL 14:167253f4e170 26686 "movq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 26687 "adoxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 26688 "adcxq %%r9, %[ca]\n\t"
wolfSSL 14:167253f4e170 26689 "movq %%r10, 384(%[a])\n\t"
wolfSSL 14:167253f4e170 26690 "# i += 1\n\t"
wolfSSL 14:167253f4e170 26691 "addq $8, %[a]\n\t"
wolfSSL 14:167253f4e170 26692 "addq $1, %%rcx\n\t"
wolfSSL 14:167253f4e170 26693 "cmpq $48, %%rcx\n\t"
wolfSSL 14:167253f4e170 26694 "jl L_mont_loop_avx2_48\n\t"
wolfSSL 14:167253f4e170 26695 "movq %%r12, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 26696 : [ca] "+r" (ca), [a] "+r" (a)
wolfSSL 14:167253f4e170 26697 : [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 26698 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 26699 );
wolfSSL 14:167253f4e170 26700
wolfSSL 14:167253f4e170 26701 sp_3072_cond_sub_48(a - 48, a, m, (sp_digit)0 - ca);
wolfSSL 14:167253f4e170 26702 }
wolfSSL 14:167253f4e170 26703 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 26704
wolfSSL 14:167253f4e170 26705 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26706 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 26707 * (r = a * b mod m)
wolfSSL 14:167253f4e170 26708 *
wolfSSL 14:167253f4e170 26709 * r Result of multiplication.
wolfSSL 14:167253f4e170 26710 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 26711 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 26712 * m Modulus (prime).
wolfSSL 14:167253f4e170 26713 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 26714 */
wolfSSL 14:167253f4e170 26715 static void sp_3072_mont_mul_avx2_48(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 26716 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 26717 {
wolfSSL 14:167253f4e170 26718 sp_3072_mul_avx2_48(r, a, b);
wolfSSL 14:167253f4e170 26719 sp_3072_mont_reduce_avx2_48(r, m, mp);
wolfSSL 14:167253f4e170 26720 }
wolfSSL 14:167253f4e170 26721
wolfSSL 14:167253f4e170 26722 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 26723 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26724 /* Square the Montgomery form number. (r = a * a mod m)
wolfSSL 14:167253f4e170 26725 *
wolfSSL 14:167253f4e170 26726 * r Result of squaring.
wolfSSL 14:167253f4e170 26727 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 26728 * m Modulus (prime).
wolfSSL 14:167253f4e170 26729 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 26730 */
wolfSSL 14:167253f4e170 26731 static void sp_3072_mont_sqr_avx2_48(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 26732 sp_digit mp)
wolfSSL 14:167253f4e170 26733 {
wolfSSL 14:167253f4e170 26734 sp_3072_sqr_avx2_48(r, a);
wolfSSL 14:167253f4e170 26735 sp_3072_mont_reduce_avx2_48(r, m, mp);
wolfSSL 14:167253f4e170 26736 }
wolfSSL 14:167253f4e170 26737
wolfSSL 14:167253f4e170 26738 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 26739 #if defined(SP_RSA_PRIVATE_EXP_D) || defined(WOLFSSL_HAVE_SP_DH)
wolfSSL 14:167253f4e170 26740 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26741 /* Modular exponentiate a to the e mod m. (r = a^e mod m)
wolfSSL 14:167253f4e170 26742 *
wolfSSL 14:167253f4e170 26743 * r A single precision number that is the result of the operation.
wolfSSL 14:167253f4e170 26744 * a A single precision number being exponentiated.
wolfSSL 14:167253f4e170 26745 * e A single precision number that is the exponent.
wolfSSL 14:167253f4e170 26746 * bits The number of bits in the exponent.
wolfSSL 14:167253f4e170 26747 * m A single precision number that is the modulus.
wolfSSL 14:167253f4e170 26748 * returns 0 on success and MEMORY_E on dynamic memory allocation failure.
wolfSSL 14:167253f4e170 26749 */
wolfSSL 14:167253f4e170 26750 static int sp_3072_mod_exp_avx2_48(sp_digit* r, sp_digit* a, sp_digit* e,
wolfSSL 14:167253f4e170 26751 int bits, sp_digit* m, int reduceA)
wolfSSL 14:167253f4e170 26752 {
wolfSSL 14:167253f4e170 26753 #ifndef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 26754 sp_digit t[32][96];
wolfSSL 14:167253f4e170 26755 #else
wolfSSL 14:167253f4e170 26756 sp_digit* t[32];
wolfSSL 14:167253f4e170 26757 sp_digit* td;
wolfSSL 14:167253f4e170 26758 #endif
wolfSSL 14:167253f4e170 26759 sp_digit* norm;
wolfSSL 14:167253f4e170 26760 sp_digit mp = 1;
wolfSSL 14:167253f4e170 26761 sp_digit n;
wolfSSL 14:167253f4e170 26762 sp_digit mask;
wolfSSL 14:167253f4e170 26763 int i;
wolfSSL 14:167253f4e170 26764 int c, y;
wolfSSL 14:167253f4e170 26765 int err = MP_OKAY;
wolfSSL 14:167253f4e170 26766
wolfSSL 14:167253f4e170 26767 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 26768 td = (sp_digit*)XMALLOC(sizeof(sp_digit) * 32 * 96, NULL,
wolfSSL 14:167253f4e170 26769 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 26770 if (td == NULL)
wolfSSL 14:167253f4e170 26771 err = MEMORY_E;
wolfSSL 14:167253f4e170 26772
wolfSSL 14:167253f4e170 26773 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26774 for (i=0; i<32; i++)
wolfSSL 14:167253f4e170 26775 t[i] = td + i * 96;
wolfSSL 14:167253f4e170 26776 norm = t[0];
wolfSSL 14:167253f4e170 26777 }
wolfSSL 14:167253f4e170 26778 #else
wolfSSL 14:167253f4e170 26779 norm = t[0];
wolfSSL 14:167253f4e170 26780 #endif
wolfSSL 14:167253f4e170 26781
wolfSSL 14:167253f4e170 26782 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26783 sp_3072_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 26784 sp_3072_mont_norm_48(norm, m);
wolfSSL 14:167253f4e170 26785
wolfSSL 14:167253f4e170 26786 XMEMSET(t[1], 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26787 if (reduceA) {
wolfSSL 14:167253f4e170 26788 err = sp_3072_mod_48(t[1] + 48, a, m);
wolfSSL 14:167253f4e170 26789 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 26790 err = sp_3072_mod_48(t[1], t[1], m);
wolfSSL 14:167253f4e170 26791 }
wolfSSL 14:167253f4e170 26792 else {
wolfSSL 14:167253f4e170 26793 XMEMCPY(t[1] + 48, a, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26794 err = sp_3072_mod_48(t[1], t[1], m);
wolfSSL 14:167253f4e170 26795 }
wolfSSL 14:167253f4e170 26796 }
wolfSSL 14:167253f4e170 26797
wolfSSL 14:167253f4e170 26798 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26799 sp_3072_mont_sqr_avx2_48(t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 26800 sp_3072_mont_mul_avx2_48(t[ 3], t[ 2], t[ 1], m, mp);
wolfSSL 14:167253f4e170 26801 sp_3072_mont_sqr_avx2_48(t[ 4], t[ 2], m, mp);
wolfSSL 14:167253f4e170 26802 sp_3072_mont_mul_avx2_48(t[ 5], t[ 3], t[ 2], m, mp);
wolfSSL 14:167253f4e170 26803 sp_3072_mont_sqr_avx2_48(t[ 6], t[ 3], m, mp);
wolfSSL 14:167253f4e170 26804 sp_3072_mont_mul_avx2_48(t[ 7], t[ 4], t[ 3], m, mp);
wolfSSL 14:167253f4e170 26805 sp_3072_mont_sqr_avx2_48(t[ 8], t[ 4], m, mp);
wolfSSL 14:167253f4e170 26806 sp_3072_mont_mul_avx2_48(t[ 9], t[ 5], t[ 4], m, mp);
wolfSSL 14:167253f4e170 26807 sp_3072_mont_sqr_avx2_48(t[10], t[ 5], m, mp);
wolfSSL 14:167253f4e170 26808 sp_3072_mont_mul_avx2_48(t[11], t[ 6], t[ 5], m, mp);
wolfSSL 14:167253f4e170 26809 sp_3072_mont_sqr_avx2_48(t[12], t[ 6], m, mp);
wolfSSL 14:167253f4e170 26810 sp_3072_mont_mul_avx2_48(t[13], t[ 7], t[ 6], m, mp);
wolfSSL 14:167253f4e170 26811 sp_3072_mont_sqr_avx2_48(t[14], t[ 7], m, mp);
wolfSSL 14:167253f4e170 26812 sp_3072_mont_mul_avx2_48(t[15], t[ 8], t[ 7], m, mp);
wolfSSL 14:167253f4e170 26813 sp_3072_mont_sqr_avx2_48(t[16], t[ 8], m, mp);
wolfSSL 14:167253f4e170 26814 sp_3072_mont_mul_avx2_48(t[17], t[ 9], t[ 8], m, mp);
wolfSSL 14:167253f4e170 26815 sp_3072_mont_sqr_avx2_48(t[18], t[ 9], m, mp);
wolfSSL 14:167253f4e170 26816 sp_3072_mont_mul_avx2_48(t[19], t[10], t[ 9], m, mp);
wolfSSL 14:167253f4e170 26817 sp_3072_mont_sqr_avx2_48(t[20], t[10], m, mp);
wolfSSL 14:167253f4e170 26818 sp_3072_mont_mul_avx2_48(t[21], t[11], t[10], m, mp);
wolfSSL 14:167253f4e170 26819 sp_3072_mont_sqr_avx2_48(t[22], t[11], m, mp);
wolfSSL 14:167253f4e170 26820 sp_3072_mont_mul_avx2_48(t[23], t[12], t[11], m, mp);
wolfSSL 14:167253f4e170 26821 sp_3072_mont_sqr_avx2_48(t[24], t[12], m, mp);
wolfSSL 14:167253f4e170 26822 sp_3072_mont_mul_avx2_48(t[25], t[13], t[12], m, mp);
wolfSSL 14:167253f4e170 26823 sp_3072_mont_sqr_avx2_48(t[26], t[13], m, mp);
wolfSSL 14:167253f4e170 26824 sp_3072_mont_mul_avx2_48(t[27], t[14], t[13], m, mp);
wolfSSL 14:167253f4e170 26825 sp_3072_mont_sqr_avx2_48(t[28], t[14], m, mp);
wolfSSL 14:167253f4e170 26826 sp_3072_mont_mul_avx2_48(t[29], t[15], t[14], m, mp);
wolfSSL 14:167253f4e170 26827 sp_3072_mont_sqr_avx2_48(t[30], t[15], m, mp);
wolfSSL 14:167253f4e170 26828 sp_3072_mont_mul_avx2_48(t[31], t[16], t[15], m, mp);
wolfSSL 14:167253f4e170 26829
wolfSSL 14:167253f4e170 26830 i = (bits - 1) / 64;
wolfSSL 14:167253f4e170 26831 n = e[i--];
wolfSSL 14:167253f4e170 26832 y = n >> 59;
wolfSSL 14:167253f4e170 26833 n <<= 5;
wolfSSL 14:167253f4e170 26834 c = 59;
wolfSSL 14:167253f4e170 26835 XMEMCPY(r, t[y], sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26836 for (; i>=0 || c>=5; ) {
wolfSSL 14:167253f4e170 26837 if (c == 0) {
wolfSSL 14:167253f4e170 26838 n = e[i--];
wolfSSL 14:167253f4e170 26839 y = n >> 59;
wolfSSL 14:167253f4e170 26840 n <<= 5;
wolfSSL 14:167253f4e170 26841 c = 59;
wolfSSL 14:167253f4e170 26842 }
wolfSSL 14:167253f4e170 26843 else if (c < 5) {
wolfSSL 14:167253f4e170 26844 y = n >> 59;
wolfSSL 14:167253f4e170 26845 n = e[i--];
wolfSSL 14:167253f4e170 26846 c = 5 - c;
wolfSSL 14:167253f4e170 26847 y |= n >> (64 - c);
wolfSSL 14:167253f4e170 26848 n <<= c;
wolfSSL 14:167253f4e170 26849 c = 64 - c;
wolfSSL 14:167253f4e170 26850 }
wolfSSL 14:167253f4e170 26851 else {
wolfSSL 14:167253f4e170 26852 y = (n >> 59) & 0x1f;
wolfSSL 14:167253f4e170 26853 n <<= 5;
wolfSSL 14:167253f4e170 26854 c -= 5;
wolfSSL 14:167253f4e170 26855 }
wolfSSL 14:167253f4e170 26856
wolfSSL 14:167253f4e170 26857 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26858 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26859 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26860 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26861 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26862
wolfSSL 14:167253f4e170 26863 sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 26864 }
wolfSSL 14:167253f4e170 26865 y = e[0] & ((1 << c) - 1);
wolfSSL 14:167253f4e170 26866 for (; c > 0; c--)
wolfSSL 14:167253f4e170 26867 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 26868 sp_3072_mont_mul_avx2_48(r, r, t[y], m, mp);
wolfSSL 14:167253f4e170 26869
wolfSSL 14:167253f4e170 26870 XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26871 sp_3072_mont_reduce_avx2_48(r, m, mp);
wolfSSL 14:167253f4e170 26872
wolfSSL 14:167253f4e170 26873 mask = 0 - (sp_3072_cmp_48(r, m) >= 0);
wolfSSL 14:167253f4e170 26874 sp_3072_cond_sub_48(r, r, m, mask);
wolfSSL 14:167253f4e170 26875 }
wolfSSL 14:167253f4e170 26876
wolfSSL 14:167253f4e170 26877 #ifdef WOLFSSL_SMALL_STACK
wolfSSL 14:167253f4e170 26878 if (td != NULL)
wolfSSL 14:167253f4e170 26879 XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 26880 #endif
wolfSSL 14:167253f4e170 26881
wolfSSL 14:167253f4e170 26882 return err;
wolfSSL 14:167253f4e170 26883 }
wolfSSL 14:167253f4e170 26884 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 26885 #endif /* SP_RSA_PRIVATE_EXP_D || WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 26886
wolfSSL 14:167253f4e170 26887 #ifdef WOLFSSL_HAVE_SP_RSA
wolfSSL 14:167253f4e170 26888 /* RSA public key operation.
wolfSSL 14:167253f4e170 26889 *
wolfSSL 14:167253f4e170 26890 * in Array of bytes representing the number to exponentiate, base.
wolfSSL 14:167253f4e170 26891 * inLen Number of bytes in base.
wolfSSL 14:167253f4e170 26892 * em Public exponent.
wolfSSL 14:167253f4e170 26893 * mm Modulus.
wolfSSL 14:167253f4e170 26894 * out Buffer to hold big-endian bytes of exponentiation result.
wolfSSL 14:167253f4e170 26895 * Must be at least 384 bytes long.
wolfSSL 14:167253f4e170 26896 * outLen Number of bytes in result.
wolfSSL 14:167253f4e170 26897 * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
wolfSSL 14:167253f4e170 26898 * an array is too long and MEMORY_E when dynamic memory allocation fails.
wolfSSL 14:167253f4e170 26899 */
wolfSSL 14:167253f4e170 26900 int sp_RsaPublic_3072(const byte* in, word32 inLen, mp_int* em, mp_int* mm,
wolfSSL 14:167253f4e170 26901 byte* out, word32* outLen)
wolfSSL 14:167253f4e170 26902 {
wolfSSL 14:167253f4e170 26903 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 26904 sp_digit ad[96], md[48], rd[96];
wolfSSL 14:167253f4e170 26905 #else
wolfSSL 14:167253f4e170 26906 sp_digit* d = NULL;
wolfSSL 14:167253f4e170 26907 #endif
wolfSSL 14:167253f4e170 26908 sp_digit* a;
wolfSSL 14:167253f4e170 26909 sp_digit *ah;
wolfSSL 14:167253f4e170 26910 sp_digit* m;
wolfSSL 14:167253f4e170 26911 sp_digit* r;
wolfSSL 14:167253f4e170 26912 sp_digit e[1];
wolfSSL 14:167253f4e170 26913 int err = MP_OKAY;
wolfSSL 14:167253f4e170 26914 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26915 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 26916 #endif
wolfSSL 14:167253f4e170 26917
wolfSSL 14:167253f4e170 26918 if (*outLen < 384)
wolfSSL 14:167253f4e170 26919 err = MP_TO_E;
wolfSSL 14:167253f4e170 26920 if (err == MP_OKAY && (mp_count_bits(em) > 64 || inLen > 384 ||
wolfSSL 14:167253f4e170 26921 mp_count_bits(mm) != 3072))
wolfSSL 14:167253f4e170 26922 err = MP_READ_E;
wolfSSL 14:167253f4e170 26923
wolfSSL 14:167253f4e170 26924 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 26925 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26926 d = (sp_digit*)XMALLOC(sizeof(sp_digit) * 48 * 5, NULL,
wolfSSL 14:167253f4e170 26927 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 26928 if (d == NULL)
wolfSSL 14:167253f4e170 26929 err = MEMORY_E;
wolfSSL 14:167253f4e170 26930 }
wolfSSL 14:167253f4e170 26931
wolfSSL 14:167253f4e170 26932 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26933 a = d;
wolfSSL 14:167253f4e170 26934 r = a + 48 * 2;
wolfSSL 14:167253f4e170 26935 m = r + 48 * 2;
wolfSSL 14:167253f4e170 26936 ah = a + 48;
wolfSSL 14:167253f4e170 26937 }
wolfSSL 14:167253f4e170 26938 #else
wolfSSL 14:167253f4e170 26939 a = ad;
wolfSSL 14:167253f4e170 26940 m = md;
wolfSSL 14:167253f4e170 26941 r = rd;
wolfSSL 14:167253f4e170 26942 ah = a + 48;
wolfSSL 14:167253f4e170 26943 #endif
wolfSSL 14:167253f4e170 26944
wolfSSL 14:167253f4e170 26945 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26946 sp_3072_from_bin(ah, 48, in, inLen);
wolfSSL 14:167253f4e170 26947 #if DIGIT_BIT >= 64
wolfSSL 14:167253f4e170 26948 e[0] = em->dp[0];
wolfSSL 14:167253f4e170 26949 #else
wolfSSL 14:167253f4e170 26950 e[0] = em->dp[0];
wolfSSL 14:167253f4e170 26951 if (em->used > 1)
wolfSSL 14:167253f4e170 26952 e[0] |= ((sp_digit)em->dp[1]) << DIGIT_BIT;
wolfSSL 14:167253f4e170 26953 #endif
wolfSSL 14:167253f4e170 26954 if (e[0] == 0)
wolfSSL 14:167253f4e170 26955 err = MP_EXPTMOD_E;
wolfSSL 14:167253f4e170 26956 }
wolfSSL 14:167253f4e170 26957 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26958 sp_3072_from_mp(m, 48, mm);
wolfSSL 14:167253f4e170 26959
wolfSSL 14:167253f4e170 26960 if (e[0] == 0x3) {
wolfSSL 14:167253f4e170 26961 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 26962 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 26963 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26964 sp_3072_sqr_avx2_48(r, ah);
wolfSSL 14:167253f4e170 26965 err = sp_3072_mod_48_cond(r, r, m);
wolfSSL 14:167253f4e170 26966 }
wolfSSL 14:167253f4e170 26967 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26968 sp_3072_mul_avx2_48(r, ah, r);
wolfSSL 14:167253f4e170 26969 err = sp_3072_mod_48_cond(r, r, m);
wolfSSL 14:167253f4e170 26970 }
wolfSSL 14:167253f4e170 26971 }
wolfSSL 14:167253f4e170 26972 else
wolfSSL 14:167253f4e170 26973 #endif
wolfSSL 14:167253f4e170 26974 {
wolfSSL 14:167253f4e170 26975 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26976 sp_3072_sqr_48(r, ah);
wolfSSL 14:167253f4e170 26977 err = sp_3072_mod_48_cond(r, r, m);
wolfSSL 14:167253f4e170 26978 }
wolfSSL 14:167253f4e170 26979 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26980 sp_3072_mul_48(r, ah, r);
wolfSSL 14:167253f4e170 26981 err = sp_3072_mod_48_cond(r, r, m);
wolfSSL 14:167253f4e170 26982 }
wolfSSL 14:167253f4e170 26983 }
wolfSSL 14:167253f4e170 26984 }
wolfSSL 14:167253f4e170 26985 else {
wolfSSL 14:167253f4e170 26986 int i;
wolfSSL 14:167253f4e170 26987 sp_digit mp;
wolfSSL 14:167253f4e170 26988
wolfSSL 14:167253f4e170 26989 sp_3072_mont_setup(m, &mp);
wolfSSL 14:167253f4e170 26990
wolfSSL 14:167253f4e170 26991 /* Convert to Montgomery form. */
wolfSSL 14:167253f4e170 26992 XMEMSET(a, 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 26993 err = sp_3072_mod_48_cond(a, a, m);
wolfSSL 14:167253f4e170 26994
wolfSSL 14:167253f4e170 26995 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 26996 for (i=63; i>=0; i--)
wolfSSL 14:167253f4e170 26997 if (e[0] >> i)
wolfSSL 14:167253f4e170 26998 break;
wolfSSL 14:167253f4e170 26999
wolfSSL 14:167253f4e170 27000 XMEMCPY(r, a, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 27001 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27002 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 27003 for (i--; i>=0; i--) {
wolfSSL 14:167253f4e170 27004 sp_3072_mont_sqr_avx2_48(r, r, m, mp);
wolfSSL 14:167253f4e170 27005 if (((e[0] >> i) & 1) == 1)
wolfSSL 14:167253f4e170 27006 sp_3072_mont_mul_avx2_48(r, r, a, m, mp);
wolfSSL 14:167253f4e170 27007 }
wolfSSL 14:167253f4e170 27008 XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 27009 sp_3072_mont_reduce_avx2_48(r, m, mp);
wolfSSL 14:167253f4e170 27010 }
wolfSSL 14:167253f4e170 27011 else
wolfSSL 14:167253f4e170 27012 #endif
wolfSSL 14:167253f4e170 27013 {
wolfSSL 14:167253f4e170 27014 for (i--; i>=0; i--) {
wolfSSL 14:167253f4e170 27015 sp_3072_mont_sqr_48(r, r, m, mp);
wolfSSL 14:167253f4e170 27016 if (((e[0] >> i) & 1) == 1)
wolfSSL 14:167253f4e170 27017 sp_3072_mont_mul_48(r, r, a, m, mp);
wolfSSL 14:167253f4e170 27018 }
wolfSSL 14:167253f4e170 27019 XMEMSET(&r[48], 0, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 27020 sp_3072_mont_reduce_48(r, m, mp);
wolfSSL 14:167253f4e170 27021 }
wolfSSL 14:167253f4e170 27022
wolfSSL 14:167253f4e170 27023 for (i = 47; i > 0; i--) {
wolfSSL 14:167253f4e170 27024 if (r[i] != m[i])
wolfSSL 14:167253f4e170 27025 break;
wolfSSL 14:167253f4e170 27026 }
wolfSSL 14:167253f4e170 27027 if (r[i] >= m[i])
wolfSSL 14:167253f4e170 27028 sp_3072_sub_in_place_48(r, m);
wolfSSL 14:167253f4e170 27029 }
wolfSSL 14:167253f4e170 27030 }
wolfSSL 14:167253f4e170 27031 }
wolfSSL 14:167253f4e170 27032
wolfSSL 14:167253f4e170 27033 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27034 sp_3072_to_bin(r, out);
wolfSSL 14:167253f4e170 27035 *outLen = 384;
wolfSSL 14:167253f4e170 27036 }
wolfSSL 14:167253f4e170 27037
wolfSSL 14:167253f4e170 27038 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 27039 if (d != NULL)
wolfSSL 14:167253f4e170 27040 XFREE(d, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 27041 #endif
wolfSSL 14:167253f4e170 27042
wolfSSL 14:167253f4e170 27043 return err;
wolfSSL 14:167253f4e170 27044 }
wolfSSL 14:167253f4e170 27045
wolfSSL 14:167253f4e170 27046 /* RSA private key operation.
wolfSSL 14:167253f4e170 27047 *
wolfSSL 14:167253f4e170 27048 * in Array of bytes representing the number to exponentiate, base.
wolfSSL 14:167253f4e170 27049 * inLen Number of bytes in base.
wolfSSL 14:167253f4e170 27050 * dm Private exponent.
wolfSSL 14:167253f4e170 27051 * pm First prime.
wolfSSL 14:167253f4e170 27052 * qm Second prime.
wolfSSL 14:167253f4e170 27053 * dpm First prime's CRT exponent.
wolfSSL 14:167253f4e170 27054 * dqm Second prime's CRT exponent.
wolfSSL 14:167253f4e170 27055 * qim Inverse of second prime mod p.
wolfSSL 14:167253f4e170 27056 * mm Modulus.
wolfSSL 14:167253f4e170 27057 * out Buffer to hold big-endian bytes of exponentiation result.
wolfSSL 14:167253f4e170 27058 * Must be at least 384 bytes long.
wolfSSL 14:167253f4e170 27059 * outLen Number of bytes in result.
wolfSSL 14:167253f4e170 27060 * returns 0 on success, MP_TO_E when the outLen is too small, MP_READ_E when
wolfSSL 14:167253f4e170 27061 * an array is too long and MEMORY_E when dynamic memory allocation fails.
wolfSSL 14:167253f4e170 27062 */
wolfSSL 14:167253f4e170 27063 int sp_RsaPrivate_3072(const byte* in, word32 inLen, mp_int* dm,
wolfSSL 14:167253f4e170 27064 mp_int* pm, mp_int* qm, mp_int* dpm, mp_int* dqm, mp_int* qim, mp_int* mm,
wolfSSL 14:167253f4e170 27065 byte* out, word32* outLen)
wolfSSL 14:167253f4e170 27066 {
wolfSSL 14:167253f4e170 27067 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 27068 sp_digit ad[48 * 2];
wolfSSL 14:167253f4e170 27069 sp_digit pd[24], qd[24], dpd[24];
wolfSSL 14:167253f4e170 27070 sp_digit tmpad[48], tmpbd[48];
wolfSSL 14:167253f4e170 27071 #else
wolfSSL 14:167253f4e170 27072 sp_digit* t = NULL;
wolfSSL 14:167253f4e170 27073 #endif
wolfSSL 14:167253f4e170 27074 sp_digit* a;
wolfSSL 14:167253f4e170 27075 sp_digit* p;
wolfSSL 14:167253f4e170 27076 sp_digit* q;
wolfSSL 14:167253f4e170 27077 sp_digit* dp;
wolfSSL 14:167253f4e170 27078 sp_digit* dq;
wolfSSL 14:167253f4e170 27079 sp_digit* qi;
wolfSSL 14:167253f4e170 27080 sp_digit* tmp;
wolfSSL 14:167253f4e170 27081 sp_digit* tmpa;
wolfSSL 14:167253f4e170 27082 sp_digit* tmpb;
wolfSSL 14:167253f4e170 27083 sp_digit* r;
wolfSSL 14:167253f4e170 27084 sp_digit c;
wolfSSL 14:167253f4e170 27085 int err = MP_OKAY;
wolfSSL 14:167253f4e170 27086 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27087 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 27088 #endif
wolfSSL 14:167253f4e170 27089
wolfSSL 14:167253f4e170 27090 (void)dm;
wolfSSL 14:167253f4e170 27091 (void)mm;
wolfSSL 14:167253f4e170 27092
wolfSSL 14:167253f4e170 27093 if (*outLen < 384)
wolfSSL 14:167253f4e170 27094 err = MP_TO_E;
wolfSSL 14:167253f4e170 27095 if (err == MP_OKAY && (inLen > 384 || mp_count_bits(mm) != 3072))
wolfSSL 14:167253f4e170 27096 err = MP_READ_E;
wolfSSL 14:167253f4e170 27097
wolfSSL 14:167253f4e170 27098 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 27099 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27100 t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 24 * 11, NULL,
wolfSSL 14:167253f4e170 27101 DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 27102 if (t == NULL)
wolfSSL 14:167253f4e170 27103 err = MEMORY_E;
wolfSSL 14:167253f4e170 27104 }
wolfSSL 14:167253f4e170 27105 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27106 a = t;
wolfSSL 14:167253f4e170 27107 p = a + 48 * 2;
wolfSSL 14:167253f4e170 27108 q = p + 24;
wolfSSL 14:167253f4e170 27109 qi = dq = dp = q + 24;
wolfSSL 14:167253f4e170 27110 tmpa = qi + 24;
wolfSSL 14:167253f4e170 27111 tmpb = tmpa + 48;
wolfSSL 14:167253f4e170 27112
wolfSSL 14:167253f4e170 27113 tmp = t;
wolfSSL 14:167253f4e170 27114 r = tmp + 48;
wolfSSL 14:167253f4e170 27115 }
wolfSSL 14:167253f4e170 27116 #else
wolfSSL 14:167253f4e170 27117 r = a = ad;
wolfSSL 14:167253f4e170 27118 p = pd;
wolfSSL 14:167253f4e170 27119 q = qd;
wolfSSL 14:167253f4e170 27120 qi = dq = dp = dpd;
wolfSSL 14:167253f4e170 27121 tmpa = tmpad;
wolfSSL 14:167253f4e170 27122 tmpb = tmpbd;
wolfSSL 14:167253f4e170 27123 tmp = a + 48;
wolfSSL 14:167253f4e170 27124 #endif
wolfSSL 14:167253f4e170 27125
wolfSSL 14:167253f4e170 27126 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27127 sp_3072_from_bin(a, 48, in, inLen);
wolfSSL 14:167253f4e170 27128 sp_3072_from_mp(p, 24, pm);
wolfSSL 14:167253f4e170 27129 sp_3072_from_mp(q, 24, qm);
wolfSSL 14:167253f4e170 27130 sp_3072_from_mp(dp, 24, dpm);
wolfSSL 14:167253f4e170 27131
wolfSSL 14:167253f4e170 27132 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27133 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 27134 err = sp_3072_mod_exp_avx2_24(tmpa, a, dp, 1536, p, 1);
wolfSSL 14:167253f4e170 27135 else
wolfSSL 14:167253f4e170 27136 #endif
wolfSSL 14:167253f4e170 27137 err = sp_3072_mod_exp_24(tmpa, a, dp, 1536, p, 1);
wolfSSL 14:167253f4e170 27138 }
wolfSSL 14:167253f4e170 27139 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27140 sp_3072_from_mp(dq, 24, dqm);
wolfSSL 14:167253f4e170 27141 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27142 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 27143 err = sp_3072_mod_exp_avx2_24(tmpb, a, dq, 1536, q, 1);
wolfSSL 14:167253f4e170 27144 else
wolfSSL 14:167253f4e170 27145 #endif
wolfSSL 14:167253f4e170 27146 err = sp_3072_mod_exp_24(tmpb, a, dq, 1536, q, 1);
wolfSSL 14:167253f4e170 27147 }
wolfSSL 14:167253f4e170 27148
wolfSSL 14:167253f4e170 27149 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27150 c = sp_3072_sub_in_place_24(tmpa, tmpb);
wolfSSL 14:167253f4e170 27151 sp_3072_mask_24(tmp, p, c);
wolfSSL 14:167253f4e170 27152 sp_3072_add_24(tmpa, tmpa, tmp);
wolfSSL 14:167253f4e170 27153
wolfSSL 14:167253f4e170 27154 sp_3072_from_mp(qi, 24, qim);
wolfSSL 14:167253f4e170 27155 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27156 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 27157 sp_3072_mul_avx2_24(tmpa, tmpa, qi);
wolfSSL 14:167253f4e170 27158 else
wolfSSL 14:167253f4e170 27159 #endif
wolfSSL 14:167253f4e170 27160 sp_3072_mul_24(tmpa, tmpa, qi);
wolfSSL 14:167253f4e170 27161 err = sp_3072_mod_24(tmpa, tmpa, p);
wolfSSL 14:167253f4e170 27162 }
wolfSSL 14:167253f4e170 27163
wolfSSL 14:167253f4e170 27164 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27165 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27166 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 27167 sp_3072_mul_avx2_24(tmpa, q, tmpa);
wolfSSL 14:167253f4e170 27168 else
wolfSSL 14:167253f4e170 27169 #endif
wolfSSL 14:167253f4e170 27170 sp_3072_mul_24(tmpa, q, tmpa);
wolfSSL 14:167253f4e170 27171 XMEMSET(&tmpb[24], 0, sizeof(sp_digit) * 24);
wolfSSL 14:167253f4e170 27172 sp_3072_add_48(r, tmpb, tmpa);
wolfSSL 14:167253f4e170 27173
wolfSSL 14:167253f4e170 27174 sp_3072_to_bin(r, out);
wolfSSL 14:167253f4e170 27175 *outLen = 384;
wolfSSL 14:167253f4e170 27176 }
wolfSSL 14:167253f4e170 27177
wolfSSL 14:167253f4e170 27178 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 27179 if (t != NULL) {
wolfSSL 14:167253f4e170 27180 XMEMSET(t, 0, sizeof(sp_digit) * 24 * 11);
wolfSSL 14:167253f4e170 27181 XFREE(t, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 14:167253f4e170 27182 }
wolfSSL 14:167253f4e170 27183 #else
wolfSSL 14:167253f4e170 27184 XMEMSET(tmpad, 0, sizeof(tmpad));
wolfSSL 14:167253f4e170 27185 XMEMSET(tmpbd, 0, sizeof(tmpbd));
wolfSSL 14:167253f4e170 27186 XMEMSET(pd, 0, sizeof(pd));
wolfSSL 14:167253f4e170 27187 XMEMSET(qd, 0, sizeof(qd));
wolfSSL 14:167253f4e170 27188 XMEMSET(dpd, 0, sizeof(dpd));
wolfSSL 14:167253f4e170 27189 #endif
wolfSSL 14:167253f4e170 27190
wolfSSL 14:167253f4e170 27191 return err;
wolfSSL 14:167253f4e170 27192 }
wolfSSL 14:167253f4e170 27193 #endif /* WOLFSSL_HAVE_SP_RSA */
wolfSSL 14:167253f4e170 27194 #ifdef WOLFSSL_HAVE_SP_DH
wolfSSL 14:167253f4e170 27195 /* Convert an array of sp_digit to an mp_int.
wolfSSL 14:167253f4e170 27196 *
wolfSSL 14:167253f4e170 27197 * a A single precision integer.
wolfSSL 14:167253f4e170 27198 * r A multi-precision integer.
wolfSSL 14:167253f4e170 27199 */
wolfSSL 14:167253f4e170 27200 static int sp_3072_to_mp(sp_digit* a, mp_int* r)
wolfSSL 14:167253f4e170 27201 {
wolfSSL 14:167253f4e170 27202 int err;
wolfSSL 14:167253f4e170 27203
wolfSSL 14:167253f4e170 27204 err = mp_grow(r, (3072 + DIGIT_BIT - 1) / DIGIT_BIT);
wolfSSL 14:167253f4e170 27205 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27206 #if DIGIT_BIT == 64
wolfSSL 14:167253f4e170 27207 XMEMCPY(r->dp, a, sizeof(sp_digit) * 48);
wolfSSL 14:167253f4e170 27208 r->used = 48;
wolfSSL 14:167253f4e170 27209 mp_clamp(r);
wolfSSL 14:167253f4e170 27210 #elif DIGIT_BIT < 64
wolfSSL 14:167253f4e170 27211 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 27212
wolfSSL 14:167253f4e170 27213 r->dp[0] = 0;
wolfSSL 14:167253f4e170 27214 for (i = 0; i < 48; i++) {
wolfSSL 14:167253f4e170 27215 r->dp[j] |= a[i] << s;
wolfSSL 14:167253f4e170 27216 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 27217 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 27218 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 27219 while (s + DIGIT_BIT <= 64) {
wolfSSL 14:167253f4e170 27220 s += DIGIT_BIT;
wolfSSL 14:167253f4e170 27221 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 27222 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 27223 }
wolfSSL 14:167253f4e170 27224 s = 64 - s;
wolfSSL 14:167253f4e170 27225 }
wolfSSL 14:167253f4e170 27226 r->used = (3072 + DIGIT_BIT - 1) / DIGIT_BIT;
wolfSSL 14:167253f4e170 27227 mp_clamp(r);
wolfSSL 14:167253f4e170 27228 #else
wolfSSL 14:167253f4e170 27229 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 27230
wolfSSL 14:167253f4e170 27231 r->dp[0] = 0;
wolfSSL 14:167253f4e170 27232 for (i = 0; i < 48; i++) {
wolfSSL 14:167253f4e170 27233 r->dp[j] |= ((mp_digit)a[i]) << s;
wolfSSL 14:167253f4e170 27234 if (s + 64 >= DIGIT_BIT) {
wolfSSL 14:167253f4e170 27235 #if DIGIT_BIT < 64
wolfSSL 14:167253f4e170 27236 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 27237 #endif
wolfSSL 14:167253f4e170 27238 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 27239 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 27240 s = 64 - s;
wolfSSL 14:167253f4e170 27241 }
wolfSSL 14:167253f4e170 27242 else
wolfSSL 14:167253f4e170 27243 s += 64;
wolfSSL 14:167253f4e170 27244 }
wolfSSL 14:167253f4e170 27245 r->used = (3072 + DIGIT_BIT - 1) / DIGIT_BIT;
wolfSSL 14:167253f4e170 27246 mp_clamp(r);
wolfSSL 14:167253f4e170 27247 #endif
wolfSSL 14:167253f4e170 27248 }
wolfSSL 14:167253f4e170 27249
wolfSSL 14:167253f4e170 27250 return err;
wolfSSL 14:167253f4e170 27251 }
wolfSSL 14:167253f4e170 27252
wolfSSL 14:167253f4e170 27253 /* Perform the modular exponentiation for Diffie-Hellman.
wolfSSL 14:167253f4e170 27254 *
wolfSSL 14:167253f4e170 27255 * base Base. MP integer.
wolfSSL 14:167253f4e170 27256 * exp Exponent. MP integer.
wolfSSL 14:167253f4e170 27257 * mod Modulus. MP integer.
wolfSSL 14:167253f4e170 27258 * res Result. MP integer.
wolfSSL 14:167253f4e170 27259 * returs 0 on success, MP_READ_E if there are too many bytes in an array
wolfSSL 14:167253f4e170 27260 * and MEMORY_E if memory allocation fails.
wolfSSL 14:167253f4e170 27261 */
wolfSSL 14:167253f4e170 27262 int sp_ModExp_3072(mp_int* base, mp_int* exp, mp_int* mod, mp_int* res)
wolfSSL 14:167253f4e170 27263 {
wolfSSL 14:167253f4e170 27264 int err = MP_OKAY;
wolfSSL 14:167253f4e170 27265 sp_digit b[96], e[48], m[48];
wolfSSL 14:167253f4e170 27266 sp_digit* r = b;
wolfSSL 14:167253f4e170 27267 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27268 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 27269 #endif
wolfSSL 14:167253f4e170 27270 int expBits = mp_count_bits(exp);
wolfSSL 14:167253f4e170 27271
wolfSSL 14:167253f4e170 27272 if (mp_count_bits(base) > 3072 || expBits > 3072 ||
wolfSSL 14:167253f4e170 27273 mp_count_bits(mod) != 3072) {
wolfSSL 14:167253f4e170 27274 err = MP_READ_E;
wolfSSL 14:167253f4e170 27275 }
wolfSSL 14:167253f4e170 27276
wolfSSL 14:167253f4e170 27277 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27278 sp_3072_from_mp(b, 48, base);
wolfSSL 14:167253f4e170 27279 sp_3072_from_mp(e, 48, exp);
wolfSSL 14:167253f4e170 27280 sp_3072_from_mp(m, 48, mod);
wolfSSL 14:167253f4e170 27281
wolfSSL 14:167253f4e170 27282 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27283 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 27284 err = sp_3072_mod_exp_avx2_48(r, b, e, expBits, m, 0);
wolfSSL 14:167253f4e170 27285 else
wolfSSL 14:167253f4e170 27286 #endif
wolfSSL 14:167253f4e170 27287 err = sp_3072_mod_exp_48(r, b, e, expBits, m, 0);
wolfSSL 14:167253f4e170 27288 }
wolfSSL 14:167253f4e170 27289
wolfSSL 14:167253f4e170 27290 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27291 err = sp_3072_to_mp(r, res);
wolfSSL 14:167253f4e170 27292 }
wolfSSL 14:167253f4e170 27293
wolfSSL 14:167253f4e170 27294 XMEMSET(e, 0, sizeof(e));
wolfSSL 14:167253f4e170 27295
wolfSSL 14:167253f4e170 27296 return err;
wolfSSL 14:167253f4e170 27297 }
wolfSSL 14:167253f4e170 27298
wolfSSL 14:167253f4e170 27299 /* Perform the modular exponentiation for Diffie-Hellman.
wolfSSL 14:167253f4e170 27300 *
wolfSSL 14:167253f4e170 27301 * base Base.
wolfSSL 14:167253f4e170 27302 * exp Array of bytes that is the exponent.
wolfSSL 14:167253f4e170 27303 * expLen Length of data, in bytes, in exponent.
wolfSSL 14:167253f4e170 27304 * mod Modulus.
wolfSSL 14:167253f4e170 27305 * out Buffer to hold big-endian bytes of exponentiation result.
wolfSSL 14:167253f4e170 27306 * Must be at least 384 bytes long.
wolfSSL 14:167253f4e170 27307 * outLen Length, in bytes, of exponentiation result.
wolfSSL 14:167253f4e170 27308 * returs 0 on success, MP_READ_E if there are too many bytes in an array
wolfSSL 14:167253f4e170 27309 * and MEMORY_E if memory allocation fails.
wolfSSL 14:167253f4e170 27310 */
wolfSSL 14:167253f4e170 27311 int sp_DhExp_3072(mp_int* base, const byte* exp, word32 expLen,
wolfSSL 14:167253f4e170 27312 mp_int* mod, byte* out, word32* outLen)
wolfSSL 14:167253f4e170 27313 {
wolfSSL 14:167253f4e170 27314 int err = MP_OKAY;
wolfSSL 14:167253f4e170 27315 sp_digit b[96], e[48], m[48];
wolfSSL 14:167253f4e170 27316 sp_digit* r = b;
wolfSSL 14:167253f4e170 27317 word32 i;
wolfSSL 14:167253f4e170 27318 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27319 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 27320 #endif
wolfSSL 14:167253f4e170 27321
wolfSSL 14:167253f4e170 27322 if (mp_count_bits(base) > 3072 || expLen > 384 ||
wolfSSL 14:167253f4e170 27323 mp_count_bits(mod) != 3072) {
wolfSSL 14:167253f4e170 27324 err = MP_READ_E;
wolfSSL 14:167253f4e170 27325 }
wolfSSL 14:167253f4e170 27326
wolfSSL 14:167253f4e170 27327 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27328 sp_3072_from_mp(b, 48, base);
wolfSSL 14:167253f4e170 27329 sp_3072_from_bin(e, 48, exp, expLen);
wolfSSL 14:167253f4e170 27330 sp_3072_from_mp(m, 48, mod);
wolfSSL 14:167253f4e170 27331
wolfSSL 14:167253f4e170 27332 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 27333 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 27334 err = sp_3072_mod_exp_avx2_48(r, b, e, expLen * 8, m, 0);
wolfSSL 14:167253f4e170 27335 else
wolfSSL 14:167253f4e170 27336 #endif
wolfSSL 14:167253f4e170 27337 err = sp_3072_mod_exp_48(r, b, e, expLen * 8, m, 0);
wolfSSL 14:167253f4e170 27338 }
wolfSSL 14:167253f4e170 27339
wolfSSL 14:167253f4e170 27340 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27341 sp_3072_to_bin(r, out);
wolfSSL 14:167253f4e170 27342 *outLen = 384;
wolfSSL 14:167253f4e170 27343 for (i=0; i<384 && out[i] == 0; i++) {
wolfSSL 14:167253f4e170 27344 }
wolfSSL 14:167253f4e170 27345 *outLen -= i;
wolfSSL 14:167253f4e170 27346 XMEMMOVE(out, out + i, *outLen);
wolfSSL 14:167253f4e170 27347 }
wolfSSL 14:167253f4e170 27348
wolfSSL 14:167253f4e170 27349 XMEMSET(e, 0, sizeof(e));
wolfSSL 14:167253f4e170 27350
wolfSSL 14:167253f4e170 27351 return err;
wolfSSL 14:167253f4e170 27352 }
wolfSSL 14:167253f4e170 27353 #endif /* WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 27354
wolfSSL 14:167253f4e170 27355 #endif /* WOLFSSL_SP_NO_3072 */
wolfSSL 14:167253f4e170 27356
wolfSSL 14:167253f4e170 27357 #endif /* WOLFSSL_HAVE_SP_RSA || WOLFSSL_HAVE_SP_DH */
wolfSSL 14:167253f4e170 27358 #ifdef WOLFSSL_HAVE_SP_ECC
wolfSSL 14:167253f4e170 27359 #ifndef WOLFSSL_SP_NO_256
wolfSSL 14:167253f4e170 27360
wolfSSL 14:167253f4e170 27361 /* Point structure to use. */
wolfSSL 14:167253f4e170 27362 typedef struct sp_point {
wolfSSL 14:167253f4e170 27363 sp_digit x[2 * 4];
wolfSSL 14:167253f4e170 27364 sp_digit y[2 * 4];
wolfSSL 14:167253f4e170 27365 sp_digit z[2 * 4];
wolfSSL 14:167253f4e170 27366 int infinity;
wolfSSL 14:167253f4e170 27367 } sp_point;
wolfSSL 14:167253f4e170 27368
wolfSSL 14:167253f4e170 27369 /* The modulus (prime) of the curve P256. */
wolfSSL 14:167253f4e170 27370 static sp_digit p256_mod[4] = {
wolfSSL 14:167253f4e170 27371 0xffffffffffffffffl,0x00000000ffffffffl,0x0000000000000000l,
wolfSSL 14:167253f4e170 27372 0xffffffff00000001l
wolfSSL 14:167253f4e170 27373 };
wolfSSL 14:167253f4e170 27374 /* The Montogmery normalizer for modulus of the curve P256. */
wolfSSL 14:167253f4e170 27375 static sp_digit p256_norm_mod[4] = {
wolfSSL 14:167253f4e170 27376 0x0000000000000001l,0xffffffff00000000l,0xffffffffffffffffl,
wolfSSL 14:167253f4e170 27377 0x00000000fffffffel
wolfSSL 14:167253f4e170 27378 };
wolfSSL 14:167253f4e170 27379 /* The Montogmery multiplier for modulus of the curve P256. */
wolfSSL 14:167253f4e170 27380 static sp_digit p256_mp_mod = 0x0000000000000001;
wolfSSL 14:167253f4e170 27381 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN) || \
wolfSSL 14:167253f4e170 27382 defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 27383 /* The order of the curve P256. */
wolfSSL 14:167253f4e170 27384 static sp_digit p256_order[4] = {
wolfSSL 14:167253f4e170 27385 0xf3b9cac2fc632551l,0xbce6faada7179e84l,0xffffffffffffffffl,
wolfSSL 14:167253f4e170 27386 0xffffffff00000000l
wolfSSL 14:167253f4e170 27387 };
wolfSSL 14:167253f4e170 27388 #endif
wolfSSL 14:167253f4e170 27389 /* The order of the curve P256 minus 2. */
wolfSSL 14:167253f4e170 27390 static sp_digit p256_order2[4] = {
wolfSSL 14:167253f4e170 27391 0xf3b9cac2fc63254fl,0xbce6faada7179e84l,0xffffffffffffffffl,
wolfSSL 14:167253f4e170 27392 0xffffffff00000000l
wolfSSL 14:167253f4e170 27393 };
wolfSSL 14:167253f4e170 27394 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 27395 /* The Montogmery normalizer for order of the curve P256. */
wolfSSL 14:167253f4e170 27396 static sp_digit p256_norm_order[4] = {
wolfSSL 14:167253f4e170 27397 0x0c46353d039cdaafl,0x4319055258e8617bl,0x0000000000000000l,
wolfSSL 14:167253f4e170 27398 0x00000000ffffffffl
wolfSSL 14:167253f4e170 27399 };
wolfSSL 14:167253f4e170 27400 #endif
wolfSSL 14:167253f4e170 27401 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 27402 /* The Montogmery multiplier for order of the curve P256. */
wolfSSL 14:167253f4e170 27403 static sp_digit p256_mp_order = 0xccd1c8aaee00bc4fl;
wolfSSL 14:167253f4e170 27404 #endif
wolfSSL 14:167253f4e170 27405 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 27406 /* The base point of curve P256. */
wolfSSL 14:167253f4e170 27407 static sp_point p256_base = {
wolfSSL 14:167253f4e170 27408 /* X ordinate */
wolfSSL 14:167253f4e170 27409 {
wolfSSL 14:167253f4e170 27410 0xf4a13945d898c296l,0x77037d812deb33a0l,0xf8bce6e563a440f2l,
wolfSSL 14:167253f4e170 27411 0x6b17d1f2e12c4247l
wolfSSL 14:167253f4e170 27412 },
wolfSSL 14:167253f4e170 27413 /* Y ordinate */
wolfSSL 14:167253f4e170 27414 {
wolfSSL 14:167253f4e170 27415 0xcbb6406837bf51f5l,0x2bce33576b315ecel,0x8ee7eb4a7c0f9e16l,
wolfSSL 14:167253f4e170 27416 0x4fe342e2fe1a7f9bl
wolfSSL 14:167253f4e170 27417 },
wolfSSL 14:167253f4e170 27418 /* Z ordinate */
wolfSSL 14:167253f4e170 27419 {
wolfSSL 14:167253f4e170 27420 0x0000000000000001l,0x0000000000000000l,0x0000000000000000l,
wolfSSL 14:167253f4e170 27421 0x0000000000000000l
wolfSSL 14:167253f4e170 27422 },
wolfSSL 14:167253f4e170 27423 /* infinity */
wolfSSL 14:167253f4e170 27424 0
wolfSSL 14:167253f4e170 27425 };
wolfSSL 14:167253f4e170 27426 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 27427 #if defined(HAVE_ECC_CHECK_KEY) || defined(HAVE_COMP_KEY)
wolfSSL 14:167253f4e170 27428 static sp_digit p256_b[4] = {
wolfSSL 14:167253f4e170 27429 0x3bce3c3e27d2604bl,0x651d06b0cc53b0f6l,0xb3ebbd55769886bcl,
wolfSSL 14:167253f4e170 27430 0x5ac635d8aa3a93e7l
wolfSSL 14:167253f4e170 27431 };
wolfSSL 14:167253f4e170 27432 #endif
wolfSSL 14:167253f4e170 27433
wolfSSL 14:167253f4e170 27434 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 27435 /* Allocate memory for point and return error. */
wolfSSL 14:167253f4e170 27436 #define sp_ecc_point_new(heap, sp, p) \
wolfSSL 14:167253f4e170 27437 ((p = XMALLOC(sizeof(sp_point), heap, DYNAMIC_TYPE_ECC)) == NULL) ? \
wolfSSL 14:167253f4e170 27438 MEMORY_E : MP_OKAY
wolfSSL 14:167253f4e170 27439 #else
wolfSSL 14:167253f4e170 27440 /* Set pointer to data and return no error. */
wolfSSL 14:167253f4e170 27441 #define sp_ecc_point_new(heap, sp, p) ((p = &sp) == NULL) ? MEMORY_E : MP_OKAY
wolfSSL 14:167253f4e170 27442 #endif
wolfSSL 14:167253f4e170 27443
wolfSSL 14:167253f4e170 27444 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 27445 /* If valid pointer then clear point data if requested and free data. */
wolfSSL 14:167253f4e170 27446 #define sp_ecc_point_free(p, clear, heap) \
wolfSSL 14:167253f4e170 27447 do { \
wolfSSL 14:167253f4e170 27448 if (p != NULL) { \
wolfSSL 14:167253f4e170 27449 if (clear) \
wolfSSL 14:167253f4e170 27450 XMEMSET(p, 0, sizeof(*p)); \
wolfSSL 14:167253f4e170 27451 XFREE(p, heap, DYNAMIC_TYPE_ECC); \
wolfSSL 14:167253f4e170 27452 } \
wolfSSL 14:167253f4e170 27453 } \
wolfSSL 14:167253f4e170 27454 while (0)
wolfSSL 14:167253f4e170 27455 #else
wolfSSL 14:167253f4e170 27456 /* Clear point data if requested. */
wolfSSL 14:167253f4e170 27457 #define sp_ecc_point_free(p, clear, heap) \
wolfSSL 14:167253f4e170 27458 do { \
wolfSSL 14:167253f4e170 27459 if (clear) \
wolfSSL 14:167253f4e170 27460 XMEMSET(p, 0, sizeof(*p)); \
wolfSSL 14:167253f4e170 27461 } \
wolfSSL 14:167253f4e170 27462 while (0)
wolfSSL 14:167253f4e170 27463 #endif
wolfSSL 14:167253f4e170 27464
wolfSSL 14:167253f4e170 27465 /* Multiply a number by Montogmery normalizer mod modulus (prime).
wolfSSL 14:167253f4e170 27466 *
wolfSSL 14:167253f4e170 27467 * r The resulting Montgomery form number.
wolfSSL 14:167253f4e170 27468 * a The number to convert.
wolfSSL 14:167253f4e170 27469 * m The modulus (prime).
wolfSSL 14:167253f4e170 27470 */
wolfSSL 14:167253f4e170 27471 static int sp_256_mod_mul_norm_4(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 27472 {
wolfSSL 14:167253f4e170 27473 int64_t t[8];
wolfSSL 14:167253f4e170 27474 int64_t a32[8];
wolfSSL 14:167253f4e170 27475 int64_t o;
wolfSSL 14:167253f4e170 27476
wolfSSL 14:167253f4e170 27477 (void)m;
wolfSSL 14:167253f4e170 27478
wolfSSL 14:167253f4e170 27479 a32[0] = a[0] & 0xffffffff;
wolfSSL 14:167253f4e170 27480 a32[1] = a[0] >> 32;
wolfSSL 14:167253f4e170 27481 a32[2] = a[1] & 0xffffffff;
wolfSSL 14:167253f4e170 27482 a32[3] = a[1] >> 32;
wolfSSL 14:167253f4e170 27483 a32[4] = a[2] & 0xffffffff;
wolfSSL 14:167253f4e170 27484 a32[5] = a[2] >> 32;
wolfSSL 14:167253f4e170 27485 a32[6] = a[3] & 0xffffffff;
wolfSSL 14:167253f4e170 27486 a32[7] = a[3] >> 32;
wolfSSL 14:167253f4e170 27487
wolfSSL 14:167253f4e170 27488 /* 1 1 0 -1 -1 -1 -1 0 */
wolfSSL 14:167253f4e170 27489 t[0] = 0 + a32[0] + a32[1] - a32[3] - a32[4] - a32[5] - a32[6];
wolfSSL 14:167253f4e170 27490 /* 0 1 1 0 -1 -1 -1 -1 */
wolfSSL 14:167253f4e170 27491 t[1] = 0 + a32[1] + a32[2] - a32[4] - a32[5] - a32[6] - a32[7];
wolfSSL 14:167253f4e170 27492 /* 0 0 1 1 0 -1 -1 -1 */
wolfSSL 14:167253f4e170 27493 t[2] = 0 + a32[2] + a32[3] - a32[5] - a32[6] - a32[7];
wolfSSL 14:167253f4e170 27494 /* -1 -1 0 2 2 1 0 -1 */
wolfSSL 14:167253f4e170 27495 t[3] = 0 - a32[0] - a32[1] + 2 * a32[3] + 2 * a32[4] + a32[5] - a32[7];
wolfSSL 14:167253f4e170 27496 /* 0 -1 -1 0 2 2 1 0 */
wolfSSL 14:167253f4e170 27497 t[4] = 0 - a32[1] - a32[2] + 2 * a32[4] + 2 * a32[5] + a32[6];
wolfSSL 14:167253f4e170 27498 /* 0 0 -1 -1 0 2 2 1 */
wolfSSL 14:167253f4e170 27499 t[5] = 0 - a32[2] - a32[3] + 2 * a32[5] + 2 * a32[6] + a32[7];
wolfSSL 14:167253f4e170 27500 /* -1 -1 0 0 0 1 3 2 */
wolfSSL 14:167253f4e170 27501 t[6] = 0 - a32[0] - a32[1] + a32[5] + 3 * a32[6] + 2 * a32[7];
wolfSSL 14:167253f4e170 27502 /* 1 0 -1 -1 -1 -1 0 3 */
wolfSSL 14:167253f4e170 27503 t[7] = 0 + a32[0] - a32[2] - a32[3] - a32[4] - a32[5] + 3 * a32[7];
wolfSSL 14:167253f4e170 27504
wolfSSL 14:167253f4e170 27505 t[1] += t[0] >> 32; t[0] &= 0xffffffff;
wolfSSL 14:167253f4e170 27506 t[2] += t[1] >> 32; t[1] &= 0xffffffff;
wolfSSL 14:167253f4e170 27507 t[3] += t[2] >> 32; t[2] &= 0xffffffff;
wolfSSL 14:167253f4e170 27508 t[4] += t[3] >> 32; t[3] &= 0xffffffff;
wolfSSL 14:167253f4e170 27509 t[5] += t[4] >> 32; t[4] &= 0xffffffff;
wolfSSL 14:167253f4e170 27510 t[6] += t[5] >> 32; t[5] &= 0xffffffff;
wolfSSL 14:167253f4e170 27511 t[7] += t[6] >> 32; t[6] &= 0xffffffff;
wolfSSL 14:167253f4e170 27512 o = t[7] >> 32; t[7] &= 0xffffffff;
wolfSSL 14:167253f4e170 27513 t[0] += o;
wolfSSL 14:167253f4e170 27514 t[3] -= o;
wolfSSL 14:167253f4e170 27515 t[6] -= o;
wolfSSL 14:167253f4e170 27516 t[7] += o;
wolfSSL 14:167253f4e170 27517 t[1] += t[0] >> 32; t[0] &= 0xffffffff;
wolfSSL 14:167253f4e170 27518 t[2] += t[1] >> 32; t[1] &= 0xffffffff;
wolfSSL 14:167253f4e170 27519 t[3] += t[2] >> 32; t[2] &= 0xffffffff;
wolfSSL 14:167253f4e170 27520 t[4] += t[3] >> 32; t[3] &= 0xffffffff;
wolfSSL 14:167253f4e170 27521 t[5] += t[4] >> 32; t[4] &= 0xffffffff;
wolfSSL 14:167253f4e170 27522 t[6] += t[5] >> 32; t[5] &= 0xffffffff;
wolfSSL 14:167253f4e170 27523 t[7] += t[6] >> 32; t[6] &= 0xffffffff;
wolfSSL 14:167253f4e170 27524 r[0] = (t[1] << 32) | t[0];
wolfSSL 14:167253f4e170 27525 r[1] = (t[3] << 32) | t[2];
wolfSSL 14:167253f4e170 27526 r[2] = (t[5] << 32) | t[4];
wolfSSL 14:167253f4e170 27527 r[3] = (t[7] << 32) | t[6];
wolfSSL 14:167253f4e170 27528
wolfSSL 14:167253f4e170 27529 return MP_OKAY;
wolfSSL 14:167253f4e170 27530 }
wolfSSL 14:167253f4e170 27531
wolfSSL 14:167253f4e170 27532 /* Convert an mp_int to an array of sp_digit.
wolfSSL 14:167253f4e170 27533 *
wolfSSL 14:167253f4e170 27534 * r A single precision integer.
wolfSSL 14:167253f4e170 27535 * a A multi-precision integer.
wolfSSL 14:167253f4e170 27536 */
wolfSSL 14:167253f4e170 27537 static void sp_256_from_mp(sp_digit* r, int max, mp_int* a)
wolfSSL 14:167253f4e170 27538 {
wolfSSL 14:167253f4e170 27539 #if DIGIT_BIT == 64
wolfSSL 14:167253f4e170 27540 int j;
wolfSSL 14:167253f4e170 27541
wolfSSL 14:167253f4e170 27542 XMEMCPY(r, a->dp, sizeof(sp_digit) * a->used);
wolfSSL 14:167253f4e170 27543
wolfSSL 14:167253f4e170 27544 for (j = a->used; j < max; j++)
wolfSSL 14:167253f4e170 27545 r[j] = 0;
wolfSSL 14:167253f4e170 27546 #elif DIGIT_BIT > 64
wolfSSL 14:167253f4e170 27547 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 27548
wolfSSL 14:167253f4e170 27549 r[0] = 0;
wolfSSL 14:167253f4e170 27550 for (i = 0; i < a->used && j < max; i++) {
wolfSSL 14:167253f4e170 27551 r[j] |= a->dp[i] << s;
wolfSSL 14:167253f4e170 27552 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 27553 s = 64 - s;
wolfSSL 14:167253f4e170 27554 if (j + 1 >= max)
wolfSSL 14:167253f4e170 27555 break;
wolfSSL 14:167253f4e170 27556 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 27557 while (s + 64 <= DIGIT_BIT) {
wolfSSL 14:167253f4e170 27558 s += 64;
wolfSSL 14:167253f4e170 27559 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 27560 if (j + 1 >= max)
wolfSSL 14:167253f4e170 27561 break;
wolfSSL 14:167253f4e170 27562 if (s < DIGIT_BIT)
wolfSSL 14:167253f4e170 27563 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 27564 else
wolfSSL 14:167253f4e170 27565 r[++j] = 0;
wolfSSL 14:167253f4e170 27566 }
wolfSSL 14:167253f4e170 27567 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 27568 }
wolfSSL 14:167253f4e170 27569
wolfSSL 14:167253f4e170 27570 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 27571 r[j] = 0;
wolfSSL 14:167253f4e170 27572 #else
wolfSSL 14:167253f4e170 27573 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 27574
wolfSSL 14:167253f4e170 27575 r[0] = 0;
wolfSSL 14:167253f4e170 27576 for (i = 0; i < a->used && j < max; i++) {
wolfSSL 14:167253f4e170 27577 r[j] |= ((sp_digit)a->dp[i]) << s;
wolfSSL 14:167253f4e170 27578 if (s + DIGIT_BIT >= 64) {
wolfSSL 14:167253f4e170 27579 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 27580 if (j + 1 >= max)
wolfSSL 14:167253f4e170 27581 break;
wolfSSL 14:167253f4e170 27582 s = 64 - s;
wolfSSL 14:167253f4e170 27583 if (s == DIGIT_BIT) {
wolfSSL 14:167253f4e170 27584 r[++j] = 0;
wolfSSL 14:167253f4e170 27585 s = 0;
wolfSSL 14:167253f4e170 27586 }
wolfSSL 14:167253f4e170 27587 else {
wolfSSL 14:167253f4e170 27588 r[++j] = a->dp[i] >> s;
wolfSSL 14:167253f4e170 27589 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 27590 }
wolfSSL 14:167253f4e170 27591 }
wolfSSL 14:167253f4e170 27592 else
wolfSSL 14:167253f4e170 27593 s += DIGIT_BIT;
wolfSSL 14:167253f4e170 27594 }
wolfSSL 14:167253f4e170 27595
wolfSSL 14:167253f4e170 27596 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 27597 r[j] = 0;
wolfSSL 14:167253f4e170 27598 #endif
wolfSSL 14:167253f4e170 27599 }
wolfSSL 14:167253f4e170 27600
wolfSSL 14:167253f4e170 27601 /* Convert a point of type ecc_point to type sp_point.
wolfSSL 14:167253f4e170 27602 *
wolfSSL 14:167253f4e170 27603 * p Point of type sp_point (result).
wolfSSL 14:167253f4e170 27604 * pm Point of type ecc_point.
wolfSSL 14:167253f4e170 27605 */
wolfSSL 14:167253f4e170 27606 static void sp_256_point_from_ecc_point_4(sp_point* p, ecc_point* pm)
wolfSSL 14:167253f4e170 27607 {
wolfSSL 14:167253f4e170 27608 XMEMSET(p->x, 0, sizeof(p->x));
wolfSSL 14:167253f4e170 27609 XMEMSET(p->y, 0, sizeof(p->y));
wolfSSL 14:167253f4e170 27610 XMEMSET(p->z, 0, sizeof(p->z));
wolfSSL 14:167253f4e170 27611 sp_256_from_mp(p->x, 4, pm->x);
wolfSSL 14:167253f4e170 27612 sp_256_from_mp(p->y, 4, pm->y);
wolfSSL 14:167253f4e170 27613 sp_256_from_mp(p->z, 4, pm->z);
wolfSSL 14:167253f4e170 27614 p->infinity = 0;
wolfSSL 14:167253f4e170 27615 }
wolfSSL 14:167253f4e170 27616
wolfSSL 14:167253f4e170 27617 /* Convert an array of sp_digit to an mp_int.
wolfSSL 14:167253f4e170 27618 *
wolfSSL 14:167253f4e170 27619 * a A single precision integer.
wolfSSL 14:167253f4e170 27620 * r A multi-precision integer.
wolfSSL 14:167253f4e170 27621 */
wolfSSL 14:167253f4e170 27622 static int sp_256_to_mp(sp_digit* a, mp_int* r)
wolfSSL 14:167253f4e170 27623 {
wolfSSL 14:167253f4e170 27624 int err;
wolfSSL 14:167253f4e170 27625
wolfSSL 14:167253f4e170 27626 err = mp_grow(r, (256 + DIGIT_BIT - 1) / DIGIT_BIT);
wolfSSL 14:167253f4e170 27627 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 27628 #if DIGIT_BIT == 64
wolfSSL 14:167253f4e170 27629 XMEMCPY(r->dp, a, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 27630 r->used = 4;
wolfSSL 14:167253f4e170 27631 mp_clamp(r);
wolfSSL 14:167253f4e170 27632 #elif DIGIT_BIT < 64
wolfSSL 14:167253f4e170 27633 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 27634
wolfSSL 14:167253f4e170 27635 r->dp[0] = 0;
wolfSSL 14:167253f4e170 27636 for (i = 0; i < 4; i++) {
wolfSSL 14:167253f4e170 27637 r->dp[j] |= a[i] << s;
wolfSSL 14:167253f4e170 27638 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 27639 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 27640 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 27641 while (s + DIGIT_BIT <= 64) {
wolfSSL 14:167253f4e170 27642 s += DIGIT_BIT;
wolfSSL 14:167253f4e170 27643 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 27644 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 27645 }
wolfSSL 14:167253f4e170 27646 s = 64 - s;
wolfSSL 14:167253f4e170 27647 }
wolfSSL 14:167253f4e170 27648 r->used = (256 + DIGIT_BIT - 1) / DIGIT_BIT;
wolfSSL 14:167253f4e170 27649 mp_clamp(r);
wolfSSL 14:167253f4e170 27650 #else
wolfSSL 14:167253f4e170 27651 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 27652
wolfSSL 14:167253f4e170 27653 r->dp[0] = 0;
wolfSSL 14:167253f4e170 27654 for (i = 0; i < 4; i++) {
wolfSSL 14:167253f4e170 27655 r->dp[j] |= ((mp_digit)a[i]) << s;
wolfSSL 14:167253f4e170 27656 if (s + 64 >= DIGIT_BIT) {
wolfSSL 14:167253f4e170 27657 #if DIGIT_BIT < 64
wolfSSL 14:167253f4e170 27658 r->dp[j] &= (1l << DIGIT_BIT) - 1;
wolfSSL 14:167253f4e170 27659 #endif
wolfSSL 14:167253f4e170 27660 s = DIGIT_BIT - s;
wolfSSL 14:167253f4e170 27661 r->dp[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 27662 s = 64 - s;
wolfSSL 14:167253f4e170 27663 }
wolfSSL 14:167253f4e170 27664 else
wolfSSL 14:167253f4e170 27665 s += 64;
wolfSSL 14:167253f4e170 27666 }
wolfSSL 14:167253f4e170 27667 r->used = (256 + DIGIT_BIT - 1) / DIGIT_BIT;
wolfSSL 14:167253f4e170 27668 mp_clamp(r);
wolfSSL 14:167253f4e170 27669 #endif
wolfSSL 14:167253f4e170 27670 }
wolfSSL 14:167253f4e170 27671
wolfSSL 14:167253f4e170 27672 return err;
wolfSSL 14:167253f4e170 27673 }
wolfSSL 14:167253f4e170 27674
wolfSSL 14:167253f4e170 27675 /* Convert a point of type sp_point to type ecc_point.
wolfSSL 14:167253f4e170 27676 *
wolfSSL 14:167253f4e170 27677 * p Point of type sp_point.
wolfSSL 14:167253f4e170 27678 * pm Point of type ecc_point (result).
wolfSSL 14:167253f4e170 27679 * returns MEMORY_E when allocation of memory in ecc_point fails otherwise
wolfSSL 14:167253f4e170 27680 * MP_OKAY.
wolfSSL 14:167253f4e170 27681 */
wolfSSL 14:167253f4e170 27682 static int sp_256_point_to_ecc_point_4(sp_point* p, ecc_point* pm)
wolfSSL 14:167253f4e170 27683 {
wolfSSL 14:167253f4e170 27684 int err;
wolfSSL 14:167253f4e170 27685
wolfSSL 14:167253f4e170 27686 err = sp_256_to_mp(p->x, pm->x);
wolfSSL 14:167253f4e170 27687 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 27688 err = sp_256_to_mp(p->y, pm->y);
wolfSSL 14:167253f4e170 27689 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 27690 err = sp_256_to_mp(p->z, pm->z);
wolfSSL 14:167253f4e170 27691
wolfSSL 14:167253f4e170 27692 return err;
wolfSSL 14:167253f4e170 27693 }
wolfSSL 14:167253f4e170 27694
wolfSSL 14:167253f4e170 27695 /* Conditionally copy a into r using the mask m.
wolfSSL 14:167253f4e170 27696 * m is -1 to copy and 0 when not.
wolfSSL 14:167253f4e170 27697 *
wolfSSL 14:167253f4e170 27698 * r A single precision number to copy over.
wolfSSL 14:167253f4e170 27699 * a A single precision number to copy.
wolfSSL 14:167253f4e170 27700 * m Mask value to apply.
wolfSSL 14:167253f4e170 27701 */
wolfSSL 14:167253f4e170 27702 static void sp_256_cond_copy_4(sp_digit* r, const sp_digit* a, const sp_digit m)
wolfSSL 14:167253f4e170 27703 {
wolfSSL 14:167253f4e170 27704 sp_digit t[4];
wolfSSL 14:167253f4e170 27705 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 27706 "movq (%[r]), %%rax\n\t"
wolfSSL 14:167253f4e170 27707 "movq 8(%[r]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27708 "movq 16(%[r]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27709 "movq 24(%[r]), %%r8\n\t"
wolfSSL 14:167253f4e170 27710 "xorq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 27711 "xorq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27712 "xorq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27713 "xorq 24(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 27714 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 27715 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 27716 "andq %[m], %%rdx\n\t"
wolfSSL 14:167253f4e170 27717 "andq %[m], %%r8\n\t"
wolfSSL 14:167253f4e170 27718 "xorq %%rax, (%[r])\n\t"
wolfSSL 14:167253f4e170 27719 "xorq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 27720 "xorq %%rdx, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 27721 "xorq %%r8, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 27722 :
wolfSSL 14:167253f4e170 27723 : [r] "r" (r), [a] "r" (a), [m] "r" (m), [t] "r" (t)
wolfSSL 14:167253f4e170 27724 : "memory", "rax", "rcx", "rdx", "r8"
wolfSSL 14:167253f4e170 27725 );
wolfSSL 14:167253f4e170 27726 }
wolfSSL 14:167253f4e170 27727
wolfSSL 14:167253f4e170 27728 /* Compare a with b in constant time.
wolfSSL 14:167253f4e170 27729 *
wolfSSL 14:167253f4e170 27730 * a A single precision integer.
wolfSSL 14:167253f4e170 27731 * b A single precision integer.
wolfSSL 14:167253f4e170 27732 * return -ve, 0 or +ve if a is less than, equal to or greater than b
wolfSSL 14:167253f4e170 27733 * respectively.
wolfSSL 14:167253f4e170 27734 */
wolfSSL 14:167253f4e170 27735 static int64_t sp_256_cmp_4(sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 27736 {
wolfSSL 14:167253f4e170 27737 sp_digit r = -1;
wolfSSL 14:167253f4e170 27738 sp_digit one = 1;
wolfSSL 14:167253f4e170 27739
wolfSSL 14:167253f4e170 27740 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 27741 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 27742 "movq $-1, %%rdx\n\t"
wolfSSL 14:167253f4e170 27743 "movq 24(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 27744 "movq 24(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 27745 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 27746 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 27747 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 27748 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 27749 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 27750 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 27751 "movq 16(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 27752 "movq 16(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 27753 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 27754 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 27755 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 27756 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 27757 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 27758 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 27759 "movq 8(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 27760 "movq 8(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 27761 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 27762 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 27763 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 27764 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 27765 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 27766 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 27767 "movq 0(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 27768 "movq 0(%[b]), %%r8\n\t"
wolfSSL 14:167253f4e170 27769 "andq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 27770 "andq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 27771 "subq %%r8, %%rbx\n\t"
wolfSSL 14:167253f4e170 27772 "cmova %[one], %[r]\n\t"
wolfSSL 14:167253f4e170 27773 "cmovc %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 27774 "cmovnz %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 27775 "xorq %%rdx, %[r]\n\t"
wolfSSL 14:167253f4e170 27776 : [r] "+r" (r)
wolfSSL 14:167253f4e170 27777 : [a] "r" (a), [b] "r" (b), [one] "r" (one)
wolfSSL 14:167253f4e170 27778 : "rax", "rdx", "rcx", "rbx", "r8"
wolfSSL 14:167253f4e170 27779 );
wolfSSL 14:167253f4e170 27780
wolfSSL 14:167253f4e170 27781 return r;
wolfSSL 14:167253f4e170 27782 }
wolfSSL 14:167253f4e170 27783
wolfSSL 14:167253f4e170 27784 /* Normalize the values in each word to 64.
wolfSSL 14:167253f4e170 27785 *
wolfSSL 14:167253f4e170 27786 * a Array of sp_digit to normalize.
wolfSSL 14:167253f4e170 27787 */
wolfSSL 14:167253f4e170 27788 #define sp_256_norm_4(a)
wolfSSL 14:167253f4e170 27789
wolfSSL 14:167253f4e170 27790 /* Conditionally subtract b from a using the mask m.
wolfSSL 14:167253f4e170 27791 * m is -1 to subtract and 0 when not copying.
wolfSSL 14:167253f4e170 27792 *
wolfSSL 14:167253f4e170 27793 * r A single precision number representing condition subtract result.
wolfSSL 14:167253f4e170 27794 * a A single precision number to subtract from.
wolfSSL 14:167253f4e170 27795 * b A single precision number to subtract.
wolfSSL 14:167253f4e170 27796 * m Mask value to apply.
wolfSSL 14:167253f4e170 27797 */
wolfSSL 14:167253f4e170 27798 static sp_digit sp_256_cond_sub_4(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 27799 sp_digit m)
wolfSSL 14:167253f4e170 27800 {
wolfSSL 14:167253f4e170 27801 sp_digit t[4];
wolfSSL 14:167253f4e170 27802 sp_digit c = 0;
wolfSSL 14:167253f4e170 27803
wolfSSL 14:167253f4e170 27804 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 27805 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 27806 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27807 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 27808 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 27809 "movq %%rax, 0(%[t])\n\t"
wolfSSL 14:167253f4e170 27810 "movq %%rcx, 8(%[t])\n\t"
wolfSSL 14:167253f4e170 27811 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 27812 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27813 "andq %[m], %%rax\n\t"
wolfSSL 14:167253f4e170 27814 "andq %[m], %%rcx\n\t"
wolfSSL 14:167253f4e170 27815 "movq %%rax, 16(%[t])\n\t"
wolfSSL 14:167253f4e170 27816 "movq %%rcx, 24(%[t])\n\t"
wolfSSL 14:167253f4e170 27817 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 27818 "movq (%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27819 "subq %%rdx,%%rax\n\t"
wolfSSL 14:167253f4e170 27820 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27821 "movq 8(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27822 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 27823 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 27824 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 27825 "movq 16(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27826 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 27827 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 27828 "movq 24(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27829 "movq 24(%[t]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27830 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 27831 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 27832 "movq %%rcx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 27833 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 27834 : [c] "+r" (c)
wolfSSL 14:167253f4e170 27835 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m), [t] "r" (t)
wolfSSL 14:167253f4e170 27836 : "memory", "rax", "rcx", "rdx"
wolfSSL 14:167253f4e170 27837 );
wolfSSL 14:167253f4e170 27838
wolfSSL 14:167253f4e170 27839 return c;
wolfSSL 14:167253f4e170 27840 }
wolfSSL 14:167253f4e170 27841
wolfSSL 14:167253f4e170 27842 /* Sub b from a into r. (r = a - b)
wolfSSL 14:167253f4e170 27843 *
wolfSSL 14:167253f4e170 27844 * r A single precision integer.
wolfSSL 14:167253f4e170 27845 * a A single precision integer.
wolfSSL 14:167253f4e170 27846 * b A single precision integer.
wolfSSL 14:167253f4e170 27847 */
wolfSSL 14:167253f4e170 27848 SP_NOINLINE static sp_digit sp_256_sub_4(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 27849 const sp_digit* b)
wolfSSL 14:167253f4e170 27850 {
wolfSSL 14:167253f4e170 27851 sp_digit c = 0;
wolfSSL 14:167253f4e170 27852
wolfSSL 14:167253f4e170 27853 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 27854 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 27855 "movq (%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27856 "subq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 27857 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27858 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27859 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 27860 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 27861 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 27862 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27863 "sbbq %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 27864 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 27865 "movq 24(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27866 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27867 "sbbq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 27868 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 27869 "movq %%rcx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 27870 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 27871 : [c] "+r" (c)
wolfSSL 14:167253f4e170 27872 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 27873 : "memory", "rax", "rcx", "rdx"
wolfSSL 14:167253f4e170 27874 );
wolfSSL 14:167253f4e170 27875
wolfSSL 14:167253f4e170 27876 return c;
wolfSSL 14:167253f4e170 27877 }
wolfSSL 14:167253f4e170 27878
wolfSSL 14:167253f4e170 27879 /* Reduce the number back to 256 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 27880 *
wolfSSL 14:167253f4e170 27881 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 27882 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 27883 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 27884 */
wolfSSL 14:167253f4e170 27885 SP_NOINLINE static void sp_256_mont_reduce_4(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 27886 sp_digit mp)
wolfSSL 14:167253f4e170 27887 {
wolfSSL 14:167253f4e170 27888 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 27889 "# i = 0\n\t"
wolfSSL 14:167253f4e170 27890 "xorq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 27891 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 27892 "movq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 27893 "\nL_mont_loop_4:\n\t"
wolfSSL 14:167253f4e170 27894 "# mu = a[i] * mp\n\t"
wolfSSL 14:167253f4e170 27895 "movq 0(%%r12), %%r11\n\t"
wolfSSL 14:167253f4e170 27896 "imulq %[mp], %%r11\n\t"
wolfSSL 14:167253f4e170 27897 "# a[i+0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 27898 "movq 0(%[m]), %%rax\n\t"
wolfSSL 14:167253f4e170 27899 "movq 8(%[m]), %%r9\n\t"
wolfSSL 14:167253f4e170 27900 "mulq %%r11\n\t"
wolfSSL 14:167253f4e170 27901 "movq 0(%%r12), %%rbx\n\t"
wolfSSL 14:167253f4e170 27902 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 27903 "movq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 27904 "movq %%rbx, 0(%%r12)\n\t"
wolfSSL 14:167253f4e170 27905 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 27906 "# a[i+1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 27907 "movq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 27908 "mulq %%r11\n\t"
wolfSSL 14:167253f4e170 27909 "movq 16(%[m]), %%r9\n\t"
wolfSSL 14:167253f4e170 27910 "movq 8(%%r12), %%rbx\n\t"
wolfSSL 14:167253f4e170 27911 "addq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 27912 "movq %%rdx, %%r10\n\t"
wolfSSL 14:167253f4e170 27913 "adcq $0, %%r10\n\t"
wolfSSL 14:167253f4e170 27914 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 27915 "movq %%rbx, 8(%%r12)\n\t"
wolfSSL 14:167253f4e170 27916 "adcq $0, %%r10\n\t"
wolfSSL 14:167253f4e170 27917 "# a[i+2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 27918 "movq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 27919 "mulq %%r11\n\t"
wolfSSL 14:167253f4e170 27920 "movq 24(%[m]), %%r9\n\t"
wolfSSL 14:167253f4e170 27921 "movq 16(%%r12), %%rbx\n\t"
wolfSSL 14:167253f4e170 27922 "addq %%r10, %%rax\n\t"
wolfSSL 14:167253f4e170 27923 "movq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 27924 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 27925 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 27926 "movq %%rbx, 16(%%r12)\n\t"
wolfSSL 14:167253f4e170 27927 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 27928 "# a[i+3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 27929 "movq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 27930 "mulq %%r11\n\t"
wolfSSL 14:167253f4e170 27931 "movq 24(%%r12), %%rbx\n\t"
wolfSSL 14:167253f4e170 27932 "addq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 27933 "adcq %%r13, %%rdx\n\t"
wolfSSL 14:167253f4e170 27934 "movq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 27935 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 27936 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 27937 "movq %%rbx, 24(%%r12)\n\t"
wolfSSL 14:167253f4e170 27938 "adcq %%rdx, 32(%%r12)\n\t"
wolfSSL 14:167253f4e170 27939 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 27940 "# i += 1\n\t"
wolfSSL 14:167253f4e170 27941 "addq $8, %%r12\n\t"
wolfSSL 14:167253f4e170 27942 "addq $8, %%rcx\n\t"
wolfSSL 14:167253f4e170 27943 "cmpq $32, %%rcx\n\t"
wolfSSL 14:167253f4e170 27944 "jl L_mont_loop_4\n\t"
wolfSSL 14:167253f4e170 27945 "xorq %%rax, %%rax\n\t"
wolfSSL 14:167253f4e170 27946 "movq 32(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 27947 "movq 40(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 27948 "movq 48(%[a]), %%rbx\n\t"
wolfSSL 14:167253f4e170 27949 "movq 56(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 27950 "subq %%r13, %%rax\n\t"
wolfSSL 14:167253f4e170 27951 "movq 0(%[m]), %%r9\n\t"
wolfSSL 14:167253f4e170 27952 "movq 8(%[m]), %%r10\n\t"
wolfSSL 14:167253f4e170 27953 "movq 16(%[m]), %%r11\n\t"
wolfSSL 14:167253f4e170 27954 "movq 24(%[m]), %%r12\n\t"
wolfSSL 14:167253f4e170 27955 "andq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 27956 "andq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 27957 "andq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 27958 "andq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 27959 "subq %%r9, %%rdx\n\t"
wolfSSL 14:167253f4e170 27960 "sbbq %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 27961 "sbbq %%r11, %%rbx\n\t"
wolfSSL 14:167253f4e170 27962 "sbbq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 27963 "movq %%rdx, (%[a])\n\t"
wolfSSL 14:167253f4e170 27964 "movq %%rcx, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 27965 "movq %%rbx, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 27966 "movq %%r8, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 27967 :
wolfSSL 14:167253f4e170 27968 : [a] "r" (a), [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 27969 : "memory", "rax", "rbx", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 27970 "r12", "r13"
wolfSSL 14:167253f4e170 27971 );
wolfSSL 14:167253f4e170 27972 }
wolfSSL 14:167253f4e170 27973
wolfSSL 14:167253f4e170 27974 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 27975 * (r = a * b mod m)
wolfSSL 14:167253f4e170 27976 *
wolfSSL 14:167253f4e170 27977 * r Result of multiplication.
wolfSSL 14:167253f4e170 27978 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 27979 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 27980 * m Modulus (prime).
wolfSSL 14:167253f4e170 27981 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 27982 */
wolfSSL 14:167253f4e170 27983 SP_NOINLINE static void sp_256_mont_mul_4(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 27984 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 27985 {
wolfSSL 14:167253f4e170 27986 (void)mp;
wolfSSL 14:167253f4e170 27987
wolfSSL 14:167253f4e170 27988 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 27989 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 27990 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 27991 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 27992 "movq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 27993 "movq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 27994 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 27995 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 27996 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 27997 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 27998 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 27999 "adcq %%rdx, %%r10\n\t"
wolfSSL 14:167253f4e170 28000 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 28001 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28002 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 28003 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28004 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 28005 "adcq %%rdx, %%r10\n\t"
wolfSSL 14:167253f4e170 28006 "adcq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28007 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 28008 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28009 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 28010 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 28011 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 28012 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 28013 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28014 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 28015 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 28016 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 28017 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 28018 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 28019 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 28020 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28021 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 28022 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 28023 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 28024 "adcq $0, %%r12\n\t"
wolfSSL 14:167253f4e170 28025 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 28026 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28027 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 28028 "xorq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 28029 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28030 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28031 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 28032 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 28033 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28034 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 28035 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28036 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28037 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 28038 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 28039 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28040 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 28041 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28042 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28043 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 28044 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 28045 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28046 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28047 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28048 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28049 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 28050 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 28051 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28052 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 28053 "xorq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 28054 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28055 "adcq %%rdx, %%r13\n\t"
wolfSSL 14:167253f4e170 28056 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28057 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 28058 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28059 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 28060 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28061 "adcq %%rdx, %%r13\n\t"
wolfSSL 14:167253f4e170 28062 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28063 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 28064 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28065 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28066 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28067 "adcq %%rdx, %%r13\n\t"
wolfSSL 14:167253f4e170 28068 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28069 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 28070 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28071 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 28072 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 28073 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 28074 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28075 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28076 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 28077 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28078 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28079 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 28080 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28081 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28082 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 28083 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28084 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28085 "addq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 28086 "adcq %%rdx, %%r15\n\t"
wolfSSL 14:167253f4e170 28087 "# Start Reduction\n\t"
wolfSSL 14:167253f4e170 28088 "movq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 28089 "movq %%r9, %[a]\n\t"
wolfSSL 14:167253f4e170 28090 "movq %%r10, %[b]\n\t"
wolfSSL 14:167253f4e170 28091 "movq %%r11, %%rdx\n\t"
wolfSSL 14:167253f4e170 28092 "# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 28093 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 28094 "# + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 28095 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28096 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28097 "# a[0]-a[2] << 32\n\t"
wolfSSL 14:167253f4e170 28098 "shlq $32, %%r8\n\t"
wolfSSL 14:167253f4e170 28099 "shldq $32, %[a], %%r10\n\t"
wolfSSL 14:167253f4e170 28100 "shldq $32, %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 28101 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 28102 "subq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28103 "# + a[0]-a[2] << 32 << 64\n\t"
wolfSSL 14:167253f4e170 28104 "addq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 28105 "adcq %%r9, %[b]\n\t"
wolfSSL 14:167253f4e170 28106 "adcq %%r10, %%rdx\n\t"
wolfSSL 14:167253f4e170 28107 "# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu\n\t"
wolfSSL 14:167253f4e170 28108 "# a += mu << 256\n\t"
wolfSSL 14:167253f4e170 28109 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 28110 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28111 "adcq %[a], %%r13\n\t"
wolfSSL 14:167253f4e170 28112 "adcq %[b], %%r14\n\t"
wolfSSL 14:167253f4e170 28113 "adcq %%rdx, %%r15\n\t"
wolfSSL 14:167253f4e170 28114 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28115 "# a += mu << 192\n\t"
wolfSSL 14:167253f4e170 28116 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28117 "adcq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 28118 "adcq %[b], %%r13\n\t"
wolfSSL 14:167253f4e170 28119 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28120 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28121 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28122 "# mu <<= 32\n\t"
wolfSSL 14:167253f4e170 28123 "movq %%rdx, %[m]\n\t"
wolfSSL 14:167253f4e170 28124 "shldq $32, %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 28125 "shldq $32, %[a], %[b]\n\t"
wolfSSL 14:167253f4e170 28126 "shldq $32, %%rax, %[a]\n\t"
wolfSSL 14:167253f4e170 28127 "shlq $32, %%rax\n\t"
wolfSSL 14:167253f4e170 28128 "shrq $32, %[m]\n\t"
wolfSSL 14:167253f4e170 28129 "# a += (mu << 32) << 64\n\t"
wolfSSL 14:167253f4e170 28130 "addq %[b], %%r11\n\t"
wolfSSL 14:167253f4e170 28131 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28132 "adcq %[m], %%r13\n\t"
wolfSSL 14:167253f4e170 28133 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28134 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28135 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28136 "# a -= (mu << 32) << 192\n\t"
wolfSSL 14:167253f4e170 28137 "subq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28138 "movq $0xffffffff, %%rax\n\t"
wolfSSL 14:167253f4e170 28139 "sbbq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 28140 "movq $0xffffffff00000001, %[a]\n\t"
wolfSSL 14:167253f4e170 28141 "sbbq %[b], %%r13\n\t"
wolfSSL 14:167253f4e170 28142 "sbbq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28143 "sbbq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 28144 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28145 "# mask m and sub from result if overflow\n\t"
wolfSSL 14:167253f4e170 28146 "# m[0] = -1 & mask = mask\n\t"
wolfSSL 14:167253f4e170 28147 "andq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 28148 "# m[2] = 0 & mask = 0\n\t"
wolfSSL 14:167253f4e170 28149 "andq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 28150 "subq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 28151 "sbbq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 28152 "sbbq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28153 "sbbq %[a], %%r15\n\t"
wolfSSL 14:167253f4e170 28154 "movq %%r12, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28155 "movq %%r13, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28156 "movq %%r14, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28157 "movq %%r15, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28158 : [m] "+r" (m), [a] "+r" (a), [b] "+r" (b)
wolfSSL 14:167253f4e170 28159 : [r] "r" (r)
wolfSSL 14:167253f4e170 28160 : "memory", "rax", "rdx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 28161 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 28162 );
wolfSSL 14:167253f4e170 28163 }
wolfSSL 14:167253f4e170 28164
wolfSSL 14:167253f4e170 28165 /* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
wolfSSL 14:167253f4e170 28166 *
wolfSSL 14:167253f4e170 28167 * r Result of squaring.
wolfSSL 14:167253f4e170 28168 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 28169 * m Modulus (prime).
wolfSSL 14:167253f4e170 28170 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 28171 */
wolfSSL 14:167253f4e170 28172 SP_NOINLINE static void sp_256_mont_sqr_4(sp_digit* r, sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 28173 sp_digit mp)
wolfSSL 14:167253f4e170 28174 {
wolfSSL 14:167253f4e170 28175 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 28176 "# A[0] * A[1]\n\t"
wolfSSL 14:167253f4e170 28177 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28178 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 28179 "movq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 28180 "movq %%rdx, %%r10\n\t"
wolfSSL 14:167253f4e170 28181 "# A[0] * A[2]\n\t"
wolfSSL 14:167253f4e170 28182 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28183 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 28184 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28185 "addq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 28186 "adcq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 28187 "# A[0] * A[3]\n\t"
wolfSSL 14:167253f4e170 28188 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28189 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28190 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 28191 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28192 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28193 "# A[1] * A[2]\n\t"
wolfSSL 14:167253f4e170 28194 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28195 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 28196 "xorq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 28197 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28198 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28199 "adcq $0, %%r13\n\t"
wolfSSL 14:167253f4e170 28200 "# A[1] * A[3]\n\t"
wolfSSL 14:167253f4e170 28201 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28202 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28203 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28204 "adcq %%rdx, %%r13\n\t"
wolfSSL 14:167253f4e170 28205 "# A[2] * A[3]\n\t"
wolfSSL 14:167253f4e170 28206 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28207 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 28208 "xorq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 28209 "addq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 28210 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28211 "# Double\n\t"
wolfSSL 14:167253f4e170 28212 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 28213 "addq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 28214 "adcq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 28215 "adcq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28216 "adcq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 28217 "adcq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 28218 "adcq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 28219 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28220 "# A[0] * A[0]\n\t"
wolfSSL 14:167253f4e170 28221 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28222 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 28223 "movq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 28224 "movq %%rdx, %[mp]\n\t"
wolfSSL 14:167253f4e170 28225 "# A[1] * A[1]\n\t"
wolfSSL 14:167253f4e170 28226 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28227 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 28228 "addq %[mp], %%r9\n\t"
wolfSSL 14:167253f4e170 28229 "adcq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 28230 "adcq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28231 "movq %%rdx, %[mp]\n\t"
wolfSSL 14:167253f4e170 28232 "# A[2] * A[2]\n\t"
wolfSSL 14:167253f4e170 28233 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28234 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 28235 "addq %[mp], %%r11\n\t"
wolfSSL 14:167253f4e170 28236 "adcq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28237 "adcq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28238 "movq %%rdx, %[mp]\n\t"
wolfSSL 14:167253f4e170 28239 "# A[3] * A[3]\n\t"
wolfSSL 14:167253f4e170 28240 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28241 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 28242 "addq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 28243 "adcq %%rdx, %%r15\n\t"
wolfSSL 14:167253f4e170 28244 "addq %[mp], %%r13\n\t"
wolfSSL 14:167253f4e170 28245 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28246 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28247 "# Start Reduction\n\t"
wolfSSL 14:167253f4e170 28248 "movq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 28249 "movq %%r9, %[a]\n\t"
wolfSSL 14:167253f4e170 28250 "movq %%r10, %[mp]\n\t"
wolfSSL 14:167253f4e170 28251 "movq %%r11, %%rdx\n\t"
wolfSSL 14:167253f4e170 28252 "# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 28253 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 28254 "# + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 28255 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28256 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28257 "# a[0]-a[2] << 32\n\t"
wolfSSL 14:167253f4e170 28258 "shlq $32, %%r8\n\t"
wolfSSL 14:167253f4e170 28259 "shldq $32, %[a], %%r10\n\t"
wolfSSL 14:167253f4e170 28260 "shldq $32, %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 28261 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 28262 "subq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28263 "# + a[0]-a[2] << 32 << 64\n\t"
wolfSSL 14:167253f4e170 28264 "addq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 28265 "adcq %%r9, %[mp]\n\t"
wolfSSL 14:167253f4e170 28266 "adcq %%r10, %%rdx\n\t"
wolfSSL 14:167253f4e170 28267 "# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu\n\t"
wolfSSL 14:167253f4e170 28268 "# a += mu << 256\n\t"
wolfSSL 14:167253f4e170 28269 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 28270 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 28271 "adcq %[a], %%r13\n\t"
wolfSSL 14:167253f4e170 28272 "adcq %[mp], %%r14\n\t"
wolfSSL 14:167253f4e170 28273 "adcq %%rdx, %%r15\n\t"
wolfSSL 14:167253f4e170 28274 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28275 "# a += mu << 192\n\t"
wolfSSL 14:167253f4e170 28276 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28277 "adcq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 28278 "adcq %[mp], %%r13\n\t"
wolfSSL 14:167253f4e170 28279 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28280 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28281 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28282 "# mu <<= 32\n\t"
wolfSSL 14:167253f4e170 28283 "movq %%rdx, %[m]\n\t"
wolfSSL 14:167253f4e170 28284 "shldq $32, %[mp], %%rdx\n\t"
wolfSSL 14:167253f4e170 28285 "shldq $32, %[a], %[mp]\n\t"
wolfSSL 14:167253f4e170 28286 "shldq $32, %%rax, %[a]\n\t"
wolfSSL 14:167253f4e170 28287 "shlq $32, %%rax\n\t"
wolfSSL 14:167253f4e170 28288 "shrq $32, %[m]\n\t"
wolfSSL 14:167253f4e170 28289 "# a += (mu << 32) << 64\n\t"
wolfSSL 14:167253f4e170 28290 "addq %[mp], %%r11\n\t"
wolfSSL 14:167253f4e170 28291 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 28292 "adcq %[m], %%r13\n\t"
wolfSSL 14:167253f4e170 28293 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28294 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 28295 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28296 "# a -= (mu << 32) << 192\n\t"
wolfSSL 14:167253f4e170 28297 "subq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28298 "movq $0xffffffff, %%rax\n\t"
wolfSSL 14:167253f4e170 28299 "sbbq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 28300 "movq $0xffffffff00000001, %[a]\n\t"
wolfSSL 14:167253f4e170 28301 "sbbq %[mp], %%r13\n\t"
wolfSSL 14:167253f4e170 28302 "sbbq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 28303 "sbbq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 28304 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 28305 "# mask m and sub from result if overflow\n\t"
wolfSSL 14:167253f4e170 28306 "# m[0] = -1 & mask = mask\n\t"
wolfSSL 14:167253f4e170 28307 "andq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 28308 "# m[2] = 0 & mask = 0\n\t"
wolfSSL 14:167253f4e170 28309 "andq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 28310 "subq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 28311 "sbbq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 28312 "sbbq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 28313 "sbbq %[a], %%r15\n\t"
wolfSSL 14:167253f4e170 28314 "movq %%r12, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28315 "movq %%r13, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28316 "movq %%r14, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28317 "movq %%r15, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28318 : [m] "+r" (m), [a] "+r" (a), [mp] "+r" (mp)
wolfSSL 14:167253f4e170 28319 : [r] "r" (r)
wolfSSL 14:167253f4e170 28320 : "memory", "rax", "rdx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 28321 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 28322 );
wolfSSL 14:167253f4e170 28323 }
wolfSSL 14:167253f4e170 28324
wolfSSL 14:167253f4e170 28325 #ifndef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 28326 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
wolfSSL 14:167253f4e170 28327 *
wolfSSL 14:167253f4e170 28328 * r Result of squaring.
wolfSSL 14:167253f4e170 28329 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 28330 * n Number of times to square.
wolfSSL 14:167253f4e170 28331 * m Modulus (prime).
wolfSSL 14:167253f4e170 28332 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 28333 */
wolfSSL 14:167253f4e170 28334 static void sp_256_mont_sqr_n_4(sp_digit* r, sp_digit* a, int n,
wolfSSL 14:167253f4e170 28335 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 28336 {
wolfSSL 14:167253f4e170 28337 sp_256_mont_sqr_4(r, a, m, mp);
wolfSSL 14:167253f4e170 28338 for (; n > 1; n--)
wolfSSL 14:167253f4e170 28339 sp_256_mont_sqr_4(r, r, m, mp);
wolfSSL 14:167253f4e170 28340 }
wolfSSL 14:167253f4e170 28341
wolfSSL 14:167253f4e170 28342 #else
wolfSSL 14:167253f4e170 28343 /* Mod-2 for the P256 curve. */
wolfSSL 14:167253f4e170 28344 static const uint64_t p256_mod_2[4] = {
wolfSSL 14:167253f4e170 28345 0xfffffffffffffffd,0x00000000ffffffff,0x0000000000000000,
wolfSSL 14:167253f4e170 28346 0xffffffff00000001
wolfSSL 14:167253f4e170 28347 };
wolfSSL 14:167253f4e170 28348 #endif /* !WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 28349
wolfSSL 14:167253f4e170 28350 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
wolfSSL 14:167253f4e170 28351 * P256 curve. (r = 1 / a mod m)
wolfSSL 14:167253f4e170 28352 *
wolfSSL 14:167253f4e170 28353 * r Inverse result.
wolfSSL 14:167253f4e170 28354 * a Number to invert.
wolfSSL 14:167253f4e170 28355 * td Temporary data.
wolfSSL 14:167253f4e170 28356 */
wolfSSL 14:167253f4e170 28357 static void sp_256_mont_inv_4(sp_digit* r, sp_digit* a, sp_digit* td)
wolfSSL 14:167253f4e170 28358 {
wolfSSL 14:167253f4e170 28359 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 28360 sp_digit* t = td;
wolfSSL 14:167253f4e170 28361 int i;
wolfSSL 14:167253f4e170 28362
wolfSSL 14:167253f4e170 28363 XMEMCPY(t, a, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 28364 for (i=254; i>=0; i--) {
wolfSSL 14:167253f4e170 28365 sp_256_mont_sqr_4(t, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28366 if (p256_mod_2[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 28367 sp_256_mont_mul_4(t, t, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28368 }
wolfSSL 14:167253f4e170 28369 XMEMCPY(r, t, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 28370 #else
wolfSSL 14:167253f4e170 28371 sp_digit* t = td;
wolfSSL 14:167253f4e170 28372 sp_digit* t2 = td + 2 * 4;
wolfSSL 14:167253f4e170 28373 sp_digit* t3 = td + 4 * 4;
wolfSSL 14:167253f4e170 28374
wolfSSL 14:167253f4e170 28375 /* t = a^2 */
wolfSSL 14:167253f4e170 28376 sp_256_mont_sqr_4(t, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28377 /* t = a^3 = t * a */
wolfSSL 14:167253f4e170 28378 sp_256_mont_mul_4(t, t, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28379 /* t2= a^c = t ^ 2 ^ 2 */
wolfSSL 14:167253f4e170 28380 sp_256_mont_sqr_n_4(t2, t, 2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28381 /* t3= a^d = t2 * a */
wolfSSL 14:167253f4e170 28382 sp_256_mont_mul_4(t3, t2, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28383 /* t = a^f = t2 * t */
wolfSSL 14:167253f4e170 28384 sp_256_mont_mul_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28385 /* t2= a^f0 = t ^ 2 ^ 4 */
wolfSSL 14:167253f4e170 28386 sp_256_mont_sqr_n_4(t2, t, 4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28387 /* t3= a^fd = t2 * t3 */
wolfSSL 14:167253f4e170 28388 sp_256_mont_mul_4(t3, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28389 /* t = a^ff = t2 * t */
wolfSSL 14:167253f4e170 28390 sp_256_mont_mul_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28391 /* t2= a^ff00 = t ^ 2 ^ 8 */
wolfSSL 14:167253f4e170 28392 sp_256_mont_sqr_n_4(t2, t, 8, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28393 /* t3= a^fffd = t2 * t3 */
wolfSSL 14:167253f4e170 28394 sp_256_mont_mul_4(t3, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28395 /* t = a^ffff = t2 * t */
wolfSSL 14:167253f4e170 28396 sp_256_mont_mul_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28397 /* t2= a^ffff0000 = t ^ 2 ^ 16 */
wolfSSL 14:167253f4e170 28398 sp_256_mont_sqr_n_4(t2, t, 16, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28399 /* t3= a^fffffffd = t2 * t3 */
wolfSSL 14:167253f4e170 28400 sp_256_mont_mul_4(t3, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28401 /* t = a^ffffffff = t2 * t */
wolfSSL 14:167253f4e170 28402 sp_256_mont_mul_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28403 /* t = a^ffffffff00000000 = t ^ 2 ^ 32 */
wolfSSL 14:167253f4e170 28404 sp_256_mont_sqr_n_4(t2, t, 32, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28405 /* t2= a^ffffffffffffffff = t2 * t */
wolfSSL 14:167253f4e170 28406 sp_256_mont_mul_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28407 /* t2= a^ffffffff00000001 = t2 * a */
wolfSSL 14:167253f4e170 28408 sp_256_mont_mul_4(t2, t2, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28409 /* t2= a^ffffffff000000010000000000000000000000000000000000000000
wolfSSL 14:167253f4e170 28410 * = t2 ^ 2 ^ 160 */
wolfSSL 14:167253f4e170 28411 sp_256_mont_sqr_n_4(t2, t2, 160, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28412 /* t2= a^ffffffff00000001000000000000000000000000ffffffffffffffff
wolfSSL 14:167253f4e170 28413 * = t2 * t */
wolfSSL 14:167253f4e170 28414 sp_256_mont_mul_4(t2, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28415 /* t2= a^ffffffff00000001000000000000000000000000ffffffffffffffff00000000
wolfSSL 14:167253f4e170 28416 * = t2 ^ 2 ^ 32 */
wolfSSL 14:167253f4e170 28417 sp_256_mont_sqr_n_4(t2, t2, 32, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28418 /* r = a^ffffffff00000001000000000000000000000000fffffffffffffffffffffffd
wolfSSL 14:167253f4e170 28419 * = t2 * t3 */
wolfSSL 14:167253f4e170 28420 sp_256_mont_mul_4(r, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28421 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 28422 }
wolfSSL 14:167253f4e170 28423
wolfSSL 14:167253f4e170 28424 /* Map the Montgomery form projective co-ordinate point to an affine point.
wolfSSL 14:167253f4e170 28425 *
wolfSSL 14:167253f4e170 28426 * r Resulting affine co-ordinate point.
wolfSSL 14:167253f4e170 28427 * p Montgomery form projective co-ordinate point.
wolfSSL 14:167253f4e170 28428 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 28429 */
wolfSSL 14:167253f4e170 28430 static void sp_256_map_4(sp_point* r, sp_point* p, sp_digit* t)
wolfSSL 14:167253f4e170 28431 {
wolfSSL 14:167253f4e170 28432 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 28433 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 28434 int64_t n;
wolfSSL 14:167253f4e170 28435
wolfSSL 14:167253f4e170 28436 sp_256_mont_inv_4(t1, p->z, t + 2*4);
wolfSSL 14:167253f4e170 28437
wolfSSL 14:167253f4e170 28438 sp_256_mont_sqr_4(t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28439 sp_256_mont_mul_4(t1, t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28440
wolfSSL 14:167253f4e170 28441 /* x /= z^2 */
wolfSSL 14:167253f4e170 28442 sp_256_mont_mul_4(r->x, p->x, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28443 XMEMSET(r->x + 4, 0, sizeof(r->x) / 2);
wolfSSL 14:167253f4e170 28444 sp_256_mont_reduce_4(r->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28445 /* Reduce x to less than modulus */
wolfSSL 14:167253f4e170 28446 n = sp_256_cmp_4(r->x, p256_mod);
wolfSSL 14:167253f4e170 28447 sp_256_cond_sub_4(r->x, r->x, p256_mod, 0 - (n >= 0));
wolfSSL 14:167253f4e170 28448 sp_256_norm_4(r->x);
wolfSSL 14:167253f4e170 28449
wolfSSL 14:167253f4e170 28450 /* y /= z^3 */
wolfSSL 14:167253f4e170 28451 sp_256_mont_mul_4(r->y, p->y, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28452 XMEMSET(r->y + 4, 0, sizeof(r->y) / 2);
wolfSSL 14:167253f4e170 28453 sp_256_mont_reduce_4(r->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28454 /* Reduce y to less than modulus */
wolfSSL 14:167253f4e170 28455 n = sp_256_cmp_4(r->y, p256_mod);
wolfSSL 14:167253f4e170 28456 sp_256_cond_sub_4(r->y, r->y, p256_mod, 0 - (n >= 0));
wolfSSL 14:167253f4e170 28457 sp_256_norm_4(r->y);
wolfSSL 14:167253f4e170 28458
wolfSSL 14:167253f4e170 28459 XMEMSET(r->z, 0, sizeof(r->z));
wolfSSL 14:167253f4e170 28460 r->z[0] = 1;
wolfSSL 14:167253f4e170 28461
wolfSSL 14:167253f4e170 28462 }
wolfSSL 14:167253f4e170 28463
wolfSSL 14:167253f4e170 28464 /* Add two Montgomery form numbers (r = a + b % m).
wolfSSL 14:167253f4e170 28465 *
wolfSSL 14:167253f4e170 28466 * r Result of addition.
wolfSSL 14:167253f4e170 28467 * a First number to add in Montogmery form.
wolfSSL 14:167253f4e170 28468 * b Second number to add in Montogmery form.
wolfSSL 14:167253f4e170 28469 * m Modulus (prime).
wolfSSL 14:167253f4e170 28470 */
wolfSSL 14:167253f4e170 28471 static void sp_256_mont_add_4(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 28472 sp_digit* m)
wolfSSL 14:167253f4e170 28473 {
wolfSSL 14:167253f4e170 28474 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 28475 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28476 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28477 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28478 "movq 24(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 28479 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28480 "addq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28481 "adcq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28482 "movq $0xffffffff, %%r8\n\t"
wolfSSL 14:167253f4e170 28483 "adcq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28484 "adcq 24(%[b]), %%r10\n\t"
wolfSSL 14:167253f4e170 28485 "movq $0xffffffff00000001, %%r9\n\t"
wolfSSL 14:167253f4e170 28486 "sbbq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28487 "andq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 28488 "andq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 28489 "subq %%r11, %%rax\n\t"
wolfSSL 14:167253f4e170 28490 "sbbq %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 28491 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28492 "sbbq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28493 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28494 "sbbq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 28495 "movq %%rdx, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28496 "movq %%r10, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28497 :
wolfSSL 14:167253f4e170 28498 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m)
wolfSSL 14:167253f4e170 28499 : "memory", "rax", "rcx", "rdx", "r8", "r9", "r10", "r11"
wolfSSL 14:167253f4e170 28500 );
wolfSSL 14:167253f4e170 28501 }
wolfSSL 14:167253f4e170 28502
wolfSSL 14:167253f4e170 28503 /* Double a Montgomery form number (r = a + a % m).
wolfSSL 14:167253f4e170 28504 *
wolfSSL 14:167253f4e170 28505 * r Result of doubling.
wolfSSL 14:167253f4e170 28506 * a Number to double in Montogmery form.
wolfSSL 14:167253f4e170 28507 * m Modulus (prime).
wolfSSL 14:167253f4e170 28508 */
wolfSSL 14:167253f4e170 28509 static void sp_256_mont_dbl_4(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 28510 {
wolfSSL 14:167253f4e170 28511 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 28512 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28513 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28514 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28515 "movq 24(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 28516 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28517 "addq %%rax, %%rax\n\t"
wolfSSL 14:167253f4e170 28518 "adcq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 28519 "movq $0xffffffff, %%r8\n\t"
wolfSSL 14:167253f4e170 28520 "adcq %%rdx, %%rdx\n\t"
wolfSSL 14:167253f4e170 28521 "movq $0xffffffff00000001, %%r9\n\t"
wolfSSL 14:167253f4e170 28522 "adcq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 28523 "sbbq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28524 "andq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 28525 "andq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 28526 "subq %%r11, %%rax\n\t"
wolfSSL 14:167253f4e170 28527 "sbbq %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 28528 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28529 "sbbq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28530 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28531 "sbbq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 28532 "movq %%rdx, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28533 "movq %%r10, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28534 :
wolfSSL 14:167253f4e170 28535 : [r] "r" (r), [a] "r" (a)
wolfSSL 14:167253f4e170 28536 : "memory", "rax", "rcx", "rdx", "r8", "r9", "r10", "r11"
wolfSSL 14:167253f4e170 28537 );
wolfSSL 14:167253f4e170 28538
wolfSSL 14:167253f4e170 28539 (void)m;
wolfSSL 14:167253f4e170 28540 }
wolfSSL 14:167253f4e170 28541
wolfSSL 14:167253f4e170 28542 /* Triple a Montgomery form number (r = a + a + a % m).
wolfSSL 14:167253f4e170 28543 *
wolfSSL 14:167253f4e170 28544 * r Result of Tripling.
wolfSSL 14:167253f4e170 28545 * a Number to triple in Montogmery form.
wolfSSL 14:167253f4e170 28546 * m Modulus (prime).
wolfSSL 14:167253f4e170 28547 */
wolfSSL 14:167253f4e170 28548 static void sp_256_mont_tpl_4(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 28549 {
wolfSSL 14:167253f4e170 28550 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 28551 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28552 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28553 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28554 "movq 24(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 28555 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28556 "addq %%rax, %%rax\n\t"
wolfSSL 14:167253f4e170 28557 "adcq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 28558 "movq $0xffffffff, %%r8\n\t"
wolfSSL 14:167253f4e170 28559 "adcq %%rdx, %%rdx\n\t"
wolfSSL 14:167253f4e170 28560 "adcq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 28561 "movq $0xffffffff00000001, %%r9\n\t"
wolfSSL 14:167253f4e170 28562 "sbbq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28563 "andq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 28564 "andq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 28565 "subq %%r11, %%rax\n\t"
wolfSSL 14:167253f4e170 28566 "sbbq %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 28567 "sbbq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28568 "sbbq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 28569 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28570 "addq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28571 "adcq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28572 "movq $0xffffffff, %%r8\n\t"
wolfSSL 14:167253f4e170 28573 "adcq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28574 "adcq 24(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 28575 "movq $0xffffffff00000001, %%r9\n\t"
wolfSSL 14:167253f4e170 28576 "sbbq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28577 "andq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 28578 "andq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 28579 "subq %%r11, %%rax\n\t"
wolfSSL 14:167253f4e170 28580 "sbbq %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 28581 "sbbq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28582 "sbbq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 28583 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28584 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28585 "movq %%rdx, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28586 "movq %%r10, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28587 :
wolfSSL 14:167253f4e170 28588 : [r] "r" (r), [a] "r" (a)
wolfSSL 14:167253f4e170 28589 : "memory", "rax", "rcx", "rdx", "r8", "r9", "r10", "r11"
wolfSSL 14:167253f4e170 28590 );
wolfSSL 14:167253f4e170 28591
wolfSSL 14:167253f4e170 28592 (void)m;
wolfSSL 14:167253f4e170 28593 }
wolfSSL 14:167253f4e170 28594
wolfSSL 14:167253f4e170 28595 /* Subtract two Montgomery form numbers (r = a - b % m).
wolfSSL 14:167253f4e170 28596 *
wolfSSL 14:167253f4e170 28597 * r Result of subtration.
wolfSSL 14:167253f4e170 28598 * a Number to subtract from in Montogmery form.
wolfSSL 14:167253f4e170 28599 * b Number to subtract with in Montogmery form.
wolfSSL 14:167253f4e170 28600 * m Modulus (prime).
wolfSSL 14:167253f4e170 28601 */
wolfSSL 14:167253f4e170 28602 static void sp_256_mont_sub_4(sp_digit* r, sp_digit* a, sp_digit* b,
wolfSSL 14:167253f4e170 28603 sp_digit* m)
wolfSSL 14:167253f4e170 28604 {
wolfSSL 14:167253f4e170 28605 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 28606 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28607 "movq 8(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28608 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28609 "movq 24(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 28610 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28611 "subq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 28612 "sbbq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28613 "movq $0xffffffff, %%r8\n\t"
wolfSSL 14:167253f4e170 28614 "sbbq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28615 "sbbq 24(%[b]), %%r10\n\t"
wolfSSL 14:167253f4e170 28616 "movq $0xffffffff00000001, %%r9\n\t"
wolfSSL 14:167253f4e170 28617 "sbbq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28618 "andq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 28619 "andq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 28620 "addq %%r11, %%rax\n\t"
wolfSSL 14:167253f4e170 28621 "adcq %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 28622 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28623 "adcq $0, %%rdx\n\t"
wolfSSL 14:167253f4e170 28624 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28625 "adcq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 28626 "movq %%rdx, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28627 "movq %%r10, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28628 :
wolfSSL 14:167253f4e170 28629 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [m] "r" (m)
wolfSSL 14:167253f4e170 28630 : "memory", "rax", "rcx", "rdx", "r8", "r9", "r10", "r11"
wolfSSL 14:167253f4e170 28631 );
wolfSSL 14:167253f4e170 28632 }
wolfSSL 14:167253f4e170 28633
wolfSSL 14:167253f4e170 28634 /* Divide the number by 2 mod the modulus (prime). (r = a / 2 % m)
wolfSSL 14:167253f4e170 28635 *
wolfSSL 14:167253f4e170 28636 * r Result of division by 2.
wolfSSL 14:167253f4e170 28637 * a Number to divide.
wolfSSL 14:167253f4e170 28638 * m Modulus (prime).
wolfSSL 14:167253f4e170 28639 */
wolfSSL 14:167253f4e170 28640 SP_NOINLINE static void sp_256_div2_4(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 28641 {
wolfSSL 14:167253f4e170 28642 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 28643 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 28644 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 28645 "movq 16(%[a]), %%rcx\n\t"
wolfSSL 14:167253f4e170 28646 "movq 24(%[a]), %%r10\n\t"
wolfSSL 14:167253f4e170 28647 "movq $0xffffffff, %%r8\n\t"
wolfSSL 14:167253f4e170 28648 "movq $0xffffffff00000001, %%r9\n\t"
wolfSSL 14:167253f4e170 28649 "xorq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 28650 "movq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 28651 "andq $1, %%r11\n\t"
wolfSSL 14:167253f4e170 28652 "subq %%r11, %%r12\n\t"
wolfSSL 14:167253f4e170 28653 "andq %%r12, %%r8\n\t"
wolfSSL 14:167253f4e170 28654 "andq %%r12, %%r9\n\t"
wolfSSL 14:167253f4e170 28655 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 28656 "addq %%r12, %%rax\n\t"
wolfSSL 14:167253f4e170 28657 "adcq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 28658 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 28659 "adcq %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 28660 "adcq $0, %%r11\n\t"
wolfSSL 14:167253f4e170 28661 "shrdq $1, %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 28662 "shrdq $1, %%rcx, %%rdx\n\t"
wolfSSL 14:167253f4e170 28663 "shrdq $1, %%r10, %%rcx\n\t"
wolfSSL 14:167253f4e170 28664 "shrdq $1, %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 28665 "movq %%rax, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 28666 "movq %%rdx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 28667 "movq %%rcx, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 28668 "movq %%r10, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 28669 :
wolfSSL 14:167253f4e170 28670 : [r] "r" (r), [a] "r" (a), [m] "r" (m)
wolfSSL 14:167253f4e170 28671 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 28672 );
wolfSSL 14:167253f4e170 28673
wolfSSL 14:167253f4e170 28674 }
wolfSSL 14:167253f4e170 28675
wolfSSL 14:167253f4e170 28676 /* Double the Montgomery form projective point p.
wolfSSL 14:167253f4e170 28677 *
wolfSSL 14:167253f4e170 28678 * r Result of doubling point.
wolfSSL 14:167253f4e170 28679 * p Point to double.
wolfSSL 14:167253f4e170 28680 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 28681 */
wolfSSL 14:167253f4e170 28682 static void sp_256_proj_point_dbl_4(sp_point* r, sp_point* p, sp_digit* t)
wolfSSL 14:167253f4e170 28683 {
wolfSSL 14:167253f4e170 28684 sp_point *rp[2];
wolfSSL 14:167253f4e170 28685 sp_point tp;
wolfSSL 14:167253f4e170 28686 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 28687 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 28688 sp_digit* x;
wolfSSL 14:167253f4e170 28689 sp_digit* y;
wolfSSL 14:167253f4e170 28690 sp_digit* z;
wolfSSL 14:167253f4e170 28691 int i;
wolfSSL 14:167253f4e170 28692
wolfSSL 14:167253f4e170 28693 /* When infinity don't double point passed in - constant time. */
wolfSSL 14:167253f4e170 28694 rp[0] = r;
wolfSSL 14:167253f4e170 28695 rp[1] = &tp;
wolfSSL 14:167253f4e170 28696 x = rp[p->infinity]->x;
wolfSSL 14:167253f4e170 28697 y = rp[p->infinity]->y;
wolfSSL 14:167253f4e170 28698 z = rp[p->infinity]->z;
wolfSSL 14:167253f4e170 28699 /* Put point to double into result - good for infinty. */
wolfSSL 14:167253f4e170 28700 if (r != p) {
wolfSSL 14:167253f4e170 28701 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28702 r->x[i] = p->x[i];
wolfSSL 14:167253f4e170 28703 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28704 r->y[i] = p->y[i];
wolfSSL 14:167253f4e170 28705 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28706 r->z[i] = p->z[i];
wolfSSL 14:167253f4e170 28707 r->infinity = p->infinity;
wolfSSL 14:167253f4e170 28708 }
wolfSSL 14:167253f4e170 28709
wolfSSL 14:167253f4e170 28710 /* T1 = Z * Z */
wolfSSL 14:167253f4e170 28711 sp_256_mont_sqr_4(t1, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28712 /* Z = Y * Z */
wolfSSL 14:167253f4e170 28713 sp_256_mont_mul_4(z, y, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28714 /* Z = 2Z */
wolfSSL 14:167253f4e170 28715 sp_256_mont_dbl_4(z, z, p256_mod);
wolfSSL 14:167253f4e170 28716 /* T2 = X - T1 */
wolfSSL 14:167253f4e170 28717 sp_256_mont_sub_4(t2, x, t1, p256_mod);
wolfSSL 14:167253f4e170 28718 /* T1 = X + T1 */
wolfSSL 14:167253f4e170 28719 sp_256_mont_add_4(t1, x, t1, p256_mod);
wolfSSL 14:167253f4e170 28720 /* T2 = T1 * T2 */
wolfSSL 14:167253f4e170 28721 sp_256_mont_mul_4(t2, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28722 /* T1 = 3T2 */
wolfSSL 14:167253f4e170 28723 sp_256_mont_tpl_4(t1, t2, p256_mod);
wolfSSL 14:167253f4e170 28724 /* Y = 2Y */
wolfSSL 14:167253f4e170 28725 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 28726 /* Y = Y * Y */
wolfSSL 14:167253f4e170 28727 sp_256_mont_sqr_4(y, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28728 /* T2 = Y * Y */
wolfSSL 14:167253f4e170 28729 sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28730 /* T2 = T2/2 */
wolfSSL 14:167253f4e170 28731 sp_256_div2_4(t2, t2, p256_mod);
wolfSSL 14:167253f4e170 28732 /* Y = Y * X */
wolfSSL 14:167253f4e170 28733 sp_256_mont_mul_4(y, y, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28734 /* X = T1 * T1 */
wolfSSL 14:167253f4e170 28735 sp_256_mont_mul_4(x, t1, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28736 /* X = X - Y */
wolfSSL 14:167253f4e170 28737 sp_256_mont_sub_4(x, x, y, p256_mod);
wolfSSL 14:167253f4e170 28738 /* X = X - Y */
wolfSSL 14:167253f4e170 28739 sp_256_mont_sub_4(x, x, y, p256_mod);
wolfSSL 14:167253f4e170 28740 /* Y = Y - X */
wolfSSL 14:167253f4e170 28741 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 28742 /* Y = Y * T1 */
wolfSSL 14:167253f4e170 28743 sp_256_mont_mul_4(y, y, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28744 /* Y = Y - T2 */
wolfSSL 14:167253f4e170 28745 sp_256_mont_sub_4(y, y, t2, p256_mod);
wolfSSL 14:167253f4e170 28746
wolfSSL 14:167253f4e170 28747 }
wolfSSL 14:167253f4e170 28748
wolfSSL 14:167253f4e170 28749 /* Double the Montgomery form projective point p a number of times.
wolfSSL 14:167253f4e170 28750 *
wolfSSL 14:167253f4e170 28751 * r Result of repeated doubling of point.
wolfSSL 14:167253f4e170 28752 * p Point to double.
wolfSSL 14:167253f4e170 28753 * n Number of times to double
wolfSSL 14:167253f4e170 28754 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 28755 */
wolfSSL 14:167253f4e170 28756 static void sp_256_proj_point_dbl_n_4(sp_point* r, sp_point* p, int n,
wolfSSL 14:167253f4e170 28757 sp_digit* t)
wolfSSL 14:167253f4e170 28758 {
wolfSSL 14:167253f4e170 28759 sp_point *rp[2];
wolfSSL 14:167253f4e170 28760 sp_point tp;
wolfSSL 14:167253f4e170 28761 sp_digit* w = t;
wolfSSL 14:167253f4e170 28762 sp_digit* a = t + 2*4;
wolfSSL 14:167253f4e170 28763 sp_digit* b = t + 4*4;
wolfSSL 14:167253f4e170 28764 sp_digit* t1 = t + 6*4;
wolfSSL 14:167253f4e170 28765 sp_digit* t2 = t + 8*4;
wolfSSL 14:167253f4e170 28766 sp_digit* x;
wolfSSL 14:167253f4e170 28767 sp_digit* y;
wolfSSL 14:167253f4e170 28768 sp_digit* z;
wolfSSL 14:167253f4e170 28769 int i;
wolfSSL 14:167253f4e170 28770
wolfSSL 14:167253f4e170 28771 rp[0] = r;
wolfSSL 14:167253f4e170 28772 rp[1] = &tp;
wolfSSL 14:167253f4e170 28773 x = rp[p->infinity]->x;
wolfSSL 14:167253f4e170 28774 y = rp[p->infinity]->y;
wolfSSL 14:167253f4e170 28775 z = rp[p->infinity]->z;
wolfSSL 14:167253f4e170 28776 if (r != p) {
wolfSSL 14:167253f4e170 28777 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28778 r->x[i] = p->x[i];
wolfSSL 14:167253f4e170 28779 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28780 r->y[i] = p->y[i];
wolfSSL 14:167253f4e170 28781 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28782 r->z[i] = p->z[i];
wolfSSL 14:167253f4e170 28783 r->infinity = p->infinity;
wolfSSL 14:167253f4e170 28784 }
wolfSSL 14:167253f4e170 28785
wolfSSL 14:167253f4e170 28786 /* Y = 2*Y */
wolfSSL 14:167253f4e170 28787 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 28788 /* W = Z^4 */
wolfSSL 14:167253f4e170 28789 sp_256_mont_sqr_4(w, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28790 sp_256_mont_sqr_4(w, w, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28791 while (n--) {
wolfSSL 14:167253f4e170 28792 /* A = 3*(X^2 - W) */
wolfSSL 14:167253f4e170 28793 sp_256_mont_sqr_4(t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28794 sp_256_mont_sub_4(t1, t1, w, p256_mod);
wolfSSL 14:167253f4e170 28795 sp_256_mont_tpl_4(a, t1, p256_mod);
wolfSSL 14:167253f4e170 28796 /* B = X*Y^2 */
wolfSSL 14:167253f4e170 28797 sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28798 sp_256_mont_mul_4(b, t2, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28799 /* X = A^2 - 2B */
wolfSSL 14:167253f4e170 28800 sp_256_mont_sqr_4(x, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28801 sp_256_mont_dbl_4(t1, b, p256_mod);
wolfSSL 14:167253f4e170 28802 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 28803 /* Z = Z*Y */
wolfSSL 14:167253f4e170 28804 sp_256_mont_mul_4(z, z, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28805 /* t2 = Y^4 */
wolfSSL 14:167253f4e170 28806 sp_256_mont_sqr_4(t2, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28807 if (n) {
wolfSSL 14:167253f4e170 28808 /* W = W*Y^4 */
wolfSSL 14:167253f4e170 28809 sp_256_mont_mul_4(w, w, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28810 }
wolfSSL 14:167253f4e170 28811 /* y = 2*A*(B - X) - Y^4 */
wolfSSL 14:167253f4e170 28812 sp_256_mont_sub_4(y, b, x, p256_mod);
wolfSSL 14:167253f4e170 28813 sp_256_mont_mul_4(y, y, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28814 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 28815 sp_256_mont_sub_4(y, y, t2, p256_mod);
wolfSSL 14:167253f4e170 28816 }
wolfSSL 14:167253f4e170 28817 /* Y = Y/2 */
wolfSSL 14:167253f4e170 28818 sp_256_div2_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 28819 }
wolfSSL 14:167253f4e170 28820
wolfSSL 14:167253f4e170 28821 /* Compare two numbers to determine if they are equal.
wolfSSL 14:167253f4e170 28822 * Constant time implementation.
wolfSSL 14:167253f4e170 28823 *
wolfSSL 14:167253f4e170 28824 * a First number to compare.
wolfSSL 14:167253f4e170 28825 * b Second number to compare.
wolfSSL 14:167253f4e170 28826 * returns 1 when equal and 0 otherwise.
wolfSSL 14:167253f4e170 28827 */
wolfSSL 14:167253f4e170 28828 static int sp_256_cmp_equal_4(const sp_digit* a, const sp_digit* b)
wolfSSL 14:167253f4e170 28829 {
wolfSSL 14:167253f4e170 28830 return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]) | (a[3] ^ b[3])) == 0;
wolfSSL 14:167253f4e170 28831 }
wolfSSL 14:167253f4e170 28832
wolfSSL 14:167253f4e170 28833 /* Add two Montgomery form projective points.
wolfSSL 14:167253f4e170 28834 *
wolfSSL 14:167253f4e170 28835 * r Result of addition.
wolfSSL 14:167253f4e170 28836 * p Frist point to add.
wolfSSL 14:167253f4e170 28837 * q Second point to add.
wolfSSL 14:167253f4e170 28838 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 28839 */
wolfSSL 14:167253f4e170 28840 static void sp_256_proj_point_add_4(sp_point* r, sp_point* p, sp_point* q,
wolfSSL 14:167253f4e170 28841 sp_digit* t)
wolfSSL 14:167253f4e170 28842 {
wolfSSL 14:167253f4e170 28843 sp_point *ap[2];
wolfSSL 14:167253f4e170 28844 sp_point *rp[2];
wolfSSL 14:167253f4e170 28845 sp_point tp;
wolfSSL 14:167253f4e170 28846 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 28847 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 28848 sp_digit* t3 = t + 4*4;
wolfSSL 14:167253f4e170 28849 sp_digit* t4 = t + 6*4;
wolfSSL 14:167253f4e170 28850 sp_digit* t5 = t + 8*4;
wolfSSL 14:167253f4e170 28851 sp_digit* x;
wolfSSL 14:167253f4e170 28852 sp_digit* y;
wolfSSL 14:167253f4e170 28853 sp_digit* z;
wolfSSL 14:167253f4e170 28854 int i;
wolfSSL 14:167253f4e170 28855
wolfSSL 14:167253f4e170 28856 /* Ensure only the first point is the same as the result. */
wolfSSL 14:167253f4e170 28857 if (q == r) {
wolfSSL 14:167253f4e170 28858 sp_point* a = p;
wolfSSL 14:167253f4e170 28859 p = q;
wolfSSL 14:167253f4e170 28860 q = a;
wolfSSL 14:167253f4e170 28861 }
wolfSSL 14:167253f4e170 28862
wolfSSL 14:167253f4e170 28863 /* Check double */
wolfSSL 14:167253f4e170 28864 sp_256_sub_4(t1, p256_mod, q->y);
wolfSSL 14:167253f4e170 28865 sp_256_norm_4(t1);
wolfSSL 14:167253f4e170 28866 if (sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
wolfSSL 14:167253f4e170 28867 (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) {
wolfSSL 14:167253f4e170 28868 sp_256_proj_point_dbl_4(r, p, t);
wolfSSL 14:167253f4e170 28869 }
wolfSSL 14:167253f4e170 28870 else {
wolfSSL 14:167253f4e170 28871 rp[0] = r;
wolfSSL 14:167253f4e170 28872 rp[1] = &tp;
wolfSSL 14:167253f4e170 28873 XMEMSET(&tp, 0, sizeof(tp));
wolfSSL 14:167253f4e170 28874 x = rp[p->infinity | q->infinity]->x;
wolfSSL 14:167253f4e170 28875 y = rp[p->infinity | q->infinity]->y;
wolfSSL 14:167253f4e170 28876 z = rp[p->infinity | q->infinity]->z;
wolfSSL 14:167253f4e170 28877
wolfSSL 14:167253f4e170 28878 ap[0] = p;
wolfSSL 14:167253f4e170 28879 ap[1] = q;
wolfSSL 14:167253f4e170 28880 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28881 r->x[i] = ap[p->infinity]->x[i];
wolfSSL 14:167253f4e170 28882 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28883 r->y[i] = ap[p->infinity]->y[i];
wolfSSL 14:167253f4e170 28884 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28885 r->z[i] = ap[p->infinity]->z[i];
wolfSSL 14:167253f4e170 28886 r->infinity = ap[p->infinity]->infinity;
wolfSSL 14:167253f4e170 28887
wolfSSL 14:167253f4e170 28888 /* U1 = X1*Z2^2 */
wolfSSL 14:167253f4e170 28889 sp_256_mont_sqr_4(t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28890 sp_256_mont_mul_4(t3, t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28891 sp_256_mont_mul_4(t1, t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28892 /* U2 = X2*Z1^2 */
wolfSSL 14:167253f4e170 28893 sp_256_mont_sqr_4(t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28894 sp_256_mont_mul_4(t4, t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28895 sp_256_mont_mul_4(t2, t2, q->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28896 /* S1 = Y1*Z2^3 */
wolfSSL 14:167253f4e170 28897 sp_256_mont_mul_4(t3, t3, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28898 /* S2 = Y2*Z1^3 */
wolfSSL 14:167253f4e170 28899 sp_256_mont_mul_4(t4, t4, q->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28900 /* H = U2 - U1 */
wolfSSL 14:167253f4e170 28901 sp_256_mont_sub_4(t2, t2, t1, p256_mod);
wolfSSL 14:167253f4e170 28902 /* R = S2 - S1 */
wolfSSL 14:167253f4e170 28903 sp_256_mont_sub_4(t4, t4, t3, p256_mod);
wolfSSL 14:167253f4e170 28904 /* Z3 = H*Z1*Z2 */
wolfSSL 14:167253f4e170 28905 sp_256_mont_mul_4(z, z, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28906 sp_256_mont_mul_4(z, z, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28907 /* X3 = R^2 - H^3 - 2*U1*H^2 */
wolfSSL 14:167253f4e170 28908 sp_256_mont_sqr_4(x, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28909 sp_256_mont_sqr_4(t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28910 sp_256_mont_mul_4(y, t1, t5, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28911 sp_256_mont_mul_4(t5, t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28912 sp_256_mont_sub_4(x, x, t5, p256_mod);
wolfSSL 14:167253f4e170 28913 sp_256_mont_dbl_4(t1, y, p256_mod);
wolfSSL 14:167253f4e170 28914 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 28915 /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
wolfSSL 14:167253f4e170 28916 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 28917 sp_256_mont_mul_4(y, y, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28918 sp_256_mont_mul_4(t5, t5, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28919 sp_256_mont_sub_4(y, y, t5, p256_mod);
wolfSSL 14:167253f4e170 28920 }
wolfSSL 14:167253f4e170 28921 }
wolfSSL 14:167253f4e170 28922
wolfSSL 14:167253f4e170 28923 /* Double the Montgomery form projective point p a number of times.
wolfSSL 14:167253f4e170 28924 *
wolfSSL 14:167253f4e170 28925 * r Result of repeated doubling of point.
wolfSSL 14:167253f4e170 28926 * p Point to double.
wolfSSL 14:167253f4e170 28927 * n Number of times to double
wolfSSL 14:167253f4e170 28928 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 28929 */
wolfSSL 14:167253f4e170 28930 static void sp_256_proj_point_dbl_n_store_4(sp_point* r, sp_point* p,
wolfSSL 14:167253f4e170 28931 int n, int m, sp_digit* t)
wolfSSL 14:167253f4e170 28932 {
wolfSSL 14:167253f4e170 28933 sp_digit* w = t;
wolfSSL 14:167253f4e170 28934 sp_digit* a = t + 2*4;
wolfSSL 14:167253f4e170 28935 sp_digit* b = t + 4*4;
wolfSSL 14:167253f4e170 28936 sp_digit* t1 = t + 6*4;
wolfSSL 14:167253f4e170 28937 sp_digit* t2 = t + 8*4;
wolfSSL 14:167253f4e170 28938 sp_digit* x = r[2*m].x;
wolfSSL 14:167253f4e170 28939 sp_digit* y = r[(1<<n)*m].y;
wolfSSL 14:167253f4e170 28940 sp_digit* z = r[2*m].z;
wolfSSL 14:167253f4e170 28941 int i;
wolfSSL 14:167253f4e170 28942
wolfSSL 14:167253f4e170 28943 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28944 x[i] = p->x[i];
wolfSSL 14:167253f4e170 28945 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28946 y[i] = p->y[i];
wolfSSL 14:167253f4e170 28947 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 28948 z[i] = p->z[i];
wolfSSL 14:167253f4e170 28949
wolfSSL 14:167253f4e170 28950 /* Y = 2*Y */
wolfSSL 14:167253f4e170 28951 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 28952 /* W = Z^4 */
wolfSSL 14:167253f4e170 28953 sp_256_mont_sqr_4(w, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28954 sp_256_mont_sqr_4(w, w, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28955 for (i=1; i<=n; i++) {
wolfSSL 14:167253f4e170 28956 /* A = 3*(X^2 - W) */
wolfSSL 14:167253f4e170 28957 sp_256_mont_sqr_4(t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28958 sp_256_mont_sub_4(t1, t1, w, p256_mod);
wolfSSL 14:167253f4e170 28959 sp_256_mont_tpl_4(a, t1, p256_mod);
wolfSSL 14:167253f4e170 28960 /* B = X*Y^2 */
wolfSSL 14:167253f4e170 28961 sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28962 sp_256_mont_mul_4(b, t2, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28963 x = r[(1<<i)*m].x;
wolfSSL 14:167253f4e170 28964 /* X = A^2 - 2B */
wolfSSL 14:167253f4e170 28965 sp_256_mont_sqr_4(x, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28966 sp_256_mont_dbl_4(t1, b, p256_mod);
wolfSSL 14:167253f4e170 28967 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 28968 /* Z = Z*Y */
wolfSSL 14:167253f4e170 28969 sp_256_mont_mul_4(r[(1<<i)*m].z, z, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28970 z = r[(1<<i)*m].z;
wolfSSL 14:167253f4e170 28971 /* t2 = Y^4 */
wolfSSL 14:167253f4e170 28972 sp_256_mont_sqr_4(t2, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28973 if (i != n) {
wolfSSL 14:167253f4e170 28974 /* W = W*Y^4 */
wolfSSL 14:167253f4e170 28975 sp_256_mont_mul_4(w, w, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28976 }
wolfSSL 14:167253f4e170 28977 /* y = 2*A*(B - X) - Y^4 */
wolfSSL 14:167253f4e170 28978 sp_256_mont_sub_4(y, b, x, p256_mod);
wolfSSL 14:167253f4e170 28979 sp_256_mont_mul_4(y, y, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 28980 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 28981 sp_256_mont_sub_4(y, y, t2, p256_mod);
wolfSSL 14:167253f4e170 28982
wolfSSL 14:167253f4e170 28983 /* Y = Y/2 */
wolfSSL 14:167253f4e170 28984 sp_256_div2_4(r[(1<<i)*m].y, y, p256_mod);
wolfSSL 14:167253f4e170 28985 r[(1<<i)*m].infinity = 0;
wolfSSL 14:167253f4e170 28986 }
wolfSSL 14:167253f4e170 28987 }
wolfSSL 14:167253f4e170 28988
wolfSSL 14:167253f4e170 28989 /* Add two Montgomery form projective points.
wolfSSL 14:167253f4e170 28990 *
wolfSSL 14:167253f4e170 28991 * ra Result of addition.
wolfSSL 14:167253f4e170 28992 * rs Result of subtraction.
wolfSSL 14:167253f4e170 28993 * p Frist point to add.
wolfSSL 14:167253f4e170 28994 * q Second point to add.
wolfSSL 14:167253f4e170 28995 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 28996 */
wolfSSL 14:167253f4e170 28997 static void sp_256_proj_point_add_sub_4(sp_point* ra, sp_point* rs,
wolfSSL 14:167253f4e170 28998 sp_point* p, sp_point* q, sp_digit* t)
wolfSSL 14:167253f4e170 28999 {
wolfSSL 14:167253f4e170 29000 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 29001 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 29002 sp_digit* t3 = t + 4*4;
wolfSSL 14:167253f4e170 29003 sp_digit* t4 = t + 6*4;
wolfSSL 14:167253f4e170 29004 sp_digit* t5 = t + 8*4;
wolfSSL 14:167253f4e170 29005 sp_digit* t6 = t + 10*4;
wolfSSL 14:167253f4e170 29006 sp_digit* x = ra->x;
wolfSSL 14:167253f4e170 29007 sp_digit* y = ra->y;
wolfSSL 14:167253f4e170 29008 sp_digit* z = ra->z;
wolfSSL 14:167253f4e170 29009 sp_digit* xs = rs->x;
wolfSSL 14:167253f4e170 29010 sp_digit* ys = rs->y;
wolfSSL 14:167253f4e170 29011 sp_digit* zs = rs->z;
wolfSSL 14:167253f4e170 29012
wolfSSL 14:167253f4e170 29013
wolfSSL 14:167253f4e170 29014 XMEMCPY(x, p->x, sizeof(p->x) / 2);
wolfSSL 14:167253f4e170 29015 XMEMCPY(y, p->y, sizeof(p->y) / 2);
wolfSSL 14:167253f4e170 29016 XMEMCPY(z, p->z, sizeof(p->z) / 2);
wolfSSL 14:167253f4e170 29017 ra->infinity = 0;
wolfSSL 14:167253f4e170 29018 rs->infinity = 0;
wolfSSL 14:167253f4e170 29019
wolfSSL 14:167253f4e170 29020 /* U1 = X1*Z2^2 */
wolfSSL 14:167253f4e170 29021 sp_256_mont_sqr_4(t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29022 sp_256_mont_mul_4(t3, t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29023 sp_256_mont_mul_4(t1, t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29024 /* U2 = X2*Z1^2 */
wolfSSL 14:167253f4e170 29025 sp_256_mont_sqr_4(t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29026 sp_256_mont_mul_4(t4, t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29027 sp_256_mont_mul_4(t2, t2, q->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29028 /* S1 = Y1*Z2^3 */
wolfSSL 14:167253f4e170 29029 sp_256_mont_mul_4(t3, t3, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29030 /* S2 = Y2*Z1^3 */
wolfSSL 14:167253f4e170 29031 sp_256_mont_mul_4(t4, t4, q->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29032 /* H = U2 - U1 */
wolfSSL 14:167253f4e170 29033 sp_256_mont_sub_4(t2, t2, t1, p256_mod);
wolfSSL 14:167253f4e170 29034 /* RS = S2 + S1 */
wolfSSL 14:167253f4e170 29035 sp_256_mont_add_4(t6, t4, t3, p256_mod);
wolfSSL 14:167253f4e170 29036 /* R = S2 - S1 */
wolfSSL 14:167253f4e170 29037 sp_256_mont_sub_4(t4, t4, t3, p256_mod);
wolfSSL 14:167253f4e170 29038 /* Z3 = H*Z1*Z2 */
wolfSSL 14:167253f4e170 29039 /* ZS = H*Z1*Z2 */
wolfSSL 14:167253f4e170 29040 sp_256_mont_mul_4(z, z, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29041 sp_256_mont_mul_4(z, z, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29042 XMEMCPY(zs, z, sizeof(p->z)/2);
wolfSSL 14:167253f4e170 29043 /* X3 = R^2 - H^3 - 2*U1*H^2 */
wolfSSL 14:167253f4e170 29044 /* XS = RS^2 - H^3 - 2*U1*H^2 */
wolfSSL 14:167253f4e170 29045 sp_256_mont_sqr_4(x, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29046 sp_256_mont_sqr_4(xs, t6, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29047 sp_256_mont_sqr_4(t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29048 sp_256_mont_mul_4(y, t1, t5, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29049 sp_256_mont_mul_4(t5, t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29050 sp_256_mont_sub_4(x, x, t5, p256_mod);
wolfSSL 14:167253f4e170 29051 sp_256_mont_sub_4(xs, xs, t5, p256_mod);
wolfSSL 14:167253f4e170 29052 sp_256_mont_dbl_4(t1, y, p256_mod);
wolfSSL 14:167253f4e170 29053 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 29054 sp_256_mont_sub_4(xs, xs, t1, p256_mod);
wolfSSL 14:167253f4e170 29055 /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
wolfSSL 14:167253f4e170 29056 /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
wolfSSL 14:167253f4e170 29057 sp_256_mont_sub_4(ys, y, xs, p256_mod);
wolfSSL 14:167253f4e170 29058 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 29059 sp_256_mont_mul_4(y, y, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29060 sp_256_sub_4(t6, p256_mod, t6);
wolfSSL 14:167253f4e170 29061 sp_256_mont_mul_4(ys, ys, t6, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29062 sp_256_mont_mul_4(t5, t5, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29063 sp_256_mont_sub_4(y, y, t5, p256_mod);
wolfSSL 14:167253f4e170 29064 sp_256_mont_sub_4(ys, ys, t5, p256_mod);
wolfSSL 14:167253f4e170 29065 }
wolfSSL 14:167253f4e170 29066
wolfSSL 14:167253f4e170 29067 /* Structure used to describe recoding of scalar multiplication. */
wolfSSL 14:167253f4e170 29068 typedef struct ecc_recode {
wolfSSL 14:167253f4e170 29069 /* Index into pre-computation table. */
wolfSSL 14:167253f4e170 29070 uint8_t i;
wolfSSL 14:167253f4e170 29071 /* Use the negative of the point. */
wolfSSL 14:167253f4e170 29072 uint8_t neg;
wolfSSL 14:167253f4e170 29073 } ecc_recode;
wolfSSL 14:167253f4e170 29074
wolfSSL 14:167253f4e170 29075 /* The index into pre-computation table to use. */
wolfSSL 14:167253f4e170 29076 static uint8_t recode_index_4_6[66] = {
wolfSSL 14:167253f4e170 29077 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
wolfSSL 14:167253f4e170 29078 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
wolfSSL 14:167253f4e170 29079 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17,
wolfSSL 14:167253f4e170 29080 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
wolfSSL 14:167253f4e170 29081 0, 1,
wolfSSL 14:167253f4e170 29082 };
wolfSSL 14:167253f4e170 29083
wolfSSL 14:167253f4e170 29084 /* Whether to negate y-ordinate. */
wolfSSL 14:167253f4e170 29085 static uint8_t recode_neg_4_6[66] = {
wolfSSL 14:167253f4e170 29086 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 29087 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 29088 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 29089 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 29090 0, 0,
wolfSSL 14:167253f4e170 29091 };
wolfSSL 14:167253f4e170 29092
wolfSSL 14:167253f4e170 29093 /* Recode the scalar for multiplication using pre-computed values and
wolfSSL 14:167253f4e170 29094 * subtraction.
wolfSSL 14:167253f4e170 29095 *
wolfSSL 14:167253f4e170 29096 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 29097 * v Vector of operations to peform.
wolfSSL 14:167253f4e170 29098 */
wolfSSL 14:167253f4e170 29099 static void sp_256_ecc_recode_6_4(sp_digit* k, ecc_recode* v)
wolfSSL 14:167253f4e170 29100 {
wolfSSL 14:167253f4e170 29101 int i, j;
wolfSSL 14:167253f4e170 29102 uint8_t y;
wolfSSL 14:167253f4e170 29103 int carry = 0;
wolfSSL 14:167253f4e170 29104 int o;
wolfSSL 14:167253f4e170 29105 sp_digit n;
wolfSSL 14:167253f4e170 29106
wolfSSL 14:167253f4e170 29107 j = 0;
wolfSSL 14:167253f4e170 29108 n = k[j];
wolfSSL 14:167253f4e170 29109 o = 0;
wolfSSL 14:167253f4e170 29110 for (i=0; i<43; i++) {
wolfSSL 14:167253f4e170 29111 y = n;
wolfSSL 14:167253f4e170 29112 if (o + 6 < 64) {
wolfSSL 14:167253f4e170 29113 y &= 0x3f;
wolfSSL 14:167253f4e170 29114 n >>= 6;
wolfSSL 14:167253f4e170 29115 o += 6;
wolfSSL 14:167253f4e170 29116 }
wolfSSL 14:167253f4e170 29117 else if (o + 6 == 64) {
wolfSSL 14:167253f4e170 29118 n >>= 6;
wolfSSL 14:167253f4e170 29119 if (++j < 4)
wolfSSL 14:167253f4e170 29120 n = k[j];
wolfSSL 14:167253f4e170 29121 o = 0;
wolfSSL 14:167253f4e170 29122 }
wolfSSL 14:167253f4e170 29123 else if (++j < 4) {
wolfSSL 14:167253f4e170 29124 n = k[j];
wolfSSL 14:167253f4e170 29125 y |= (n << (64 - o)) & 0x3f;
wolfSSL 14:167253f4e170 29126 o -= 58;
wolfSSL 14:167253f4e170 29127 n >>= o;
wolfSSL 14:167253f4e170 29128 }
wolfSSL 14:167253f4e170 29129
wolfSSL 14:167253f4e170 29130 y += carry;
wolfSSL 14:167253f4e170 29131 v[i].i = recode_index_4_6[y];
wolfSSL 14:167253f4e170 29132 v[i].neg = recode_neg_4_6[y];
wolfSSL 14:167253f4e170 29133 carry = (y >> 6) + v[i].neg;
wolfSSL 14:167253f4e170 29134 }
wolfSSL 14:167253f4e170 29135 }
wolfSSL 14:167253f4e170 29136
wolfSSL 14:167253f4e170 29137 /* Multiply the point by the scalar and return the result.
wolfSSL 14:167253f4e170 29138 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 29139 *
wolfSSL 14:167253f4e170 29140 * r Resulting point.
wolfSSL 14:167253f4e170 29141 * g Point to multiply.
wolfSSL 14:167253f4e170 29142 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 29143 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 29144 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 29145 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 29146 */
wolfSSL 14:167253f4e170 29147 static int sp_256_ecc_mulmod_win_add_sub_4(sp_point* r, sp_point* g,
wolfSSL 14:167253f4e170 29148 sp_digit* k, int map, void* heap)
wolfSSL 14:167253f4e170 29149 {
wolfSSL 14:167253f4e170 29150 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 29151 sp_point td[33];
wolfSSL 14:167253f4e170 29152 sp_point rtd, pd;
wolfSSL 14:167253f4e170 29153 sp_digit tmpd[2 * 4 * 6];
wolfSSL 14:167253f4e170 29154 #endif
wolfSSL 14:167253f4e170 29155 sp_point* t;
wolfSSL 14:167253f4e170 29156 sp_point* rt;
wolfSSL 14:167253f4e170 29157 sp_point* p = NULL;
wolfSSL 14:167253f4e170 29158 sp_digit* tmp;
wolfSSL 14:167253f4e170 29159 sp_digit* negy;
wolfSSL 14:167253f4e170 29160 int i;
wolfSSL 14:167253f4e170 29161 ecc_recode v[43];
wolfSSL 14:167253f4e170 29162 int err;
wolfSSL 14:167253f4e170 29163
wolfSSL 14:167253f4e170 29164 (void)heap;
wolfSSL 14:167253f4e170 29165
wolfSSL 14:167253f4e170 29166 err = sp_ecc_point_new(heap, rtd, rt);
wolfSSL 14:167253f4e170 29167 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 29168 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 29169 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 29170 t = (sp_point*)XMALLOC(sizeof(sp_point) * 33, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 29171 if (t == NULL)
wolfSSL 14:167253f4e170 29172 err = MEMORY_E;
wolfSSL 14:167253f4e170 29173 tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 6, heap,
wolfSSL 14:167253f4e170 29174 DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 29175 if (tmp == NULL)
wolfSSL 14:167253f4e170 29176 err = MEMORY_E;
wolfSSL 14:167253f4e170 29177 #else
wolfSSL 14:167253f4e170 29178 t = td;
wolfSSL 14:167253f4e170 29179 tmp = tmpd;
wolfSSL 14:167253f4e170 29180 #endif
wolfSSL 14:167253f4e170 29181
wolfSSL 14:167253f4e170 29182
wolfSSL 14:167253f4e170 29183 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 29184 /* t[0] = {0, 0, 1} * norm */
wolfSSL 14:167253f4e170 29185 XMEMSET(&t[0], 0, sizeof(t[0]));
wolfSSL 14:167253f4e170 29186 t[0].infinity = 1;
wolfSSL 14:167253f4e170 29187 /* t[1] = {g->x, g->y, g->z} * norm */
wolfSSL 14:167253f4e170 29188 err = sp_256_mod_mul_norm_4(t[1].x, g->x, p256_mod);
wolfSSL 14:167253f4e170 29189 }
wolfSSL 14:167253f4e170 29190 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 29191 err = sp_256_mod_mul_norm_4(t[1].y, g->y, p256_mod);
wolfSSL 14:167253f4e170 29192 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 29193 err = sp_256_mod_mul_norm_4(t[1].z, g->z, p256_mod);
wolfSSL 14:167253f4e170 29194
wolfSSL 14:167253f4e170 29195 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 29196 t[1].infinity = 0;
wolfSSL 14:167253f4e170 29197 /* t[2] ... t[32] */
wolfSSL 14:167253f4e170 29198 sp_256_proj_point_dbl_n_store_4(t, &t[ 1], 5, 1, tmp);
wolfSSL 14:167253f4e170 29199 sp_256_proj_point_add_4(&t[ 3], &t[ 2], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29200 sp_256_proj_point_dbl_4(&t[ 6], &t[ 3], tmp);
wolfSSL 14:167253f4e170 29201 sp_256_proj_point_add_sub_4(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29202 sp_256_proj_point_dbl_4(&t[10], &t[ 5], tmp);
wolfSSL 14:167253f4e170 29203 sp_256_proj_point_add_sub_4(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29204 sp_256_proj_point_dbl_4(&t[12], &t[ 6], tmp);
wolfSSL 14:167253f4e170 29205 sp_256_proj_point_dbl_4(&t[14], &t[ 7], tmp);
wolfSSL 14:167253f4e170 29206 sp_256_proj_point_add_sub_4(&t[15], &t[13], &t[14], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29207 sp_256_proj_point_dbl_4(&t[18], &t[ 9], tmp);
wolfSSL 14:167253f4e170 29208 sp_256_proj_point_add_sub_4(&t[19], &t[17], &t[18], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29209 sp_256_proj_point_dbl_4(&t[20], &t[10], tmp);
wolfSSL 14:167253f4e170 29210 sp_256_proj_point_dbl_4(&t[22], &t[11], tmp);
wolfSSL 14:167253f4e170 29211 sp_256_proj_point_add_sub_4(&t[23], &t[21], &t[22], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29212 sp_256_proj_point_dbl_4(&t[24], &t[12], tmp);
wolfSSL 14:167253f4e170 29213 sp_256_proj_point_dbl_4(&t[26], &t[13], tmp);
wolfSSL 14:167253f4e170 29214 sp_256_proj_point_add_sub_4(&t[27], &t[25], &t[26], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29215 sp_256_proj_point_dbl_4(&t[28], &t[14], tmp);
wolfSSL 14:167253f4e170 29216 sp_256_proj_point_dbl_4(&t[30], &t[15], tmp);
wolfSSL 14:167253f4e170 29217 sp_256_proj_point_add_sub_4(&t[31], &t[29], &t[30], &t[ 1], tmp);
wolfSSL 14:167253f4e170 29218
wolfSSL 14:167253f4e170 29219 negy = t[0].y;
wolfSSL 14:167253f4e170 29220
wolfSSL 14:167253f4e170 29221 sp_256_ecc_recode_6_4(k, v);
wolfSSL 14:167253f4e170 29222
wolfSSL 14:167253f4e170 29223 i = 42;
wolfSSL 14:167253f4e170 29224 XMEMCPY(rt, &t[v[i].i], sizeof(sp_point));
wolfSSL 14:167253f4e170 29225 for (--i; i>=0; i--) {
wolfSSL 14:167253f4e170 29226 sp_256_proj_point_dbl_n_4(rt, rt, 6, tmp);
wolfSSL 14:167253f4e170 29227
wolfSSL 14:167253f4e170 29228 XMEMCPY(p, &t[v[i].i], sizeof(sp_point));
wolfSSL 14:167253f4e170 29229 sp_256_sub_4(negy, p256_mod, p->y);
wolfSSL 14:167253f4e170 29230 sp_256_cond_copy_4(p->y, negy, (sp_digit)0 - v[i].neg);
wolfSSL 14:167253f4e170 29231 sp_256_proj_point_add_4(rt, rt, p, tmp);
wolfSSL 14:167253f4e170 29232 }
wolfSSL 14:167253f4e170 29233
wolfSSL 14:167253f4e170 29234 if (map)
wolfSSL 14:167253f4e170 29235 sp_256_map_4(r, rt, tmp);
wolfSSL 14:167253f4e170 29236 else
wolfSSL 14:167253f4e170 29237 XMEMCPY(r, rt, sizeof(sp_point));
wolfSSL 14:167253f4e170 29238 }
wolfSSL 14:167253f4e170 29239
wolfSSL 14:167253f4e170 29240 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 29241 if (t != NULL)
wolfSSL 14:167253f4e170 29242 XFREE(t, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 29243 if (tmp != NULL)
wolfSSL 14:167253f4e170 29244 XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 29245 #endif
wolfSSL 14:167253f4e170 29246 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 29247 sp_ecc_point_free(rt, 0, heap);
wolfSSL 14:167253f4e170 29248
wolfSSL 14:167253f4e170 29249 return err;
wolfSSL 14:167253f4e170 29250 }
wolfSSL 14:167253f4e170 29251
wolfSSL 14:167253f4e170 29252 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 29253 /* Multiply two Montogmery form numbers mod the modulus (prime).
wolfSSL 14:167253f4e170 29254 * (r = a * b mod m)
wolfSSL 14:167253f4e170 29255 *
wolfSSL 14:167253f4e170 29256 * r Result of multiplication.
wolfSSL 14:167253f4e170 29257 * a First number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 29258 * b Second number to multiply in Montogmery form.
wolfSSL 14:167253f4e170 29259 * m Modulus (prime).
wolfSSL 14:167253f4e170 29260 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 29261 */
wolfSSL 14:167253f4e170 29262 SP_NOINLINE static void sp_256_mont_mul_avx2_4(sp_digit* r, sp_digit* a,
wolfSSL 14:167253f4e170 29263 sp_digit* b, sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 29264 {
wolfSSL 14:167253f4e170 29265 (void)mp;
wolfSSL 14:167253f4e170 29266
wolfSSL 14:167253f4e170 29267 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 29268 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 29269 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29270 "mulxq 0(%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 29271 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 29272 "mulxq 16(%[a]), %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 29273 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 29274 "mulxq 8(%[a]), %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29275 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 29276 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 29277 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 29278 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29279 "mulxq 8(%[a]), %%r12, %%r13\n\t"
wolfSSL 14:167253f4e170 29280 "adcxq %[m], %%r10\n\t"
wolfSSL 14:167253f4e170 29281 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 29282 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29283 "mulxq 0(%[a]), %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29284 "adoxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 29285 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 29286 "mulxq 16(%[a]), %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 29287 "adoxq %[m], %%r10\n\t"
wolfSSL 14:167253f4e170 29288 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29289 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 29290 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29291 "mulxq 8(%[a]), %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29292 "adcxq %%r14, %%r12\n\t"
wolfSSL 14:167253f4e170 29293 "adoxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29294 "adcxq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 29295 "adoxq %[m], %%r12\n\t"
wolfSSL 14:167253f4e170 29296 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 29297 "mulxq 0(%[a]), %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29298 "adoxq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 29299 "xorq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 29300 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 29301 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 29302 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29303 "mulxq 8(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 29304 "adcxq %[m], %%r11\n\t"
wolfSSL 14:167253f4e170 29305 "adoxq %%rdx, %%r10\n\t"
wolfSSL 14:167253f4e170 29306 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 29307 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29308 "adoxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29309 "mulxq 24(%[a]), %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29310 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29311 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 29312 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29313 "mulxq 16(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 29314 "adcxq %[m], %%r13\n\t"
wolfSSL 14:167253f4e170 29315 "adoxq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 29316 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 29317 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29318 "adoxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 29319 "mulxq 24(%[a]), %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29320 "adoxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 29321 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 29322 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 29323 "mulxq 0(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 29324 "adcxq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 29325 "xorq %[m], %[m]\n\t"
wolfSSL 14:167253f4e170 29326 "adcxq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 29327 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 29328 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29329 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29330 "mulxq 24(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 29331 "adoxq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 29332 "adoxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29333 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 29334 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29335 "mulxq 16(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 29336 "adcxq %%rdx, %%r13\n\t"
wolfSSL 14:167253f4e170 29337 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 29338 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29339 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 29340 "mulxq 24(%[a]), %%rax, %%rdx\n\t"
wolfSSL 14:167253f4e170 29341 "adcxq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 29342 "adoxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 29343 "adoxq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 29344 "adoxq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 29345 "# Start Reduction\n\t"
wolfSSL 14:167253f4e170 29346 "movq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 29347 "movq %%r9, %[a]\n\t"
wolfSSL 14:167253f4e170 29348 "movq %%r10, %[b]\n\t"
wolfSSL 14:167253f4e170 29349 "movq %%r11, %%rdx\n\t"
wolfSSL 14:167253f4e170 29350 "# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 29351 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 29352 "# + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 29353 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 29354 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 29355 "# a[0]-a[2] << 32\n\t"
wolfSSL 14:167253f4e170 29356 "shlq $32, %%r8\n\t"
wolfSSL 14:167253f4e170 29357 "shldq $32, %[a], %%r10\n\t"
wolfSSL 14:167253f4e170 29358 "shldq $32, %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 29359 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 29360 "subq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 29361 "# + a[0]-a[2] << 32 << 64\n\t"
wolfSSL 14:167253f4e170 29362 "addq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 29363 "adcq %%r9, %[b]\n\t"
wolfSSL 14:167253f4e170 29364 "adcq %%r10, %%rdx\n\t"
wolfSSL 14:167253f4e170 29365 "# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu\n\t"
wolfSSL 14:167253f4e170 29366 "# a += mu << 256\n\t"
wolfSSL 14:167253f4e170 29367 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 29368 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29369 "adcq %[a], %%r13\n\t"
wolfSSL 14:167253f4e170 29370 "adcq %[b], %%r14\n\t"
wolfSSL 14:167253f4e170 29371 "adcq %%rdx, %%r15\n\t"
wolfSSL 14:167253f4e170 29372 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29373 "# a += mu << 192\n\t"
wolfSSL 14:167253f4e170 29374 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29375 "adcq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 29376 "adcq %[b], %%r13\n\t"
wolfSSL 14:167253f4e170 29377 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 29378 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 29379 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29380 "# mu <<= 32\n\t"
wolfSSL 14:167253f4e170 29381 "movq %%rdx, %[m]\n\t"
wolfSSL 14:167253f4e170 29382 "shldq $32, %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 29383 "shldq $32, %[a], %[b]\n\t"
wolfSSL 14:167253f4e170 29384 "shldq $32, %%rax, %[a]\n\t"
wolfSSL 14:167253f4e170 29385 "shlq $32, %%rax\n\t"
wolfSSL 14:167253f4e170 29386 "shrq $32, %[m]\n\t"
wolfSSL 14:167253f4e170 29387 "# a += (mu << 32) << 64\n\t"
wolfSSL 14:167253f4e170 29388 "addq %[b], %%r11\n\t"
wolfSSL 14:167253f4e170 29389 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 29390 "adcq %[m], %%r13\n\t"
wolfSSL 14:167253f4e170 29391 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 29392 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 29393 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29394 "# a -= (mu << 32) << 192\n\t"
wolfSSL 14:167253f4e170 29395 "subq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29396 "movq $0xffffffff, %%rax\n\t"
wolfSSL 14:167253f4e170 29397 "sbbq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 29398 "movq $0xffffffff00000001, %[a]\n\t"
wolfSSL 14:167253f4e170 29399 "sbbq %[b], %%r13\n\t"
wolfSSL 14:167253f4e170 29400 "sbbq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 29401 "sbbq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 29402 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29403 "# mask m and sub from result if overflow\n\t"
wolfSSL 14:167253f4e170 29404 "# m[0] = -1 & mask = mask\n\t"
wolfSSL 14:167253f4e170 29405 "andq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 29406 "# m[2] = 0 & mask = 0\n\t"
wolfSSL 14:167253f4e170 29407 "andq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 29408 "subq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 29409 "sbbq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 29410 "sbbq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 29411 "sbbq %[a], %%r15\n\t"
wolfSSL 14:167253f4e170 29412 "movq %%r12, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 29413 "movq %%r13, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 29414 "movq %%r14, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 29415 "movq %%r15, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 29416 : [m] "+r" (m), [a] "+r" (a), [b] "+r" (b)
wolfSSL 14:167253f4e170 29417 : [r] "r" (r)
wolfSSL 14:167253f4e170 29418 : "memory", "rax", "rdx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 29419 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 29420 );
wolfSSL 14:167253f4e170 29421 }
wolfSSL 14:167253f4e170 29422
wolfSSL 14:167253f4e170 29423 /* Square the Montgomery form number mod the modulus (prime). (r = a * a mod m)
wolfSSL 14:167253f4e170 29424 *
wolfSSL 14:167253f4e170 29425 * r Result of squaring.
wolfSSL 14:167253f4e170 29426 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 29427 * m Modulus (prime).
wolfSSL 14:167253f4e170 29428 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 29429 */
wolfSSL 14:167253f4e170 29430 SP_NOINLINE static void sp_256_mont_sqr_avx2_4(sp_digit* r, sp_digit* a,
wolfSSL 14:167253f4e170 29431 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 29432 {
wolfSSL 14:167253f4e170 29433 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 29434 "# A[0] * A[1]\n\t"
wolfSSL 14:167253f4e170 29435 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29436 "mulxq 8(%[a]), %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 29437 "# A[0] * A[3]\n\t"
wolfSSL 14:167253f4e170 29438 "mulxq 24(%[a]), %%r11, %%r12\n\t"
wolfSSL 14:167253f4e170 29439 "# A[2] * A[1]\n\t"
wolfSSL 14:167253f4e170 29440 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29441 "mulxq 8(%[a]), %[mp], %[m]\n\t"
wolfSSL 14:167253f4e170 29442 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 29443 "adoxq %[mp], %%r11\n\t"
wolfSSL 14:167253f4e170 29444 "# A[2] * A[3]\n\t"
wolfSSL 14:167253f4e170 29445 "mulxq 24(%[a]), %%r13, %%r14\n\t"
wolfSSL 14:167253f4e170 29446 "adoxq %[m], %%r12\n\t"
wolfSSL 14:167253f4e170 29447 "# A[2] * A[0]\n\t"
wolfSSL 14:167253f4e170 29448 "mulxq 0(%[a]), %[mp], %[m]\n\t"
wolfSSL 14:167253f4e170 29449 "adoxq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 29450 "adcxq %[mp], %%r10\n\t"
wolfSSL 14:167253f4e170 29451 "adoxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 29452 "# A[1] * A[3]\n\t"
wolfSSL 14:167253f4e170 29453 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29454 "mulxq 24(%[a]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 29455 "adcxq %[m], %%r11\n\t"
wolfSSL 14:167253f4e170 29456 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29457 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 29458 "adcxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 29459 "# Double with Carry Flag\n\t"
wolfSSL 14:167253f4e170 29460 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 29461 "# A[0] * A[0]\n\t"
wolfSSL 14:167253f4e170 29462 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29463 "mulxq %%rdx, %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 29464 "adcxq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 29465 "# A[1] * A[1]\n\t"
wolfSSL 14:167253f4e170 29466 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29467 "mulxq %%rdx, %[mp], %[m]\n\t"
wolfSSL 14:167253f4e170 29468 "adcxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 29469 "adoxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 29470 "adcxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 29471 "adoxq %[mp], %%r10\n\t"
wolfSSL 14:167253f4e170 29472 "# A[2] * A[2]\n\t"
wolfSSL 14:167253f4e170 29473 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29474 "mulxq %%rdx, %%rax, %[mp]\n\t"
wolfSSL 14:167253f4e170 29475 "adcxq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 29476 "adoxq %[m], %%r11\n\t"
wolfSSL 14:167253f4e170 29477 "adcxq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 29478 "adoxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29479 "# A[3] * A[3]\n\t"
wolfSSL 14:167253f4e170 29480 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 29481 "mulxq %%rdx, %%rax, %[m]\n\t"
wolfSSL 14:167253f4e170 29482 "adcxq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 29483 "adoxq %[mp], %%r13\n\t"
wolfSSL 14:167253f4e170 29484 "adcxq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 29485 "adoxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 29486 "adoxq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 29487 "# Start Reduction\n\t"
wolfSSL 14:167253f4e170 29488 "movq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 29489 "movq %%r9, %[a]\n\t"
wolfSSL 14:167253f4e170 29490 "movq %%r10, %[mp]\n\t"
wolfSSL 14:167253f4e170 29491 "movq %%r11, %%rdx\n\t"
wolfSSL 14:167253f4e170 29492 "# mu = a[0]-a[3] + a[0]-a[2] << 32 << 64 + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 29493 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 29494 "# + (a[0] * 2) << 192\n\t"
wolfSSL 14:167253f4e170 29495 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 29496 "addq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 29497 "# a[0]-a[2] << 32\n\t"
wolfSSL 14:167253f4e170 29498 "shlq $32, %%r8\n\t"
wolfSSL 14:167253f4e170 29499 "shldq $32, %[a], %%r10\n\t"
wolfSSL 14:167253f4e170 29500 "shldq $32, %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 29501 "# - a[0] << 32 << 192\n\t"
wolfSSL 14:167253f4e170 29502 "subq %%r8, %%rdx\n\t"
wolfSSL 14:167253f4e170 29503 "# + a[0]-a[2] << 32 << 64\n\t"
wolfSSL 14:167253f4e170 29504 "addq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 29505 "adcq %%r9, %[mp]\n\t"
wolfSSL 14:167253f4e170 29506 "adcq %%r10, %%rdx\n\t"
wolfSSL 14:167253f4e170 29507 "# a += (mu << 256) - (mu << 224) + (mu << 192) + (mu << 96) - mu\n\t"
wolfSSL 14:167253f4e170 29508 "# a += mu << 256\n\t"
wolfSSL 14:167253f4e170 29509 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 29510 "addq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 29511 "adcq %[a], %%r13\n\t"
wolfSSL 14:167253f4e170 29512 "adcq %[mp], %%r14\n\t"
wolfSSL 14:167253f4e170 29513 "adcq %%rdx, %%r15\n\t"
wolfSSL 14:167253f4e170 29514 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29515 "# a += mu << 192\n\t"
wolfSSL 14:167253f4e170 29516 "addq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29517 "adcq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 29518 "adcq %[mp], %%r13\n\t"
wolfSSL 14:167253f4e170 29519 "adcq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 29520 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 29521 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29522 "# mu <<= 32\n\t"
wolfSSL 14:167253f4e170 29523 "movq %%rdx, %[m]\n\t"
wolfSSL 14:167253f4e170 29524 "shldq $32, %[mp], %%rdx\n\t"
wolfSSL 14:167253f4e170 29525 "shldq $32, %[a], %[mp]\n\t"
wolfSSL 14:167253f4e170 29526 "shldq $32, %%rax, %[a]\n\t"
wolfSSL 14:167253f4e170 29527 "shlq $32, %%rax\n\t"
wolfSSL 14:167253f4e170 29528 "shrq $32, %[m]\n\t"
wolfSSL 14:167253f4e170 29529 "# a += (mu << 32) << 64\n\t"
wolfSSL 14:167253f4e170 29530 "addq %[mp], %%r11\n\t"
wolfSSL 14:167253f4e170 29531 "adcq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 29532 "adcq %[m], %%r13\n\t"
wolfSSL 14:167253f4e170 29533 "adcq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 29534 "adcq $0, %%r15\n\t"
wolfSSL 14:167253f4e170 29535 "sbbq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29536 "# a -= (mu << 32) << 192\n\t"
wolfSSL 14:167253f4e170 29537 "subq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 29538 "movq $0xffffffff, %%rax\n\t"
wolfSSL 14:167253f4e170 29539 "sbbq %[a], %%r12\n\t"
wolfSSL 14:167253f4e170 29540 "movq $0xffffffff00000001, %[a]\n\t"
wolfSSL 14:167253f4e170 29541 "sbbq %[mp], %%r13\n\t"
wolfSSL 14:167253f4e170 29542 "sbbq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 29543 "sbbq %[m], %%r15\n\t"
wolfSSL 14:167253f4e170 29544 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 29545 "# mask m and sub from result if overflow\n\t"
wolfSSL 14:167253f4e170 29546 "# m[0] = -1 & mask = mask\n\t"
wolfSSL 14:167253f4e170 29547 "andq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 29548 "# m[2] = 0 & mask = 0\n\t"
wolfSSL 14:167253f4e170 29549 "andq %%r8, %[a]\n\t"
wolfSSL 14:167253f4e170 29550 "subq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 29551 "sbbq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 29552 "sbbq $0, %%r14\n\t"
wolfSSL 14:167253f4e170 29553 "sbbq %[a], %%r15\n\t"
wolfSSL 14:167253f4e170 29554 "movq %%r12, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 29555 "movq %%r13, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 29556 "movq %%r14, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 29557 "movq %%r15, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 29558 : [m] "+r" (m), [a] "+r" (a), [mp] "+r" (mp)
wolfSSL 14:167253f4e170 29559 : [r] "r" (r)
wolfSSL 14:167253f4e170 29560 : "memory", "rax", "rdx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 29561 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 29562 );
wolfSSL 14:167253f4e170 29563 }
wolfSSL 14:167253f4e170 29564
wolfSSL 14:167253f4e170 29565 #ifndef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 29566 /* Square the Montgomery form number a number of times. (r = a ^ n mod m)
wolfSSL 14:167253f4e170 29567 *
wolfSSL 14:167253f4e170 29568 * r Result of squaring.
wolfSSL 14:167253f4e170 29569 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 29570 * n Number of times to square.
wolfSSL 14:167253f4e170 29571 * m Modulus (prime).
wolfSSL 14:167253f4e170 29572 * mp Montogmery mulitplier.
wolfSSL 14:167253f4e170 29573 */
wolfSSL 14:167253f4e170 29574 static void sp_256_mont_sqr_n_avx2_4(sp_digit* r, sp_digit* a, int n,
wolfSSL 14:167253f4e170 29575 sp_digit* m, sp_digit mp)
wolfSSL 14:167253f4e170 29576 {
wolfSSL 14:167253f4e170 29577 sp_256_mont_sqr_avx2_4(r, a, m, mp);
wolfSSL 14:167253f4e170 29578 for (; n > 1; n--)
wolfSSL 14:167253f4e170 29579 sp_256_mont_sqr_avx2_4(r, r, m, mp);
wolfSSL 14:167253f4e170 29580 }
wolfSSL 14:167253f4e170 29581
wolfSSL 14:167253f4e170 29582 #endif /* !WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 29583
wolfSSL 14:167253f4e170 29584 /* Invert the number, in Montgomery form, modulo the modulus (prime) of the
wolfSSL 14:167253f4e170 29585 * P256 curve. (r = 1 / a mod m)
wolfSSL 14:167253f4e170 29586 *
wolfSSL 14:167253f4e170 29587 * r Inverse result.
wolfSSL 14:167253f4e170 29588 * a Number to invert.
wolfSSL 14:167253f4e170 29589 * td Temporary data.
wolfSSL 14:167253f4e170 29590 */
wolfSSL 14:167253f4e170 29591 static void sp_256_mont_inv_avx2_4(sp_digit* r, sp_digit* a, sp_digit* td)
wolfSSL 14:167253f4e170 29592 {
wolfSSL 14:167253f4e170 29593 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 29594 sp_digit* t = td;
wolfSSL 14:167253f4e170 29595 int i;
wolfSSL 14:167253f4e170 29596
wolfSSL 14:167253f4e170 29597 XMEMCPY(t, a, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 29598 for (i=254; i>=0; i--) {
wolfSSL 14:167253f4e170 29599 sp_256_mont_sqr_avx2_4(t, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29600 if (p256_mod_2[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 29601 sp_256_mont_mul_avx2_4(t, t, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29602 }
wolfSSL 14:167253f4e170 29603 XMEMCPY(r, t, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 29604 #else
wolfSSL 14:167253f4e170 29605 sp_digit* t = td;
wolfSSL 14:167253f4e170 29606 sp_digit* t2 = td + 2 * 4;
wolfSSL 14:167253f4e170 29607 sp_digit* t3 = td + 4 * 4;
wolfSSL 14:167253f4e170 29608
wolfSSL 14:167253f4e170 29609 /* t = a^2 */
wolfSSL 14:167253f4e170 29610 sp_256_mont_sqr_avx2_4(t, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29611 /* t = a^3 = t * a */
wolfSSL 14:167253f4e170 29612 sp_256_mont_mul_avx2_4(t, t, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29613 /* t2= a^c = t ^ 2 ^ 2 */
wolfSSL 14:167253f4e170 29614 sp_256_mont_sqr_n_avx2_4(t2, t, 2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29615 /* t3= a^d = t2 * a */
wolfSSL 14:167253f4e170 29616 sp_256_mont_mul_avx2_4(t3, t2, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29617 /* t = a^f = t2 * t */
wolfSSL 14:167253f4e170 29618 sp_256_mont_mul_avx2_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29619 /* t2= a^f0 = t ^ 2 ^ 4 */
wolfSSL 14:167253f4e170 29620 sp_256_mont_sqr_n_avx2_4(t2, t, 4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29621 /* t3= a^fd = t2 * t3 */
wolfSSL 14:167253f4e170 29622 sp_256_mont_mul_avx2_4(t3, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29623 /* t = a^ff = t2 * t */
wolfSSL 14:167253f4e170 29624 sp_256_mont_mul_avx2_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29625 /* t2= a^ff00 = t ^ 2 ^ 8 */
wolfSSL 14:167253f4e170 29626 sp_256_mont_sqr_n_avx2_4(t2, t, 8, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29627 /* t3= a^fffd = t2 * t3 */
wolfSSL 14:167253f4e170 29628 sp_256_mont_mul_avx2_4(t3, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29629 /* t = a^ffff = t2 * t */
wolfSSL 14:167253f4e170 29630 sp_256_mont_mul_avx2_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29631 /* t2= a^ffff0000 = t ^ 2 ^ 16 */
wolfSSL 14:167253f4e170 29632 sp_256_mont_sqr_n_avx2_4(t2, t, 16, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29633 /* t3= a^fffffffd = t2 * t3 */
wolfSSL 14:167253f4e170 29634 sp_256_mont_mul_avx2_4(t3, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29635 /* t = a^ffffffff = t2 * t */
wolfSSL 14:167253f4e170 29636 sp_256_mont_mul_avx2_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29637 /* t = a^ffffffff00000000 = t ^ 2 ^ 32 */
wolfSSL 14:167253f4e170 29638 sp_256_mont_sqr_n_avx2_4(t2, t, 32, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29639 /* t2= a^ffffffffffffffff = t2 * t */
wolfSSL 14:167253f4e170 29640 sp_256_mont_mul_avx2_4(t, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29641 /* t2= a^ffffffff00000001 = t2 * a */
wolfSSL 14:167253f4e170 29642 sp_256_mont_mul_avx2_4(t2, t2, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29643 /* t2= a^ffffffff000000010000000000000000000000000000000000000000
wolfSSL 14:167253f4e170 29644 * = t2 ^ 2 ^ 160 */
wolfSSL 14:167253f4e170 29645 sp_256_mont_sqr_n_avx2_4(t2, t2, 160, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29646 /* t2= a^ffffffff00000001000000000000000000000000ffffffffffffffff
wolfSSL 14:167253f4e170 29647 * = t2 * t */
wolfSSL 14:167253f4e170 29648 sp_256_mont_mul_avx2_4(t2, t2, t, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29649 /* t2= a^ffffffff00000001000000000000000000000000ffffffffffffffff00000000
wolfSSL 14:167253f4e170 29650 * = t2 ^ 2 ^ 32 */
wolfSSL 14:167253f4e170 29651 sp_256_mont_sqr_n_avx2_4(t2, t2, 32, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29652 /* r = a^ffffffff00000001000000000000000000000000fffffffffffffffffffffffd
wolfSSL 14:167253f4e170 29653 * = t2 * t3 */
wolfSSL 14:167253f4e170 29654 sp_256_mont_mul_avx2_4(r, t2, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29655 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 29656 }
wolfSSL 14:167253f4e170 29657
wolfSSL 14:167253f4e170 29658 /* Map the Montgomery form projective co-ordinate point to an affine point.
wolfSSL 14:167253f4e170 29659 *
wolfSSL 14:167253f4e170 29660 * r Resulting affine co-ordinate point.
wolfSSL 14:167253f4e170 29661 * p Montgomery form projective co-ordinate point.
wolfSSL 14:167253f4e170 29662 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 29663 */
wolfSSL 14:167253f4e170 29664 static void sp_256_map_avx2_4(sp_point* r, sp_point* p, sp_digit* t)
wolfSSL 14:167253f4e170 29665 {
wolfSSL 14:167253f4e170 29666 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 29667 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 29668 int64_t n;
wolfSSL 14:167253f4e170 29669
wolfSSL 14:167253f4e170 29670 sp_256_mont_inv_avx2_4(t1, p->z, t + 2*4);
wolfSSL 14:167253f4e170 29671
wolfSSL 14:167253f4e170 29672 sp_256_mont_sqr_avx2_4(t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29673 sp_256_mont_mul_avx2_4(t1, t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29674
wolfSSL 14:167253f4e170 29675 /* x /= z^2 */
wolfSSL 14:167253f4e170 29676 sp_256_mont_mul_avx2_4(r->x, p->x, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29677 XMEMSET(r->x + 4, 0, sizeof(r->x) / 2);
wolfSSL 14:167253f4e170 29678 sp_256_mont_reduce_4(r->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29679 /* Reduce x to less than modulus */
wolfSSL 14:167253f4e170 29680 n = sp_256_cmp_4(r->x, p256_mod);
wolfSSL 14:167253f4e170 29681 sp_256_cond_sub_4(r->x, r->x, p256_mod, 0 - (n >= 0));
wolfSSL 14:167253f4e170 29682 sp_256_norm_4(r->x);
wolfSSL 14:167253f4e170 29683
wolfSSL 14:167253f4e170 29684 /* y /= z^3 */
wolfSSL 14:167253f4e170 29685 sp_256_mont_mul_avx2_4(r->y, p->y, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29686 XMEMSET(r->y + 4, 0, sizeof(r->y) / 2);
wolfSSL 14:167253f4e170 29687 sp_256_mont_reduce_4(r->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29688 /* Reduce y to less than modulus */
wolfSSL 14:167253f4e170 29689 n = sp_256_cmp_4(r->y, p256_mod);
wolfSSL 14:167253f4e170 29690 sp_256_cond_sub_4(r->y, r->y, p256_mod, 0 - (n >= 0));
wolfSSL 14:167253f4e170 29691 sp_256_norm_4(r->y);
wolfSSL 14:167253f4e170 29692
wolfSSL 14:167253f4e170 29693 XMEMSET(r->z, 0, sizeof(r->z));
wolfSSL 14:167253f4e170 29694 r->z[0] = 1;
wolfSSL 14:167253f4e170 29695
wolfSSL 14:167253f4e170 29696 }
wolfSSL 14:167253f4e170 29697
wolfSSL 14:167253f4e170 29698 /* Double the Montgomery form projective point p.
wolfSSL 14:167253f4e170 29699 *
wolfSSL 14:167253f4e170 29700 * r Result of doubling point.
wolfSSL 14:167253f4e170 29701 * p Point to double.
wolfSSL 14:167253f4e170 29702 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 29703 */
wolfSSL 14:167253f4e170 29704 static void sp_256_proj_point_dbl_avx2_4(sp_point* r, sp_point* p, sp_digit* t)
wolfSSL 14:167253f4e170 29705 {
wolfSSL 14:167253f4e170 29706 sp_point *rp[2];
wolfSSL 14:167253f4e170 29707 sp_point tp;
wolfSSL 14:167253f4e170 29708 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 29709 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 29710 sp_digit* x;
wolfSSL 14:167253f4e170 29711 sp_digit* y;
wolfSSL 14:167253f4e170 29712 sp_digit* z;
wolfSSL 14:167253f4e170 29713 int i;
wolfSSL 14:167253f4e170 29714
wolfSSL 14:167253f4e170 29715 /* When infinity don't double point passed in - constant time. */
wolfSSL 14:167253f4e170 29716 rp[0] = r;
wolfSSL 14:167253f4e170 29717 rp[1] = &tp;
wolfSSL 14:167253f4e170 29718 x = rp[p->infinity]->x;
wolfSSL 14:167253f4e170 29719 y = rp[p->infinity]->y;
wolfSSL 14:167253f4e170 29720 z = rp[p->infinity]->z;
wolfSSL 14:167253f4e170 29721 /* Put point to double into result - good for infinty. */
wolfSSL 14:167253f4e170 29722 if (r != p) {
wolfSSL 14:167253f4e170 29723 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29724 r->x[i] = p->x[i];
wolfSSL 14:167253f4e170 29725 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29726 r->y[i] = p->y[i];
wolfSSL 14:167253f4e170 29727 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29728 r->z[i] = p->z[i];
wolfSSL 14:167253f4e170 29729 r->infinity = p->infinity;
wolfSSL 14:167253f4e170 29730 }
wolfSSL 14:167253f4e170 29731
wolfSSL 14:167253f4e170 29732 /* T1 = Z * Z */
wolfSSL 14:167253f4e170 29733 sp_256_mont_sqr_avx2_4(t1, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29734 /* Z = Y * Z */
wolfSSL 14:167253f4e170 29735 sp_256_mont_mul_avx2_4(z, y, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29736 /* Z = 2Z */
wolfSSL 14:167253f4e170 29737 sp_256_mont_dbl_4(z, z, p256_mod);
wolfSSL 14:167253f4e170 29738 /* T2 = X - T1 */
wolfSSL 14:167253f4e170 29739 sp_256_mont_sub_4(t2, x, t1, p256_mod);
wolfSSL 14:167253f4e170 29740 /* T1 = X + T1 */
wolfSSL 14:167253f4e170 29741 sp_256_mont_add_4(t1, x, t1, p256_mod);
wolfSSL 14:167253f4e170 29742 /* T2 = T1 * T2 */
wolfSSL 14:167253f4e170 29743 sp_256_mont_mul_avx2_4(t2, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29744 /* T1 = 3T2 */
wolfSSL 14:167253f4e170 29745 sp_256_mont_tpl_4(t1, t2, p256_mod);
wolfSSL 14:167253f4e170 29746 /* Y = 2Y */
wolfSSL 14:167253f4e170 29747 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 29748 /* Y = Y * Y */
wolfSSL 14:167253f4e170 29749 sp_256_mont_sqr_avx2_4(y, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29750 /* T2 = Y * Y */
wolfSSL 14:167253f4e170 29751 sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29752 /* T2 = T2/2 */
wolfSSL 14:167253f4e170 29753 sp_256_div2_4(t2, t2, p256_mod);
wolfSSL 14:167253f4e170 29754 /* Y = Y * X */
wolfSSL 14:167253f4e170 29755 sp_256_mont_mul_avx2_4(y, y, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29756 /* X = T1 * T1 */
wolfSSL 14:167253f4e170 29757 sp_256_mont_mul_avx2_4(x, t1, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29758 /* X = X - Y */
wolfSSL 14:167253f4e170 29759 sp_256_mont_sub_4(x, x, y, p256_mod);
wolfSSL 14:167253f4e170 29760 /* X = X - Y */
wolfSSL 14:167253f4e170 29761 sp_256_mont_sub_4(x, x, y, p256_mod);
wolfSSL 14:167253f4e170 29762 /* Y = Y - X */
wolfSSL 14:167253f4e170 29763 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 29764 /* Y = Y * T1 */
wolfSSL 14:167253f4e170 29765 sp_256_mont_mul_avx2_4(y, y, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29766 /* Y = Y - T2 */
wolfSSL 14:167253f4e170 29767 sp_256_mont_sub_4(y, y, t2, p256_mod);
wolfSSL 14:167253f4e170 29768
wolfSSL 14:167253f4e170 29769 }
wolfSSL 14:167253f4e170 29770
wolfSSL 14:167253f4e170 29771 /* Double the Montgomery form projective point p a number of times.
wolfSSL 14:167253f4e170 29772 *
wolfSSL 14:167253f4e170 29773 * r Result of repeated doubling of point.
wolfSSL 14:167253f4e170 29774 * p Point to double.
wolfSSL 14:167253f4e170 29775 * n Number of times to double
wolfSSL 14:167253f4e170 29776 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 29777 */
wolfSSL 14:167253f4e170 29778 static void sp_256_proj_point_dbl_n_avx2_4(sp_point* r, sp_point* p, int n,
wolfSSL 14:167253f4e170 29779 sp_digit* t)
wolfSSL 14:167253f4e170 29780 {
wolfSSL 14:167253f4e170 29781 sp_point *rp[2];
wolfSSL 14:167253f4e170 29782 sp_point tp;
wolfSSL 14:167253f4e170 29783 sp_digit* w = t;
wolfSSL 14:167253f4e170 29784 sp_digit* a = t + 2*4;
wolfSSL 14:167253f4e170 29785 sp_digit* b = t + 4*4;
wolfSSL 14:167253f4e170 29786 sp_digit* t1 = t + 6*4;
wolfSSL 14:167253f4e170 29787 sp_digit* t2 = t + 8*4;
wolfSSL 14:167253f4e170 29788 sp_digit* x;
wolfSSL 14:167253f4e170 29789 sp_digit* y;
wolfSSL 14:167253f4e170 29790 sp_digit* z;
wolfSSL 14:167253f4e170 29791 int i;
wolfSSL 14:167253f4e170 29792
wolfSSL 14:167253f4e170 29793 rp[0] = r;
wolfSSL 14:167253f4e170 29794 rp[1] = &tp;
wolfSSL 14:167253f4e170 29795 x = rp[p->infinity]->x;
wolfSSL 14:167253f4e170 29796 y = rp[p->infinity]->y;
wolfSSL 14:167253f4e170 29797 z = rp[p->infinity]->z;
wolfSSL 14:167253f4e170 29798 if (r != p) {
wolfSSL 14:167253f4e170 29799 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29800 r->x[i] = p->x[i];
wolfSSL 14:167253f4e170 29801 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29802 r->y[i] = p->y[i];
wolfSSL 14:167253f4e170 29803 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29804 r->z[i] = p->z[i];
wolfSSL 14:167253f4e170 29805 r->infinity = p->infinity;
wolfSSL 14:167253f4e170 29806 }
wolfSSL 14:167253f4e170 29807
wolfSSL 14:167253f4e170 29808 /* Y = 2*Y */
wolfSSL 14:167253f4e170 29809 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 29810 /* W = Z^4 */
wolfSSL 14:167253f4e170 29811 sp_256_mont_sqr_avx2_4(w, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29812 sp_256_mont_sqr_avx2_4(w, w, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29813 while (n--) {
wolfSSL 14:167253f4e170 29814 /* A = 3*(X^2 - W) */
wolfSSL 14:167253f4e170 29815 sp_256_mont_sqr_avx2_4(t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29816 sp_256_mont_sub_4(t1, t1, w, p256_mod);
wolfSSL 14:167253f4e170 29817 sp_256_mont_tpl_4(a, t1, p256_mod);
wolfSSL 14:167253f4e170 29818 /* B = X*Y^2 */
wolfSSL 14:167253f4e170 29819 sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29820 sp_256_mont_mul_avx2_4(b, t2, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29821 /* X = A^2 - 2B */
wolfSSL 14:167253f4e170 29822 sp_256_mont_sqr_avx2_4(x, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29823 sp_256_mont_dbl_4(t1, b, p256_mod);
wolfSSL 14:167253f4e170 29824 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 29825 /* Z = Z*Y */
wolfSSL 14:167253f4e170 29826 sp_256_mont_mul_avx2_4(z, z, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29827 /* t2 = Y^4 */
wolfSSL 14:167253f4e170 29828 sp_256_mont_sqr_avx2_4(t2, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29829 if (n) {
wolfSSL 14:167253f4e170 29830 /* W = W*Y^4 */
wolfSSL 14:167253f4e170 29831 sp_256_mont_mul_avx2_4(w, w, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29832 }
wolfSSL 14:167253f4e170 29833 /* y = 2*A*(B - X) - Y^4 */
wolfSSL 14:167253f4e170 29834 sp_256_mont_sub_4(y, b, x, p256_mod);
wolfSSL 14:167253f4e170 29835 sp_256_mont_mul_avx2_4(y, y, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29836 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 29837 sp_256_mont_sub_4(y, y, t2, p256_mod);
wolfSSL 14:167253f4e170 29838 }
wolfSSL 14:167253f4e170 29839 /* Y = Y/2 */
wolfSSL 14:167253f4e170 29840 sp_256_div2_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 29841 }
wolfSSL 14:167253f4e170 29842
wolfSSL 14:167253f4e170 29843 /* Add two Montgomery form projective points.
wolfSSL 14:167253f4e170 29844 *
wolfSSL 14:167253f4e170 29845 * r Result of addition.
wolfSSL 14:167253f4e170 29846 * p Frist point to add.
wolfSSL 14:167253f4e170 29847 * q Second point to add.
wolfSSL 14:167253f4e170 29848 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 29849 */
wolfSSL 14:167253f4e170 29850 static void sp_256_proj_point_add_avx2_4(sp_point* r, sp_point* p, sp_point* q,
wolfSSL 14:167253f4e170 29851 sp_digit* t)
wolfSSL 14:167253f4e170 29852 {
wolfSSL 14:167253f4e170 29853 sp_point *ap[2];
wolfSSL 14:167253f4e170 29854 sp_point *rp[2];
wolfSSL 14:167253f4e170 29855 sp_point tp;
wolfSSL 14:167253f4e170 29856 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 29857 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 29858 sp_digit* t3 = t + 4*4;
wolfSSL 14:167253f4e170 29859 sp_digit* t4 = t + 6*4;
wolfSSL 14:167253f4e170 29860 sp_digit* t5 = t + 8*4;
wolfSSL 14:167253f4e170 29861 sp_digit* x;
wolfSSL 14:167253f4e170 29862 sp_digit* y;
wolfSSL 14:167253f4e170 29863 sp_digit* z;
wolfSSL 14:167253f4e170 29864 int i;
wolfSSL 14:167253f4e170 29865
wolfSSL 14:167253f4e170 29866 /* Ensure only the first point is the same as the result. */
wolfSSL 14:167253f4e170 29867 if (q == r) {
wolfSSL 14:167253f4e170 29868 sp_point* a = p;
wolfSSL 14:167253f4e170 29869 p = q;
wolfSSL 14:167253f4e170 29870 q = a;
wolfSSL 14:167253f4e170 29871 }
wolfSSL 14:167253f4e170 29872
wolfSSL 14:167253f4e170 29873 /* Check double */
wolfSSL 14:167253f4e170 29874 sp_256_sub_4(t1, p256_mod, q->y);
wolfSSL 14:167253f4e170 29875 sp_256_norm_4(t1);
wolfSSL 14:167253f4e170 29876 if (sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
wolfSSL 14:167253f4e170 29877 (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) {
wolfSSL 14:167253f4e170 29878 sp_256_proj_point_dbl_4(r, p, t);
wolfSSL 14:167253f4e170 29879 }
wolfSSL 14:167253f4e170 29880 else {
wolfSSL 14:167253f4e170 29881 rp[0] = r;
wolfSSL 14:167253f4e170 29882 rp[1] = &tp;
wolfSSL 14:167253f4e170 29883 XMEMSET(&tp, 0, sizeof(tp));
wolfSSL 14:167253f4e170 29884 x = rp[p->infinity | q->infinity]->x;
wolfSSL 14:167253f4e170 29885 y = rp[p->infinity | q->infinity]->y;
wolfSSL 14:167253f4e170 29886 z = rp[p->infinity | q->infinity]->z;
wolfSSL 14:167253f4e170 29887
wolfSSL 14:167253f4e170 29888 ap[0] = p;
wolfSSL 14:167253f4e170 29889 ap[1] = q;
wolfSSL 14:167253f4e170 29890 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29891 r->x[i] = ap[p->infinity]->x[i];
wolfSSL 14:167253f4e170 29892 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29893 r->y[i] = ap[p->infinity]->y[i];
wolfSSL 14:167253f4e170 29894 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29895 r->z[i] = ap[p->infinity]->z[i];
wolfSSL 14:167253f4e170 29896 r->infinity = ap[p->infinity]->infinity;
wolfSSL 14:167253f4e170 29897
wolfSSL 14:167253f4e170 29898 /* U1 = X1*Z2^2 */
wolfSSL 14:167253f4e170 29899 sp_256_mont_sqr_avx2_4(t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29900 sp_256_mont_mul_avx2_4(t3, t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29901 sp_256_mont_mul_avx2_4(t1, t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29902 /* U2 = X2*Z1^2 */
wolfSSL 14:167253f4e170 29903 sp_256_mont_sqr_avx2_4(t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29904 sp_256_mont_mul_avx2_4(t4, t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29905 sp_256_mont_mul_avx2_4(t2, t2, q->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29906 /* S1 = Y1*Z2^3 */
wolfSSL 14:167253f4e170 29907 sp_256_mont_mul_avx2_4(t3, t3, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29908 /* S2 = Y2*Z1^3 */
wolfSSL 14:167253f4e170 29909 sp_256_mont_mul_avx2_4(t4, t4, q->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29910 /* H = U2 - U1 */
wolfSSL 14:167253f4e170 29911 sp_256_mont_sub_4(t2, t2, t1, p256_mod);
wolfSSL 14:167253f4e170 29912 /* R = S2 - S1 */
wolfSSL 14:167253f4e170 29913 sp_256_mont_sub_4(t4, t4, t3, p256_mod);
wolfSSL 14:167253f4e170 29914 /* Z3 = H*Z1*Z2 */
wolfSSL 14:167253f4e170 29915 sp_256_mont_mul_avx2_4(z, z, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29916 sp_256_mont_mul_avx2_4(z, z, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29917 /* X3 = R^2 - H^3 - 2*U1*H^2 */
wolfSSL 14:167253f4e170 29918 sp_256_mont_sqr_avx2_4(x, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29919 sp_256_mont_sqr_avx2_4(t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29920 sp_256_mont_mul_avx2_4(y, t1, t5, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29921 sp_256_mont_mul_avx2_4(t5, t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29922 sp_256_mont_sub_4(x, x, t5, p256_mod);
wolfSSL 14:167253f4e170 29923 sp_256_mont_dbl_4(t1, y, p256_mod);
wolfSSL 14:167253f4e170 29924 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 29925 /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
wolfSSL 14:167253f4e170 29926 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 29927 sp_256_mont_mul_avx2_4(y, y, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29928 sp_256_mont_mul_avx2_4(t5, t5, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29929 sp_256_mont_sub_4(y, y, t5, p256_mod);
wolfSSL 14:167253f4e170 29930 }
wolfSSL 14:167253f4e170 29931 }
wolfSSL 14:167253f4e170 29932
wolfSSL 14:167253f4e170 29933 /* Double the Montgomery form projective point p a number of times.
wolfSSL 14:167253f4e170 29934 *
wolfSSL 14:167253f4e170 29935 * r Result of repeated doubling of point.
wolfSSL 14:167253f4e170 29936 * p Point to double.
wolfSSL 14:167253f4e170 29937 * n Number of times to double
wolfSSL 14:167253f4e170 29938 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 29939 */
wolfSSL 14:167253f4e170 29940 static void sp_256_proj_point_dbl_n_store_avx2_4(sp_point* r, sp_point* p,
wolfSSL 14:167253f4e170 29941 int n, int m, sp_digit* t)
wolfSSL 14:167253f4e170 29942 {
wolfSSL 14:167253f4e170 29943 sp_digit* w = t;
wolfSSL 14:167253f4e170 29944 sp_digit* a = t + 2*4;
wolfSSL 14:167253f4e170 29945 sp_digit* b = t + 4*4;
wolfSSL 14:167253f4e170 29946 sp_digit* t1 = t + 6*4;
wolfSSL 14:167253f4e170 29947 sp_digit* t2 = t + 8*4;
wolfSSL 14:167253f4e170 29948 sp_digit* x = r[2*m].x;
wolfSSL 14:167253f4e170 29949 sp_digit* y = r[(1<<n)*m].y;
wolfSSL 14:167253f4e170 29950 sp_digit* z = r[2*m].z;
wolfSSL 14:167253f4e170 29951 int i;
wolfSSL 14:167253f4e170 29952
wolfSSL 14:167253f4e170 29953 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29954 x[i] = p->x[i];
wolfSSL 14:167253f4e170 29955 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29956 y[i] = p->y[i];
wolfSSL 14:167253f4e170 29957 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 29958 z[i] = p->z[i];
wolfSSL 14:167253f4e170 29959
wolfSSL 14:167253f4e170 29960 /* Y = 2*Y */
wolfSSL 14:167253f4e170 29961 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 29962 /* W = Z^4 */
wolfSSL 14:167253f4e170 29963 sp_256_mont_sqr_avx2_4(w, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29964 sp_256_mont_sqr_avx2_4(w, w, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29965 for (i=1; i<=n; i++) {
wolfSSL 14:167253f4e170 29966 /* A = 3*(X^2 - W) */
wolfSSL 14:167253f4e170 29967 sp_256_mont_sqr_avx2_4(t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29968 sp_256_mont_sub_4(t1, t1, w, p256_mod);
wolfSSL 14:167253f4e170 29969 sp_256_mont_tpl_4(a, t1, p256_mod);
wolfSSL 14:167253f4e170 29970 /* B = X*Y^2 */
wolfSSL 14:167253f4e170 29971 sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29972 sp_256_mont_mul_avx2_4(b, t2, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29973 x = r[(1<<i)*m].x;
wolfSSL 14:167253f4e170 29974 /* X = A^2 - 2B */
wolfSSL 14:167253f4e170 29975 sp_256_mont_sqr_avx2_4(x, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29976 sp_256_mont_dbl_4(t1, b, p256_mod);
wolfSSL 14:167253f4e170 29977 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 29978 /* Z = Z*Y */
wolfSSL 14:167253f4e170 29979 sp_256_mont_mul_avx2_4(r[(1<<i)*m].z, z, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29980 z = r[(1<<i)*m].z;
wolfSSL 14:167253f4e170 29981 /* t2 = Y^4 */
wolfSSL 14:167253f4e170 29982 sp_256_mont_sqr_avx2_4(t2, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29983 if (i != n) {
wolfSSL 14:167253f4e170 29984 /* W = W*Y^4 */
wolfSSL 14:167253f4e170 29985 sp_256_mont_mul_avx2_4(w, w, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29986 }
wolfSSL 14:167253f4e170 29987 /* y = 2*A*(B - X) - Y^4 */
wolfSSL 14:167253f4e170 29988 sp_256_mont_sub_4(y, b, x, p256_mod);
wolfSSL 14:167253f4e170 29989 sp_256_mont_mul_avx2_4(y, y, a, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 29990 sp_256_mont_dbl_4(y, y, p256_mod);
wolfSSL 14:167253f4e170 29991 sp_256_mont_sub_4(y, y, t2, p256_mod);
wolfSSL 14:167253f4e170 29992
wolfSSL 14:167253f4e170 29993 /* Y = Y/2 */
wolfSSL 14:167253f4e170 29994 sp_256_div2_4(r[(1<<i)*m].y, y, p256_mod);
wolfSSL 14:167253f4e170 29995 r[(1<<i)*m].infinity = 0;
wolfSSL 14:167253f4e170 29996 }
wolfSSL 14:167253f4e170 29997 }
wolfSSL 14:167253f4e170 29998
wolfSSL 14:167253f4e170 29999 /* Add two Montgomery form projective points.
wolfSSL 14:167253f4e170 30000 *
wolfSSL 14:167253f4e170 30001 * ra Result of addition.
wolfSSL 14:167253f4e170 30002 * rs Result of subtraction.
wolfSSL 14:167253f4e170 30003 * p Frist point to add.
wolfSSL 14:167253f4e170 30004 * q Second point to add.
wolfSSL 14:167253f4e170 30005 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 30006 */
wolfSSL 14:167253f4e170 30007 static void sp_256_proj_point_add_sub_avx2_4(sp_point* ra, sp_point* rs,
wolfSSL 14:167253f4e170 30008 sp_point* p, sp_point* q, sp_digit* t)
wolfSSL 14:167253f4e170 30009 {
wolfSSL 14:167253f4e170 30010 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 30011 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 30012 sp_digit* t3 = t + 4*4;
wolfSSL 14:167253f4e170 30013 sp_digit* t4 = t + 6*4;
wolfSSL 14:167253f4e170 30014 sp_digit* t5 = t + 8*4;
wolfSSL 14:167253f4e170 30015 sp_digit* t6 = t + 10*4;
wolfSSL 14:167253f4e170 30016 sp_digit* x = ra->x;
wolfSSL 14:167253f4e170 30017 sp_digit* y = ra->y;
wolfSSL 14:167253f4e170 30018 sp_digit* z = ra->z;
wolfSSL 14:167253f4e170 30019 sp_digit* xs = rs->x;
wolfSSL 14:167253f4e170 30020 sp_digit* ys = rs->y;
wolfSSL 14:167253f4e170 30021 sp_digit* zs = rs->z;
wolfSSL 14:167253f4e170 30022
wolfSSL 14:167253f4e170 30023
wolfSSL 14:167253f4e170 30024 XMEMCPY(x, p->x, sizeof(p->x) / 2);
wolfSSL 14:167253f4e170 30025 XMEMCPY(y, p->y, sizeof(p->y) / 2);
wolfSSL 14:167253f4e170 30026 XMEMCPY(z, p->z, sizeof(p->z) / 2);
wolfSSL 14:167253f4e170 30027 ra->infinity = 0;
wolfSSL 14:167253f4e170 30028 rs->infinity = 0;
wolfSSL 14:167253f4e170 30029
wolfSSL 14:167253f4e170 30030 /* U1 = X1*Z2^2 */
wolfSSL 14:167253f4e170 30031 sp_256_mont_sqr_avx2_4(t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30032 sp_256_mont_mul_avx2_4(t3, t1, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30033 sp_256_mont_mul_avx2_4(t1, t1, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30034 /* U2 = X2*Z1^2 */
wolfSSL 14:167253f4e170 30035 sp_256_mont_sqr_avx2_4(t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30036 sp_256_mont_mul_avx2_4(t4, t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30037 sp_256_mont_mul_avx2_4(t2, t2, q->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30038 /* S1 = Y1*Z2^3 */
wolfSSL 14:167253f4e170 30039 sp_256_mont_mul_avx2_4(t3, t3, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30040 /* S2 = Y2*Z1^3 */
wolfSSL 14:167253f4e170 30041 sp_256_mont_mul_avx2_4(t4, t4, q->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30042 /* H = U2 - U1 */
wolfSSL 14:167253f4e170 30043 sp_256_mont_sub_4(t2, t2, t1, p256_mod);
wolfSSL 14:167253f4e170 30044 /* RS = S2 + S1 */
wolfSSL 14:167253f4e170 30045 sp_256_mont_add_4(t6, t4, t3, p256_mod);
wolfSSL 14:167253f4e170 30046 /* R = S2 - S1 */
wolfSSL 14:167253f4e170 30047 sp_256_mont_sub_4(t4, t4, t3, p256_mod);
wolfSSL 14:167253f4e170 30048 /* Z3 = H*Z1*Z2 */
wolfSSL 14:167253f4e170 30049 /* ZS = H*Z1*Z2 */
wolfSSL 14:167253f4e170 30050 sp_256_mont_mul_avx2_4(z, z, q->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30051 sp_256_mont_mul_avx2_4(z, z, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30052 XMEMCPY(zs, z, sizeof(p->z)/2);
wolfSSL 14:167253f4e170 30053 /* X3 = R^2 - H^3 - 2*U1*H^2 */
wolfSSL 14:167253f4e170 30054 /* XS = RS^2 - H^3 - 2*U1*H^2 */
wolfSSL 14:167253f4e170 30055 sp_256_mont_sqr_avx2_4(x, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30056 sp_256_mont_sqr_avx2_4(xs, t6, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30057 sp_256_mont_sqr_avx2_4(t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30058 sp_256_mont_mul_avx2_4(y, t1, t5, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30059 sp_256_mont_mul_avx2_4(t5, t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30060 sp_256_mont_sub_4(x, x, t5, p256_mod);
wolfSSL 14:167253f4e170 30061 sp_256_mont_sub_4(xs, xs, t5, p256_mod);
wolfSSL 14:167253f4e170 30062 sp_256_mont_dbl_4(t1, y, p256_mod);
wolfSSL 14:167253f4e170 30063 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 30064 sp_256_mont_sub_4(xs, xs, t1, p256_mod);
wolfSSL 14:167253f4e170 30065 /* Y3 = R*(U1*H^2 - X3) - S1*H^3 */
wolfSSL 14:167253f4e170 30066 /* YS = -RS*(U1*H^2 - XS) - S1*H^3 */
wolfSSL 14:167253f4e170 30067 sp_256_mont_sub_4(ys, y, xs, p256_mod);
wolfSSL 14:167253f4e170 30068 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 30069 sp_256_mont_mul_avx2_4(y, y, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30070 sp_256_sub_4(t6, p256_mod, t6);
wolfSSL 14:167253f4e170 30071 sp_256_mont_mul_avx2_4(ys, ys, t6, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30072 sp_256_mont_mul_avx2_4(t5, t5, t3, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30073 sp_256_mont_sub_4(y, y, t5, p256_mod);
wolfSSL 14:167253f4e170 30074 sp_256_mont_sub_4(ys, ys, t5, p256_mod);
wolfSSL 14:167253f4e170 30075 }
wolfSSL 14:167253f4e170 30076
wolfSSL 14:167253f4e170 30077 /* Multiply the point by the scalar and return the result.
wolfSSL 14:167253f4e170 30078 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 30079 *
wolfSSL 14:167253f4e170 30080 * r Resulting point.
wolfSSL 14:167253f4e170 30081 * g Point to multiply.
wolfSSL 14:167253f4e170 30082 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 30083 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 30084 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30085 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 30086 */
wolfSSL 14:167253f4e170 30087 static int sp_256_ecc_mulmod_win_add_sub_avx2_4(sp_point* r, sp_point* g,
wolfSSL 14:167253f4e170 30088 sp_digit* k, int map, void* heap)
wolfSSL 14:167253f4e170 30089 {
wolfSSL 14:167253f4e170 30090 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30091 sp_point td[33];
wolfSSL 14:167253f4e170 30092 sp_point rtd, pd;
wolfSSL 14:167253f4e170 30093 sp_digit tmpd[2 * 4 * 6];
wolfSSL 14:167253f4e170 30094 #endif
wolfSSL 14:167253f4e170 30095 sp_point* t;
wolfSSL 14:167253f4e170 30096 sp_point* rt;
wolfSSL 14:167253f4e170 30097 sp_point* p = NULL;
wolfSSL 14:167253f4e170 30098 sp_digit* tmp;
wolfSSL 14:167253f4e170 30099 sp_digit* negy;
wolfSSL 14:167253f4e170 30100 int i;
wolfSSL 14:167253f4e170 30101 ecc_recode v[43];
wolfSSL 14:167253f4e170 30102 int err;
wolfSSL 14:167253f4e170 30103
wolfSSL 14:167253f4e170 30104 (void)heap;
wolfSSL 14:167253f4e170 30105
wolfSSL 14:167253f4e170 30106 err = sp_ecc_point_new(heap, rtd, rt);
wolfSSL 14:167253f4e170 30107 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30108 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 30109 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30110 t = (sp_point*)XMALLOC(sizeof(sp_point) * 33, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30111 if (t == NULL)
wolfSSL 14:167253f4e170 30112 err = MEMORY_E;
wolfSSL 14:167253f4e170 30113 tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 6, heap,
wolfSSL 14:167253f4e170 30114 DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30115 if (tmp == NULL)
wolfSSL 14:167253f4e170 30116 err = MEMORY_E;
wolfSSL 14:167253f4e170 30117 #else
wolfSSL 14:167253f4e170 30118 t = td;
wolfSSL 14:167253f4e170 30119 tmp = tmpd;
wolfSSL 14:167253f4e170 30120 #endif
wolfSSL 14:167253f4e170 30121
wolfSSL 14:167253f4e170 30122
wolfSSL 14:167253f4e170 30123 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30124 /* t[0] = {0, 0, 1} * norm */
wolfSSL 14:167253f4e170 30125 XMEMSET(&t[0], 0, sizeof(t[0]));
wolfSSL 14:167253f4e170 30126 t[0].infinity = 1;
wolfSSL 14:167253f4e170 30127 /* t[1] = {g->x, g->y, g->z} * norm */
wolfSSL 14:167253f4e170 30128 err = sp_256_mod_mul_norm_4(t[1].x, g->x, p256_mod);
wolfSSL 14:167253f4e170 30129 }
wolfSSL 14:167253f4e170 30130 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30131 err = sp_256_mod_mul_norm_4(t[1].y, g->y, p256_mod);
wolfSSL 14:167253f4e170 30132 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30133 err = sp_256_mod_mul_norm_4(t[1].z, g->z, p256_mod);
wolfSSL 14:167253f4e170 30134
wolfSSL 14:167253f4e170 30135 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30136 t[1].infinity = 0;
wolfSSL 14:167253f4e170 30137 /* t[2] ... t[32] */
wolfSSL 14:167253f4e170 30138 sp_256_proj_point_dbl_n_store_avx2_4(t, &t[ 1], 5, 1, tmp);
wolfSSL 14:167253f4e170 30139 sp_256_proj_point_add_avx2_4(&t[ 3], &t[ 2], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30140 sp_256_proj_point_dbl_avx2_4(&t[ 6], &t[ 3], tmp);
wolfSSL 14:167253f4e170 30141 sp_256_proj_point_add_sub_avx2_4(&t[ 7], &t[ 5], &t[ 6], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30142 sp_256_proj_point_dbl_avx2_4(&t[10], &t[ 5], tmp);
wolfSSL 14:167253f4e170 30143 sp_256_proj_point_add_sub_avx2_4(&t[11], &t[ 9], &t[10], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30144 sp_256_proj_point_dbl_avx2_4(&t[12], &t[ 6], tmp);
wolfSSL 14:167253f4e170 30145 sp_256_proj_point_dbl_avx2_4(&t[14], &t[ 7], tmp);
wolfSSL 14:167253f4e170 30146 sp_256_proj_point_add_sub_avx2_4(&t[15], &t[13], &t[14], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30147 sp_256_proj_point_dbl_avx2_4(&t[18], &t[ 9], tmp);
wolfSSL 14:167253f4e170 30148 sp_256_proj_point_add_sub_avx2_4(&t[19], &t[17], &t[18], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30149 sp_256_proj_point_dbl_avx2_4(&t[20], &t[10], tmp);
wolfSSL 14:167253f4e170 30150 sp_256_proj_point_dbl_avx2_4(&t[22], &t[11], tmp);
wolfSSL 14:167253f4e170 30151 sp_256_proj_point_add_sub_avx2_4(&t[23], &t[21], &t[22], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30152 sp_256_proj_point_dbl_avx2_4(&t[24], &t[12], tmp);
wolfSSL 14:167253f4e170 30153 sp_256_proj_point_dbl_avx2_4(&t[26], &t[13], tmp);
wolfSSL 14:167253f4e170 30154 sp_256_proj_point_add_sub_avx2_4(&t[27], &t[25], &t[26], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30155 sp_256_proj_point_dbl_avx2_4(&t[28], &t[14], tmp);
wolfSSL 14:167253f4e170 30156 sp_256_proj_point_dbl_avx2_4(&t[30], &t[15], tmp);
wolfSSL 14:167253f4e170 30157 sp_256_proj_point_add_sub_avx2_4(&t[31], &t[29], &t[30], &t[ 1], tmp);
wolfSSL 14:167253f4e170 30158
wolfSSL 14:167253f4e170 30159 negy = t[0].y;
wolfSSL 14:167253f4e170 30160
wolfSSL 14:167253f4e170 30161 sp_256_ecc_recode_6_4(k, v);
wolfSSL 14:167253f4e170 30162
wolfSSL 14:167253f4e170 30163 i = 42;
wolfSSL 14:167253f4e170 30164 XMEMCPY(rt, &t[v[i].i], sizeof(sp_point));
wolfSSL 14:167253f4e170 30165 for (--i; i>=0; i--) {
wolfSSL 14:167253f4e170 30166 sp_256_proj_point_dbl_n_avx2_4(rt, rt, 6, tmp);
wolfSSL 14:167253f4e170 30167
wolfSSL 14:167253f4e170 30168 XMEMCPY(p, &t[v[i].i], sizeof(sp_point));
wolfSSL 14:167253f4e170 30169 sp_256_sub_4(negy, p256_mod, p->y);
wolfSSL 14:167253f4e170 30170 sp_256_cond_copy_4(p->y, negy, (sp_digit)0 - v[i].neg);
wolfSSL 14:167253f4e170 30171 sp_256_proj_point_add_avx2_4(rt, rt, p, tmp);
wolfSSL 14:167253f4e170 30172 }
wolfSSL 14:167253f4e170 30173
wolfSSL 14:167253f4e170 30174 if (map)
wolfSSL 14:167253f4e170 30175 sp_256_map_avx2_4(r, rt, tmp);
wolfSSL 14:167253f4e170 30176 else
wolfSSL 14:167253f4e170 30177 XMEMCPY(r, rt, sizeof(sp_point));
wolfSSL 14:167253f4e170 30178 }
wolfSSL 14:167253f4e170 30179
wolfSSL 14:167253f4e170 30180 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30181 if (t != NULL)
wolfSSL 14:167253f4e170 30182 XFREE(t, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30183 if (tmp != NULL)
wolfSSL 14:167253f4e170 30184 XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30185 #endif
wolfSSL 14:167253f4e170 30186 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 30187 sp_ecc_point_free(rt, 0, heap);
wolfSSL 14:167253f4e170 30188
wolfSSL 14:167253f4e170 30189 return err;
wolfSSL 14:167253f4e170 30190 }
wolfSSL 14:167253f4e170 30191
wolfSSL 14:167253f4e170 30192 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 30193 /* A table entry for pre-computed points. */
wolfSSL 14:167253f4e170 30194 typedef struct sp_table_entry {
wolfSSL 14:167253f4e170 30195 sp_digit x[4];
wolfSSL 14:167253f4e170 30196 sp_digit y[4];
wolfSSL 14:167253f4e170 30197 byte infinity;
wolfSSL 14:167253f4e170 30198 } sp_table_entry;
wolfSSL 14:167253f4e170 30199
wolfSSL 14:167253f4e170 30200 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
wolfSSL 14:167253f4e170 30201 #endif /* FP_ECC || WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 30202 /* Add two Montgomery form projective points. The second point has a q value of
wolfSSL 14:167253f4e170 30203 * one.
wolfSSL 14:167253f4e170 30204 * Only the first point can be the same pointer as the result point.
wolfSSL 14:167253f4e170 30205 *
wolfSSL 14:167253f4e170 30206 * r Result of addition.
wolfSSL 14:167253f4e170 30207 * p Frist point to add.
wolfSSL 14:167253f4e170 30208 * q Second point to add.
wolfSSL 14:167253f4e170 30209 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 30210 */
wolfSSL 14:167253f4e170 30211 static void sp_256_proj_point_add_qz1_4(sp_point* r, sp_point* p,
wolfSSL 14:167253f4e170 30212 sp_point* q, sp_digit* t)
wolfSSL 14:167253f4e170 30213 {
wolfSSL 14:167253f4e170 30214 sp_point *ap[2];
wolfSSL 14:167253f4e170 30215 sp_point *rp[2];
wolfSSL 14:167253f4e170 30216 sp_point tp;
wolfSSL 14:167253f4e170 30217 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 30218 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 30219 sp_digit* t3 = t + 4*4;
wolfSSL 14:167253f4e170 30220 sp_digit* t4 = t + 6*4;
wolfSSL 14:167253f4e170 30221 sp_digit* t5 = t + 8*4;
wolfSSL 14:167253f4e170 30222 sp_digit* x;
wolfSSL 14:167253f4e170 30223 sp_digit* y;
wolfSSL 14:167253f4e170 30224 sp_digit* z;
wolfSSL 14:167253f4e170 30225 int i;
wolfSSL 14:167253f4e170 30226
wolfSSL 14:167253f4e170 30227 /* Check double */
wolfSSL 14:167253f4e170 30228 sp_256_sub_4(t1, p256_mod, q->y);
wolfSSL 14:167253f4e170 30229 sp_256_norm_4(t1);
wolfSSL 14:167253f4e170 30230 if (sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
wolfSSL 14:167253f4e170 30231 (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) {
wolfSSL 14:167253f4e170 30232 sp_256_proj_point_dbl_4(r, p, t);
wolfSSL 14:167253f4e170 30233 }
wolfSSL 14:167253f4e170 30234 else {
wolfSSL 14:167253f4e170 30235 rp[0] = r;
wolfSSL 14:167253f4e170 30236 rp[1] = &tp;
wolfSSL 14:167253f4e170 30237 XMEMSET(&tp, 0, sizeof(tp));
wolfSSL 14:167253f4e170 30238 x = rp[p->infinity | q->infinity]->x;
wolfSSL 14:167253f4e170 30239 y = rp[p->infinity | q->infinity]->y;
wolfSSL 14:167253f4e170 30240 z = rp[p->infinity | q->infinity]->z;
wolfSSL 14:167253f4e170 30241
wolfSSL 14:167253f4e170 30242 ap[0] = p;
wolfSSL 14:167253f4e170 30243 ap[1] = q;
wolfSSL 14:167253f4e170 30244 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 30245 r->x[i] = ap[p->infinity]->x[i];
wolfSSL 14:167253f4e170 30246 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 30247 r->y[i] = ap[p->infinity]->y[i];
wolfSSL 14:167253f4e170 30248 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 30249 r->z[i] = ap[p->infinity]->z[i];
wolfSSL 14:167253f4e170 30250 r->infinity = ap[p->infinity]->infinity;
wolfSSL 14:167253f4e170 30251
wolfSSL 14:167253f4e170 30252 /* U2 = X2*Z1^2 */
wolfSSL 14:167253f4e170 30253 sp_256_mont_sqr_4(t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30254 sp_256_mont_mul_4(t4, t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30255 sp_256_mont_mul_4(t2, t2, q->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30256 /* S2 = Y2*Z1^3 */
wolfSSL 14:167253f4e170 30257 sp_256_mont_mul_4(t4, t4, q->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30258 /* H = U2 - X1 */
wolfSSL 14:167253f4e170 30259 sp_256_mont_sub_4(t2, t2, x, p256_mod);
wolfSSL 14:167253f4e170 30260 /* R = S2 - Y1 */
wolfSSL 14:167253f4e170 30261 sp_256_mont_sub_4(t4, t4, y, p256_mod);
wolfSSL 14:167253f4e170 30262 /* Z3 = H*Z1 */
wolfSSL 14:167253f4e170 30263 sp_256_mont_mul_4(z, z, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30264 /* X3 = R^2 - H^3 - 2*X1*H^2 */
wolfSSL 14:167253f4e170 30265 sp_256_mont_sqr_4(t1, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30266 sp_256_mont_sqr_4(t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30267 sp_256_mont_mul_4(t3, x, t5, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30268 sp_256_mont_mul_4(t5, t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30269 sp_256_mont_sub_4(x, t1, t5, p256_mod);
wolfSSL 14:167253f4e170 30270 sp_256_mont_dbl_4(t1, t3, p256_mod);
wolfSSL 14:167253f4e170 30271 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 30272 /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
wolfSSL 14:167253f4e170 30273 sp_256_mont_sub_4(t3, t3, x, p256_mod);
wolfSSL 14:167253f4e170 30274 sp_256_mont_mul_4(t3, t3, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30275 sp_256_mont_mul_4(t5, t5, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30276 sp_256_mont_sub_4(y, t3, t5, p256_mod);
wolfSSL 14:167253f4e170 30277 }
wolfSSL 14:167253f4e170 30278 }
wolfSSL 14:167253f4e170 30279
wolfSSL 14:167253f4e170 30280 #ifdef FP_ECC
wolfSSL 14:167253f4e170 30281 /* Convert the projective point to affine.
wolfSSL 14:167253f4e170 30282 * Ordinates are in Montgomery form.
wolfSSL 14:167253f4e170 30283 *
wolfSSL 14:167253f4e170 30284 * a Point to convert.
wolfSSL 14:167253f4e170 30285 * t Temprorary data.
wolfSSL 14:167253f4e170 30286 */
wolfSSL 14:167253f4e170 30287 static void sp_256_proj_to_affine_4(sp_point* a, sp_digit* t)
wolfSSL 14:167253f4e170 30288 {
wolfSSL 14:167253f4e170 30289 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 30290 sp_digit* t2 = t + 2 * 4;
wolfSSL 14:167253f4e170 30291 sp_digit* tmp = t + 4 * 4;
wolfSSL 14:167253f4e170 30292
wolfSSL 14:167253f4e170 30293 sp_256_mont_inv_4(t1, a->z, tmp);
wolfSSL 14:167253f4e170 30294
wolfSSL 14:167253f4e170 30295 sp_256_mont_sqr_4(t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30296 sp_256_mont_mul_4(t1, t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30297
wolfSSL 14:167253f4e170 30298 sp_256_mont_mul_4(a->x, a->x, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30299 sp_256_mont_mul_4(a->y, a->y, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30300 XMEMCPY(a->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30301 }
wolfSSL 14:167253f4e170 30302
wolfSSL 14:167253f4e170 30303 /* Generate the pre-computed table of points for the base point.
wolfSSL 14:167253f4e170 30304 *
wolfSSL 14:167253f4e170 30305 * a The base point.
wolfSSL 14:167253f4e170 30306 * table Place to store generated point data.
wolfSSL 14:167253f4e170 30307 * tmp Temprorary data.
wolfSSL 14:167253f4e170 30308 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30309 */
wolfSSL 14:167253f4e170 30310 static int sp_256_gen_stripe_table_4(sp_point* a,
wolfSSL 14:167253f4e170 30311 sp_table_entry* table, sp_digit* tmp, void* heap)
wolfSSL 14:167253f4e170 30312 {
wolfSSL 14:167253f4e170 30313 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30314 sp_point td, s1d, s2d;
wolfSSL 14:167253f4e170 30315 #endif
wolfSSL 14:167253f4e170 30316 sp_point* t;
wolfSSL 14:167253f4e170 30317 sp_point* s1 = NULL;
wolfSSL 14:167253f4e170 30318 sp_point* s2 = NULL;
wolfSSL 14:167253f4e170 30319 int i, j;
wolfSSL 14:167253f4e170 30320 int err;
wolfSSL 14:167253f4e170 30321
wolfSSL 14:167253f4e170 30322 (void)heap;
wolfSSL 14:167253f4e170 30323
wolfSSL 14:167253f4e170 30324 err = sp_ecc_point_new(heap, td, t);
wolfSSL 14:167253f4e170 30325 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30326 err = sp_ecc_point_new(heap, s1d, s1);
wolfSSL 14:167253f4e170 30327 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30328 err = sp_ecc_point_new(heap, s2d, s2);
wolfSSL 14:167253f4e170 30329
wolfSSL 14:167253f4e170 30330 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30331 err = sp_256_mod_mul_norm_4(t->x, a->x, p256_mod);
wolfSSL 14:167253f4e170 30332 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30333 err = sp_256_mod_mul_norm_4(t->y, a->y, p256_mod);
wolfSSL 14:167253f4e170 30334 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30335 err = sp_256_mod_mul_norm_4(t->z, a->z, p256_mod);
wolfSSL 14:167253f4e170 30336 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30337 t->infinity = 0;
wolfSSL 14:167253f4e170 30338 sp_256_proj_to_affine_4(t, tmp);
wolfSSL 14:167253f4e170 30339
wolfSSL 14:167253f4e170 30340 XMEMCPY(s1->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30341 s1->infinity = 0;
wolfSSL 14:167253f4e170 30342 XMEMCPY(s2->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30343 s2->infinity = 0;
wolfSSL 14:167253f4e170 30344
wolfSSL 14:167253f4e170 30345 /* table[0] = {0, 0, infinity} */
wolfSSL 14:167253f4e170 30346 XMEMSET(&table[0], 0, sizeof(sp_table_entry));
wolfSSL 14:167253f4e170 30347 table[0].infinity = 1;
wolfSSL 14:167253f4e170 30348 /* table[1] = Affine version of 'a' in Montgomery form */
wolfSSL 14:167253f4e170 30349 XMEMCPY(table[1].x, t->x, sizeof(table->x));
wolfSSL 14:167253f4e170 30350 XMEMCPY(table[1].y, t->y, sizeof(table->y));
wolfSSL 14:167253f4e170 30351 table[1].infinity = 0;
wolfSSL 14:167253f4e170 30352
wolfSSL 14:167253f4e170 30353 for (i=1; i<8; i++) {
wolfSSL 14:167253f4e170 30354 sp_256_proj_point_dbl_n_4(t, t, 32, tmp);
wolfSSL 14:167253f4e170 30355 sp_256_proj_to_affine_4(t, tmp);
wolfSSL 14:167253f4e170 30356 XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
wolfSSL 14:167253f4e170 30357 XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
wolfSSL 14:167253f4e170 30358 table[1<<i].infinity = 0;
wolfSSL 14:167253f4e170 30359 }
wolfSSL 14:167253f4e170 30360
wolfSSL 14:167253f4e170 30361 for (i=1; i<8; i++) {
wolfSSL 14:167253f4e170 30362 XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
wolfSSL 14:167253f4e170 30363 XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
wolfSSL 14:167253f4e170 30364 for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
wolfSSL 14:167253f4e170 30365 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
wolfSSL 14:167253f4e170 30366 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
wolfSSL 14:167253f4e170 30367 sp_256_proj_point_add_qz1_4(t, s1, s2, tmp);
wolfSSL 14:167253f4e170 30368 sp_256_proj_to_affine_4(t, tmp);
wolfSSL 14:167253f4e170 30369 XMEMCPY(table[j].x, t->x, sizeof(table->x));
wolfSSL 14:167253f4e170 30370 XMEMCPY(table[j].y, t->y, sizeof(table->y));
wolfSSL 14:167253f4e170 30371 table[j].infinity = 0;
wolfSSL 14:167253f4e170 30372 }
wolfSSL 14:167253f4e170 30373 }
wolfSSL 14:167253f4e170 30374 }
wolfSSL 14:167253f4e170 30375
wolfSSL 14:167253f4e170 30376 sp_ecc_point_free(s2, 0, heap);
wolfSSL 14:167253f4e170 30377 sp_ecc_point_free(s1, 0, heap);
wolfSSL 14:167253f4e170 30378 sp_ecc_point_free( t, 0, heap);
wolfSSL 14:167253f4e170 30379
wolfSSL 14:167253f4e170 30380 return err;
wolfSSL 14:167253f4e170 30381 }
wolfSSL 14:167253f4e170 30382
wolfSSL 14:167253f4e170 30383 #endif /* FP_ECC */
wolfSSL 14:167253f4e170 30384 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
wolfSSL 14:167253f4e170 30385 /* Multiply the point by the scalar and return the result.
wolfSSL 14:167253f4e170 30386 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 30387 *
wolfSSL 14:167253f4e170 30388 * r Resulting point.
wolfSSL 14:167253f4e170 30389 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 30390 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 30391 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30392 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 30393 */
wolfSSL 14:167253f4e170 30394 static int sp_256_ecc_mulmod_stripe_4(sp_point* r, sp_point* g,
wolfSSL 14:167253f4e170 30395 sp_table_entry* table, sp_digit* k, int map, void* heap)
wolfSSL 14:167253f4e170 30396 {
wolfSSL 14:167253f4e170 30397 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30398 sp_point rtd;
wolfSSL 14:167253f4e170 30399 sp_point pd;
wolfSSL 14:167253f4e170 30400 sp_digit td[2 * 4 * 5];
wolfSSL 14:167253f4e170 30401 #endif
wolfSSL 14:167253f4e170 30402 sp_point* rt;
wolfSSL 14:167253f4e170 30403 sp_point* p = NULL;
wolfSSL 14:167253f4e170 30404 sp_digit* t;
wolfSSL 14:167253f4e170 30405 int i, j;
wolfSSL 14:167253f4e170 30406 int y, x;
wolfSSL 14:167253f4e170 30407 int err;
wolfSSL 14:167253f4e170 30408
wolfSSL 14:167253f4e170 30409 (void)g;
wolfSSL 14:167253f4e170 30410 (void)heap;
wolfSSL 14:167253f4e170 30411
wolfSSL 14:167253f4e170 30412 err = sp_ecc_point_new(heap, rtd, rt);
wolfSSL 14:167253f4e170 30413 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30414 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 30415 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30416 t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
wolfSSL 14:167253f4e170 30417 DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30418 if (t == NULL)
wolfSSL 14:167253f4e170 30419 err = MEMORY_E;
wolfSSL 14:167253f4e170 30420 #else
wolfSSL 14:167253f4e170 30421 t = td;
wolfSSL 14:167253f4e170 30422 #endif
wolfSSL 14:167253f4e170 30423
wolfSSL 14:167253f4e170 30424 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30425 XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30426 XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30427
wolfSSL 14:167253f4e170 30428 y = 0;
wolfSSL 14:167253f4e170 30429 for (j=0,x=31; j<8; j++,x+=32)
wolfSSL 14:167253f4e170 30430 y |= ((k[x / 64] >> (x % 64)) & 1) << j;
wolfSSL 14:167253f4e170 30431 XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
wolfSSL 14:167253f4e170 30432 XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
wolfSSL 14:167253f4e170 30433 rt->infinity = table[y].infinity;
wolfSSL 14:167253f4e170 30434 for (i=30; i>=0; i--) {
wolfSSL 14:167253f4e170 30435 y = 0;
wolfSSL 14:167253f4e170 30436 for (j=0,x=i; j<8; j++,x+=32)
wolfSSL 14:167253f4e170 30437 y |= ((k[x / 64] >> (x % 64)) & 1) << j;
wolfSSL 14:167253f4e170 30438
wolfSSL 14:167253f4e170 30439 sp_256_proj_point_dbl_4(rt, rt, t);
wolfSSL 14:167253f4e170 30440 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
wolfSSL 14:167253f4e170 30441 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
wolfSSL 14:167253f4e170 30442 p->infinity = table[y].infinity;
wolfSSL 14:167253f4e170 30443 sp_256_proj_point_add_qz1_4(rt, rt, p, t);
wolfSSL 14:167253f4e170 30444 }
wolfSSL 14:167253f4e170 30445
wolfSSL 14:167253f4e170 30446 if (map)
wolfSSL 14:167253f4e170 30447 sp_256_map_4(r, rt, t);
wolfSSL 14:167253f4e170 30448 else
wolfSSL 14:167253f4e170 30449 XMEMCPY(r, rt, sizeof(sp_point));
wolfSSL 14:167253f4e170 30450 }
wolfSSL 14:167253f4e170 30451
wolfSSL 14:167253f4e170 30452 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30453 if (t != NULL)
wolfSSL 14:167253f4e170 30454 XFREE(t, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30455 #endif
wolfSSL 14:167253f4e170 30456 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 30457 sp_ecc_point_free(rt, 0, heap);
wolfSSL 14:167253f4e170 30458
wolfSSL 14:167253f4e170 30459 return err;
wolfSSL 14:167253f4e170 30460 }
wolfSSL 14:167253f4e170 30461
wolfSSL 14:167253f4e170 30462 #endif /* FP_ECC || WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 30463 #ifdef FP_ECC
wolfSSL 14:167253f4e170 30464 #ifndef FP_ENTRIES
wolfSSL 14:167253f4e170 30465 #define FP_ENTRIES 16
wolfSSL 14:167253f4e170 30466 #endif
wolfSSL 14:167253f4e170 30467
wolfSSL 14:167253f4e170 30468 typedef struct sp_cache_t {
wolfSSL 14:167253f4e170 30469 sp_digit x[4];
wolfSSL 14:167253f4e170 30470 sp_digit y[4];
wolfSSL 14:167253f4e170 30471 sp_table_entry table[256];
wolfSSL 14:167253f4e170 30472 uint32_t cnt;
wolfSSL 14:167253f4e170 30473 int set;
wolfSSL 14:167253f4e170 30474 } sp_cache_t;
wolfSSL 14:167253f4e170 30475
wolfSSL 14:167253f4e170 30476 static THREAD_LS_T sp_cache_t sp_cache[FP_ENTRIES];
wolfSSL 14:167253f4e170 30477 static THREAD_LS_T int sp_cache_last = -1;
wolfSSL 14:167253f4e170 30478 static THREAD_LS_T int sp_cache_inited = 0;
wolfSSL 14:167253f4e170 30479
wolfSSL 14:167253f4e170 30480 #ifndef HAVE_THREAD_LS
wolfSSL 14:167253f4e170 30481 static volatile int initCacheMutex = 0;
wolfSSL 14:167253f4e170 30482 static wolfSSL_Mutex sp_cache_lock;
wolfSSL 14:167253f4e170 30483 #endif
wolfSSL 14:167253f4e170 30484
wolfSSL 14:167253f4e170 30485 static void sp_ecc_get_cache(sp_point* g, sp_cache_t** cache)
wolfSSL 14:167253f4e170 30486 {
wolfSSL 14:167253f4e170 30487 int i, j;
wolfSSL 14:167253f4e170 30488 uint32_t least;
wolfSSL 14:167253f4e170 30489
wolfSSL 14:167253f4e170 30490 if (sp_cache_inited == 0) {
wolfSSL 14:167253f4e170 30491 for (i=0; i<FP_ENTRIES; i++) {
wolfSSL 14:167253f4e170 30492 sp_cache[i].set = 0;
wolfSSL 14:167253f4e170 30493 }
wolfSSL 14:167253f4e170 30494 sp_cache_inited = 1;
wolfSSL 14:167253f4e170 30495 }
wolfSSL 14:167253f4e170 30496
wolfSSL 14:167253f4e170 30497 /* Compare point with those in cache. */
wolfSSL 14:167253f4e170 30498 for (i=0; i<FP_ENTRIES; i++) {
wolfSSL 14:167253f4e170 30499 if (!sp_cache[i].set)
wolfSSL 14:167253f4e170 30500 continue;
wolfSSL 14:167253f4e170 30501
wolfSSL 14:167253f4e170 30502 if (sp_256_cmp_equal_4(g->x, sp_cache[i].x) &
wolfSSL 14:167253f4e170 30503 sp_256_cmp_equal_4(g->y, sp_cache[i].y)) {
wolfSSL 14:167253f4e170 30504 sp_cache[i].cnt++;
wolfSSL 14:167253f4e170 30505 break;
wolfSSL 14:167253f4e170 30506 }
wolfSSL 14:167253f4e170 30507 }
wolfSSL 14:167253f4e170 30508
wolfSSL 14:167253f4e170 30509 /* No match. */
wolfSSL 14:167253f4e170 30510 if (i == FP_ENTRIES) {
wolfSSL 14:167253f4e170 30511 /* Find empty entry. */
wolfSSL 14:167253f4e170 30512 i = (sp_cache_last + 1) % FP_ENTRIES;
wolfSSL 14:167253f4e170 30513 for (; i != sp_cache_last; i=(i+1)%FP_ENTRIES) {
wolfSSL 14:167253f4e170 30514 if (!sp_cache[i].set) {
wolfSSL 14:167253f4e170 30515 break;
wolfSSL 14:167253f4e170 30516 }
wolfSSL 14:167253f4e170 30517 }
wolfSSL 14:167253f4e170 30518
wolfSSL 14:167253f4e170 30519 /* Evict least used. */
wolfSSL 14:167253f4e170 30520 if (i == sp_cache_last) {
wolfSSL 14:167253f4e170 30521 least = sp_cache[0].cnt;
wolfSSL 14:167253f4e170 30522 for (j=1; j<FP_ENTRIES; j++) {
wolfSSL 14:167253f4e170 30523 if (sp_cache[j].cnt < least) {
wolfSSL 14:167253f4e170 30524 i = j;
wolfSSL 14:167253f4e170 30525 least = sp_cache[i].cnt;
wolfSSL 14:167253f4e170 30526 }
wolfSSL 14:167253f4e170 30527 }
wolfSSL 14:167253f4e170 30528 }
wolfSSL 14:167253f4e170 30529
wolfSSL 14:167253f4e170 30530 XMEMCPY(sp_cache[i].x, g->x, sizeof(sp_cache[i].x));
wolfSSL 14:167253f4e170 30531 XMEMCPY(sp_cache[i].y, g->y, sizeof(sp_cache[i].y));
wolfSSL 14:167253f4e170 30532 sp_cache[i].set = 1;
wolfSSL 14:167253f4e170 30533 sp_cache[i].cnt = 1;
wolfSSL 14:167253f4e170 30534 }
wolfSSL 14:167253f4e170 30535
wolfSSL 14:167253f4e170 30536 *cache = &sp_cache[i];
wolfSSL 14:167253f4e170 30537 sp_cache_last = i;
wolfSSL 14:167253f4e170 30538 }
wolfSSL 14:167253f4e170 30539 #endif /* FP_ECC */
wolfSSL 14:167253f4e170 30540
wolfSSL 14:167253f4e170 30541 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 30542 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 30543 *
wolfSSL 14:167253f4e170 30544 * r Resulting point.
wolfSSL 14:167253f4e170 30545 * g Point to multiply.
wolfSSL 14:167253f4e170 30546 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 30547 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 30548 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30549 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 30550 */
wolfSSL 14:167253f4e170 30551 static int sp_256_ecc_mulmod_4(sp_point* r, sp_point* g, sp_digit* k,
wolfSSL 14:167253f4e170 30552 int map, void* heap)
wolfSSL 14:167253f4e170 30553 {
wolfSSL 14:167253f4e170 30554 #ifndef FP_ECC
wolfSSL 14:167253f4e170 30555 return sp_256_ecc_mulmod_win_add_sub_4(r, g, k, map, heap);
wolfSSL 14:167253f4e170 30556 #else
wolfSSL 14:167253f4e170 30557 sp_digit tmp[2 * 4 * 5];
wolfSSL 14:167253f4e170 30558 sp_cache_t* cache;
wolfSSL 14:167253f4e170 30559 int err = MP_OKAY;
wolfSSL 14:167253f4e170 30560
wolfSSL 14:167253f4e170 30561 #ifndef HAVE_THREAD_LS
wolfSSL 14:167253f4e170 30562 if (initCacheMutex == 0) {
wolfSSL 14:167253f4e170 30563 wc_InitMutex(&sp_cache_lock);
wolfSSL 14:167253f4e170 30564 initCacheMutex = 1;
wolfSSL 14:167253f4e170 30565 }
wolfSSL 14:167253f4e170 30566 if (wc_LockMutex(&sp_cache_lock) != 0)
wolfSSL 14:167253f4e170 30567 err = BAD_MUTEX_E;
wolfSSL 14:167253f4e170 30568 #endif /* HAVE_THREAD_LS */
wolfSSL 14:167253f4e170 30569
wolfSSL 14:167253f4e170 30570 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30571 sp_ecc_get_cache(g, &cache);
wolfSSL 14:167253f4e170 30572 if (cache->cnt == 2)
wolfSSL 14:167253f4e170 30573 sp_256_gen_stripe_table_4(g, cache->table, tmp, heap);
wolfSSL 14:167253f4e170 30574
wolfSSL 14:167253f4e170 30575 #ifndef HAVE_THREAD_LS
wolfSSL 14:167253f4e170 30576 wc_UnLockMutex(&sp_cache_lock);
wolfSSL 14:167253f4e170 30577 #endif /* HAVE_THREAD_LS */
wolfSSL 14:167253f4e170 30578
wolfSSL 14:167253f4e170 30579 if (cache->cnt < 2) {
wolfSSL 14:167253f4e170 30580 err = sp_256_ecc_mulmod_win_add_sub_4(r, g, k, map, heap);
wolfSSL 14:167253f4e170 30581 }
wolfSSL 14:167253f4e170 30582 else {
wolfSSL 14:167253f4e170 30583 err = sp_256_ecc_mulmod_stripe_4(r, g, cache->table, k,
wolfSSL 14:167253f4e170 30584 map, heap);
wolfSSL 14:167253f4e170 30585 }
wolfSSL 14:167253f4e170 30586 }
wolfSSL 14:167253f4e170 30587
wolfSSL 14:167253f4e170 30588 return err;
wolfSSL 14:167253f4e170 30589 #endif
wolfSSL 14:167253f4e170 30590 }
wolfSSL 14:167253f4e170 30591
wolfSSL 14:167253f4e170 30592 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 30593 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
wolfSSL 14:167253f4e170 30594 #endif /* FP_ECC || WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 30595 /* Add two Montgomery form projective points. The second point has a q value of
wolfSSL 14:167253f4e170 30596 * one.
wolfSSL 14:167253f4e170 30597 * Only the first point can be the same pointer as the result point.
wolfSSL 14:167253f4e170 30598 *
wolfSSL 14:167253f4e170 30599 * r Result of addition.
wolfSSL 14:167253f4e170 30600 * p Frist point to add.
wolfSSL 14:167253f4e170 30601 * q Second point to add.
wolfSSL 14:167253f4e170 30602 * t Temporary ordinate data.
wolfSSL 14:167253f4e170 30603 */
wolfSSL 14:167253f4e170 30604 static void sp_256_proj_point_add_qz1_avx2_4(sp_point* r, sp_point* p,
wolfSSL 14:167253f4e170 30605 sp_point* q, sp_digit* t)
wolfSSL 14:167253f4e170 30606 {
wolfSSL 14:167253f4e170 30607 sp_point *ap[2];
wolfSSL 14:167253f4e170 30608 sp_point *rp[2];
wolfSSL 14:167253f4e170 30609 sp_point tp;
wolfSSL 14:167253f4e170 30610 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 30611 sp_digit* t2 = t + 2*4;
wolfSSL 14:167253f4e170 30612 sp_digit* t3 = t + 4*4;
wolfSSL 14:167253f4e170 30613 sp_digit* t4 = t + 6*4;
wolfSSL 14:167253f4e170 30614 sp_digit* t5 = t + 8*4;
wolfSSL 14:167253f4e170 30615 sp_digit* x;
wolfSSL 14:167253f4e170 30616 sp_digit* y;
wolfSSL 14:167253f4e170 30617 sp_digit* z;
wolfSSL 14:167253f4e170 30618 int i;
wolfSSL 14:167253f4e170 30619
wolfSSL 14:167253f4e170 30620 /* Check double */
wolfSSL 14:167253f4e170 30621 sp_256_sub_4(t1, p256_mod, q->y);
wolfSSL 14:167253f4e170 30622 sp_256_norm_4(t1);
wolfSSL 14:167253f4e170 30623 if (sp_256_cmp_equal_4(p->x, q->x) & sp_256_cmp_equal_4(p->z, q->z) &
wolfSSL 14:167253f4e170 30624 (sp_256_cmp_equal_4(p->y, q->y) | sp_256_cmp_equal_4(p->y, t1))) {
wolfSSL 14:167253f4e170 30625 sp_256_proj_point_dbl_4(r, p, t);
wolfSSL 14:167253f4e170 30626 }
wolfSSL 14:167253f4e170 30627 else {
wolfSSL 14:167253f4e170 30628 rp[0] = r;
wolfSSL 14:167253f4e170 30629 rp[1] = &tp;
wolfSSL 14:167253f4e170 30630 XMEMSET(&tp, 0, sizeof(tp));
wolfSSL 14:167253f4e170 30631 x = rp[p->infinity | q->infinity]->x;
wolfSSL 14:167253f4e170 30632 y = rp[p->infinity | q->infinity]->y;
wolfSSL 14:167253f4e170 30633 z = rp[p->infinity | q->infinity]->z;
wolfSSL 14:167253f4e170 30634
wolfSSL 14:167253f4e170 30635 ap[0] = p;
wolfSSL 14:167253f4e170 30636 ap[1] = q;
wolfSSL 14:167253f4e170 30637 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 30638 r->x[i] = ap[p->infinity]->x[i];
wolfSSL 14:167253f4e170 30639 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 30640 r->y[i] = ap[p->infinity]->y[i];
wolfSSL 14:167253f4e170 30641 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 30642 r->z[i] = ap[p->infinity]->z[i];
wolfSSL 14:167253f4e170 30643 r->infinity = ap[p->infinity]->infinity;
wolfSSL 14:167253f4e170 30644
wolfSSL 14:167253f4e170 30645 /* U2 = X2*Z1^2 */
wolfSSL 14:167253f4e170 30646 sp_256_mont_sqr_avx2_4(t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30647 sp_256_mont_mul_avx2_4(t4, t2, z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30648 sp_256_mont_mul_avx2_4(t2, t2, q->x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30649 /* S2 = Y2*Z1^3 */
wolfSSL 14:167253f4e170 30650 sp_256_mont_mul_avx2_4(t4, t4, q->y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30651 /* H = U2 - X1 */
wolfSSL 14:167253f4e170 30652 sp_256_mont_sub_4(t2, t2, x, p256_mod);
wolfSSL 14:167253f4e170 30653 /* R = S2 - Y1 */
wolfSSL 14:167253f4e170 30654 sp_256_mont_sub_4(t4, t4, y, p256_mod);
wolfSSL 14:167253f4e170 30655 /* Z3 = H*Z1 */
wolfSSL 14:167253f4e170 30656 sp_256_mont_mul_avx2_4(z, z, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30657 /* X3 = R^2 - H^3 - 2*X1*H^2 */
wolfSSL 14:167253f4e170 30658 sp_256_mont_sqr_avx2_4(t1, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30659 sp_256_mont_sqr_avx2_4(t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30660 sp_256_mont_mul_avx2_4(t3, x, t5, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30661 sp_256_mont_mul_avx2_4(t5, t5, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30662 sp_256_mont_sub_4(x, t1, t5, p256_mod);
wolfSSL 14:167253f4e170 30663 sp_256_mont_dbl_4(t1, t3, p256_mod);
wolfSSL 14:167253f4e170 30664 sp_256_mont_sub_4(x, x, t1, p256_mod);
wolfSSL 14:167253f4e170 30665 /* Y3 = R*(X1*H^2 - X3) - Y1*H^3 */
wolfSSL 14:167253f4e170 30666 sp_256_mont_sub_4(t3, t3, x, p256_mod);
wolfSSL 14:167253f4e170 30667 sp_256_mont_mul_avx2_4(t3, t3, t4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30668 sp_256_mont_mul_avx2_4(t5, t5, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30669 sp_256_mont_sub_4(y, t3, t5, p256_mod);
wolfSSL 14:167253f4e170 30670 }
wolfSSL 14:167253f4e170 30671 }
wolfSSL 14:167253f4e170 30672
wolfSSL 14:167253f4e170 30673 #ifdef FP_ECC
wolfSSL 14:167253f4e170 30674 /* Convert the projective point to affine.
wolfSSL 14:167253f4e170 30675 * Ordinates are in Montgomery form.
wolfSSL 14:167253f4e170 30676 *
wolfSSL 14:167253f4e170 30677 * a Point to convert.
wolfSSL 14:167253f4e170 30678 * t Temprorary data.
wolfSSL 14:167253f4e170 30679 */
wolfSSL 14:167253f4e170 30680 static void sp_256_proj_to_affine_avx2_4(sp_point* a, sp_digit* t)
wolfSSL 14:167253f4e170 30681 {
wolfSSL 14:167253f4e170 30682 sp_digit* t1 = t;
wolfSSL 14:167253f4e170 30683 sp_digit* t2 = t + 2 * 4;
wolfSSL 14:167253f4e170 30684 sp_digit* tmp = t + 4 * 4;
wolfSSL 14:167253f4e170 30685
wolfSSL 14:167253f4e170 30686 sp_256_mont_inv_avx2_4(t1, a->z, tmp);
wolfSSL 14:167253f4e170 30687
wolfSSL 14:167253f4e170 30688 sp_256_mont_sqr_avx2_4(t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30689 sp_256_mont_mul_avx2_4(t1, t2, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30690
wolfSSL 14:167253f4e170 30691 sp_256_mont_mul_avx2_4(a->x, a->x, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30692 sp_256_mont_mul_avx2_4(a->y, a->y, t1, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 30693 XMEMCPY(a->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30694 }
wolfSSL 14:167253f4e170 30695
wolfSSL 14:167253f4e170 30696 /* Generate the pre-computed table of points for the base point.
wolfSSL 14:167253f4e170 30697 *
wolfSSL 14:167253f4e170 30698 * a The base point.
wolfSSL 14:167253f4e170 30699 * table Place to store generated point data.
wolfSSL 14:167253f4e170 30700 * tmp Temprorary data.
wolfSSL 14:167253f4e170 30701 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30702 */
wolfSSL 14:167253f4e170 30703 static int sp_256_gen_stripe_table_avx2_4(sp_point* a,
wolfSSL 14:167253f4e170 30704 sp_table_entry* table, sp_digit* tmp, void* heap)
wolfSSL 14:167253f4e170 30705 {
wolfSSL 14:167253f4e170 30706 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30707 sp_point td, s1d, s2d;
wolfSSL 14:167253f4e170 30708 #endif
wolfSSL 14:167253f4e170 30709 sp_point* t;
wolfSSL 14:167253f4e170 30710 sp_point* s1 = NULL;
wolfSSL 14:167253f4e170 30711 sp_point* s2 = NULL;
wolfSSL 14:167253f4e170 30712 int i, j;
wolfSSL 14:167253f4e170 30713 int err;
wolfSSL 14:167253f4e170 30714
wolfSSL 14:167253f4e170 30715 (void)heap;
wolfSSL 14:167253f4e170 30716
wolfSSL 14:167253f4e170 30717 err = sp_ecc_point_new(heap, td, t);
wolfSSL 14:167253f4e170 30718 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30719 err = sp_ecc_point_new(heap, s1d, s1);
wolfSSL 14:167253f4e170 30720 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30721 err = sp_ecc_point_new(heap, s2d, s2);
wolfSSL 14:167253f4e170 30722
wolfSSL 14:167253f4e170 30723 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30724 err = sp_256_mod_mul_norm_4(t->x, a->x, p256_mod);
wolfSSL 14:167253f4e170 30725 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30726 err = sp_256_mod_mul_norm_4(t->y, a->y, p256_mod);
wolfSSL 14:167253f4e170 30727 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30728 err = sp_256_mod_mul_norm_4(t->z, a->z, p256_mod);
wolfSSL 14:167253f4e170 30729 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30730 t->infinity = 0;
wolfSSL 14:167253f4e170 30731 sp_256_proj_to_affine_avx2_4(t, tmp);
wolfSSL 14:167253f4e170 30732
wolfSSL 14:167253f4e170 30733 XMEMCPY(s1->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30734 s1->infinity = 0;
wolfSSL 14:167253f4e170 30735 XMEMCPY(s2->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30736 s2->infinity = 0;
wolfSSL 14:167253f4e170 30737
wolfSSL 14:167253f4e170 30738 /* table[0] = {0, 0, infinity} */
wolfSSL 14:167253f4e170 30739 XMEMSET(&table[0], 0, sizeof(sp_table_entry));
wolfSSL 14:167253f4e170 30740 table[0].infinity = 1;
wolfSSL 14:167253f4e170 30741 /* table[1] = Affine version of 'a' in Montgomery form */
wolfSSL 14:167253f4e170 30742 XMEMCPY(table[1].x, t->x, sizeof(table->x));
wolfSSL 14:167253f4e170 30743 XMEMCPY(table[1].y, t->y, sizeof(table->y));
wolfSSL 14:167253f4e170 30744 table[1].infinity = 0;
wolfSSL 14:167253f4e170 30745
wolfSSL 14:167253f4e170 30746 for (i=1; i<8; i++) {
wolfSSL 14:167253f4e170 30747 sp_256_proj_point_dbl_n_avx2_4(t, t, 32, tmp);
wolfSSL 14:167253f4e170 30748 sp_256_proj_to_affine_avx2_4(t, tmp);
wolfSSL 14:167253f4e170 30749 XMEMCPY(table[1<<i].x, t->x, sizeof(table->x));
wolfSSL 14:167253f4e170 30750 XMEMCPY(table[1<<i].y, t->y, sizeof(table->y));
wolfSSL 14:167253f4e170 30751 table[1<<i].infinity = 0;
wolfSSL 14:167253f4e170 30752 }
wolfSSL 14:167253f4e170 30753
wolfSSL 14:167253f4e170 30754 for (i=1; i<8; i++) {
wolfSSL 14:167253f4e170 30755 XMEMCPY(s1->x, table[1<<i].x, sizeof(table->x));
wolfSSL 14:167253f4e170 30756 XMEMCPY(s1->y, table[1<<i].y, sizeof(table->y));
wolfSSL 14:167253f4e170 30757 for (j=(1<<i)+1; j<(1<<(i+1)); j++) {
wolfSSL 14:167253f4e170 30758 XMEMCPY(s2->x, table[j-(1<<i)].x, sizeof(table->x));
wolfSSL 14:167253f4e170 30759 XMEMCPY(s2->y, table[j-(1<<i)].y, sizeof(table->y));
wolfSSL 14:167253f4e170 30760 sp_256_proj_point_add_qz1_avx2_4(t, s1, s2, tmp);
wolfSSL 14:167253f4e170 30761 sp_256_proj_to_affine_avx2_4(t, tmp);
wolfSSL 14:167253f4e170 30762 XMEMCPY(table[j].x, t->x, sizeof(table->x));
wolfSSL 14:167253f4e170 30763 XMEMCPY(table[j].y, t->y, sizeof(table->y));
wolfSSL 14:167253f4e170 30764 table[j].infinity = 0;
wolfSSL 14:167253f4e170 30765 }
wolfSSL 14:167253f4e170 30766 }
wolfSSL 14:167253f4e170 30767 }
wolfSSL 14:167253f4e170 30768
wolfSSL 14:167253f4e170 30769 sp_ecc_point_free(s2, 0, heap);
wolfSSL 14:167253f4e170 30770 sp_ecc_point_free(s1, 0, heap);
wolfSSL 14:167253f4e170 30771 sp_ecc_point_free( t, 0, heap);
wolfSSL 14:167253f4e170 30772
wolfSSL 14:167253f4e170 30773 return err;
wolfSSL 14:167253f4e170 30774 }
wolfSSL 14:167253f4e170 30775
wolfSSL 14:167253f4e170 30776 #endif /* FP_ECC */
wolfSSL 14:167253f4e170 30777 #if defined(FP_ECC) || defined(WOLFSSL_SP_SMALL)
wolfSSL 14:167253f4e170 30778 /* Multiply the point by the scalar and return the result.
wolfSSL 14:167253f4e170 30779 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 30780 *
wolfSSL 14:167253f4e170 30781 * r Resulting point.
wolfSSL 14:167253f4e170 30782 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 30783 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 30784 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30785 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 30786 */
wolfSSL 14:167253f4e170 30787 static int sp_256_ecc_mulmod_stripe_avx2_4(sp_point* r, sp_point* g,
wolfSSL 14:167253f4e170 30788 sp_table_entry* table, sp_digit* k, int map, void* heap)
wolfSSL 14:167253f4e170 30789 {
wolfSSL 14:167253f4e170 30790 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30791 sp_point rtd;
wolfSSL 14:167253f4e170 30792 sp_point pd;
wolfSSL 14:167253f4e170 30793 sp_digit td[2 * 4 * 5];
wolfSSL 14:167253f4e170 30794 #endif
wolfSSL 14:167253f4e170 30795 sp_point* rt;
wolfSSL 14:167253f4e170 30796 sp_point* p = NULL;
wolfSSL 14:167253f4e170 30797 sp_digit* t;
wolfSSL 14:167253f4e170 30798 int i, j;
wolfSSL 14:167253f4e170 30799 int y, x;
wolfSSL 14:167253f4e170 30800 int err;
wolfSSL 14:167253f4e170 30801
wolfSSL 14:167253f4e170 30802 (void)g;
wolfSSL 14:167253f4e170 30803 (void)heap;
wolfSSL 14:167253f4e170 30804
wolfSSL 14:167253f4e170 30805 err = sp_ecc_point_new(heap, rtd, rt);
wolfSSL 14:167253f4e170 30806 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30807 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 30808 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30809 t = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
wolfSSL 14:167253f4e170 30810 DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30811 if (t == NULL)
wolfSSL 14:167253f4e170 30812 err = MEMORY_E;
wolfSSL 14:167253f4e170 30813 #else
wolfSSL 14:167253f4e170 30814 t = td;
wolfSSL 14:167253f4e170 30815 #endif
wolfSSL 14:167253f4e170 30816
wolfSSL 14:167253f4e170 30817 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30818 XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30819 XMEMCPY(rt->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 30820
wolfSSL 14:167253f4e170 30821 y = 0;
wolfSSL 14:167253f4e170 30822 for (j=0,x=31; j<8; j++,x+=32)
wolfSSL 14:167253f4e170 30823 y |= ((k[x / 64] >> (x % 64)) & 1) << j;
wolfSSL 14:167253f4e170 30824 XMEMCPY(rt->x, table[y].x, sizeof(table[y].x));
wolfSSL 14:167253f4e170 30825 XMEMCPY(rt->y, table[y].y, sizeof(table[y].y));
wolfSSL 14:167253f4e170 30826 rt->infinity = table[y].infinity;
wolfSSL 14:167253f4e170 30827 for (i=30; i>=0; i--) {
wolfSSL 14:167253f4e170 30828 y = 0;
wolfSSL 14:167253f4e170 30829 for (j=0,x=i; j<8; j++,x+=32)
wolfSSL 14:167253f4e170 30830 y |= ((k[x / 64] >> (x % 64)) & 1) << j;
wolfSSL 14:167253f4e170 30831
wolfSSL 14:167253f4e170 30832 sp_256_proj_point_dbl_avx2_4(rt, rt, t);
wolfSSL 14:167253f4e170 30833 XMEMCPY(p->x, table[y].x, sizeof(table[y].x));
wolfSSL 14:167253f4e170 30834 XMEMCPY(p->y, table[y].y, sizeof(table[y].y));
wolfSSL 14:167253f4e170 30835 p->infinity = table[y].infinity;
wolfSSL 14:167253f4e170 30836 sp_256_proj_point_add_qz1_avx2_4(rt, rt, p, t);
wolfSSL 14:167253f4e170 30837 }
wolfSSL 14:167253f4e170 30838
wolfSSL 14:167253f4e170 30839 if (map)
wolfSSL 14:167253f4e170 30840 sp_256_map_avx2_4(r, rt, t);
wolfSSL 14:167253f4e170 30841 else
wolfSSL 14:167253f4e170 30842 XMEMCPY(r, rt, sizeof(sp_point));
wolfSSL 14:167253f4e170 30843 }
wolfSSL 14:167253f4e170 30844
wolfSSL 14:167253f4e170 30845 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30846 if (t != NULL)
wolfSSL 14:167253f4e170 30847 XFREE(t, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30848 #endif
wolfSSL 14:167253f4e170 30849 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 30850 sp_ecc_point_free(rt, 0, heap);
wolfSSL 14:167253f4e170 30851
wolfSSL 14:167253f4e170 30852 return err;
wolfSSL 14:167253f4e170 30853 }
wolfSSL 14:167253f4e170 30854
wolfSSL 14:167253f4e170 30855 #endif /* FP_ECC || WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 30856 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 30857 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 30858 *
wolfSSL 14:167253f4e170 30859 * r Resulting point.
wolfSSL 14:167253f4e170 30860 * g Point to multiply.
wolfSSL 14:167253f4e170 30861 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 30862 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 30863 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30864 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 30865 */
wolfSSL 14:167253f4e170 30866 static int sp_256_ecc_mulmod_avx2_4(sp_point* r, sp_point* g, sp_digit* k,
wolfSSL 14:167253f4e170 30867 int map, void* heap)
wolfSSL 14:167253f4e170 30868 {
wolfSSL 14:167253f4e170 30869 #ifndef FP_ECC
wolfSSL 14:167253f4e170 30870 return sp_256_ecc_mulmod_win_add_sub_avx2_4(r, g, k, map, heap);
wolfSSL 14:167253f4e170 30871 #else
wolfSSL 14:167253f4e170 30872 sp_digit tmp[2 * 4 * 5];
wolfSSL 14:167253f4e170 30873 sp_cache_t* cache;
wolfSSL 14:167253f4e170 30874 int err = MP_OKAY;
wolfSSL 14:167253f4e170 30875
wolfSSL 14:167253f4e170 30876 #ifndef HAVE_THREAD_LS
wolfSSL 14:167253f4e170 30877 if (initCacheMutex == 0) {
wolfSSL 14:167253f4e170 30878 wc_InitMutex(&sp_cache_lock);
wolfSSL 14:167253f4e170 30879 initCacheMutex = 1;
wolfSSL 14:167253f4e170 30880 }
wolfSSL 14:167253f4e170 30881 if (wc_LockMutex(&sp_cache_lock) != 0)
wolfSSL 14:167253f4e170 30882 err = BAD_MUTEX_E;
wolfSSL 14:167253f4e170 30883 #endif /* HAVE_THREAD_LS */
wolfSSL 14:167253f4e170 30884
wolfSSL 14:167253f4e170 30885 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30886 sp_ecc_get_cache(g, &cache);
wolfSSL 14:167253f4e170 30887 if (cache->cnt == 2)
wolfSSL 14:167253f4e170 30888 sp_256_gen_stripe_table_avx2_4(g, cache->table, tmp, heap);
wolfSSL 14:167253f4e170 30889
wolfSSL 14:167253f4e170 30890 #ifndef HAVE_THREAD_LS
wolfSSL 14:167253f4e170 30891 wc_UnLockMutex(&sp_cache_lock);
wolfSSL 14:167253f4e170 30892 #endif /* HAVE_THREAD_LS */
wolfSSL 14:167253f4e170 30893
wolfSSL 14:167253f4e170 30894 if (cache->cnt < 2) {
wolfSSL 14:167253f4e170 30895 err = sp_256_ecc_mulmod_win_add_sub_avx2_4(r, g, k, map, heap);
wolfSSL 14:167253f4e170 30896 }
wolfSSL 14:167253f4e170 30897 else {
wolfSSL 14:167253f4e170 30898 err = sp_256_ecc_mulmod_stripe_avx2_4(r, g, cache->table, k,
wolfSSL 14:167253f4e170 30899 map, heap);
wolfSSL 14:167253f4e170 30900 }
wolfSSL 14:167253f4e170 30901 }
wolfSSL 14:167253f4e170 30902
wolfSSL 14:167253f4e170 30903 return err;
wolfSSL 14:167253f4e170 30904 #endif
wolfSSL 14:167253f4e170 30905 }
wolfSSL 14:167253f4e170 30906
wolfSSL 14:167253f4e170 30907 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 30908 /* Multiply the point by the scalar and return the result.
wolfSSL 14:167253f4e170 30909 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 30910 *
wolfSSL 14:167253f4e170 30911 * km Scalar to multiply by.
wolfSSL 14:167253f4e170 30912 * p Point to multiply.
wolfSSL 14:167253f4e170 30913 * r Resulting point.
wolfSSL 14:167253f4e170 30914 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 30915 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 30916 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 30917 */
wolfSSL 14:167253f4e170 30918 int sp_ecc_mulmod_256(mp_int* km, ecc_point* gm, ecc_point* r, int map,
wolfSSL 14:167253f4e170 30919 void* heap)
wolfSSL 14:167253f4e170 30920 {
wolfSSL 14:167253f4e170 30921 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30922 sp_point p;
wolfSSL 14:167253f4e170 30923 sp_digit kd[4];
wolfSSL 14:167253f4e170 30924 #endif
wolfSSL 14:167253f4e170 30925 sp_point* point;
wolfSSL 14:167253f4e170 30926 sp_digit* k = NULL;
wolfSSL 14:167253f4e170 30927 int err = MP_OKAY;
wolfSSL 14:167253f4e170 30928 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 30929 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 30930 #endif
wolfSSL 14:167253f4e170 30931
wolfSSL 14:167253f4e170 30932 err = sp_ecc_point_new(heap, p, point);
wolfSSL 14:167253f4e170 30933 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30934 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30935 k = XMALLOC(sizeof(sp_digit) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30936 if (k == NULL)
wolfSSL 14:167253f4e170 30937 err = MEMORY_E;
wolfSSL 14:167253f4e170 30938 }
wolfSSL 14:167253f4e170 30939 #else
wolfSSL 14:167253f4e170 30940 k = kd;
wolfSSL 14:167253f4e170 30941 #endif
wolfSSL 14:167253f4e170 30942 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 30943 sp_256_from_mp(k, 4, km);
wolfSSL 14:167253f4e170 30944 sp_256_point_from_ecc_point_4(point, gm);
wolfSSL 14:167253f4e170 30945
wolfSSL 14:167253f4e170 30946 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 30947 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 30948 err = sp_256_ecc_mulmod_avx2_4(point, point, k, map, heap);
wolfSSL 14:167253f4e170 30949 else
wolfSSL 14:167253f4e170 30950 #endif
wolfSSL 14:167253f4e170 30951 err = sp_256_ecc_mulmod_4(point, point, k, map, heap);
wolfSSL 14:167253f4e170 30952 }
wolfSSL 14:167253f4e170 30953 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 30954 err = sp_256_point_to_ecc_point_4(point, r);
wolfSSL 14:167253f4e170 30955
wolfSSL 14:167253f4e170 30956 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 30957 if (k != NULL)
wolfSSL 14:167253f4e170 30958 XFREE(k, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 30959 #endif
wolfSSL 14:167253f4e170 30960 sp_ecc_point_free(point, 0, heap);
wolfSSL 14:167253f4e170 30961
wolfSSL 14:167253f4e170 30962 return err;
wolfSSL 14:167253f4e170 30963 }
wolfSSL 14:167253f4e170 30964
wolfSSL 14:167253f4e170 30965 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 30966 static sp_table_entry p256_table[256] = {
wolfSSL 14:167253f4e170 30967 /* 0 */
wolfSSL 14:167253f4e170 30968 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 30969 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 30970 1 },
wolfSSL 14:167253f4e170 30971 /* 1 */
wolfSSL 14:167253f4e170 30972 { { 0x79e730d418a9143cl,0x75ba95fc5fedb601l,0x79fb732b77622510l,
wolfSSL 14:167253f4e170 30973 0x18905f76a53755c6l },
wolfSSL 14:167253f4e170 30974 { 0xddf25357ce95560al,0x8b4ab8e4ba19e45cl,0xd2e88688dd21f325l,
wolfSSL 14:167253f4e170 30975 0x8571ff1825885d85l },
wolfSSL 14:167253f4e170 30976 0 },
wolfSSL 14:167253f4e170 30977 /* 2 */
wolfSSL 14:167253f4e170 30978 { { 0x202886024147519al,0xd0981eac26b372f0l,0xa9d4a7caa785ebc8l,
wolfSSL 14:167253f4e170 30979 0xd953c50ddbdf58e9l },
wolfSSL 14:167253f4e170 30980 { 0x9d6361ccfd590f8fl,0x72e9626b44e6c917l,0x7fd9611022eb64cfl,
wolfSSL 14:167253f4e170 30981 0x863ebb7e9eb288f3l },
wolfSSL 14:167253f4e170 30982 0 },
wolfSSL 14:167253f4e170 30983 /* 3 */
wolfSSL 14:167253f4e170 30984 { { 0x7856b6235cdb6485l,0x808f0ea22f0a2f97l,0x3e68d9544f7e300bl,
wolfSSL 14:167253f4e170 30985 0x00076055b5ff80a0l },
wolfSSL 14:167253f4e170 30986 { 0x7634eb9b838d2010l,0x54014fbb3243708al,0xe0e47d39842a6606l,
wolfSSL 14:167253f4e170 30987 0x8308776134373ee0l },
wolfSSL 14:167253f4e170 30988 0 },
wolfSSL 14:167253f4e170 30989 /* 4 */
wolfSSL 14:167253f4e170 30990 { { 0x4f922fc516a0d2bbl,0x0d5cc16c1a623499l,0x9241cf3a57c62c8bl,
wolfSSL 14:167253f4e170 30991 0x2f5e6961fd1b667fl },
wolfSSL 14:167253f4e170 30992 { 0x5c15c70bf5a01797l,0x3d20b44d60956192l,0x04911b37071fdb52l,
wolfSSL 14:167253f4e170 30993 0xf648f9168d6f0f7bl },
wolfSSL 14:167253f4e170 30994 0 },
wolfSSL 14:167253f4e170 30995 /* 5 */
wolfSSL 14:167253f4e170 30996 { { 0x9e566847e137bbbcl,0xe434469e8a6a0becl,0xb1c4276179d73463l,
wolfSSL 14:167253f4e170 30997 0x5abe0285133d0015l },
wolfSSL 14:167253f4e170 30998 { 0x92aa837cc04c7dabl,0x573d9f4c43260c07l,0x0c93156278e6cc37l,
wolfSSL 14:167253f4e170 30999 0x94bb725b6b6f7383l },
wolfSSL 14:167253f4e170 31000 0 },
wolfSSL 14:167253f4e170 31001 /* 6 */
wolfSSL 14:167253f4e170 31002 { { 0xbbf9b48f720f141cl,0x6199b3cd2df5bc74l,0xdc3f6129411045c4l,
wolfSSL 14:167253f4e170 31003 0xcdd6bbcb2f7dc4efl },
wolfSSL 14:167253f4e170 31004 { 0xcca6700beaf436fdl,0x6f647f6db99326bel,0x0c0fa792014f2522l,
wolfSSL 14:167253f4e170 31005 0xa361bebd4bdae5f6l },
wolfSSL 14:167253f4e170 31006 0 },
wolfSSL 14:167253f4e170 31007 /* 7 */
wolfSSL 14:167253f4e170 31008 { { 0x28aa2558597c13c7l,0xc38d635f50b7c3e1l,0x07039aecf3c09d1dl,
wolfSSL 14:167253f4e170 31009 0xba12ca09c4b5292cl },
wolfSSL 14:167253f4e170 31010 { 0x9e408fa459f91dfdl,0x3af43b66ceea07fbl,0x1eceb0899d780b29l,
wolfSSL 14:167253f4e170 31011 0x53ebb99d701fef4bl },
wolfSSL 14:167253f4e170 31012 0 },
wolfSSL 14:167253f4e170 31013 /* 8 */
wolfSSL 14:167253f4e170 31014 { { 0x4fe7ee31b0e63d34l,0xf4600572a9e54fabl,0xc0493334d5e7b5a4l,
wolfSSL 14:167253f4e170 31015 0x8589fb9206d54831l },
wolfSSL 14:167253f4e170 31016 { 0xaa70f5cc6583553al,0x0879094ae25649e5l,0xcc90450710044652l,
wolfSSL 14:167253f4e170 31017 0xebb0696d02541c4fl },
wolfSSL 14:167253f4e170 31018 0 },
wolfSSL 14:167253f4e170 31019 /* 9 */
wolfSSL 14:167253f4e170 31020 { { 0x4616ca15ac1647c5l,0xb8127d47c4cf5799l,0xdc666aa3764dfbacl,
wolfSSL 14:167253f4e170 31021 0xeb2820cbd1b27da3l },
wolfSSL 14:167253f4e170 31022 { 0x9406f8d86a87e008l,0xd87dfa9d922378f3l,0x56ed2e4280ccecb2l,
wolfSSL 14:167253f4e170 31023 0x1f28289b55a7da1dl },
wolfSSL 14:167253f4e170 31024 0 },
wolfSSL 14:167253f4e170 31025 /* 10 */
wolfSSL 14:167253f4e170 31026 { { 0xabbaa0c03b89da99l,0xa6f2d79eb8284022l,0x27847862b81c05e8l,
wolfSSL 14:167253f4e170 31027 0x337a4b5905e54d63l },
wolfSSL 14:167253f4e170 31028 { 0x3c67500d21f7794al,0x207005b77d6d7f61l,0x0a5a378104cfd6e8l,
wolfSSL 14:167253f4e170 31029 0x0d65e0d5f4c2fbd6l },
wolfSSL 14:167253f4e170 31030 0 },
wolfSSL 14:167253f4e170 31031 /* 11 */
wolfSSL 14:167253f4e170 31032 { { 0xd9d09bbeb5275d38l,0x4268a7450be0a358l,0xf0762ff4973eb265l,
wolfSSL 14:167253f4e170 31033 0xc23da24252f4a232l },
wolfSSL 14:167253f4e170 31034 { 0x5da1b84f0b94520cl,0x09666763b05bd78el,0x3a4dcb8694d29ea1l,
wolfSSL 14:167253f4e170 31035 0x19de3b8cc790cff1l },
wolfSSL 14:167253f4e170 31036 0 },
wolfSSL 14:167253f4e170 31037 /* 12 */
wolfSSL 14:167253f4e170 31038 { { 0x183a716c26c5fe04l,0x3b28de0b3bba1bdbl,0x7432c586a4cb712cl,
wolfSSL 14:167253f4e170 31039 0xe34dcbd491fccbfdl },
wolfSSL 14:167253f4e170 31040 { 0xb408d46baaa58403l,0x9a69748682e97a53l,0x9e39012736aaa8afl,
wolfSSL 14:167253f4e170 31041 0xe7641f447b4e0f7fl },
wolfSSL 14:167253f4e170 31042 0 },
wolfSSL 14:167253f4e170 31043 /* 13 */
wolfSSL 14:167253f4e170 31044 { { 0x7d753941df64ba59l,0xd33f10ec0b0242fcl,0x4f06dfc6a1581859l,
wolfSSL 14:167253f4e170 31045 0x4a12df57052a57bfl },
wolfSSL 14:167253f4e170 31046 { 0xbfa6338f9439dbd0l,0xd3c24bd4bde53e1fl,0xfd5e4ffa21f1b314l,
wolfSSL 14:167253f4e170 31047 0x6af5aa93bb5bea46l },
wolfSSL 14:167253f4e170 31048 0 },
wolfSSL 14:167253f4e170 31049 /* 14 */
wolfSSL 14:167253f4e170 31050 { { 0xda10b69910c91999l,0x0a24b4402a580491l,0x3e0094b4b8cc2090l,
wolfSSL 14:167253f4e170 31051 0x5fe3475a66a44013l },
wolfSSL 14:167253f4e170 31052 { 0xb0f8cabdf93e7b4bl,0x292b501a7c23f91al,0x42e889aecd1e6263l,
wolfSSL 14:167253f4e170 31053 0xb544e308ecfea916l },
wolfSSL 14:167253f4e170 31054 0 },
wolfSSL 14:167253f4e170 31055 /* 15 */
wolfSSL 14:167253f4e170 31056 { { 0x6478c6e916ddfdcel,0x2c329166f89179e6l,0x4e8d6e764d4e67e1l,
wolfSSL 14:167253f4e170 31057 0xe0b6b2bda6b0c20bl },
wolfSSL 14:167253f4e170 31058 { 0x0d312df2bb7efb57l,0x1aac0dde790c4007l,0xf90336ad679bc944l,
wolfSSL 14:167253f4e170 31059 0x71c023de25a63774l },
wolfSSL 14:167253f4e170 31060 0 },
wolfSSL 14:167253f4e170 31061 /* 16 */
wolfSSL 14:167253f4e170 31062 { { 0x62a8c244bfe20925l,0x91c19ac38fdce867l,0x5a96a5d5dd387063l,
wolfSSL 14:167253f4e170 31063 0x61d587d421d324f6l },
wolfSSL 14:167253f4e170 31064 { 0xe87673a2a37173eal,0x2384800853778b65l,0x10f8441e05bab43el,
wolfSSL 14:167253f4e170 31065 0xfa11fe124621efbel },
wolfSSL 14:167253f4e170 31066 0 },
wolfSSL 14:167253f4e170 31067 /* 17 */
wolfSSL 14:167253f4e170 31068 { { 0x1c891f2b2cb19ffdl,0x01ba8d5bb1923c23l,0xb6d03d678ac5ca8el,
wolfSSL 14:167253f4e170 31069 0x586eb04c1f13bedcl },
wolfSSL 14:167253f4e170 31070 { 0x0c35c6e527e8ed09l,0x1e81a33c1819ede2l,0x278fd6c056c652fal,
wolfSSL 14:167253f4e170 31071 0x19d5ac0870864f11l },
wolfSSL 14:167253f4e170 31072 0 },
wolfSSL 14:167253f4e170 31073 /* 18 */
wolfSSL 14:167253f4e170 31074 { { 0x1e99f581309a4e1fl,0xab7de71be9270074l,0x26a5ef0befd28d20l,
wolfSSL 14:167253f4e170 31075 0xe7c0073f7f9c563fl },
wolfSSL 14:167253f4e170 31076 { 0x1f6d663a0ef59f76l,0x669b3b5420fcb050l,0xc08c1f7a7a6602d4l,
wolfSSL 14:167253f4e170 31077 0xe08504fec65b3c0al },
wolfSSL 14:167253f4e170 31078 0 },
wolfSSL 14:167253f4e170 31079 /* 19 */
wolfSSL 14:167253f4e170 31080 { { 0xf098f68da031b3cal,0x6d1cab9ee6da6d66l,0x5bfd81fa94f246e8l,
wolfSSL 14:167253f4e170 31081 0x78f018825b0996b4l },
wolfSSL 14:167253f4e170 31082 { 0xb7eefde43a25787fl,0x8016f80d1dccac9bl,0x0cea4877b35bfc36l,
wolfSSL 14:167253f4e170 31083 0x43a773b87e94747al },
wolfSSL 14:167253f4e170 31084 0 },
wolfSSL 14:167253f4e170 31085 /* 20 */
wolfSSL 14:167253f4e170 31086 { { 0x62577734d2b533d5l,0x673b8af6a1bdddc0l,0x577e7c9aa79ec293l,
wolfSSL 14:167253f4e170 31087 0xbb6de651c3b266b1l },
wolfSSL 14:167253f4e170 31088 { 0xe7e9303ab65259b3l,0xd6a0afd3d03a7480l,0xc5ac83d19b3cfc27l,
wolfSSL 14:167253f4e170 31089 0x60b4619a5d18b99bl },
wolfSSL 14:167253f4e170 31090 0 },
wolfSSL 14:167253f4e170 31091 /* 21 */
wolfSSL 14:167253f4e170 31092 { { 0xbd6a38e11ae5aa1cl,0xb8b7652b49e73658l,0x0b130014ee5f87edl,
wolfSSL 14:167253f4e170 31093 0x9d0f27b2aeebffcdl },
wolfSSL 14:167253f4e170 31094 { 0xca9246317a730a55l,0x9c955b2fddbbc83al,0x07c1dfe0ac019a71l,
wolfSSL 14:167253f4e170 31095 0x244a566d356ec48dl },
wolfSSL 14:167253f4e170 31096 0 },
wolfSSL 14:167253f4e170 31097 /* 22 */
wolfSSL 14:167253f4e170 31098 { { 0x6db0394aeacf1f96l,0x9f2122a9024c271cl,0x2626ac1b82cbd3b9l,
wolfSSL 14:167253f4e170 31099 0x45e58c873581ef69l },
wolfSSL 14:167253f4e170 31100 { 0xd3ff479da38f9dbcl,0xa8aaf146e888a040l,0x945adfb246e0bed7l,
wolfSSL 14:167253f4e170 31101 0xc040e21cc1e4b7a4l },
wolfSSL 14:167253f4e170 31102 0 },
wolfSSL 14:167253f4e170 31103 /* 23 */
wolfSSL 14:167253f4e170 31104 { { 0x847af0006f8117b6l,0x651969ff73a35433l,0x482b35761d9475ebl,
wolfSSL 14:167253f4e170 31105 0x1cdf5c97682c6ec7l },
wolfSSL 14:167253f4e170 31106 { 0x7db775b411f04839l,0x7dbeacf448de1698l,0xb2921dd1b70b3219l,
wolfSSL 14:167253f4e170 31107 0x046755f8a92dff3dl },
wolfSSL 14:167253f4e170 31108 0 },
wolfSSL 14:167253f4e170 31109 /* 24 */
wolfSSL 14:167253f4e170 31110 { { 0xcc8ac5d2bce8ffcdl,0x0d53c48b2fe61a82l,0xf6f161727202d6c7l,
wolfSSL 14:167253f4e170 31111 0x046e5e113b83a5f3l },
wolfSSL 14:167253f4e170 31112 { 0xe7b8ff64d8007f01l,0x7fb1ef125af43183l,0x045c5ea635e1a03cl,
wolfSSL 14:167253f4e170 31113 0x6e0106c3303d005bl },
wolfSSL 14:167253f4e170 31114 0 },
wolfSSL 14:167253f4e170 31115 /* 25 */
wolfSSL 14:167253f4e170 31116 { { 0x48c7358488dd73b1l,0x7670708f995ed0d9l,0x38385ea8c56a2ab7l,
wolfSSL 14:167253f4e170 31117 0x442594ede901cf1fl },
wolfSSL 14:167253f4e170 31118 { 0xf8faa2c912d4b65bl,0x94c2343b96c90c37l,0xd326e4a15e978d1fl,
wolfSSL 14:167253f4e170 31119 0xa796fa514c2ee68el },
wolfSSL 14:167253f4e170 31120 0 },
wolfSSL 14:167253f4e170 31121 /* 26 */
wolfSSL 14:167253f4e170 31122 { { 0x359fb604823addd7l,0x9e2a6183e56693b3l,0xf885b78e3cbf3c80l,
wolfSSL 14:167253f4e170 31123 0xe4ad2da9c69766e9l },
wolfSSL 14:167253f4e170 31124 { 0x357f7f428e048a61l,0x082d198cc092d9a0l,0xfc3a1af4c03ed8efl,
wolfSSL 14:167253f4e170 31125 0xc5e94046c37b5143l },
wolfSSL 14:167253f4e170 31126 0 },
wolfSSL 14:167253f4e170 31127 /* 27 */
wolfSSL 14:167253f4e170 31128 { { 0x476a538c2be75f9el,0x6fd1a9e8cb123a78l,0xd85e4df0b109c04bl,
wolfSSL 14:167253f4e170 31129 0x63283dafdb464747l },
wolfSSL 14:167253f4e170 31130 { 0xce728cf7baf2df15l,0xe592c4550ad9a7f4l,0xfab226ade834bcc3l,
wolfSSL 14:167253f4e170 31131 0x68bd19ab1981a938l },
wolfSSL 14:167253f4e170 31132 0 },
wolfSSL 14:167253f4e170 31133 /* 28 */
wolfSSL 14:167253f4e170 31134 { { 0xc08ead511887d659l,0x3374d5f4b359305al,0x96986981cfe74fe3l,
wolfSSL 14:167253f4e170 31135 0x495292f53c6fdfd6l },
wolfSSL 14:167253f4e170 31136 { 0x4a878c9e1acec896l,0xd964b210ec5b4484l,0x6696f7e2664d60a7l,
wolfSSL 14:167253f4e170 31137 0x0ec7530d26036837l },
wolfSSL 14:167253f4e170 31138 0 },
wolfSSL 14:167253f4e170 31139 /* 29 */
wolfSSL 14:167253f4e170 31140 { { 0x2da13a05ad2687bbl,0xa1f83b6af32e21fal,0x390f5ef51dd4607bl,
wolfSSL 14:167253f4e170 31141 0x0f6207a664863f0bl },
wolfSSL 14:167253f4e170 31142 { 0xbd67e3bb0f138233l,0xdd66b96c272aa718l,0x8ed0040726ec88ael,
wolfSSL 14:167253f4e170 31143 0xff0db07208ed6dcfl },
wolfSSL 14:167253f4e170 31144 0 },
wolfSSL 14:167253f4e170 31145 /* 30 */
wolfSSL 14:167253f4e170 31146 { { 0x749fa1014c95d553l,0xa44052fd5d680a8al,0x183b4317ff3b566fl,
wolfSSL 14:167253f4e170 31147 0x313b513c88740ea3l },
wolfSSL 14:167253f4e170 31148 { 0xb402e2ac08d11549l,0x071ee10bb4dee21cl,0x26b987dd47f2320el,
wolfSSL 14:167253f4e170 31149 0x2d3abcf986f19f81l },
wolfSSL 14:167253f4e170 31150 0 },
wolfSSL 14:167253f4e170 31151 /* 31 */
wolfSSL 14:167253f4e170 31152 { { 0x4c288501815581a2l,0x9a0a6d56632211afl,0x19ba7a0f0cab2e99l,
wolfSSL 14:167253f4e170 31153 0xc036fa10ded98cdfl },
wolfSSL 14:167253f4e170 31154 { 0x29ae08bac1fbd009l,0x0b68b19006d15816l,0xc2eb32779b9e0d8fl,
wolfSSL 14:167253f4e170 31155 0xa6b2a2c4b6d40194l },
wolfSSL 14:167253f4e170 31156 0 },
wolfSSL 14:167253f4e170 31157 /* 32 */
wolfSSL 14:167253f4e170 31158 { { 0xd433e50f6d3549cfl,0x6f33696ffacd665el,0x695bfdacce11fcb4l,
wolfSSL 14:167253f4e170 31159 0x810ee252af7c9860l },
wolfSSL 14:167253f4e170 31160 { 0x65450fe17159bb2cl,0xf7dfbebe758b357bl,0x2b057e74d69fea72l,
wolfSSL 14:167253f4e170 31161 0xd485717a92731745l },
wolfSSL 14:167253f4e170 31162 0 },
wolfSSL 14:167253f4e170 31163 /* 33 */
wolfSSL 14:167253f4e170 31164 { { 0x11741a8af0cb5a98l,0xd3da8f931f3110bfl,0x1994e2cbab382adfl,
wolfSSL 14:167253f4e170 31165 0x6a6045a72f9a604el },
wolfSSL 14:167253f4e170 31166 { 0x170c0d3fa2b2411dl,0xbe0eb83e510e96e0l,0x3bcc9f738865b3ccl,
wolfSSL 14:167253f4e170 31167 0xd3e45cfaf9e15790l },
wolfSSL 14:167253f4e170 31168 0 },
wolfSSL 14:167253f4e170 31169 /* 34 */
wolfSSL 14:167253f4e170 31170 { { 0xce1f69bbe83f7669l,0x09f8ae8272877d6bl,0x9548ae543244278dl,
wolfSSL 14:167253f4e170 31171 0x207755dee3c2c19cl },
wolfSSL 14:167253f4e170 31172 { 0x87bd61d96fef1945l,0x18813cefb12d28c3l,0x9fbcd1d672df64aal,
wolfSSL 14:167253f4e170 31173 0x48dc5ee57154b00dl },
wolfSSL 14:167253f4e170 31174 0 },
wolfSSL 14:167253f4e170 31175 /* 35 */
wolfSSL 14:167253f4e170 31176 { { 0x123790bff7e5a199l,0xe0efb8cf989ccbb7l,0xc27a2bfe0a519c79l,
wolfSSL 14:167253f4e170 31177 0xf2fb0aeddff6f445l },
wolfSSL 14:167253f4e170 31178 { 0x41c09575f0b5025fl,0x550543d740fa9f22l,0x8fa3c8ad380bfbd0l,
wolfSSL 14:167253f4e170 31179 0xa13e9015db28d525l },
wolfSSL 14:167253f4e170 31180 0 },
wolfSSL 14:167253f4e170 31181 /* 36 */
wolfSSL 14:167253f4e170 31182 { { 0xf9f7a350a2b65cbcl,0x0b04b9722a464226l,0x265ce241e23f07a1l,
wolfSSL 14:167253f4e170 31183 0x2bf0d6b01497526fl },
wolfSSL 14:167253f4e170 31184 { 0xd3d4dd3f4b216fb7l,0xf7d7b867fbdda26al,0xaeb7b83f6708505cl,
wolfSSL 14:167253f4e170 31185 0x42a94a5a162fe89fl },
wolfSSL 14:167253f4e170 31186 0 },
wolfSSL 14:167253f4e170 31187 /* 37 */
wolfSSL 14:167253f4e170 31188 { { 0x5846ad0beaadf191l,0x0f8a489025a268d7l,0xe8603050494dc1f6l,
wolfSSL 14:167253f4e170 31189 0x2c2dd969c65ede3dl },
wolfSSL 14:167253f4e170 31190 { 0x6d02171d93849c17l,0x460488ba1da250ddl,0x4810c7063c3a5485l,
wolfSSL 14:167253f4e170 31191 0xf437fa1f42c56dbcl },
wolfSSL 14:167253f4e170 31192 0 },
wolfSSL 14:167253f4e170 31193 /* 38 */
wolfSSL 14:167253f4e170 31194 { { 0x6aa0d7144a0f7dabl,0x0f0497931776e9acl,0x52c0a050f5f39786l,
wolfSSL 14:167253f4e170 31195 0xaaf45b3354707aa8l },
wolfSSL 14:167253f4e170 31196 { 0x85e37c33c18d364al,0xd40b9b063e497165l,0xf417168115ec5444l,
wolfSSL 14:167253f4e170 31197 0xcdf6310df4f272bcl },
wolfSSL 14:167253f4e170 31198 0 },
wolfSSL 14:167253f4e170 31199 /* 39 */
wolfSSL 14:167253f4e170 31200 { { 0x7473c6238ea8b7efl,0x08e9351885bc2287l,0x419567722bda8e34l,
wolfSSL 14:167253f4e170 31201 0xf0d008bada9e2ff2l },
wolfSSL 14:167253f4e170 31202 { 0x2912671d2414d3b1l,0xb3754985b019ea76l,0x5c61b96d453bcbdbl,
wolfSSL 14:167253f4e170 31203 0x5bd5c2f5ca887b8bl },
wolfSSL 14:167253f4e170 31204 0 },
wolfSSL 14:167253f4e170 31205 /* 40 */
wolfSSL 14:167253f4e170 31206 { { 0xef0f469ef49a3154l,0x3e85a5956e2b2e9al,0x45aaec1eaa924a9cl,
wolfSSL 14:167253f4e170 31207 0xaa12dfc8a09e4719l },
wolfSSL 14:167253f4e170 31208 { 0x26f272274df69f1dl,0xe0e4c82ca2ff5e73l,0xb9d8ce73b7a9dd44l,
wolfSSL 14:167253f4e170 31209 0x6c036e73e48ca901l },
wolfSSL 14:167253f4e170 31210 0 },
wolfSSL 14:167253f4e170 31211 /* 41 */
wolfSSL 14:167253f4e170 31212 { { 0x5cfae12a0f6e3138l,0x6966ef0025ad345al,0x8993c64b45672bc5l,
wolfSSL 14:167253f4e170 31213 0x292ff65896afbe24l },
wolfSSL 14:167253f4e170 31214 { 0xd5250d445e213402l,0xf6580e274392c9fel,0x097b397fda1c72e8l,
wolfSSL 14:167253f4e170 31215 0x644e0c90311b7276l },
wolfSSL 14:167253f4e170 31216 0 },
wolfSSL 14:167253f4e170 31217 /* 42 */
wolfSSL 14:167253f4e170 31218 { { 0xe1e421e1a47153f0l,0xb86c3b79920418c9l,0x93bdce87705d7672l,
wolfSSL 14:167253f4e170 31219 0xf25ae793cab79a77l },
wolfSSL 14:167253f4e170 31220 { 0x1f3194a36d869d0cl,0x9d55c8824986c264l,0x49fb5ea3096e945el,
wolfSSL 14:167253f4e170 31221 0x39b8e65313db0a3el },
wolfSSL 14:167253f4e170 31222 0 },
wolfSSL 14:167253f4e170 31223 /* 43 */
wolfSSL 14:167253f4e170 31224 { { 0x37754200b6fd2e59l,0x35e2c0669255c98fl,0xd9dab21a0e2a5739l,
wolfSSL 14:167253f4e170 31225 0x39122f2f0f19db06l },
wolfSSL 14:167253f4e170 31226 { 0xcfbce1e003cad53cl,0x225b2c0fe65c17e3l,0x72baf1d29aa13877l,
wolfSSL 14:167253f4e170 31227 0x8de80af8ce80ff8dl },
wolfSSL 14:167253f4e170 31228 0 },
wolfSSL 14:167253f4e170 31229 /* 44 */
wolfSSL 14:167253f4e170 31230 { { 0xafbea8d9207bbb76l,0x921c7e7c21782758l,0xdfa2b74b1c0436b1l,
wolfSSL 14:167253f4e170 31231 0x871949062e368c04l },
wolfSSL 14:167253f4e170 31232 { 0xb5f928bba3993df5l,0x639d75b5f3b3d26al,0x011aa78a85b55050l,
wolfSSL 14:167253f4e170 31233 0xfc315e6a5b74fde1l },
wolfSSL 14:167253f4e170 31234 0 },
wolfSSL 14:167253f4e170 31235 /* 45 */
wolfSSL 14:167253f4e170 31236 { { 0x561fd41ae8d6ecfal,0x5f8c44f61aec7f86l,0x98452a7b4924741dl,
wolfSSL 14:167253f4e170 31237 0xe6d4a7adee389088l },
wolfSSL 14:167253f4e170 31238 { 0x60552ed14593c75dl,0x70a70da4dd271162l,0xd2aede937ba2c7dbl,
wolfSSL 14:167253f4e170 31239 0x35dfaf9a9be2ae57l },
wolfSSL 14:167253f4e170 31240 0 },
wolfSSL 14:167253f4e170 31241 /* 46 */
wolfSSL 14:167253f4e170 31242 { { 0x6b956fcdaa736636l,0x09f51d97ae2cab7el,0xfb10bf410f349966l,
wolfSSL 14:167253f4e170 31243 0x1da5c7d71c830d2bl },
wolfSSL 14:167253f4e170 31244 { 0x5c41e4833cce6825l,0x15ad118ff9573c3bl,0xa28552c7f23036b8l,
wolfSSL 14:167253f4e170 31245 0x7077c0fddbf4b9d6l },
wolfSSL 14:167253f4e170 31246 0 },
wolfSSL 14:167253f4e170 31247 /* 47 */
wolfSSL 14:167253f4e170 31248 { { 0xbf63ff8d46b9661cl,0xa1dfd36b0d2cfd71l,0x0373e140a847f8f7l,
wolfSSL 14:167253f4e170 31249 0x53a8632ee50efe44l },
wolfSSL 14:167253f4e170 31250 { 0x0976ff68696d8051l,0xdaec0c95c74f468al,0x62994dc35e4e26bdl,
wolfSSL 14:167253f4e170 31251 0x028ca76d34e1fcc1l },
wolfSSL 14:167253f4e170 31252 0 },
wolfSSL 14:167253f4e170 31253 /* 48 */
wolfSSL 14:167253f4e170 31254 { { 0xd11d47dcfc9877eel,0xc8b36210801d0002l,0xd002c11754c260b6l,
wolfSSL 14:167253f4e170 31255 0x04c17cd86962f046l },
wolfSSL 14:167253f4e170 31256 { 0x6d9bd094b0daddf5l,0xbea2357524ce55c0l,0x663356e672da03b5l,
wolfSSL 14:167253f4e170 31257 0xf7ba4de9fed97474l },
wolfSSL 14:167253f4e170 31258 0 },
wolfSSL 14:167253f4e170 31259 /* 49 */
wolfSSL 14:167253f4e170 31260 { { 0xd0dbfa34ebe1263fl,0x5576373571ae7ce6l,0xd244055382a6f523l,
wolfSSL 14:167253f4e170 31261 0xe31f960052131c41l },
wolfSSL 14:167253f4e170 31262 { 0xd1bb9216ea6b6ec6l,0x37a1d12e73c2fc44l,0xc10e7eac89d0a294l,
wolfSSL 14:167253f4e170 31263 0xaa3a6259ce34d47bl },
wolfSSL 14:167253f4e170 31264 0 },
wolfSSL 14:167253f4e170 31265 /* 50 */
wolfSSL 14:167253f4e170 31266 { { 0xfbcf9df536f3dcd3l,0x6ceded50d2bf7360l,0x491710fadf504f5bl,
wolfSSL 14:167253f4e170 31267 0x2398dd627e79daeel },
wolfSSL 14:167253f4e170 31268 { 0xcf4705a36d09569el,0xea0619bb5149f769l,0xff9c037735f6034cl,
wolfSSL 14:167253f4e170 31269 0x5717f5b21c046210l },
wolfSSL 14:167253f4e170 31270 0 },
wolfSSL 14:167253f4e170 31271 /* 51 */
wolfSSL 14:167253f4e170 31272 { { 0x9fe229c921dd895el,0x8e51850040c28451l,0xfa13d2391d637ecdl,
wolfSSL 14:167253f4e170 31273 0x660a2c560e3c28del },
wolfSSL 14:167253f4e170 31274 { 0x9cca88aed67fcbd0l,0xc84724780ea9f096l,0x32b2f48172e92b4dl,
wolfSSL 14:167253f4e170 31275 0x624ee54c4f522453l },
wolfSSL 14:167253f4e170 31276 0 },
wolfSSL 14:167253f4e170 31277 /* 52 */
wolfSSL 14:167253f4e170 31278 { { 0x09549ce4d897ecccl,0x4d49d1d93f9880aal,0x723c2423043a7c20l,
wolfSSL 14:167253f4e170 31279 0x4f392afb92bdfbc0l },
wolfSSL 14:167253f4e170 31280 { 0x6969f8fa7de44fd9l,0xb66cfbe457b32156l,0xdb2fa803368ebc3cl,
wolfSSL 14:167253f4e170 31281 0x8a3e7977ccdb399cl },
wolfSSL 14:167253f4e170 31282 0 },
wolfSSL 14:167253f4e170 31283 /* 53 */
wolfSSL 14:167253f4e170 31284 { { 0xdde1881f06c4b125l,0xae34e300f6e3ca8cl,0xef6999de5c7a13e9l,
wolfSSL 14:167253f4e170 31285 0x3888d02370c24404l },
wolfSSL 14:167253f4e170 31286 { 0x7628035644f91081l,0x3d9fcf615f015504l,0x1827edc8632cd36el,
wolfSSL 14:167253f4e170 31287 0xa5e62e4718102336l },
wolfSSL 14:167253f4e170 31288 0 },
wolfSSL 14:167253f4e170 31289 /* 54 */
wolfSSL 14:167253f4e170 31290 { { 0x1a825ee32facd6c8l,0x699c635454bcbc66l,0x0ce3edf798df9931l,
wolfSSL 14:167253f4e170 31291 0x2c4768e6466a5adcl },
wolfSSL 14:167253f4e170 31292 { 0xb346ff8c90a64bc9l,0x630a6020e4779f5cl,0xd949d064bc05e884l,
wolfSSL 14:167253f4e170 31293 0x7b5e6441f9e652a0l },
wolfSSL 14:167253f4e170 31294 0 },
wolfSSL 14:167253f4e170 31295 /* 55 */
wolfSSL 14:167253f4e170 31296 { { 0x2169422c1d28444al,0xe996c5d8be136a39l,0x2387afe5fb0c7fcel,
wolfSSL 14:167253f4e170 31297 0xb8af73cb0c8d744al },
wolfSSL 14:167253f4e170 31298 { 0x5fde83aa338b86fdl,0xfee3f158a58a5cffl,0xc9ee8f6f20ac9433l,
wolfSSL 14:167253f4e170 31299 0xa036395f7f3f0895l },
wolfSSL 14:167253f4e170 31300 0 },
wolfSSL 14:167253f4e170 31301 /* 56 */
wolfSSL 14:167253f4e170 31302 { { 0x8c73c6bba10f7770l,0xa6f16d81a12a0e24l,0x100df68251bc2b9fl,
wolfSSL 14:167253f4e170 31303 0x4be36b01875fb533l },
wolfSSL 14:167253f4e170 31304 { 0x9226086e9fb56dbbl,0x306fef8b07e7a4f8l,0xeeaccc0566d52f20l,
wolfSSL 14:167253f4e170 31305 0x8cbc9a871bdc00c0l },
wolfSSL 14:167253f4e170 31306 0 },
wolfSSL 14:167253f4e170 31307 /* 57 */
wolfSSL 14:167253f4e170 31308 { { 0xe131895cc0dac4abl,0xa874a440712ff112l,0x6332ae7c6a1cee57l,
wolfSSL 14:167253f4e170 31309 0x44e7553e0c0835f8l },
wolfSSL 14:167253f4e170 31310 { 0x6d503fff7734002dl,0x9d35cb8b0b34425cl,0x95f702760e8738b5l,
wolfSSL 14:167253f4e170 31311 0x470a683a5eb8fc18l },
wolfSSL 14:167253f4e170 31312 0 },
wolfSSL 14:167253f4e170 31313 /* 58 */
wolfSSL 14:167253f4e170 31314 { { 0x81b761dc90513482l,0x0287202a01e9276al,0xcda441ee0ce73083l,
wolfSSL 14:167253f4e170 31315 0x16410690c63dc6efl },
wolfSSL 14:167253f4e170 31316 { 0xf5034a066d06a2edl,0xdd4d7745189b100bl,0xd914ae72ab8218c9l,
wolfSSL 14:167253f4e170 31317 0xd73479fd7abcbb4fl },
wolfSSL 14:167253f4e170 31318 0 },
wolfSSL 14:167253f4e170 31319 /* 59 */
wolfSSL 14:167253f4e170 31320 { { 0x7edefb165ad4c6e5l,0x262cf08f5b06d04dl,0x12ed5bb18575cb14l,
wolfSSL 14:167253f4e170 31321 0x816469e30771666bl },
wolfSSL 14:167253f4e170 31322 { 0xd7ab9d79561e291el,0xeb9daf22c1de1661l,0xf49827eb135e0513l,
wolfSSL 14:167253f4e170 31323 0x0a36dd23f0dd3f9cl },
wolfSSL 14:167253f4e170 31324 0 },
wolfSSL 14:167253f4e170 31325 /* 60 */
wolfSSL 14:167253f4e170 31326 { { 0x098d32c741d5533cl,0x7c5f5a9e8684628fl,0x39a228ade349bd11l,
wolfSSL 14:167253f4e170 31327 0xe331dfd6fdbab118l },
wolfSSL 14:167253f4e170 31328 { 0x5100ab686bcc6ed8l,0x7160c3bdef7a260el,0x9063d9a7bce850d7l,
wolfSSL 14:167253f4e170 31329 0xd3b4782a492e3389l },
wolfSSL 14:167253f4e170 31330 0 },
wolfSSL 14:167253f4e170 31331 /* 61 */
wolfSSL 14:167253f4e170 31332 { { 0xa149b6e8f3821f90l,0x92edd9ed66eb7aadl,0x0bb669531a013116l,
wolfSSL 14:167253f4e170 31333 0x7281275a4c86a5bdl },
wolfSSL 14:167253f4e170 31334 { 0x503858f7d3ff47e5l,0x5e1616bc61016441l,0x62b0f11a7dfd9bb1l,
wolfSSL 14:167253f4e170 31335 0x2c062e7ece145059l },
wolfSSL 14:167253f4e170 31336 0 },
wolfSSL 14:167253f4e170 31337 /* 62 */
wolfSSL 14:167253f4e170 31338 { { 0xa76f996f0159ac2el,0x281e7736cbdb2713l,0x2ad6d28808e46047l,
wolfSSL 14:167253f4e170 31339 0x282a35f92c4e7ef1l },
wolfSSL 14:167253f4e170 31340 { 0x9c354b1ec0ce5cd2l,0xcf99efc91379c229l,0x992caf383e82c11el,
wolfSSL 14:167253f4e170 31341 0xc71cd513554d2abdl },
wolfSSL 14:167253f4e170 31342 0 },
wolfSSL 14:167253f4e170 31343 /* 63 */
wolfSSL 14:167253f4e170 31344 { { 0x4885de9c09b578f4l,0x1884e258e3affa7al,0x8f76b1b759182f1fl,
wolfSSL 14:167253f4e170 31345 0xc50f6740cf47f3a3l },
wolfSSL 14:167253f4e170 31346 { 0xa9c4adf3374b68eal,0xa406f32369965fe2l,0x2f86a22285a53050l,
wolfSSL 14:167253f4e170 31347 0xb9ecb3a7212958dcl },
wolfSSL 14:167253f4e170 31348 0 },
wolfSSL 14:167253f4e170 31349 /* 64 */
wolfSSL 14:167253f4e170 31350 { { 0x56f8410ef4f8b16al,0x97241afec47b266al,0x0a406b8e6d9c87c1l,
wolfSSL 14:167253f4e170 31351 0x803f3e02cd42ab1bl },
wolfSSL 14:167253f4e170 31352 { 0x7f0309a804dbec69l,0xa83b85f73bbad05fl,0xc6097273ad8e197fl,
wolfSSL 14:167253f4e170 31353 0xc097440e5067adc1l },
wolfSSL 14:167253f4e170 31354 0 },
wolfSSL 14:167253f4e170 31355 /* 65 */
wolfSSL 14:167253f4e170 31356 { { 0x846a56f2c379ab34l,0xa8ee068b841df8d1l,0x20314459176c68efl,
wolfSSL 14:167253f4e170 31357 0xf1af32d5915f1f30l },
wolfSSL 14:167253f4e170 31358 { 0x99c375315d75bd50l,0x837cffbaf72f67bcl,0x0613a41848d7723fl,
wolfSSL 14:167253f4e170 31359 0x23d0f130e2d41c8bl },
wolfSSL 14:167253f4e170 31360 0 },
wolfSSL 14:167253f4e170 31361 /* 66 */
wolfSSL 14:167253f4e170 31362 { { 0x857ab6edf41500d9l,0x0d890ae5fcbeada8l,0x52fe864889725951l,
wolfSSL 14:167253f4e170 31363 0xb0288dd6c0a3faddl },
wolfSSL 14:167253f4e170 31364 { 0x85320f30650bcb08l,0x71af6313695d6e16l,0x31f520a7b989aa76l,
wolfSSL 14:167253f4e170 31365 0xffd3724ff408c8d2l },
wolfSSL 14:167253f4e170 31366 0 },
wolfSSL 14:167253f4e170 31367 /* 67 */
wolfSSL 14:167253f4e170 31368 { { 0x53968e64b458e6cbl,0x992dad20317a5d28l,0x3814ae0b7aa75f56l,
wolfSSL 14:167253f4e170 31369 0xf5590f4ad78c26dfl },
wolfSSL 14:167253f4e170 31370 { 0x0fc24bd3cf0ba55al,0x0fc4724a0c778bael,0x1ce9864f683b674al,
wolfSSL 14:167253f4e170 31371 0x18d6da54f6f74a20l },
wolfSSL 14:167253f4e170 31372 0 },
wolfSSL 14:167253f4e170 31373 /* 68 */
wolfSSL 14:167253f4e170 31374 { { 0xed93e225d5be5a2bl,0x6fe799835934f3c6l,0x4314092622626ffcl,
wolfSSL 14:167253f4e170 31375 0x50bbb4d97990216al },
wolfSSL 14:167253f4e170 31376 { 0x378191c6e57ec63el,0x65422c40181dcdb2l,0x41a8099b0236e0f6l,
wolfSSL 14:167253f4e170 31377 0x2b10011801fe49c3l },
wolfSSL 14:167253f4e170 31378 0 },
wolfSSL 14:167253f4e170 31379 /* 69 */
wolfSSL 14:167253f4e170 31380 { { 0xfc68b5c59b391593l,0xc385f5a2598270fcl,0x7144f3aad19adcbbl,
wolfSSL 14:167253f4e170 31381 0xdd55899983fbae0cl },
wolfSSL 14:167253f4e170 31382 { 0x93b88b8e74b82ff4l,0xd2e03c4071e734c9l,0x9a7a9eaf43c0322al,
wolfSSL 14:167253f4e170 31383 0xe6e4c551149d6041l },
wolfSSL 14:167253f4e170 31384 0 },
wolfSSL 14:167253f4e170 31385 /* 70 */
wolfSSL 14:167253f4e170 31386 { { 0x55f655bb1e9af288l,0x647e1a64f7ada931l,0x43697e4bcb2820e5l,
wolfSSL 14:167253f4e170 31387 0x51e00db107ed56ffl },
wolfSSL 14:167253f4e170 31388 { 0x43d169b8771c327el,0x29cdb20b4a96c2adl,0xc07d51f53deb4779l,
wolfSSL 14:167253f4e170 31389 0xe22f424149829177l },
wolfSSL 14:167253f4e170 31390 0 },
wolfSSL 14:167253f4e170 31391 /* 71 */
wolfSSL 14:167253f4e170 31392 { { 0xcd45e8f4635f1abbl,0x7edc0cb568538874l,0xc9472c1fb5a8034dl,
wolfSSL 14:167253f4e170 31393 0xf709373d52dc48c9l },
wolfSSL 14:167253f4e170 31394 { 0x401966bba8af30d6l,0x95bf5f4af137b69cl,0x3966162a9361c47el,
wolfSSL 14:167253f4e170 31395 0xbd52d288e7275b11l },
wolfSSL 14:167253f4e170 31396 0 },
wolfSSL 14:167253f4e170 31397 /* 72 */
wolfSSL 14:167253f4e170 31398 { { 0xab155c7a9c5fa877l,0x17dad6727d3a3d48l,0x43f43f9e73d189d8l,
wolfSSL 14:167253f4e170 31399 0xa0d0f8e4c8aa77a6l },
wolfSSL 14:167253f4e170 31400 { 0x0bbeafd8cc94f92dl,0xd818c8be0c4ddb3al,0x22cc65f8b82eba14l,
wolfSSL 14:167253f4e170 31401 0xa56c78c7946d6a00l },
wolfSSL 14:167253f4e170 31402 0 },
wolfSSL 14:167253f4e170 31403 /* 73 */
wolfSSL 14:167253f4e170 31404 { { 0x2962391b0dd09529l,0x803e0ea63daddfcfl,0x2c77351f5b5bf481l,
wolfSSL 14:167253f4e170 31405 0xd8befdf8731a367al },
wolfSSL 14:167253f4e170 31406 { 0xab919d42fc0157f4l,0xf51caed7fec8e650l,0xcdf9cb4002d48b0al,
wolfSSL 14:167253f4e170 31407 0x854a68a5ce9f6478l },
wolfSSL 14:167253f4e170 31408 0 },
wolfSSL 14:167253f4e170 31409 /* 74 */
wolfSSL 14:167253f4e170 31410 { { 0xdc35f67b63506ea5l,0x9286c489a4fe0d66l,0x3f101d3bfe95cd4dl,
wolfSSL 14:167253f4e170 31411 0x5cacea0b98846a95l },
wolfSSL 14:167253f4e170 31412 { 0xa90df60c9ceac44dl,0x3db29af4354d1c3al,0x08dd3de8ad5dbabel,
wolfSSL 14:167253f4e170 31413 0xe4982d1235e4efa9l },
wolfSSL 14:167253f4e170 31414 0 },
wolfSSL 14:167253f4e170 31415 /* 75 */
wolfSSL 14:167253f4e170 31416 { { 0x23104a22c34cd55el,0x58695bb32680d132l,0xfb345afa1fa1d943l,
wolfSSL 14:167253f4e170 31417 0x8046b7f616b20499l },
wolfSSL 14:167253f4e170 31418 { 0xb533581e38e7d098l,0xd7f61e8df46f0b70l,0x30dea9ea44cb78c4l,
wolfSSL 14:167253f4e170 31419 0xeb17ca7b9082af55l },
wolfSSL 14:167253f4e170 31420 0 },
wolfSSL 14:167253f4e170 31421 /* 76 */
wolfSSL 14:167253f4e170 31422 { { 0x1751b59876a145b9l,0xa5cf6b0fc1bc71ecl,0xd3e03565392715bbl,
wolfSSL 14:167253f4e170 31423 0x097b00bafab5e131l },
wolfSSL 14:167253f4e170 31424 { 0xaa66c8e9565f69e1l,0x77e8f75ab5be5199l,0x6033ba11da4fd984l,
wolfSSL 14:167253f4e170 31425 0xf95c747bafdbcc9el },
wolfSSL 14:167253f4e170 31426 0 },
wolfSSL 14:167253f4e170 31427 /* 77 */
wolfSSL 14:167253f4e170 31428 { { 0x558f01d3bebae45el,0xa8ebe9f0c4bc6955l,0xaeb705b1dbc64fc6l,
wolfSSL 14:167253f4e170 31429 0x3512601e566ed837l },
wolfSSL 14:167253f4e170 31430 { 0x9336f1e1fa1161cdl,0x328ab8d54c65ef87l,0x4757eee2724f21e5l,
wolfSSL 14:167253f4e170 31431 0x0ef971236068ab6bl },
wolfSSL 14:167253f4e170 31432 0 },
wolfSSL 14:167253f4e170 31433 /* 78 */
wolfSSL 14:167253f4e170 31434 { { 0x02598cf754ca4226l,0x5eede138f8642c8el,0x48963f74468e1790l,
wolfSSL 14:167253f4e170 31435 0xfc16d9333b4fbc95l },
wolfSSL 14:167253f4e170 31436 { 0xbe96fb31e7c800cal,0x138063312678adaal,0x3d6244976ff3e8b5l,
wolfSSL 14:167253f4e170 31437 0x14ca4af1b95d7a17l },
wolfSSL 14:167253f4e170 31438 0 },
wolfSSL 14:167253f4e170 31439 /* 79 */
wolfSSL 14:167253f4e170 31440 { { 0x7a4771babd2f81d5l,0x1a5f9d6901f7d196l,0xd898bef7cad9c907l,
wolfSSL 14:167253f4e170 31441 0x4057b063f59c231dl },
wolfSSL 14:167253f4e170 31442 { 0xbffd82fe89c05c0al,0xe4911c6f1dc0df85l,0x3befccaea35a16dbl,
wolfSSL 14:167253f4e170 31443 0x1c3b5d64f1330b13l },
wolfSSL 14:167253f4e170 31444 0 },
wolfSSL 14:167253f4e170 31445 /* 80 */
wolfSSL 14:167253f4e170 31446 { { 0x5fe14bfe80ec21fel,0xf6ce116ac255be82l,0x98bc5a072f4a5d67l,
wolfSSL 14:167253f4e170 31447 0xfad27148db7e63afl },
wolfSSL 14:167253f4e170 31448 { 0x90c0b6ac29ab05b3l,0x37a9a83c4e251ae6l,0x0a7dc875c2aade7dl,
wolfSSL 14:167253f4e170 31449 0x77387de39f0e1a84l },
wolfSSL 14:167253f4e170 31450 0 },
wolfSSL 14:167253f4e170 31451 /* 81 */
wolfSSL 14:167253f4e170 31452 { { 0x1e9ecc49a56c0dd7l,0xa5cffcd846086c74l,0x8f7a1408f505aecel,
wolfSSL 14:167253f4e170 31453 0xb37b85c0bef0c47el },
wolfSSL 14:167253f4e170 31454 { 0x3596b6e4cc0e6a8fl,0xfd6d4bbf6b388f23l,0xaba453fac39cef4el,
wolfSSL 14:167253f4e170 31455 0x9c135ac8f9f628d5l },
wolfSSL 14:167253f4e170 31456 0 },
wolfSSL 14:167253f4e170 31457 /* 82 */
wolfSSL 14:167253f4e170 31458 { { 0x32aa320284e35743l,0x320d6ab185a3cdefl,0xb821b1761df19819l,
wolfSSL 14:167253f4e170 31459 0x5721361fc433851fl },
wolfSSL 14:167253f4e170 31460 { 0x1f0db36a71fc9168l,0x5f98ba735e5c403cl,0xf64ca87e37bcd8f5l,
wolfSSL 14:167253f4e170 31461 0xdcbac3c9e6bb11bdl },
wolfSSL 14:167253f4e170 31462 0 },
wolfSSL 14:167253f4e170 31463 /* 83 */
wolfSSL 14:167253f4e170 31464 { { 0xf01d99684518cbe2l,0xd242fc189c9eb04el,0x727663c7e47feebfl,
wolfSSL 14:167253f4e170 31465 0xb8c1c89e2d626862l },
wolfSSL 14:167253f4e170 31466 { 0x51a58bddc8e1d569l,0x563809c8b7d88cd0l,0x26c27fd9f11f31ebl,
wolfSSL 14:167253f4e170 31467 0x5d23bbda2f9422d4l },
wolfSSL 14:167253f4e170 31468 0 },
wolfSSL 14:167253f4e170 31469 /* 84 */
wolfSSL 14:167253f4e170 31470 { { 0x0a1c729495c8f8bel,0x2961c4803bf362bfl,0x9e418403df63d4acl,
wolfSSL 14:167253f4e170 31471 0xc109f9cb91ece900l },
wolfSSL 14:167253f4e170 31472 { 0xc2d095d058945705l,0xb9083d96ddeb85c0l,0x84692b8d7a40449bl,
wolfSSL 14:167253f4e170 31473 0x9bc3344f2eee1ee1l },
wolfSSL 14:167253f4e170 31474 0 },
wolfSSL 14:167253f4e170 31475 /* 85 */
wolfSSL 14:167253f4e170 31476 { { 0x0d5ae35642913074l,0x55491b2748a542b1l,0x469ca665b310732al,
wolfSSL 14:167253f4e170 31477 0x29591d525f1a4cc1l },
wolfSSL 14:167253f4e170 31478 { 0xe76f5b6bb84f983fl,0xbe7eef419f5f84e1l,0x1200d49680baa189l,
wolfSSL 14:167253f4e170 31479 0x6376551f18ef332cl },
wolfSSL 14:167253f4e170 31480 0 },
wolfSSL 14:167253f4e170 31481 /* 86 */
wolfSSL 14:167253f4e170 31482 { { 0xbda5f14e562976ccl,0x22bca3e60ef12c38l,0xbbfa30646cca9852l,
wolfSSL 14:167253f4e170 31483 0xbdb79dc808e2987al },
wolfSSL 14:167253f4e170 31484 { 0xfd2cb5c9cb06a772l,0x38f475aafe536dcel,0xc2a3e0227c2b5db8l,
wolfSSL 14:167253f4e170 31485 0x8ee86001add3c14al },
wolfSSL 14:167253f4e170 31486 0 },
wolfSSL 14:167253f4e170 31487 /* 87 */
wolfSSL 14:167253f4e170 31488 { { 0xcbe96981a4ade873l,0x7ee9aa4dc4fba48cl,0x2cee28995a054ba5l,
wolfSSL 14:167253f4e170 31489 0x92e51d7a6f77aa4bl },
wolfSSL 14:167253f4e170 31490 { 0x948bafa87190a34dl,0xd698f75bf6bd1ed1l,0xd00ee6e30caf1144l,
wolfSSL 14:167253f4e170 31491 0x5182f86f0a56aaaal },
wolfSSL 14:167253f4e170 31492 0 },
wolfSSL 14:167253f4e170 31493 /* 88 */
wolfSSL 14:167253f4e170 31494 { { 0xfba6212c7a4cc99cl,0xff609b683e6d9ca1l,0x5dbb27cb5ac98c5al,
wolfSSL 14:167253f4e170 31495 0x91dcab5d4073a6f2l },
wolfSSL 14:167253f4e170 31496 { 0x01b6cc3d5f575a70l,0x0cb361396f8d87fal,0x165d4e8c89981736l,
wolfSSL 14:167253f4e170 31497 0x17a0cedb97974f2bl },
wolfSSL 14:167253f4e170 31498 0 },
wolfSSL 14:167253f4e170 31499 /* 89 */
wolfSSL 14:167253f4e170 31500 { { 0x38861e2a076c8d3al,0x701aad39210f924bl,0x94d0eae413a835d9l,
wolfSSL 14:167253f4e170 31501 0x2e8ce36c7f4cdf41l },
wolfSSL 14:167253f4e170 31502 { 0x91273dab037a862bl,0x01ba9bb760e4c8fal,0xf964538833baf2ddl,
wolfSSL 14:167253f4e170 31503 0xf4ccc6cb34f668f3l },
wolfSSL 14:167253f4e170 31504 0 },
wolfSSL 14:167253f4e170 31505 /* 90 */
wolfSSL 14:167253f4e170 31506 { { 0x44ef525cf1f79687l,0x7c59549592efa815l,0xe1231741a5c78d29l,
wolfSSL 14:167253f4e170 31507 0xac0db4889a0df3c9l },
wolfSSL 14:167253f4e170 31508 { 0x86bfc711df01747fl,0x592b9358ef17df13l,0xe5880e4f5ccb6bb5l,
wolfSSL 14:167253f4e170 31509 0x95a64a6194c974a2l },
wolfSSL 14:167253f4e170 31510 0 },
wolfSSL 14:167253f4e170 31511 /* 91 */
wolfSSL 14:167253f4e170 31512 { { 0x72c1efdac15a4c93l,0x40269b7382585141l,0x6a8dfb1c16cb0badl,
wolfSSL 14:167253f4e170 31513 0x231e54ba29210677l },
wolfSSL 14:167253f4e170 31514 { 0xa70df9178ae6d2dcl,0x4d6aa63f39112918l,0xf627726b5e5b7223l,
wolfSSL 14:167253f4e170 31515 0xab0be032d8a731e1l },
wolfSSL 14:167253f4e170 31516 0 },
wolfSSL 14:167253f4e170 31517 /* 92 */
wolfSSL 14:167253f4e170 31518 { { 0x097ad0e98d131f2dl,0x637f09e33b04f101l,0x1ac86196d5e9a748l,
wolfSSL 14:167253f4e170 31519 0xf1bcc8802cf6a679l },
wolfSSL 14:167253f4e170 31520 { 0x25c69140e8daacb4l,0x3c4e405560f65009l,0x591cc8fc477937a6l,
wolfSSL 14:167253f4e170 31521 0x851694695aebb271l },
wolfSSL 14:167253f4e170 31522 0 },
wolfSSL 14:167253f4e170 31523 /* 93 */
wolfSSL 14:167253f4e170 31524 { { 0xde35c143f1dcf593l,0x78202b29b018be3bl,0xe9cdadc29bdd9d3dl,
wolfSSL 14:167253f4e170 31525 0x8f67d9d2daad55d8l },
wolfSSL 14:167253f4e170 31526 { 0x841116567481ea5fl,0xe7d2dde9e34c590cl,0xffdd43f405053fa8l,
wolfSSL 14:167253f4e170 31527 0xf84572b9c0728b5dl },
wolfSSL 14:167253f4e170 31528 0 },
wolfSSL 14:167253f4e170 31529 /* 94 */
wolfSSL 14:167253f4e170 31530 { { 0x5e1a7a7197af71c9l,0xa14494447a736565l,0xa1b4ae070e1d5063l,
wolfSSL 14:167253f4e170 31531 0xedee2710616b2c19l },
wolfSSL 14:167253f4e170 31532 { 0xb2f034f511734121l,0x1cac6e554a25e9f0l,0x8dc148f3a40c2ecfl,
wolfSSL 14:167253f4e170 31533 0x9fd27e9b44ebd7f4l },
wolfSSL 14:167253f4e170 31534 0 },
wolfSSL 14:167253f4e170 31535 /* 95 */
wolfSSL 14:167253f4e170 31536 { { 0x3cc7658af6e2cb16l,0xe3eb7d2cfe5919b6l,0x5a8c5816168d5583l,
wolfSSL 14:167253f4e170 31537 0xa40c2fb6958ff387l },
wolfSSL 14:167253f4e170 31538 { 0x8c9ec560fedcc158l,0x7ad804c655f23056l,0xd93967049a307e12l,
wolfSSL 14:167253f4e170 31539 0x99bc9bb87dc6decfl },
wolfSSL 14:167253f4e170 31540 0 },
wolfSSL 14:167253f4e170 31541 /* 96 */
wolfSSL 14:167253f4e170 31542 { { 0x84a9521d927dafc6l,0x52c1fb695c09cd19l,0x9d9581a0f9366ddel,
wolfSSL 14:167253f4e170 31543 0x9abe210ba16d7e64l },
wolfSSL 14:167253f4e170 31544 { 0x480af84a48915220l,0xfa73176a4dd816c6l,0xc7d539871681ca5al,
wolfSSL 14:167253f4e170 31545 0x7881c25787f344b0l },
wolfSSL 14:167253f4e170 31546 0 },
wolfSSL 14:167253f4e170 31547 /* 97 */
wolfSSL 14:167253f4e170 31548 { { 0x93399b51e0bcf3ffl,0x0d02cbc5127f74f6l,0x8fb465a2dd01d968l,
wolfSSL 14:167253f4e170 31549 0x15e6e319a30e8940l },
wolfSSL 14:167253f4e170 31550 { 0x646d6e0d3e0e05f4l,0xfad7bddc43588404l,0xbe61c7d1c4f850d3l,
wolfSSL 14:167253f4e170 31551 0x0e55facf191172cel },
wolfSSL 14:167253f4e170 31552 0 },
wolfSSL 14:167253f4e170 31553 /* 98 */
wolfSSL 14:167253f4e170 31554 { { 0x7e9d9806f8787564l,0x1a33172131e85ce6l,0x6b0158cab819e8d6l,
wolfSSL 14:167253f4e170 31555 0xd73d09766fe96577l },
wolfSSL 14:167253f4e170 31556 { 0x424834251eb7206el,0xa519290fc618bb42l,0x5dcbb8595e30a520l,
wolfSSL 14:167253f4e170 31557 0x9250a3748f15a50bl },
wolfSSL 14:167253f4e170 31558 0 },
wolfSSL 14:167253f4e170 31559 /* 99 */
wolfSSL 14:167253f4e170 31560 { { 0xcaff08f8be577410l,0xfd408a035077a8c6l,0xf1f63289ec0a63a4l,
wolfSSL 14:167253f4e170 31561 0x77414082c1cc8c0bl },
wolfSSL 14:167253f4e170 31562 { 0x05a40fa6eb0991cdl,0xc1ca086649fdc296l,0x3a68a3c7b324fd40l,
wolfSSL 14:167253f4e170 31563 0x8cb04f4d12eb20b9l },
wolfSSL 14:167253f4e170 31564 0 },
wolfSSL 14:167253f4e170 31565 /* 100 */
wolfSSL 14:167253f4e170 31566 { { 0xb1c2d0556906171cl,0x9073e9cdb0240c3fl,0xdb8e6b4fd8906841l,
wolfSSL 14:167253f4e170 31567 0xe4e429ef47123b51l },
wolfSSL 14:167253f4e170 31568 { 0x0b8dd53c38ec36f4l,0xf9d2dc01ff4b6a27l,0x5d066e07879a9a48l,
wolfSSL 14:167253f4e170 31569 0x37bca2ff3c6e6552l },
wolfSSL 14:167253f4e170 31570 0 },
wolfSSL 14:167253f4e170 31571 /* 101 */
wolfSSL 14:167253f4e170 31572 { { 0x4cd2e3c7df562470l,0x44f272a2c0964ac9l,0x7c6d5df980c793bel,
wolfSSL 14:167253f4e170 31573 0x59913edc3002b22al },
wolfSSL 14:167253f4e170 31574 { 0x7a139a835750592al,0x99e01d80e783de02l,0xcf8c0375ea05d64fl,
wolfSSL 14:167253f4e170 31575 0x43786e4ab013e226l },
wolfSSL 14:167253f4e170 31576 0 },
wolfSSL 14:167253f4e170 31577 /* 102 */
wolfSSL 14:167253f4e170 31578 { { 0xff32b0ed9e56b5a6l,0x0750d9a6d9fc68f9l,0xec15e845597846a7l,
wolfSSL 14:167253f4e170 31579 0x8638ca98b7e79e7al },
wolfSSL 14:167253f4e170 31580 { 0x2f5ae0960afc24b2l,0x05398eaf4dace8f2l,0x3b765dd0aecba78fl,
wolfSSL 14:167253f4e170 31581 0x1ecdd36a7b3aa6f0l },
wolfSSL 14:167253f4e170 31582 0 },
wolfSSL 14:167253f4e170 31583 /* 103 */
wolfSSL 14:167253f4e170 31584 { { 0x5d3acd626c5ff2f3l,0xa2d516c02873a978l,0xad94c9fad2110d54l,
wolfSSL 14:167253f4e170 31585 0xd85d0f85d459f32dl },
wolfSSL 14:167253f4e170 31586 { 0x9f700b8d10b11da3l,0xd2c22c30a78318c4l,0x556988f49208decdl,
wolfSSL 14:167253f4e170 31587 0xa04f19c3b4ed3c62l },
wolfSSL 14:167253f4e170 31588 0 },
wolfSSL 14:167253f4e170 31589 /* 104 */
wolfSSL 14:167253f4e170 31590 { { 0x087924c8ed7f93bdl,0xcb64ac5d392f51f6l,0x7cae330a821b71afl,
wolfSSL 14:167253f4e170 31591 0x92b2eeea5c0950b0l },
wolfSSL 14:167253f4e170 31592 { 0x85ac4c9485b6e235l,0xab2ca4a92936c0f0l,0x80faa6b3e0508891l,
wolfSSL 14:167253f4e170 31593 0x1ee782215834276cl },
wolfSSL 14:167253f4e170 31594 0 },
wolfSSL 14:167253f4e170 31595 /* 105 */
wolfSSL 14:167253f4e170 31596 { { 0xa60a2e00e63e79f7l,0xf590e7b2f399d906l,0x9021054a6607c09dl,
wolfSSL 14:167253f4e170 31597 0xf3f2ced857a6e150l },
wolfSSL 14:167253f4e170 31598 { 0x200510f3f10d9b55l,0x9d2fcfacd8642648l,0xe5631aa7e8bd0e7cl,
wolfSSL 14:167253f4e170 31599 0x0f56a4543da3e210l },
wolfSSL 14:167253f4e170 31600 0 },
wolfSSL 14:167253f4e170 31601 /* 106 */
wolfSSL 14:167253f4e170 31602 { { 0x5b21bffa1043e0dfl,0x6c74b6cc9c007e6dl,0x1a656ec0d4a8517al,
wolfSSL 14:167253f4e170 31603 0xbd8f17411969e263l },
wolfSSL 14:167253f4e170 31604 { 0x8a9bbb86beb7494al,0x1567d46f45f3b838l,0xdf7a12a7a4e5a79al,
wolfSSL 14:167253f4e170 31605 0x2d1a1c3530ccfa09l },
wolfSSL 14:167253f4e170 31606 0 },
wolfSSL 14:167253f4e170 31607 /* 107 */
wolfSSL 14:167253f4e170 31608 { { 0x192e3813506508dal,0x336180c4a1d795a7l,0xcddb59497a9944b3l,
wolfSSL 14:167253f4e170 31609 0xa107a65eb91fba46l },
wolfSSL 14:167253f4e170 31610 { 0xe6d1d1c50f94d639l,0x8b4af3758a58b7d7l,0x1a7c5584bd37ca1cl,
wolfSSL 14:167253f4e170 31611 0x183d760af87a9af2l },
wolfSSL 14:167253f4e170 31612 0 },
wolfSSL 14:167253f4e170 31613 /* 108 */
wolfSSL 14:167253f4e170 31614 { { 0x29d697110dde59a4l,0xf1ad8d070e8bef87l,0x229b49634f2ebe78l,
wolfSSL 14:167253f4e170 31615 0x1d44179dc269d754l },
wolfSSL 14:167253f4e170 31616 { 0xb32dc0cf8390d30el,0x0a3b27530de8110cl,0x31af1dc52bc0339al,
wolfSSL 14:167253f4e170 31617 0x771f9cc29606d262l },
wolfSSL 14:167253f4e170 31618 0 },
wolfSSL 14:167253f4e170 31619 /* 109 */
wolfSSL 14:167253f4e170 31620 { { 0x99993e7785040739l,0x44539db98026a939l,0xcf40f6f2f5f8fc26l,
wolfSSL 14:167253f4e170 31621 0x64427a310362718el },
wolfSSL 14:167253f4e170 31622 { 0x4f4f2d8785428aa8l,0x7b7adc3febfb49a8l,0x201b2c6df23d01acl,
wolfSSL 14:167253f4e170 31623 0x49d9b7496ae90d6dl },
wolfSSL 14:167253f4e170 31624 0 },
wolfSSL 14:167253f4e170 31625 /* 110 */
wolfSSL 14:167253f4e170 31626 { { 0xcc78d8bc435d1099l,0x2adbcd4e8e8d1a08l,0x02c2e2a02cb68a41l,
wolfSSL 14:167253f4e170 31627 0x9037d81b3f605445l },
wolfSSL 14:167253f4e170 31628 { 0x7cdbac27074c7b61l,0xfe2031ab57bfd72el,0x61ccec96596d5352l,
wolfSSL 14:167253f4e170 31629 0x08c3de6a7cc0639cl },
wolfSSL 14:167253f4e170 31630 0 },
wolfSSL 14:167253f4e170 31631 /* 111 */
wolfSSL 14:167253f4e170 31632 { { 0x20fdd020f6d552abl,0x56baff9805cd81f1l,0x06fb7c3e91351291l,
wolfSSL 14:167253f4e170 31633 0xc690944245796b2fl },
wolfSSL 14:167253f4e170 31634 { 0x17b3ae9c41231bd1l,0x1eac6e875cc58205l,0x208837abf9d6a122l,
wolfSSL 14:167253f4e170 31635 0x3fa3db02cafe3ac0l },
wolfSSL 14:167253f4e170 31636 0 },
wolfSSL 14:167253f4e170 31637 /* 112 */
wolfSSL 14:167253f4e170 31638 { { 0xd75a3e6505058880l,0x7da365ef643943f2l,0x4147861cfab24925l,
wolfSSL 14:167253f4e170 31639 0xc5c4bdb0fdb808ffl },
wolfSSL 14:167253f4e170 31640 { 0x73513e34b272b56bl,0xc8327e9511b9043al,0xfd8ce37df8844969l,
wolfSSL 14:167253f4e170 31641 0x2d56db9446c2b6b5l },
wolfSSL 14:167253f4e170 31642 0 },
wolfSSL 14:167253f4e170 31643 /* 113 */
wolfSSL 14:167253f4e170 31644 { { 0x2461782fff46ac6bl,0xd19f792607a2e425l,0xfafea3c409a48de1l,
wolfSSL 14:167253f4e170 31645 0x0f56bd9de503ba42l },
wolfSSL 14:167253f4e170 31646 { 0x137d4ed1345cda49l,0x821158fc816f299dl,0xe7c6a54aaeb43402l,
wolfSSL 14:167253f4e170 31647 0x4003bb9d1173b5f1l },
wolfSSL 14:167253f4e170 31648 0 },
wolfSSL 14:167253f4e170 31649 /* 114 */
wolfSSL 14:167253f4e170 31650 { { 0x3b8e8189a0803387l,0xece115f539cbd404l,0x4297208dd2877f21l,
wolfSSL 14:167253f4e170 31651 0x53765522a07f2f9el },
wolfSSL 14:167253f4e170 31652 { 0xa4980a21a8a4182dl,0xa2bbd07a3219df79l,0x674d0a2e1a19a2d4l,
wolfSSL 14:167253f4e170 31653 0x7a056f586c5d4549l },
wolfSSL 14:167253f4e170 31654 0 },
wolfSSL 14:167253f4e170 31655 /* 115 */
wolfSSL 14:167253f4e170 31656 { { 0x646b25589d8a2a47l,0x5b582948c3df2773l,0x51ec000eabf0d539l,
wolfSSL 14:167253f4e170 31657 0x77d482f17a1a2675l },
wolfSSL 14:167253f4e170 31658 { 0xb8a1bd9587853948l,0xa6f817bd6cfbffeel,0xab6ec05780681e47l,
wolfSSL 14:167253f4e170 31659 0x4115012b2b38b0e4l },
wolfSSL 14:167253f4e170 31660 0 },
wolfSSL 14:167253f4e170 31661 /* 116 */
wolfSSL 14:167253f4e170 31662 { { 0x3c73f0f46de28cedl,0x1d5da7609b13ec47l,0x61b8ce9e6e5c6392l,
wolfSSL 14:167253f4e170 31663 0xcdf04572fbea0946l },
wolfSSL 14:167253f4e170 31664 { 0x1cb3c58b6c53c3b0l,0x97fe3c10447b843cl,0xfb2b8ae12cb9780el,
wolfSSL 14:167253f4e170 31665 0xee703dda97383109l },
wolfSSL 14:167253f4e170 31666 0 },
wolfSSL 14:167253f4e170 31667 /* 117 */
wolfSSL 14:167253f4e170 31668 { { 0x34515140ff57e43al,0xd44660d3b1b811b8l,0x2b3b5dff8f42b986l,
wolfSSL 14:167253f4e170 31669 0x2a0ad89da162ce21l },
wolfSSL 14:167253f4e170 31670 { 0x64e4a6946bc277bal,0xc788c954c141c276l,0x141aa64ccabf6274l,
wolfSSL 14:167253f4e170 31671 0xd62d0b67ac2b4659l },
wolfSSL 14:167253f4e170 31672 0 },
wolfSSL 14:167253f4e170 31673 /* 118 */
wolfSSL 14:167253f4e170 31674 { { 0x39c5d87b2c054ac4l,0x57005859f27df788l,0xedf7cbf3b18128d6l,
wolfSSL 14:167253f4e170 31675 0xb39a23f2991c2426l },
wolfSSL 14:167253f4e170 31676 { 0x95284a15f0b16ae5l,0x0c6a05b1a136f51bl,0x1d63c137f2700783l,
wolfSSL 14:167253f4e170 31677 0x04ed0092c0674cc5l },
wolfSSL 14:167253f4e170 31678 0 },
wolfSSL 14:167253f4e170 31679 /* 119 */
wolfSSL 14:167253f4e170 31680 { { 0x1f4185d19ae90393l,0x3047b4294a3d64e6l,0xae0001a69854fc14l,
wolfSSL 14:167253f4e170 31681 0xa0a91fc10177c387l },
wolfSSL 14:167253f4e170 31682 { 0xff0a3f01ae2c831el,0xbb76ae822b727e16l,0x8f12c8a15a3075b4l,
wolfSSL 14:167253f4e170 31683 0x084cf9889ed20c41l },
wolfSSL 14:167253f4e170 31684 0 },
wolfSSL 14:167253f4e170 31685 /* 120 */
wolfSSL 14:167253f4e170 31686 { { 0xd98509defca6becfl,0x2fceae807dffb328l,0x5d8a15c44778e8b9l,
wolfSSL 14:167253f4e170 31687 0xd57955b273abf77el },
wolfSSL 14:167253f4e170 31688 { 0x210da79e31b5d4f1l,0xaa52f04b3cfa7a1cl,0xd4d12089dc27c20bl,
wolfSSL 14:167253f4e170 31689 0x8e14ea4202d141f1l },
wolfSSL 14:167253f4e170 31690 0 },
wolfSSL 14:167253f4e170 31691 /* 121 */
wolfSSL 14:167253f4e170 31692 { { 0xeed50345f2897042l,0x8d05331f43402c4al,0xc8d9c194c8bdfb21l,
wolfSSL 14:167253f4e170 31693 0x597e1a372aa4d158l },
wolfSSL 14:167253f4e170 31694 { 0x0327ec1acf0bd68cl,0x6d4be0dcab024945l,0x5b9c8d7ac9fe3e84l,
wolfSSL 14:167253f4e170 31695 0xca3f0236199b4deal },
wolfSSL 14:167253f4e170 31696 0 },
wolfSSL 14:167253f4e170 31697 /* 122 */
wolfSSL 14:167253f4e170 31698 { { 0x592a10b56170bd20l,0x0ea897f16d3f5de7l,0xa3363ff144b2ade2l,
wolfSSL 14:167253f4e170 31699 0xbde7fd7e309c07e4l },
wolfSSL 14:167253f4e170 31700 { 0x516bb6d2b8f5432cl,0x210dc1cbe043444bl,0x3db01e6ff8f95b5al,
wolfSSL 14:167253f4e170 31701 0xb623ad0e0a7dd198l },
wolfSSL 14:167253f4e170 31702 0 },
wolfSSL 14:167253f4e170 31703 /* 123 */
wolfSSL 14:167253f4e170 31704 { { 0xa75bd67560c7b65bl,0xab8c559023a4a289l,0xf8220fd0d7b26795l,
wolfSSL 14:167253f4e170 31705 0xd6aa2e4658ec137bl },
wolfSSL 14:167253f4e170 31706 { 0x10abc00b5138bb85l,0x8c31d121d833a95cl,0xb24ff00b1702a32el,
wolfSSL 14:167253f4e170 31707 0x111662e02dcc513al },
wolfSSL 14:167253f4e170 31708 0 },
wolfSSL 14:167253f4e170 31709 /* 124 */
wolfSSL 14:167253f4e170 31710 { { 0x78114015efb42b87l,0xbd9f5d701b6c4dffl,0x66ecccd7a7d7c129l,
wolfSSL 14:167253f4e170 31711 0xdb3ee1cb94b750f8l },
wolfSSL 14:167253f4e170 31712 { 0xb26f3db0f34837cfl,0xe7eed18bb9578d4fl,0x5d2cdf937c56657dl,
wolfSSL 14:167253f4e170 31713 0x886a644252206a59l },
wolfSSL 14:167253f4e170 31714 0 },
wolfSSL 14:167253f4e170 31715 /* 125 */
wolfSSL 14:167253f4e170 31716 { { 0x3c234cfb65b569eal,0x20011141f72119c1l,0x8badc85da15a619el,
wolfSSL 14:167253f4e170 31717 0xa70cf4eb018a17bcl },
wolfSSL 14:167253f4e170 31718 { 0x224f97ae8c4a6a65l,0x36e5cf270134378fl,0xbe3a609e4f7e0960l,
wolfSSL 14:167253f4e170 31719 0xaa4772abd1747b77l },
wolfSSL 14:167253f4e170 31720 0 },
wolfSSL 14:167253f4e170 31721 /* 126 */
wolfSSL 14:167253f4e170 31722 { { 0x676761317aa60cc0l,0xc79163610368115fl,0xded98bb4bbc1bb5al,
wolfSSL 14:167253f4e170 31723 0x611a6ddc30faf974l },
wolfSSL 14:167253f4e170 31724 { 0x30e78cbcc15ee47al,0x2e8962824e0d96a5l,0x36f35adf3dd9ed88l,
wolfSSL 14:167253f4e170 31725 0x5cfffaf816429c88l },
wolfSSL 14:167253f4e170 31726 0 },
wolfSSL 14:167253f4e170 31727 /* 127 */
wolfSSL 14:167253f4e170 31728 { { 0xc0d54cff9b7a99cdl,0x7bf3b99d843c45a1l,0x038a908f62c739e1l,
wolfSSL 14:167253f4e170 31729 0x6e5a6b237dc1994cl },
wolfSSL 14:167253f4e170 31730 { 0xef8b454e0ba5db77l,0xb7b8807facf60d63l,0xe591c0c676608378l,
wolfSSL 14:167253f4e170 31731 0x481a238d242dabccl },
wolfSSL 14:167253f4e170 31732 0 },
wolfSSL 14:167253f4e170 31733 /* 128 */
wolfSSL 14:167253f4e170 31734 { { 0xe3417bc035d0b34al,0x440b386b8327c0a7l,0x8fb7262dac0362d1l,
wolfSSL 14:167253f4e170 31735 0x2c41114ce0cdf943l },
wolfSSL 14:167253f4e170 31736 { 0x2ba5cef1ad95a0b1l,0xc09b37a867d54362l,0x26d6cdd201e486c9l,
wolfSSL 14:167253f4e170 31737 0x20477abf42ff9297l },
wolfSSL 14:167253f4e170 31738 0 },
wolfSSL 14:167253f4e170 31739 /* 129 */
wolfSSL 14:167253f4e170 31740 { { 0x2f75173c18d65dbfl,0x77bf940e339edad8l,0x7022d26bdcf1001cl,
wolfSSL 14:167253f4e170 31741 0xac66409ac77396b6l },
wolfSSL 14:167253f4e170 31742 { 0x8b0bb36fc6261cc3l,0x213f7bc9190e7e90l,0x6541cebaa45e6c10l,
wolfSSL 14:167253f4e170 31743 0xce8e6975cc122f85l },
wolfSSL 14:167253f4e170 31744 0 },
wolfSSL 14:167253f4e170 31745 /* 130 */
wolfSSL 14:167253f4e170 31746 { { 0x0f121b41bc0a67d2l,0x62d4760a444d248al,0x0e044f1d659b4737l,
wolfSSL 14:167253f4e170 31747 0x08fde365250bb4a8l },
wolfSSL 14:167253f4e170 31748 { 0xaceec3da848bf287l,0xc2a62182d3369d6el,0x3582dfdc92449482l,
wolfSSL 14:167253f4e170 31749 0x2f7e2fd2565d6cd7l },
wolfSSL 14:167253f4e170 31750 0 },
wolfSSL 14:167253f4e170 31751 /* 131 */
wolfSSL 14:167253f4e170 31752 { { 0xae4b92dbc3770fa7l,0x095e8d5c379043f9l,0x54f34e9d17761171l,
wolfSSL 14:167253f4e170 31753 0xc65be92e907702ael },
wolfSSL 14:167253f4e170 31754 { 0x2758a303f6fd0a40l,0xe7d822e3bcce784bl,0x7ae4f5854f9767bfl,
wolfSSL 14:167253f4e170 31755 0x4bff8e47d1193b3al },
wolfSSL 14:167253f4e170 31756 0 },
wolfSSL 14:167253f4e170 31757 /* 132 */
wolfSSL 14:167253f4e170 31758 { { 0xcd41d21f00ff1480l,0x2ab8fb7d0754db16l,0xac81d2efbbe0f3eal,
wolfSSL 14:167253f4e170 31759 0x3e4e4ae65772967dl },
wolfSSL 14:167253f4e170 31760 { 0x7e18f36d3c5303e6l,0x3bd9994b92262397l,0x9ed70e261324c3c0l,
wolfSSL 14:167253f4e170 31761 0x5388aefd58ec6028l },
wolfSSL 14:167253f4e170 31762 0 },
wolfSSL 14:167253f4e170 31763 /* 133 */
wolfSSL 14:167253f4e170 31764 { { 0xad1317eb5e5d7713l,0x09b985ee75de49dal,0x32f5bc4fc74fb261l,
wolfSSL 14:167253f4e170 31765 0x5cf908d14f75be0el },
wolfSSL 14:167253f4e170 31766 { 0x760435108e657b12l,0xbfd421a5b96ed9e6l,0x0e29f51f8970ccc2l,
wolfSSL 14:167253f4e170 31767 0xa698ba4060f00ce2l },
wolfSSL 14:167253f4e170 31768 0 },
wolfSSL 14:167253f4e170 31769 /* 134 */
wolfSSL 14:167253f4e170 31770 { { 0x73db1686ef748fecl,0xe6e755a27e9d2cf9l,0x630b6544ce265effl,
wolfSSL 14:167253f4e170 31771 0xb142ef8a7aebad8dl },
wolfSSL 14:167253f4e170 31772 { 0xad31af9f17d5770al,0x66af3b672cb3412fl,0x6bd60d1bdf3359del,
wolfSSL 14:167253f4e170 31773 0xd1896a9658515075l },
wolfSSL 14:167253f4e170 31774 0 },
wolfSSL 14:167253f4e170 31775 /* 135 */
wolfSSL 14:167253f4e170 31776 { { 0xec5957ab33c41c08l,0x87de94ac5468e2e1l,0x18816b73ac472f6cl,
wolfSSL 14:167253f4e170 31777 0x267b0e0b7981da39l },
wolfSSL 14:167253f4e170 31778 { 0x6e554e5d8e62b988l,0xd8ddc755116d21e7l,0x4610faf03d2a6f99l,
wolfSSL 14:167253f4e170 31779 0xb54e287aa1119393l },
wolfSSL 14:167253f4e170 31780 0 },
wolfSSL 14:167253f4e170 31781 /* 136 */
wolfSSL 14:167253f4e170 31782 { { 0x0a0122b5178a876bl,0x51ff96ff085104b4l,0x050b31ab14f29f76l,
wolfSSL 14:167253f4e170 31783 0x84abb28b5f87d4e6l },
wolfSSL 14:167253f4e170 31784 { 0xd5ed439f8270790al,0x2d6cb59d85e3f46bl,0x75f55c1b6c1e2212l,
wolfSSL 14:167253f4e170 31785 0xe5436f6717655640l },
wolfSSL 14:167253f4e170 31786 0 },
wolfSSL 14:167253f4e170 31787 /* 137 */
wolfSSL 14:167253f4e170 31788 { { 0x53f9025e2286e8d5l,0x353c95b4864453bel,0xd832f5bde408e3a0l,
wolfSSL 14:167253f4e170 31789 0x0404f68b5b9ce99el },
wolfSSL 14:167253f4e170 31790 { 0xcad33bdea781e8e5l,0x3cdf5018163c2f5bl,0x575769600119caa3l,
wolfSSL 14:167253f4e170 31791 0x3a4263df0ac1c701l },
wolfSSL 14:167253f4e170 31792 0 },
wolfSSL 14:167253f4e170 31793 /* 138 */
wolfSSL 14:167253f4e170 31794 { { 0xc2965ecc9aeb596dl,0x01ea03e7023c92b4l,0x4704b4b62e013961l,
wolfSSL 14:167253f4e170 31795 0x0ca8fd3f905ea367l },
wolfSSL 14:167253f4e170 31796 { 0x92523a42551b2b61l,0x1eb7a89c390fcd06l,0xe7f1d2be0392a63el,
wolfSSL 14:167253f4e170 31797 0x96dca2644ddb0c33l },
wolfSSL 14:167253f4e170 31798 0 },
wolfSSL 14:167253f4e170 31799 /* 139 */
wolfSSL 14:167253f4e170 31800 { { 0x203bb43a387510afl,0x846feaa8a9a36a01l,0xd23a57702f950378l,
wolfSSL 14:167253f4e170 31801 0x4363e2123aad59dcl },
wolfSSL 14:167253f4e170 31802 { 0xca43a1c740246a47l,0xb362b8d2e55dd24dl,0xf9b086045d8faf96l,
wolfSSL 14:167253f4e170 31803 0x840e115cd8bb98c4l },
wolfSSL 14:167253f4e170 31804 0 },
wolfSSL 14:167253f4e170 31805 /* 140 */
wolfSSL 14:167253f4e170 31806 { { 0xf12205e21023e8a7l,0xc808a8cdd8dc7a0bl,0xe292a272163a5ddfl,
wolfSSL 14:167253f4e170 31807 0x5e0d6abd30ded6d4l },
wolfSSL 14:167253f4e170 31808 { 0x07a721c27cfc0f64l,0x42eec01d0e55ed88l,0x26a7bef91d1f9db2l,
wolfSSL 14:167253f4e170 31809 0x7dea48f42945a25al },
wolfSSL 14:167253f4e170 31810 0 },
wolfSSL 14:167253f4e170 31811 /* 141 */
wolfSSL 14:167253f4e170 31812 { { 0xabdf6f1ce5060a81l,0xe79f9c72f8f95615l,0xcfd36c5406ac268bl,
wolfSSL 14:167253f4e170 31813 0xabc2a2beebfd16d1l },
wolfSSL 14:167253f4e170 31814 { 0x8ac66f91d3e2eac7l,0x6f10ba63d2dd0466l,0x6790e3770282d31bl,
wolfSSL 14:167253f4e170 31815 0x4ea353946c7eefc1l },
wolfSSL 14:167253f4e170 31816 0 },
wolfSSL 14:167253f4e170 31817 /* 142 */
wolfSSL 14:167253f4e170 31818 { { 0xed8a2f8d5266309dl,0x0a51c6c081945a3el,0xcecaf45a578c5dc1l,
wolfSSL 14:167253f4e170 31819 0x3a76e6891c94ffc3l },
wolfSSL 14:167253f4e170 31820 { 0x9aace8a47d7b0d0fl,0x963ace968f584a5fl,0x51a30c724e697fbel,
wolfSSL 14:167253f4e170 31821 0x8212a10a465e6464l },
wolfSSL 14:167253f4e170 31822 0 },
wolfSSL 14:167253f4e170 31823 /* 143 */
wolfSSL 14:167253f4e170 31824 { { 0xef7c61c3cfab8caal,0x18eb8e840e142390l,0xcd1dff677e9733cal,
wolfSSL 14:167253f4e170 31825 0xaa7cab71599cb164l },
wolfSSL 14:167253f4e170 31826 { 0x02fc9273bc837bd1l,0xc06407d0c36af5d7l,0x17621292f423da49l,
wolfSSL 14:167253f4e170 31827 0x40e38073fe0617c3l },
wolfSSL 14:167253f4e170 31828 0 },
wolfSSL 14:167253f4e170 31829 /* 144 */
wolfSSL 14:167253f4e170 31830 { { 0xf4f80824a7bf9b7cl,0x365d23203fbe30d0l,0xbfbe532097cf9ce3l,
wolfSSL 14:167253f4e170 31831 0xe3604700b3055526l },
wolfSSL 14:167253f4e170 31832 { 0x4dcb99116cc6c2c7l,0x72683708ba4cbee6l,0xdcded434637ad9ecl,
wolfSSL 14:167253f4e170 31833 0x6542d677a3dee15fl },
wolfSSL 14:167253f4e170 31834 0 },
wolfSSL 14:167253f4e170 31835 /* 145 */
wolfSSL 14:167253f4e170 31836 { { 0x3f32b6d07b6c377al,0x6cb03847903448bel,0xd6fdd3a820da8af7l,
wolfSSL 14:167253f4e170 31837 0xa6534aee09bb6f21l },
wolfSSL 14:167253f4e170 31838 { 0x30a1780d1035facfl,0x35e55a339dcb47e6l,0x6ea50fe1c447f393l,
wolfSSL 14:167253f4e170 31839 0xf3cb672fdc9aef22l },
wolfSSL 14:167253f4e170 31840 0 },
wolfSSL 14:167253f4e170 31841 /* 146 */
wolfSSL 14:167253f4e170 31842 { { 0xeb3719fe3b55fd83l,0xe0d7a46c875ddd10l,0x33ac9fa905cea784l,
wolfSSL 14:167253f4e170 31843 0x7cafaa2eaae870e7l },
wolfSSL 14:167253f4e170 31844 { 0x9b814d041d53b338l,0xe0acc0a0ef87e6c6l,0xfb93d10811672b0fl,
wolfSSL 14:167253f4e170 31845 0x0aab13c1b9bd522el },
wolfSSL 14:167253f4e170 31846 0 },
wolfSSL 14:167253f4e170 31847 /* 147 */
wolfSSL 14:167253f4e170 31848 { { 0xddcce278d2681297l,0xcb350eb1b509546al,0x2dc431737661aaf2l,
wolfSSL 14:167253f4e170 31849 0x4b91a602847012e9l },
wolfSSL 14:167253f4e170 31850 { 0xdcff109572f8ddcfl,0x08ebf61e9a911af4l,0x48f4360ac372430el,
wolfSSL 14:167253f4e170 31851 0x49534c5372321cabl },
wolfSSL 14:167253f4e170 31852 0 },
wolfSSL 14:167253f4e170 31853 /* 148 */
wolfSSL 14:167253f4e170 31854 { { 0x83df7d71f07b7e9dl,0xa478efa313cd516fl,0x78ef264b6c047ee3l,
wolfSSL 14:167253f4e170 31855 0xcaf46c4fd65ac5eel },
wolfSSL 14:167253f4e170 31856 { 0xa04d0c7792aa8266l,0xedf45466913684bbl,0x56e65168ae4b16b0l,
wolfSSL 14:167253f4e170 31857 0x14ce9e5704c6770fl },
wolfSSL 14:167253f4e170 31858 0 },
wolfSSL 14:167253f4e170 31859 /* 149 */
wolfSSL 14:167253f4e170 31860 { { 0x99445e3e965e8f91l,0xd3aca1bacb0f2492l,0xd31cc70f90c8a0a0l,
wolfSSL 14:167253f4e170 31861 0x1bb708a53e4c9a71l },
wolfSSL 14:167253f4e170 31862 { 0xd5ca9e69558bdd7al,0x734a0508018a26b1l,0xb093aa714c9cf1ecl,
wolfSSL 14:167253f4e170 31863 0xf9d126f2da300102l },
wolfSSL 14:167253f4e170 31864 0 },
wolfSSL 14:167253f4e170 31865 /* 150 */
wolfSSL 14:167253f4e170 31866 { { 0x749bca7aaff9563el,0xdd077afeb49914a0l,0xe27a0311bf5f1671l,
wolfSSL 14:167253f4e170 31867 0x807afcb9729ecc69l },
wolfSSL 14:167253f4e170 31868 { 0x7f8a9337c9b08b77l,0x86c3a785443c7e38l,0x85fafa59476fd8bal,
wolfSSL 14:167253f4e170 31869 0x751adcd16568cd8cl },
wolfSSL 14:167253f4e170 31870 0 },
wolfSSL 14:167253f4e170 31871 /* 151 */
wolfSSL 14:167253f4e170 31872 { { 0x8aea38b410715c0dl,0xd113ea718f7697f7l,0x665eab1493fbf06dl,
wolfSSL 14:167253f4e170 31873 0x29ec44682537743fl },
wolfSSL 14:167253f4e170 31874 { 0x3d94719cb50bebbcl,0x399ee5bfe4505422l,0x90cd5b3a8d2dedb1l,
wolfSSL 14:167253f4e170 31875 0xff9370e392a4077dl },
wolfSSL 14:167253f4e170 31876 0 },
wolfSSL 14:167253f4e170 31877 /* 152 */
wolfSSL 14:167253f4e170 31878 { { 0x59a2d69bc6b75b65l,0x4188f8d5266651c5l,0x28a9f33e3de9d7d2l,
wolfSSL 14:167253f4e170 31879 0x9776478ba2a9d01al },
wolfSSL 14:167253f4e170 31880 { 0x8852622d929af2c7l,0x334f5d6d4e690923l,0xce6cc7e5a89a51e9l,
wolfSSL 14:167253f4e170 31881 0x74a6313fac2f82fal },
wolfSSL 14:167253f4e170 31882 0 },
wolfSSL 14:167253f4e170 31883 /* 153 */
wolfSSL 14:167253f4e170 31884 { { 0xb2f4dfddb75f079cl,0x85b07c9518e36fbbl,0x1b6cfcf0e7cd36ddl,
wolfSSL 14:167253f4e170 31885 0xab75be150ff4863dl },
wolfSSL 14:167253f4e170 31886 { 0x81b367c0173fc9b7l,0xb90a7420d2594fd0l,0x15fdbf03c4091236l,
wolfSSL 14:167253f4e170 31887 0x4ebeac2e0b4459f6l },
wolfSSL 14:167253f4e170 31888 0 },
wolfSSL 14:167253f4e170 31889 /* 154 */
wolfSSL 14:167253f4e170 31890 { { 0xeb6c5fe75c9f2c53l,0xd25220118eae9411l,0xc8887633f95ac5d8l,
wolfSSL 14:167253f4e170 31891 0xdf99887b2c1baffcl },
wolfSSL 14:167253f4e170 31892 { 0xbb78eed2850aaecbl,0x9d49181b01d6a272l,0x978dd511b1cdbcacl,
wolfSSL 14:167253f4e170 31893 0x27b040a7779f4058l },
wolfSSL 14:167253f4e170 31894 0 },
wolfSSL 14:167253f4e170 31895 /* 155 */
wolfSSL 14:167253f4e170 31896 { { 0x90405db7f73b2eb2l,0xe0df85088e1b2118l,0x501b71525962327el,
wolfSSL 14:167253f4e170 31897 0xb393dd37e4cfa3f5l },
wolfSSL 14:167253f4e170 31898 { 0xa1230e7b3fd75165l,0xd66344c2bcd33554l,0x6c36f1be0f7b5022l,
wolfSSL 14:167253f4e170 31899 0x09588c12d0463419l },
wolfSSL 14:167253f4e170 31900 0 },
wolfSSL 14:167253f4e170 31901 /* 156 */
wolfSSL 14:167253f4e170 31902 { { 0xe086093f02601c3bl,0xfb0252f8cf5c335fl,0x955cf280894aff28l,
wolfSSL 14:167253f4e170 31903 0x81c879a9db9f648bl },
wolfSSL 14:167253f4e170 31904 { 0x040e687cc6f56c51l,0xfed471693f17618cl,0x44f88a419059353bl,
wolfSSL 14:167253f4e170 31905 0xfa0d48f55fc11bc4l },
wolfSSL 14:167253f4e170 31906 0 },
wolfSSL 14:167253f4e170 31907 /* 157 */
wolfSSL 14:167253f4e170 31908 { { 0xbc6e1c9de1608e4dl,0x010dda113582822cl,0xf6b7ddc1157ec2d7l,
wolfSSL 14:167253f4e170 31909 0x8ea0e156b6a367d6l },
wolfSSL 14:167253f4e170 31910 { 0xa354e02f2383b3b4l,0x69966b943f01f53cl,0x4ff6632b2de03ca5l,
wolfSSL 14:167253f4e170 31911 0x3f5ab924fa00b5acl },
wolfSSL 14:167253f4e170 31912 0 },
wolfSSL 14:167253f4e170 31913 /* 158 */
wolfSSL 14:167253f4e170 31914 { { 0x337bb0d959739efbl,0xc751b0f4e7ebec0dl,0x2da52dd6411a67d1l,
wolfSSL 14:167253f4e170 31915 0x8bc768872b74256el },
wolfSSL 14:167253f4e170 31916 { 0xa5be3b7282d3d253l,0xa9f679a1f58d779fl,0xa1cac168e16767bbl,
wolfSSL 14:167253f4e170 31917 0xb386f19060fcf34fl },
wolfSSL 14:167253f4e170 31918 0 },
wolfSSL 14:167253f4e170 31919 /* 159 */
wolfSSL 14:167253f4e170 31920 { { 0x31f3c1352fedcfc2l,0x5396bf6262f8af0dl,0x9a02b4eae57288c2l,
wolfSSL 14:167253f4e170 31921 0x4cb460f71b069c4dl },
wolfSSL 14:167253f4e170 31922 { 0xae67b4d35b8095eal,0x92bbf8596fc07603l,0xe1475f66b614a165l,
wolfSSL 14:167253f4e170 31923 0x52c0d50895ef5223l },
wolfSSL 14:167253f4e170 31924 0 },
wolfSSL 14:167253f4e170 31925 /* 160 */
wolfSSL 14:167253f4e170 31926 { { 0x231c210e15339848l,0xe87a28e870778c8dl,0x9d1de6616956e170l,
wolfSSL 14:167253f4e170 31927 0x4ac3c9382bb09c0bl },
wolfSSL 14:167253f4e170 31928 { 0x19be05516998987dl,0x8b2376c4ae09f4d6l,0x1de0b7651a3f933dl,
wolfSSL 14:167253f4e170 31929 0x380d94c7e39705f4l },
wolfSSL 14:167253f4e170 31930 0 },
wolfSSL 14:167253f4e170 31931 /* 161 */
wolfSSL 14:167253f4e170 31932 { { 0x01a355aa81542e75l,0x96c724a1ee01b9b7l,0x6b3a2977624d7087l,
wolfSSL 14:167253f4e170 31933 0x2ce3e171de2637afl },
wolfSSL 14:167253f4e170 31934 { 0xcfefeb49f5d5bc1al,0xa655607e2777e2b5l,0x4feaac2f9513756cl,
wolfSSL 14:167253f4e170 31935 0x2e6cd8520b624e4dl },
wolfSSL 14:167253f4e170 31936 0 },
wolfSSL 14:167253f4e170 31937 /* 162 */
wolfSSL 14:167253f4e170 31938 { { 0x3685954b8c31c31dl,0x68533d005bf21a0cl,0x0bd7626e75c79ec9l,
wolfSSL 14:167253f4e170 31939 0xca17754742c69d54l },
wolfSSL 14:167253f4e170 31940 { 0xcc6edafff6d2dbb2l,0xfd0d8cbd174a9d18l,0x875e8793aa4578e8l,
wolfSSL 14:167253f4e170 31941 0xa976a7139cab2ce6l },
wolfSSL 14:167253f4e170 31942 0 },
wolfSSL 14:167253f4e170 31943 /* 163 */
wolfSSL 14:167253f4e170 31944 { { 0x0a651f1b93fb353dl,0xd75cab8b57fcfa72l,0xaa88cfa731b15281l,
wolfSSL 14:167253f4e170 31945 0x8720a7170a1f4999l },
wolfSSL 14:167253f4e170 31946 { 0x8c3e8d37693e1b90l,0xd345dc0b16f6dfc3l,0x8ea8d00ab52a8742l,
wolfSSL 14:167253f4e170 31947 0x9719ef29c769893cl },
wolfSSL 14:167253f4e170 31948 0 },
wolfSSL 14:167253f4e170 31949 /* 164 */
wolfSSL 14:167253f4e170 31950 { { 0x820eed8d58e35909l,0x9366d8dc33ddc116l,0xd7f999d06e205026l,
wolfSSL 14:167253f4e170 31951 0xa5072976e15704c1l },
wolfSSL 14:167253f4e170 31952 { 0x002a37eac4e70b2el,0x84dcf6576890aa8al,0xcd71bf18645b2a5cl,
wolfSSL 14:167253f4e170 31953 0x99389c9df7b77725l },
wolfSSL 14:167253f4e170 31954 0 },
wolfSSL 14:167253f4e170 31955 /* 165 */
wolfSSL 14:167253f4e170 31956 { { 0x238c08f27ada7a4bl,0x3abe9d03fd389366l,0x6b672e89766f512cl,
wolfSSL 14:167253f4e170 31957 0xa88806aa202c82e4l },
wolfSSL 14:167253f4e170 31958 { 0x6602044ad380184el,0xa8cb78c4126a8b85l,0x79d670c0ad844f17l,
wolfSSL 14:167253f4e170 31959 0x0043bffb4738dcfel },
wolfSSL 14:167253f4e170 31960 0 },
wolfSSL 14:167253f4e170 31961 /* 166 */
wolfSSL 14:167253f4e170 31962 { { 0x8d59b5dc36d5192el,0xacf885d34590b2afl,0x83566d0a11601781l,
wolfSSL 14:167253f4e170 31963 0x52f3ef01ba6c4866l },
wolfSSL 14:167253f4e170 31964 { 0x3986732a0edcb64dl,0x0a482c238068379fl,0x16cbe5fa7040f309l,
wolfSSL 14:167253f4e170 31965 0x3296bd899ef27e75l },
wolfSSL 14:167253f4e170 31966 0 },
wolfSSL 14:167253f4e170 31967 /* 167 */
wolfSSL 14:167253f4e170 31968 { { 0x476aba89454d81d7l,0x9eade7ef51eb9b3cl,0x619a21cd81c57986l,
wolfSSL 14:167253f4e170 31969 0x3b90febfaee571e9l },
wolfSSL 14:167253f4e170 31970 { 0x9393023e5496f7cbl,0x55be41d87fb51bc4l,0x03f1dd4899beb5cel,
wolfSSL 14:167253f4e170 31971 0x6e88069d9f810b18l },
wolfSSL 14:167253f4e170 31972 0 },
wolfSSL 14:167253f4e170 31973 /* 168 */
wolfSSL 14:167253f4e170 31974 { { 0xce37ab11b43ea1dbl,0x0a7ff1a95259d292l,0x851b02218f84f186l,
wolfSSL 14:167253f4e170 31975 0xa7222beadefaad13l },
wolfSSL 14:167253f4e170 31976 { 0xa2ac78ec2b0a9144l,0x5a024051f2fa59c5l,0x91d1eca56147ce38l,
wolfSSL 14:167253f4e170 31977 0xbe94d523bc2ac690l },
wolfSSL 14:167253f4e170 31978 0 },
wolfSSL 14:167253f4e170 31979 /* 169 */
wolfSSL 14:167253f4e170 31980 { { 0x72f4945e0b226ce7l,0xb8afd747967e8b70l,0xedea46f185a6c63el,
wolfSSL 14:167253f4e170 31981 0x7782defe9be8c766l },
wolfSSL 14:167253f4e170 31982 { 0x760d2aa43db38626l,0x460ae78776f67ad1l,0x341b86fc54499cdbl,
wolfSSL 14:167253f4e170 31983 0x03838567a2892e4bl },
wolfSSL 14:167253f4e170 31984 0 },
wolfSSL 14:167253f4e170 31985 /* 170 */
wolfSSL 14:167253f4e170 31986 { { 0x2d8daefd79ec1a0fl,0x3bbcd6fdceb39c97l,0xf5575ffc58f61a95l,
wolfSSL 14:167253f4e170 31987 0xdbd986c4adf7b420l },
wolfSSL 14:167253f4e170 31988 { 0x81aa881415f39eb7l,0x6ee2fcf5b98d976cl,0x5465475dcf2f717dl,
wolfSSL 14:167253f4e170 31989 0x8e24d3c46860bbd0l },
wolfSSL 14:167253f4e170 31990 0 },
wolfSSL 14:167253f4e170 31991 /* 171 */
wolfSSL 14:167253f4e170 31992 { { 0x749d8e549a587390l,0x12bb194f0cbec588l,0x46e07da4b25983c6l,
wolfSSL 14:167253f4e170 31993 0x541a99c4407bafc8l },
wolfSSL 14:167253f4e170 31994 { 0xdb241692624c8842l,0x6044c12ad86c05ffl,0xc59d14b44f7fcf62l,
wolfSSL 14:167253f4e170 31995 0xc0092c49f57d35d1l },
wolfSSL 14:167253f4e170 31996 0 },
wolfSSL 14:167253f4e170 31997 /* 172 */
wolfSSL 14:167253f4e170 31998 { { 0xd3cc75c3df2e61efl,0x7e8841c82e1b35cal,0xc62d30d1909f29f4l,
wolfSSL 14:167253f4e170 31999 0x75e406347286944dl },
wolfSSL 14:167253f4e170 32000 { 0xe7d41fc5bbc237d0l,0xc9537bf0ec4f01c9l,0x91c51a16282bd534l,
wolfSSL 14:167253f4e170 32001 0x5b7cb658c7848586l },
wolfSSL 14:167253f4e170 32002 0 },
wolfSSL 14:167253f4e170 32003 /* 173 */
wolfSSL 14:167253f4e170 32004 { { 0x964a70848a28ead1l,0x802dc508fd3b47f6l,0x9ae4bfd1767e5b39l,
wolfSSL 14:167253f4e170 32005 0x7ae13eba8df097a1l },
wolfSSL 14:167253f4e170 32006 { 0xfd216ef8eadd384el,0x0361a2d9b6b2ff06l,0x204b98784bcdb5f3l,
wolfSSL 14:167253f4e170 32007 0x787d8074e2a8e3fdl },
wolfSSL 14:167253f4e170 32008 0 },
wolfSSL 14:167253f4e170 32009 /* 174 */
wolfSSL 14:167253f4e170 32010 { { 0xc5e25d6b757fbb1cl,0xe47bddb2ca201debl,0x4a55e9a36d2233ffl,
wolfSSL 14:167253f4e170 32011 0x5c2228199ef28484l },
wolfSSL 14:167253f4e170 32012 { 0x773d4a8588315250l,0x21b21a2b827097c1l,0xab7c4ea1def5d33fl,
wolfSSL 14:167253f4e170 32013 0xe45d37abbaf0f2b0l },
wolfSSL 14:167253f4e170 32014 0 },
wolfSSL 14:167253f4e170 32015 /* 175 */
wolfSSL 14:167253f4e170 32016 { { 0xd2df1e3428511c8al,0xebb229c8bdca6cd3l,0x578a71a7627c39a7l,
wolfSSL 14:167253f4e170 32017 0xed7bc12284dfb9d3l },
wolfSSL 14:167253f4e170 32018 { 0xcf22a6df93dea561l,0x5443f18dd48f0ed1l,0xd8b861405bad23e8l,
wolfSSL 14:167253f4e170 32019 0xaac97cc945ca6d27l },
wolfSSL 14:167253f4e170 32020 0 },
wolfSSL 14:167253f4e170 32021 /* 176 */
wolfSSL 14:167253f4e170 32022 { { 0xeb54ea74a16bd00al,0xd839e9adf5c0bcc1l,0x092bb7f11f9bfc06l,
wolfSSL 14:167253f4e170 32023 0x318f97b31163dc4el },
wolfSSL 14:167253f4e170 32024 { 0xecc0c5bec30d7138l,0x44e8df23abc30220l,0x2bb7972fb0223606l,
wolfSSL 14:167253f4e170 32025 0xfa41faa19a84ff4dl },
wolfSSL 14:167253f4e170 32026 0 },
wolfSSL 14:167253f4e170 32027 /* 177 */
wolfSSL 14:167253f4e170 32028 { { 0x4402d974a6642269l,0xc81814ce9bb783bdl,0x398d38e47941e60bl,
wolfSSL 14:167253f4e170 32029 0x38bb6b2c1d26e9e2l },
wolfSSL 14:167253f4e170 32030 { 0xc64e4a256a577f87l,0x8b52d253dc11fe1cl,0xff336abf62280728l,
wolfSSL 14:167253f4e170 32031 0x94dd0905ce7601a5l },
wolfSSL 14:167253f4e170 32032 0 },
wolfSSL 14:167253f4e170 32033 /* 178 */
wolfSSL 14:167253f4e170 32034 { { 0x156cf7dcde93f92al,0xa01333cb89b5f315l,0x02404df9c995e750l,
wolfSSL 14:167253f4e170 32035 0x92077867d25c2ae9l },
wolfSSL 14:167253f4e170 32036 { 0xe2471e010bf39d44l,0x5f2c902096bb53d7l,0x4c44b7b35c9c3d8fl,
wolfSSL 14:167253f4e170 32037 0x81e8428bd29beb51l },
wolfSSL 14:167253f4e170 32038 0 },
wolfSSL 14:167253f4e170 32039 /* 179 */
wolfSSL 14:167253f4e170 32040 { { 0x6dd9c2bac477199fl,0x8cb8eeee6b5ecdd9l,0x8af7db3fee40fd0el,
wolfSSL 14:167253f4e170 32041 0x1b94ab62dbbfa4b1l },
wolfSSL 14:167253f4e170 32042 { 0x44f0d8b3ce47f143l,0x51e623fc63f46163l,0xf18f270fcc599383l,
wolfSSL 14:167253f4e170 32043 0x06a38e28055590eel },
wolfSSL 14:167253f4e170 32044 0 },
wolfSSL 14:167253f4e170 32045 /* 180 */
wolfSSL 14:167253f4e170 32046 { { 0x2e5b0139b3355b49l,0x20e26560b4ebf99bl,0xc08ffa6bd269f3dcl,
wolfSSL 14:167253f4e170 32047 0xa7b36c2083d9d4f8l },
wolfSSL 14:167253f4e170 32048 { 0x64d15c3a1b3e8830l,0xd5fceae1a89f9c0bl,0xcfeee4a2e2d16930l,
wolfSSL 14:167253f4e170 32049 0xbe54c6b4a2822a20l },
wolfSSL 14:167253f4e170 32050 0 },
wolfSSL 14:167253f4e170 32051 /* 181 */
wolfSSL 14:167253f4e170 32052 { { 0xd6cdb3df8d91167cl,0x517c3f79e7a6625el,0x7105648f346ac7f4l,
wolfSSL 14:167253f4e170 32053 0xbf30a5abeae022bbl },
wolfSSL 14:167253f4e170 32054 { 0x8e7785be93828a68l,0x5161c3327f3ef036l,0xe11b5feb592146b2l,
wolfSSL 14:167253f4e170 32055 0xd1c820de2732d13al },
wolfSSL 14:167253f4e170 32056 0 },
wolfSSL 14:167253f4e170 32057 /* 182 */
wolfSSL 14:167253f4e170 32058 { { 0x043e13479038b363l,0x58c11f546b05e519l,0x4fe57abe6026cad1l,
wolfSSL 14:167253f4e170 32059 0xb7d17bed68a18da3l },
wolfSSL 14:167253f4e170 32060 { 0x44ca5891e29c2559l,0x4f7a03765bfffd84l,0x498de4af74e46948l,
wolfSSL 14:167253f4e170 32061 0x3997fd5e6412cc64l },
wolfSSL 14:167253f4e170 32062 0 },
wolfSSL 14:167253f4e170 32063 /* 183 */
wolfSSL 14:167253f4e170 32064 { { 0xf20746828bd61507l,0x29e132d534a64d2al,0xffeddfb08a8a15e3l,
wolfSSL 14:167253f4e170 32065 0x0eeb89293c6c13e8l },
wolfSSL 14:167253f4e170 32066 { 0xe9b69a3ea7e259f8l,0xce1db7e6d13e7e67l,0x277318f6ad1fa685l,
wolfSSL 14:167253f4e170 32067 0x228916f8c922b6efl },
wolfSSL 14:167253f4e170 32068 0 },
wolfSSL 14:167253f4e170 32069 /* 184 */
wolfSSL 14:167253f4e170 32070 { { 0x959ae25b0a12ab5bl,0xcc11171f957bc136l,0x8058429ed16e2b0cl,
wolfSSL 14:167253f4e170 32071 0xec05ad1d6e93097el },
wolfSSL 14:167253f4e170 32072 { 0x157ba5beac3f3708l,0x31baf93530b59d77l,0x47b55237118234e5l,
wolfSSL 14:167253f4e170 32073 0x7d3141567ff11b37l },
wolfSSL 14:167253f4e170 32074 0 },
wolfSSL 14:167253f4e170 32075 /* 185 */
wolfSSL 14:167253f4e170 32076 { { 0x7bd9c05cf6dfefabl,0xbe2f2268dcb37707l,0xe53ead973a38bb95l,
wolfSSL 14:167253f4e170 32077 0xe9ce66fc9bc1d7a3l },
wolfSSL 14:167253f4e170 32078 { 0x75aa15766f6a02a1l,0x38c087df60e600edl,0xf8947f3468cdc1b9l,
wolfSSL 14:167253f4e170 32079 0xd9650b0172280651l },
wolfSSL 14:167253f4e170 32080 0 },
wolfSSL 14:167253f4e170 32081 /* 186 */
wolfSSL 14:167253f4e170 32082 { { 0x504b4c4a5a057e60l,0xcbccc3be8def25e4l,0xa635320817c1ccbdl,
wolfSSL 14:167253f4e170 32083 0x14d6699a804eb7a2l },
wolfSSL 14:167253f4e170 32084 { 0x2c8a8415db1f411al,0x09fbaf0bf80d769cl,0xb4deef901c2f77adl,
wolfSSL 14:167253f4e170 32085 0x6f4c68410d43598al },
wolfSSL 14:167253f4e170 32086 0 },
wolfSSL 14:167253f4e170 32087 /* 187 */
wolfSSL 14:167253f4e170 32088 { { 0x8726df4e96c24a96l,0x534dbc85fcbd99a3l,0x3c466ef28b2ae30al,
wolfSSL 14:167253f4e170 32089 0x4c4350fd61189abbl },
wolfSSL 14:167253f4e170 32090 { 0x2967f716f855b8dal,0x41a42394463c38a1l,0xc37e1413eae93343l,
wolfSSL 14:167253f4e170 32091 0xa726d2425a3118b5l },
wolfSSL 14:167253f4e170 32092 0 },
wolfSSL 14:167253f4e170 32093 /* 188 */
wolfSSL 14:167253f4e170 32094 { { 0xdae6b3ee948c1086l,0xf1de503dcbd3a2e1l,0x3f35ed3f03d022f3l,
wolfSSL 14:167253f4e170 32095 0x13639e82cc6cf392l },
wolfSSL 14:167253f4e170 32096 { 0x9ac938fbcdafaa86l,0xf45bc5fb2654a258l,0x1963b26e45051329l,
wolfSSL 14:167253f4e170 32097 0xca9365e1c1a335a3l },
wolfSSL 14:167253f4e170 32098 0 },
wolfSSL 14:167253f4e170 32099 /* 189 */
wolfSSL 14:167253f4e170 32100 { { 0x3615ac754c3b2d20l,0x742a5417904e241bl,0xb08521c4cc9d071dl,
wolfSSL 14:167253f4e170 32101 0x9ce29c34970b72a5l },
wolfSSL 14:167253f4e170 32102 { 0x8cc81f736d3e0ad6l,0x8060da9ef2f8434cl,0x35ed1d1a6ce862d9l,
wolfSSL 14:167253f4e170 32103 0x48c4abd7ab42af98l },
wolfSSL 14:167253f4e170 32104 0 },
wolfSSL 14:167253f4e170 32105 /* 190 */
wolfSSL 14:167253f4e170 32106 { { 0xd221b0cc40c7485al,0xead455bbe5274dbfl,0x493c76989263d2e8l,
wolfSSL 14:167253f4e170 32107 0x78017c32f67b33cbl },
wolfSSL 14:167253f4e170 32108 { 0xb9d35769930cb5eel,0xc0d14e940c408ed2l,0xf8b7bf55272f1a4dl,
wolfSSL 14:167253f4e170 32109 0x53cd0454de5c1c04l },
wolfSSL 14:167253f4e170 32110 0 },
wolfSSL 14:167253f4e170 32111 /* 191 */
wolfSSL 14:167253f4e170 32112 { { 0xbcd585fa5d28ccacl,0x5f823e56005b746el,0x7c79f0a1cd0123aal,
wolfSSL 14:167253f4e170 32113 0xeea465c1d3d7fa8fl },
wolfSSL 14:167253f4e170 32114 { 0x7810659f0551803bl,0x6c0b599f7ce6af70l,0x4195a77029288e70l,
wolfSSL 14:167253f4e170 32115 0x1b6e42a47ae69193l },
wolfSSL 14:167253f4e170 32116 0 },
wolfSSL 14:167253f4e170 32117 /* 192 */
wolfSSL 14:167253f4e170 32118 { { 0x2e80937cf67d04c3l,0x1e312be289eeb811l,0x56b5d88792594d60l,
wolfSSL 14:167253f4e170 32119 0x0224da14187fbd3dl },
wolfSSL 14:167253f4e170 32120 { 0x87abb8630c5fe36fl,0x580f3c604ef51f5fl,0x964fb1bfb3b429ecl,
wolfSSL 14:167253f4e170 32121 0x60838ef042bfff33l },
wolfSSL 14:167253f4e170 32122 0 },
wolfSSL 14:167253f4e170 32123 /* 193 */
wolfSSL 14:167253f4e170 32124 { { 0x432cb2f27e0bbe99l,0x7bda44f304aa39eel,0x5f497c7a9fa93903l,
wolfSSL 14:167253f4e170 32125 0x636eb2022d331643l },
wolfSSL 14:167253f4e170 32126 { 0xfcfd0e6193ae00aal,0x875a00fe31ae6d2fl,0xf43658a29f93901cl,
wolfSSL 14:167253f4e170 32127 0x8844eeb639218bacl },
wolfSSL 14:167253f4e170 32128 0 },
wolfSSL 14:167253f4e170 32129 /* 194 */
wolfSSL 14:167253f4e170 32130 { { 0x114171d26b3bae58l,0x7db3df7117e39f3el,0xcd37bc7f81a8eadal,
wolfSSL 14:167253f4e170 32131 0x27ba83dc51fb789el },
wolfSSL 14:167253f4e170 32132 { 0xa7df439ffbf54de5l,0x7277030bb5fe1a71l,0x42ee8e35db297a48l,
wolfSSL 14:167253f4e170 32133 0xadb62d3487f3a4abl },
wolfSSL 14:167253f4e170 32134 0 },
wolfSSL 14:167253f4e170 32135 /* 195 */
wolfSSL 14:167253f4e170 32136 { { 0x9b1168a2a175df2al,0x082aa04f618c32e9l,0xc9e4f2e7146b0916l,
wolfSSL 14:167253f4e170 32137 0xb990fd7675e7c8b2l },
wolfSSL 14:167253f4e170 32138 { 0x0829d96b4df37313l,0x1c205579d0b40789l,0x66c9ae4a78087711l,
wolfSSL 14:167253f4e170 32139 0x81707ef94d10d18dl },
wolfSSL 14:167253f4e170 32140 0 },
wolfSSL 14:167253f4e170 32141 /* 196 */
wolfSSL 14:167253f4e170 32142 { { 0x97d7cab203d6ff96l,0x5b851bfc0d843360l,0x268823c4d042db4bl,
wolfSSL 14:167253f4e170 32143 0x3792daead5a8aa5cl },
wolfSSL 14:167253f4e170 32144 { 0x52818865941afa0bl,0xf3e9e74142d83671l,0x17c825275be4e0a7l,
wolfSSL 14:167253f4e170 32145 0x5abd635e94b001bal },
wolfSSL 14:167253f4e170 32146 0 },
wolfSSL 14:167253f4e170 32147 /* 197 */
wolfSSL 14:167253f4e170 32148 { { 0x727fa84e0ac4927cl,0xe3886035a7c8cf23l,0xa4bcd5ea4adca0dfl,
wolfSSL 14:167253f4e170 32149 0x5995bf21846ab610l },
wolfSSL 14:167253f4e170 32150 { 0xe90f860b829dfa33l,0xcaafe2ae958fc18bl,0x9b3baf4478630366l,
wolfSSL 14:167253f4e170 32151 0x44c32ca2d483411el },
wolfSSL 14:167253f4e170 32152 0 },
wolfSSL 14:167253f4e170 32153 /* 198 */
wolfSSL 14:167253f4e170 32154 { { 0xa74a97f1e40ed80cl,0x5f938cb131d2ca82l,0x53f2124b7c2d6ad9l,
wolfSSL 14:167253f4e170 32155 0x1f2162fb8082a54cl },
wolfSSL 14:167253f4e170 32156 { 0x7e467cc5720b173el,0x40e8a666085f12f9l,0x8cebc20e4c9d65dcl,
wolfSSL 14:167253f4e170 32157 0x8f1d402bc3e907c9l },
wolfSSL 14:167253f4e170 32158 0 },
wolfSSL 14:167253f4e170 32159 /* 199 */
wolfSSL 14:167253f4e170 32160 { { 0x4f592f9cfbc4058al,0xb15e14b6292f5670l,0xc55cfe37bc1d8c57l,
wolfSSL 14:167253f4e170 32161 0xb1980f43926edbf9l },
wolfSSL 14:167253f4e170 32162 { 0x98c33e0932c76b09l,0x1df5279d33b07f78l,0x6f08ead4863bb461l,
wolfSSL 14:167253f4e170 32163 0x2828ad9b37448e45l },
wolfSSL 14:167253f4e170 32164 0 },
wolfSSL 14:167253f4e170 32165 /* 200 */
wolfSSL 14:167253f4e170 32166 { { 0x696722c4c4cf4ac5l,0xf5ac1a3fdde64afbl,0x0551baa2e0890832l,
wolfSSL 14:167253f4e170 32167 0x4973f1275a14b390l },
wolfSSL 14:167253f4e170 32168 { 0xe59d8335322eac5dl,0x5e07eef50bd9b568l,0xab36720fa2588393l,
wolfSSL 14:167253f4e170 32169 0x6dac8ed0db168ac7l },
wolfSSL 14:167253f4e170 32170 0 },
wolfSSL 14:167253f4e170 32171 /* 201 */
wolfSSL 14:167253f4e170 32172 { { 0xf7b545aeeda835efl,0x4aa113d21d10ed51l,0x035a65e013741b09l,
wolfSSL 14:167253f4e170 32173 0x4b23ef5920b9de4cl },
wolfSSL 14:167253f4e170 32174 { 0xe82bb6803c4c7341l,0xd457706d3f58bc37l,0x73527863a51e3ee8l,
wolfSSL 14:167253f4e170 32175 0x4dd71534ddf49a4el },
wolfSSL 14:167253f4e170 32176 0 },
wolfSSL 14:167253f4e170 32177 /* 202 */
wolfSSL 14:167253f4e170 32178 { { 0xbf94467295476cd9l,0x648d072fe31a725bl,0x1441c8b8fc4b67e0l,
wolfSSL 14:167253f4e170 32179 0xfd3170002f4a4dbbl },
wolfSSL 14:167253f4e170 32180 { 0x1cb43ff48995d0e1l,0x76e695d10ef729aal,0xe0d5f97641798982l,
wolfSSL 14:167253f4e170 32181 0x14fac58c9569f365l },
wolfSSL 14:167253f4e170 32182 0 },
wolfSSL 14:167253f4e170 32183 /* 203 */
wolfSSL 14:167253f4e170 32184 { { 0xad9a0065f312ae18l,0x51958dc0fcc93fc9l,0xd9a142408a7d2846l,
wolfSSL 14:167253f4e170 32185 0xed7c765136abda50l },
wolfSSL 14:167253f4e170 32186 { 0x46270f1a25d4abbcl,0x9b5dd8f3f1a113eal,0xc609b0755b51952fl,
wolfSSL 14:167253f4e170 32187 0xfefcb7f74d2e9f53l },
wolfSSL 14:167253f4e170 32188 0 },
wolfSSL 14:167253f4e170 32189 /* 204 */
wolfSSL 14:167253f4e170 32190 { { 0xbd09497aba119185l,0xd54e8c30aac45ba4l,0x492479deaa521179l,
wolfSSL 14:167253f4e170 32191 0x1801a57e87e0d80bl },
wolfSSL 14:167253f4e170 32192 { 0x073d3f8dfcafffb0l,0x6cf33c0bae255240l,0x781d763b5b5fdfbcl,
wolfSSL 14:167253f4e170 32193 0x9f8fc11e1ead1064l },
wolfSSL 14:167253f4e170 32194 0 },
wolfSSL 14:167253f4e170 32195 /* 205 */
wolfSSL 14:167253f4e170 32196 { { 0x1583a1715e69544cl,0x0eaf8567f04b7813l,0x1e22a8fd278a4c32l,
wolfSSL 14:167253f4e170 32197 0xa9d3809d3d3a69a9l },
wolfSSL 14:167253f4e170 32198 { 0x936c2c2c59a2da3bl,0x38ccbcf61895c847l,0x5e65244e63d50869l,
wolfSSL 14:167253f4e170 32199 0x3006b9aee1178ef7l },
wolfSSL 14:167253f4e170 32200 0 },
wolfSSL 14:167253f4e170 32201 /* 206 */
wolfSSL 14:167253f4e170 32202 { { 0x0bb1f2b0c9eead28l,0x7eef635d89f4dfbcl,0x074757fdb2ce8939l,
wolfSSL 14:167253f4e170 32203 0x0ab85fd745f8f761l },
wolfSSL 14:167253f4e170 32204 { 0xecda7c933e5b4549l,0x4be2bb5c97922f21l,0x261a1274b43b8040l,
wolfSSL 14:167253f4e170 32205 0xb122d67511e942c2l },
wolfSSL 14:167253f4e170 32206 0 },
wolfSSL 14:167253f4e170 32207 /* 207 */
wolfSSL 14:167253f4e170 32208 { { 0x3be607be66a5ae7al,0x01e703fa76adcbe3l,0xaf9043014eb6e5c5l,
wolfSSL 14:167253f4e170 32209 0x9f599dc1097dbaecl },
wolfSSL 14:167253f4e170 32210 { 0x6d75b7180ff250edl,0x8eb91574349a20dcl,0x425605a410b227a3l,
wolfSSL 14:167253f4e170 32211 0x7d5528e08a294b78l },
wolfSSL 14:167253f4e170 32212 0 },
wolfSSL 14:167253f4e170 32213 /* 208 */
wolfSSL 14:167253f4e170 32214 { { 0xf0f58f6620c26defl,0x025585ea582b2d1el,0xfbe7d79b01ce3881l,
wolfSSL 14:167253f4e170 32215 0x28ccea01303f1730l },
wolfSSL 14:167253f4e170 32216 { 0xd1dabcd179644ba5l,0x1fc643e806fff0b8l,0xa60a76fc66b3e17bl,
wolfSSL 14:167253f4e170 32217 0xc18baf48a1d013bfl },
wolfSSL 14:167253f4e170 32218 0 },
wolfSSL 14:167253f4e170 32219 /* 209 */
wolfSSL 14:167253f4e170 32220 { { 0x34e638c85dc4216dl,0x00c01067206142acl,0xd453a17195f5064al,
wolfSSL 14:167253f4e170 32221 0x9def809db7a9596bl },
wolfSSL 14:167253f4e170 32222 { 0x41e8642e67ab8d2cl,0xb42404336237a2b6l,0x7d506a6d64c4218bl,
wolfSSL 14:167253f4e170 32223 0x0357f8b068808ce5l },
wolfSSL 14:167253f4e170 32224 0 },
wolfSSL 14:167253f4e170 32225 /* 210 */
wolfSSL 14:167253f4e170 32226 { { 0x8e9dbe644cd2cc88l,0xcc61c28df0b8f39dl,0x4a309874cd30a0c8l,
wolfSSL 14:167253f4e170 32227 0xe4a01add1b489887l },
wolfSSL 14:167253f4e170 32228 { 0x2ed1eeacf57cd8f9l,0x1b767d3ebd594c48l,0xa7295c717bd2f787l,
wolfSSL 14:167253f4e170 32229 0x466d7d79ce10cc30l },
wolfSSL 14:167253f4e170 32230 0 },
wolfSSL 14:167253f4e170 32231 /* 211 */
wolfSSL 14:167253f4e170 32232 { { 0x47d318929dada2c7l,0x4fa0a6c38f9aa27dl,0x90e4fd28820a59e1l,
wolfSSL 14:167253f4e170 32233 0xc672a522451ead1al },
wolfSSL 14:167253f4e170 32234 { 0x30607cc85d86b655l,0xf0235d3bf9ad4af1l,0x99a08680571172a6l,
wolfSSL 14:167253f4e170 32235 0x5e3d64faf2a67513l },
wolfSSL 14:167253f4e170 32236 0 },
wolfSSL 14:167253f4e170 32237 /* 212 */
wolfSSL 14:167253f4e170 32238 { { 0xaa6410c79b3b4416l,0xcd8fcf85eab26d99l,0x5ebff74adb656a74l,
wolfSSL 14:167253f4e170 32239 0x6c8a7a95eb8e42fcl },
wolfSSL 14:167253f4e170 32240 { 0x10c60ba7b02a63bdl,0x6b2f23038b8f0047l,0x8c6c3738312d90b0l,
wolfSSL 14:167253f4e170 32241 0x348ae422ad82ca91l },
wolfSSL 14:167253f4e170 32242 0 },
wolfSSL 14:167253f4e170 32243 /* 213 */
wolfSSL 14:167253f4e170 32244 { { 0x7f4746635ccda2fbl,0x22accaa18e0726d2l,0x85adf782492b1f20l,
wolfSSL 14:167253f4e170 32245 0xc1074de0d9ef2d2el },
wolfSSL 14:167253f4e170 32246 { 0xfcf3ce44ae9a65b3l,0xfd71e4ac05d7151bl,0xd4711f50ce6a9788l,
wolfSSL 14:167253f4e170 32247 0xfbadfbdbc9e54ffcl },
wolfSSL 14:167253f4e170 32248 0 },
wolfSSL 14:167253f4e170 32249 /* 214 */
wolfSSL 14:167253f4e170 32250 { { 0x1713f1cd20a99363l,0xb915658f6cf22775l,0x968175cd24d359b2l,
wolfSSL 14:167253f4e170 32251 0xb7f976b483716fcdl },
wolfSSL 14:167253f4e170 32252 { 0x5758e24d5d6dbf74l,0x8d23bafd71c3af36l,0x48f477600243dfe3l,
wolfSSL 14:167253f4e170 32253 0xf4d41b2ecafcc805l },
wolfSSL 14:167253f4e170 32254 0 },
wolfSSL 14:167253f4e170 32255 /* 215 */
wolfSSL 14:167253f4e170 32256 { { 0x51f1cf28fdabd48dl,0xce81be3632c078a4l,0x6ace2974117146e9l,
wolfSSL 14:167253f4e170 32257 0x180824eae0160f10l },
wolfSSL 14:167253f4e170 32258 { 0x0387698b66e58358l,0x63568752ce6ca358l,0x82380e345e41e6c5l,
wolfSSL 14:167253f4e170 32259 0x67e5f63983cf6d25l },
wolfSSL 14:167253f4e170 32260 0 },
wolfSSL 14:167253f4e170 32261 /* 216 */
wolfSSL 14:167253f4e170 32262 { { 0xf89ccb8dcf4899efl,0x949015f09ebb44c0l,0x546f9276b2598ec9l,
wolfSSL 14:167253f4e170 32263 0x9fef789a04c11fc6l },
wolfSSL 14:167253f4e170 32264 { 0x6d367ecf53d2a071l,0xb10e1a7fa4519b09l,0xca6b3fb0611e2eefl,
wolfSSL 14:167253f4e170 32265 0xbc80c181a99c4e20l },
wolfSSL 14:167253f4e170 32266 0 },
wolfSSL 14:167253f4e170 32267 /* 217 */
wolfSSL 14:167253f4e170 32268 { { 0x972536f8e5eb82e6l,0x1a484fc7f56cb920l,0xc78e217150b5da5el,
wolfSSL 14:167253f4e170 32269 0x49270e629f8cdf10l },
wolfSSL 14:167253f4e170 32270 { 0x1a39b7bbea6b50adl,0x9a0284c1a2388ffcl,0x5403eb178107197bl,
wolfSSL 14:167253f4e170 32271 0xd2ee52f961372f7fl },
wolfSSL 14:167253f4e170 32272 0 },
wolfSSL 14:167253f4e170 32273 /* 218 */
wolfSSL 14:167253f4e170 32274 { { 0xd37cd28588e0362al,0x442fa8a78fa5d94dl,0xaff836e5a434a526l,
wolfSSL 14:167253f4e170 32275 0xdfb478bee5abb733l },
wolfSSL 14:167253f4e170 32276 { 0xa91f1ce7673eede6l,0xa5390ad42b5b2f04l,0x5e66f7bf5530da2fl,
wolfSSL 14:167253f4e170 32277 0xd9a140b408df473al },
wolfSSL 14:167253f4e170 32278 0 },
wolfSSL 14:167253f4e170 32279 /* 219 */
wolfSSL 14:167253f4e170 32280 { { 0x0e0221b56e8ea498l,0x623478293563ee09l,0xe06b8391335d2adel,
wolfSSL 14:167253f4e170 32281 0x760c058d623f4b1al },
wolfSSL 14:167253f4e170 32282 { 0x0b89b58cc198aa79l,0xf74890d2f07aba7fl,0x4e204110fde2556al,
wolfSSL 14:167253f4e170 32283 0x7141982d8f190409l },
wolfSSL 14:167253f4e170 32284 0 },
wolfSSL 14:167253f4e170 32285 /* 220 */
wolfSSL 14:167253f4e170 32286 { { 0x6f0a0e334d4b0f45l,0xd9280b38392a94e1l,0x3af324c6b3c61d5el,
wolfSSL 14:167253f4e170 32287 0x3af9d1ce89d54e47l },
wolfSSL 14:167253f4e170 32288 { 0xfd8f798120930371l,0xeda2664c21c17097l,0x0e9545dcdc42309bl,
wolfSSL 14:167253f4e170 32289 0xb1f815c373957dd6l },
wolfSSL 14:167253f4e170 32290 0 },
wolfSSL 14:167253f4e170 32291 /* 221 */
wolfSSL 14:167253f4e170 32292 { { 0x84faa78e89fec44al,0xc8c2ae473caa4cafl,0x691c807dc1b6a624l,
wolfSSL 14:167253f4e170 32293 0xa41aed141543f052l },
wolfSSL 14:167253f4e170 32294 { 0x424353997d5ffe04l,0x8bacb2df625b6e20l,0x85d660be87817775l,
wolfSSL 14:167253f4e170 32295 0xd6e9c1dd86fb60efl },
wolfSSL 14:167253f4e170 32296 0 },
wolfSSL 14:167253f4e170 32297 /* 222 */
wolfSSL 14:167253f4e170 32298 { { 0x3aa2e97ec6853264l,0x771533b7e2304a0bl,0x1b912bb7b8eae9bel,
wolfSSL 14:167253f4e170 32299 0x9c9c6e10ae9bf8c2l },
wolfSSL 14:167253f4e170 32300 { 0xa2309a59e030b74cl,0x4ed7494d6a631e90l,0x89f44b23a49b79f2l,
wolfSSL 14:167253f4e170 32301 0x566bd59640fa61b6l },
wolfSSL 14:167253f4e170 32302 0 },
wolfSSL 14:167253f4e170 32303 /* 223 */
wolfSSL 14:167253f4e170 32304 { { 0x066c0118c18061f3l,0x190b25d37c83fc70l,0xf05fc8e027273245l,
wolfSSL 14:167253f4e170 32305 0xcf2c7390f525345el },
wolfSSL 14:167253f4e170 32306 { 0xa09bceb410eb30cfl,0xcfd2ebba0d77703al,0xe842c43a150ff255l,
wolfSSL 14:167253f4e170 32307 0x02f517558aa20979l },
wolfSSL 14:167253f4e170 32308 0 },
wolfSSL 14:167253f4e170 32309 /* 224 */
wolfSSL 14:167253f4e170 32310 { { 0x396ef794addb7d07l,0x0b4fc74224455500l,0xfaff8eacc78aa3cel,
wolfSSL 14:167253f4e170 32311 0x14e9ada5e8d4d97dl },
wolfSSL 14:167253f4e170 32312 { 0xdaa480a12f7079e2l,0x45baa3cde4b0800el,0x01765e2d7838157dl,
wolfSSL 14:167253f4e170 32313 0xa0ad4fab8e9d9ae8l },
wolfSSL 14:167253f4e170 32314 0 },
wolfSSL 14:167253f4e170 32315 /* 225 */
wolfSSL 14:167253f4e170 32316 { { 0x0bfb76214a653618l,0x1872813c31eaaa5fl,0x1553e73744949d5el,
wolfSSL 14:167253f4e170 32317 0xbcd530b86e56ed1el },
wolfSSL 14:167253f4e170 32318 { 0x169be85332e9c47bl,0xdc2776feb50059abl,0xcdba9761192bfbb4l,
wolfSSL 14:167253f4e170 32319 0x909283cf6979341dl },
wolfSSL 14:167253f4e170 32320 0 },
wolfSSL 14:167253f4e170 32321 /* 226 */
wolfSSL 14:167253f4e170 32322 { { 0x67b0032476e81a13l,0x9bee1a9962171239l,0x08ed361bd32e19d6l,
wolfSSL 14:167253f4e170 32323 0x35eeb7c9ace1549al },
wolfSSL 14:167253f4e170 32324 { 0x1280ae5a7e4e5bdcl,0x2dcd2cd3b6ceec6el,0x52e4224c6e266bc1l,
wolfSSL 14:167253f4e170 32325 0x9a8b2cf4448ae864l },
wolfSSL 14:167253f4e170 32326 0 },
wolfSSL 14:167253f4e170 32327 /* 227 */
wolfSSL 14:167253f4e170 32328 { { 0xf6471bf209d03b59l,0xc90e62a3b65af2abl,0xff7ff168ebd5eec9l,
wolfSSL 14:167253f4e170 32329 0x6bdb60f4d4491379l },
wolfSSL 14:167253f4e170 32330 { 0xdadafebc8a55bc30l,0xc79ead1610097fe0l,0x42e197414c1e3bddl,
wolfSSL 14:167253f4e170 32331 0x01ec3cfd94ba08a9l },
wolfSSL 14:167253f4e170 32332 0 },
wolfSSL 14:167253f4e170 32333 /* 228 */
wolfSSL 14:167253f4e170 32334 { { 0xba6277ebdc9485c2l,0x48cc9a7922fb10c7l,0x4f61d60f70a28d8al,
wolfSSL 14:167253f4e170 32335 0xd1acb1c0475464f6l },
wolfSSL 14:167253f4e170 32336 { 0xd26902b126f36612l,0x59c3a44ee0618d8bl,0x4df8a813308357eel,
wolfSSL 14:167253f4e170 32337 0x7dcd079d405626c2l },
wolfSSL 14:167253f4e170 32338 0 },
wolfSSL 14:167253f4e170 32339 /* 229 */
wolfSSL 14:167253f4e170 32340 { { 0x5ce7d4d3f05a4b48l,0xadcd295237230772l,0xd18f7971812a915al,
wolfSSL 14:167253f4e170 32341 0x0bf53589377d19b8l },
wolfSSL 14:167253f4e170 32342 { 0x35ecd95a6c68ea73l,0xc7f3bbca823a584dl,0x9fb674c6f473a723l,
wolfSSL 14:167253f4e170 32343 0xd28be4d9e16686fcl },
wolfSSL 14:167253f4e170 32344 0 },
wolfSSL 14:167253f4e170 32345 /* 230 */
wolfSSL 14:167253f4e170 32346 { { 0x5d2b990638fa8e4bl,0x559f186e893fd8fcl,0x3a6de2aa436fb6fcl,
wolfSSL 14:167253f4e170 32347 0xd76007aa510f88cel },
wolfSSL 14:167253f4e170 32348 { 0x2d10aab6523a4988l,0xb455cf4474dd0273l,0x7f467082a3407278l,
wolfSSL 14:167253f4e170 32349 0xf2b52f68b303bb01l },
wolfSSL 14:167253f4e170 32350 0 },
wolfSSL 14:167253f4e170 32351 /* 231 */
wolfSSL 14:167253f4e170 32352 { { 0x0d57eafa9835b4cal,0x2d2232fcbb669cbcl,0x8eeeb680c6643198l,
wolfSSL 14:167253f4e170 32353 0xd8dbe98ecc5aed3al },
wolfSSL 14:167253f4e170 32354 { 0xcba9be3fc5a02709l,0x30be68e5f5ba1fa8l,0xfebd43cdf10ea852l,
wolfSSL 14:167253f4e170 32355 0xe01593a3ee559705l },
wolfSSL 14:167253f4e170 32356 0 },
wolfSSL 14:167253f4e170 32357 /* 232 */
wolfSSL 14:167253f4e170 32358 { { 0xd3e5af50ea75a0a6l,0x512226ac57858033l,0x6fe6d50fd0176406l,
wolfSSL 14:167253f4e170 32359 0xafec07b1aeb8ef06l },
wolfSSL 14:167253f4e170 32360 { 0x7fb9956780bb0a31l,0x6f1af3cc37309aael,0x9153a15a01abf389l,
wolfSSL 14:167253f4e170 32361 0xa71b93546e2dbfddl },
wolfSSL 14:167253f4e170 32362 0 },
wolfSSL 14:167253f4e170 32363 /* 233 */
wolfSSL 14:167253f4e170 32364 { { 0xbf8e12e018f593d2l,0xd1a90428a078122bl,0x150505db0ba4f2adl,
wolfSSL 14:167253f4e170 32365 0x53a2005c628523d9l },
wolfSSL 14:167253f4e170 32366 { 0x07c8b639e7f2b935l,0x2bff975ac182961al,0x86bceea77518ca2cl,
wolfSSL 14:167253f4e170 32367 0xbf47d19b3d588e3dl },
wolfSSL 14:167253f4e170 32368 0 },
wolfSSL 14:167253f4e170 32369 /* 234 */
wolfSSL 14:167253f4e170 32370 { { 0x672967a7dd7665d5l,0x4e3030572f2f4de5l,0x144005ae80d4903fl,
wolfSSL 14:167253f4e170 32371 0x001c2c7f39c9a1b6l },
wolfSSL 14:167253f4e170 32372 { 0x143a801469efc6d6l,0xc810bdaa7bc7a724l,0x5f65670ba78150a4l,
wolfSSL 14:167253f4e170 32373 0xfdadf8e786ffb99bl },
wolfSSL 14:167253f4e170 32374 0 },
wolfSSL 14:167253f4e170 32375 /* 235 */
wolfSSL 14:167253f4e170 32376 { { 0xfd38cb88ffc00785l,0x77fa75913b48eb67l,0x0454d055bf368fbcl,
wolfSSL 14:167253f4e170 32377 0x3a838e4d5aa43c94l },
wolfSSL 14:167253f4e170 32378 { 0x561663293e97bb9al,0x9eb93363441d94d9l,0x515591a60adb2a83l,
wolfSSL 14:167253f4e170 32379 0x3cdb8257873e1da3l },
wolfSSL 14:167253f4e170 32380 0 },
wolfSSL 14:167253f4e170 32381 /* 236 */
wolfSSL 14:167253f4e170 32382 { { 0x137140a97de77eabl,0xf7e1c50d41648109l,0x762dcad2ceb1d0dfl,
wolfSSL 14:167253f4e170 32383 0x5a60cc89f1f57fbal },
wolfSSL 14:167253f4e170 32384 { 0x80b3638240d45673l,0x1b82be195913c655l,0x057284b8dd64b741l,
wolfSSL 14:167253f4e170 32385 0x922ff56fdbfd8fc0l },
wolfSSL 14:167253f4e170 32386 0 },
wolfSSL 14:167253f4e170 32387 /* 237 */
wolfSSL 14:167253f4e170 32388 { { 0x1b265deec9a129a1l,0xa5b1ce57cc284e04l,0x04380c46cebfbe3cl,
wolfSSL 14:167253f4e170 32389 0x72919a7df6c5cd62l },
wolfSSL 14:167253f4e170 32390 { 0x298f453a8fb90f9al,0xd719c00b88e4031bl,0xe32c0e77796f1856l,
wolfSSL 14:167253f4e170 32391 0x5e7917803624089al },
wolfSSL 14:167253f4e170 32392 0 },
wolfSSL 14:167253f4e170 32393 /* 238 */
wolfSSL 14:167253f4e170 32394 { { 0x5c16ec557f63cdfbl,0x8e6a3571f1cae4fdl,0xfce26bea560597cal,
wolfSSL 14:167253f4e170 32395 0x4e0a5371e24c2fabl },
wolfSSL 14:167253f4e170 32396 { 0x276a40d3a5765357l,0x3c89af440d73a2b4l,0xb8f370ae41d11a32l,
wolfSSL 14:167253f4e170 32397 0xf5ff7818d56604eel },
wolfSSL 14:167253f4e170 32398 0 },
wolfSSL 14:167253f4e170 32399 /* 239 */
wolfSSL 14:167253f4e170 32400 { { 0xfbf3e3fe1a09df21l,0x26d5d28ee66e8e47l,0x2096bd0a29c89015l,
wolfSSL 14:167253f4e170 32401 0xe41df0e9533f5e64l },
wolfSSL 14:167253f4e170 32402 { 0x305fda40b3ba9e3fl,0xf2340ceb2604d895l,0x0866e1927f0367c7l,
wolfSSL 14:167253f4e170 32403 0x8edd7d6eac4f155fl },
wolfSSL 14:167253f4e170 32404 0 },
wolfSSL 14:167253f4e170 32405 /* 240 */
wolfSSL 14:167253f4e170 32406 { { 0xc9a1dc0e0bfc8ff3l,0x14efd82be936f42fl,0x67016f7ccca381efl,
wolfSSL 14:167253f4e170 32407 0x1432c1caed8aee96l },
wolfSSL 14:167253f4e170 32408 { 0xec68482970b23c26l,0xa64fe8730735b273l,0xe389f6e5eaef0f5al,
wolfSSL 14:167253f4e170 32409 0xcaef480b5ac8d2c6l },
wolfSSL 14:167253f4e170 32410 0 },
wolfSSL 14:167253f4e170 32411 /* 241 */
wolfSSL 14:167253f4e170 32412 { { 0x5245c97875315922l,0xd82951713063cca5l,0xf3ce60d0b64ef2cbl,
wolfSSL 14:167253f4e170 32413 0xd0ba177e8efae236l },
wolfSSL 14:167253f4e170 32414 { 0x53a9ae8fb1b3af60l,0x1a796ae53d2da20el,0x01d63605df9eef28l,
wolfSSL 14:167253f4e170 32415 0xf31c957c1c54ae16l },
wolfSSL 14:167253f4e170 32416 0 },
wolfSSL 14:167253f4e170 32417 /* 242 */
wolfSSL 14:167253f4e170 32418 { { 0xc0f58d5249cc4597l,0xdc5015b0bae0a028l,0xefc5fc55734a814al,
wolfSSL 14:167253f4e170 32419 0x013404cb96e17c3al },
wolfSSL 14:167253f4e170 32420 { 0xb29e2585c9a824bfl,0xd593185e001eaed7l,0x8d6ee68261ef68acl,
wolfSSL 14:167253f4e170 32421 0x6f377c4b91933e6cl },
wolfSSL 14:167253f4e170 32422 0 },
wolfSSL 14:167253f4e170 32423 /* 243 */
wolfSSL 14:167253f4e170 32424 { { 0x9f93bad1a8333fd2l,0xa89302025a2a95b8l,0x211e5037eaf75acel,
wolfSSL 14:167253f4e170 32425 0x6dba3e4ed2d09506l },
wolfSSL 14:167253f4e170 32426 { 0xa48ef98cd04399cdl,0x1811c66ee6b73adel,0x72f60752c17ecaf3l,
wolfSSL 14:167253f4e170 32427 0xf13cf3423becf4a7l },
wolfSSL 14:167253f4e170 32428 0 },
wolfSSL 14:167253f4e170 32429 /* 244 */
wolfSSL 14:167253f4e170 32430 { { 0xceeb9ec0a919e2ebl,0x83a9a195f62c0f68l,0xcfba3bb67aba2299l,
wolfSSL 14:167253f4e170 32431 0xc83fa9a9274bbad3l },
wolfSSL 14:167253f4e170 32432 { 0x0d7d1b0b62fa1ce0l,0xe58b60f53418efbfl,0xbfa8ef9e52706f04l,
wolfSSL 14:167253f4e170 32433 0xb49d70f45d702683l },
wolfSSL 14:167253f4e170 32434 0 },
wolfSSL 14:167253f4e170 32435 /* 245 */
wolfSSL 14:167253f4e170 32436 { { 0x914c7510fad5513bl,0x05f32eecb1751e2dl,0x6d850418d9fb9d59l,
wolfSSL 14:167253f4e170 32437 0x59cfadbb0c30f1cfl },
wolfSSL 14:167253f4e170 32438 { 0xe167ac2355cb7fd6l,0x249367b8820426a3l,0xeaeec58c90a78864l,
wolfSSL 14:167253f4e170 32439 0x5babf362354a4b67l },
wolfSSL 14:167253f4e170 32440 0 },
wolfSSL 14:167253f4e170 32441 /* 246 */
wolfSSL 14:167253f4e170 32442 { { 0x37c981d1ee424865l,0x8b002878f2e5577fl,0x702970f1b9e0c058l,
wolfSSL 14:167253f4e170 32443 0x6188c6a79026c8f0l },
wolfSSL 14:167253f4e170 32444 { 0x06f9a19bd0f244dal,0x1ecced5cfb080873l,0x35470f9b9f213637l,
wolfSSL 14:167253f4e170 32445 0x993fe475df50b9d9l },
wolfSSL 14:167253f4e170 32446 0 },
wolfSSL 14:167253f4e170 32447 /* 247 */
wolfSSL 14:167253f4e170 32448 { { 0x68e31cdf9b2c3609l,0x84eb19c02c46d4eal,0x7ac9ec1a9a775101l,
wolfSSL 14:167253f4e170 32449 0x81f764664c80616bl },
wolfSSL 14:167253f4e170 32450 { 0x1d7c2a5a75fbe978l,0x6743fed3f183b356l,0x838d1f04501dd2bfl,
wolfSSL 14:167253f4e170 32451 0x564a812a5fe9060dl },
wolfSSL 14:167253f4e170 32452 0 },
wolfSSL 14:167253f4e170 32453 /* 248 */
wolfSSL 14:167253f4e170 32454 { { 0x7a5a64f4fa817d1dl,0x55f96844bea82e0fl,0xb5ff5a0fcd57f9aal,
wolfSSL 14:167253f4e170 32455 0x226bf3cf00e51d6cl },
wolfSSL 14:167253f4e170 32456 { 0xd6d1a9f92f2833cfl,0x20a0a35a4f4f89a8l,0x11536c498f3f7f77l,
wolfSSL 14:167253f4e170 32457 0x68779f47ff257836l },
wolfSSL 14:167253f4e170 32458 0 },
wolfSSL 14:167253f4e170 32459 /* 249 */
wolfSSL 14:167253f4e170 32460 { { 0x79b0c1c173043d08l,0xa54467741fc020fal,0xd3767e289a6d26d0l,
wolfSSL 14:167253f4e170 32461 0x97bcb0d1eb092e0bl },
wolfSSL 14:167253f4e170 32462 { 0x2ab6eaa8f32ed3c3l,0xc8a4f151b281bc48l,0x4d1bf4f3bfa178f3l,
wolfSSL 14:167253f4e170 32463 0xa872ffe80a784655l },
wolfSSL 14:167253f4e170 32464 0 },
wolfSSL 14:167253f4e170 32465 /* 250 */
wolfSSL 14:167253f4e170 32466 { { 0xb1ab7935a32b2086l,0xe1eb710e8160f486l,0x9bd0cd913b6ae6bel,
wolfSSL 14:167253f4e170 32467 0x02812bfcb732a36al },
wolfSSL 14:167253f4e170 32468 { 0xa63fd7cacf605318l,0x646e5d50fdfd6d1dl,0xa1d683982102d619l,
wolfSSL 14:167253f4e170 32469 0x07391cc9fe5396afl },
wolfSSL 14:167253f4e170 32470 0 },
wolfSSL 14:167253f4e170 32471 /* 251 */
wolfSSL 14:167253f4e170 32472 { { 0xc50157f08b80d02bl,0x6b8333d162877f7fl,0x7aca1af878d542ael,
wolfSSL 14:167253f4e170 32473 0x355d2adc7e6d2a08l },
wolfSSL 14:167253f4e170 32474 { 0xb41f335a287386e1l,0xfd272a94f8e43275l,0x286ca2cde79989eal,
wolfSSL 14:167253f4e170 32475 0x3dc2b1e37c2a3a79l },
wolfSSL 14:167253f4e170 32476 0 },
wolfSSL 14:167253f4e170 32477 /* 252 */
wolfSSL 14:167253f4e170 32478 { { 0xd689d21c04581352l,0x0a00c825376782bel,0x203bd5909fed701fl,
wolfSSL 14:167253f4e170 32479 0xc47869103ccd846bl },
wolfSSL 14:167253f4e170 32480 { 0x5dba770824c768edl,0x72feea026841f657l,0x73313ed56accce0el,
wolfSSL 14:167253f4e170 32481 0xccc42968d5bb4d32l },
wolfSSL 14:167253f4e170 32482 0 },
wolfSSL 14:167253f4e170 32483 /* 253 */
wolfSSL 14:167253f4e170 32484 { { 0x94e50de13d7620b9l,0xd89a5c8a5992a56al,0xdc007640675487c9l,
wolfSSL 14:167253f4e170 32485 0xe147eb42aa4871cfl },
wolfSSL 14:167253f4e170 32486 { 0x274ab4eeacf3ae46l,0xfd4936fb50350fbel,0xdf2afe4748c840eal,
wolfSSL 14:167253f4e170 32487 0x239ac047080e96e3l },
wolfSSL 14:167253f4e170 32488 0 },
wolfSSL 14:167253f4e170 32489 /* 254 */
wolfSSL 14:167253f4e170 32490 { { 0x481d1f352bfee8d4l,0xce80b5cffa7b0fecl,0x105c4c9e2ce9af3cl,
wolfSSL 14:167253f4e170 32491 0xc55fa1a3f5f7e59dl },
wolfSSL 14:167253f4e170 32492 { 0x3186f14e8257c227l,0xc5b1653f342be00bl,0x09afc998aa904fb2l,
wolfSSL 14:167253f4e170 32493 0x094cd99cd4f4b699l },
wolfSSL 14:167253f4e170 32494 0 },
wolfSSL 14:167253f4e170 32495 /* 255 */
wolfSSL 14:167253f4e170 32496 { { 0x8a981c84d703bebal,0x8631d15032ceb291l,0xa445f2c9e3bd49ecl,
wolfSSL 14:167253f4e170 32497 0xb90a30b642abad33l },
wolfSSL 14:167253f4e170 32498 { 0xb465404fb4a5abf9l,0x004750c375db7603l,0x6f9a42ccca35d89fl,
wolfSSL 14:167253f4e170 32499 0x019f8b9a1b7924f7l },
wolfSSL 14:167253f4e170 32500 0 },
wolfSSL 14:167253f4e170 32501 };
wolfSSL 14:167253f4e170 32502
wolfSSL 14:167253f4e170 32503 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 32504 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 32505 *
wolfSSL 14:167253f4e170 32506 * r Resulting point.
wolfSSL 14:167253f4e170 32507 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 32508 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 32509 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 32510 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 32511 */
wolfSSL 14:167253f4e170 32512 static int sp_256_ecc_mulmod_base_4(sp_point* r, sp_digit* k,
wolfSSL 14:167253f4e170 32513 int map, void* heap)
wolfSSL 14:167253f4e170 32514 {
wolfSSL 14:167253f4e170 32515 return sp_256_ecc_mulmod_stripe_4(r, &p256_base, p256_table,
wolfSSL 14:167253f4e170 32516 k, map, heap);
wolfSSL 14:167253f4e170 32517 }
wolfSSL 14:167253f4e170 32518
wolfSSL 14:167253f4e170 32519 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 32520 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 32521 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 32522 *
wolfSSL 14:167253f4e170 32523 * r Resulting point.
wolfSSL 14:167253f4e170 32524 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 32525 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 32526 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 32527 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 32528 */
wolfSSL 14:167253f4e170 32529 static int sp_256_ecc_mulmod_base_avx2_4(sp_point* r, sp_digit* k,
wolfSSL 14:167253f4e170 32530 int map, void* heap)
wolfSSL 14:167253f4e170 32531 {
wolfSSL 14:167253f4e170 32532 return sp_256_ecc_mulmod_stripe_avx2_4(r, &p256_base, p256_table,
wolfSSL 14:167253f4e170 32533 k, map, heap);
wolfSSL 14:167253f4e170 32534 }
wolfSSL 14:167253f4e170 32535
wolfSSL 14:167253f4e170 32536 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 32537 #else
wolfSSL 14:167253f4e170 32538 /* A table entry for pre-computed points. */
wolfSSL 14:167253f4e170 32539 typedef struct sp_table_entry_sum {
wolfSSL 14:167253f4e170 32540 sp_digit x[4];
wolfSSL 14:167253f4e170 32541 sp_digit y[4];
wolfSSL 14:167253f4e170 32542 byte infinity;
wolfSSL 14:167253f4e170 32543 } sp_table_entry_sum;
wolfSSL 14:167253f4e170 32544
wolfSSL 14:167253f4e170 32545 /* Table of pre-computed values for P256 with 3 multiples and width of 8 bits.
wolfSSL 14:167253f4e170 32546 */
wolfSSL 14:167253f4e170 32547 static sp_table_entry_sum p256_table[33][58] = {
wolfSSL 14:167253f4e170 32548 {
wolfSSL 14:167253f4e170 32549 /* 0 << 0 */
wolfSSL 14:167253f4e170 32550 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 32551 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 32552 1 },
wolfSSL 14:167253f4e170 32553 /* 1 << 0 */
wolfSSL 14:167253f4e170 32554 { { 0x79e730d418a9143cl,0x75ba95fc5fedb601l,0x79fb732b77622510l,
wolfSSL 14:167253f4e170 32555 0x18905f76a53755c6l },
wolfSSL 14:167253f4e170 32556 { 0xddf25357ce95560al,0x8b4ab8e4ba19e45cl,0xd2e88688dd21f325l,
wolfSSL 14:167253f4e170 32557 0x8571ff1825885d85l },
wolfSSL 14:167253f4e170 32558 0 },
wolfSSL 14:167253f4e170 32559 /* 3 << 0 */
wolfSSL 14:167253f4e170 32560 { { 0xffac3f904eebc127l,0xb027f84a087d81fbl,0x66ad77dd87cbbc98l,
wolfSSL 14:167253f4e170 32561 0x26936a3fb6ff747el },
wolfSSL 14:167253f4e170 32562 { 0xb04c5c1fc983a7ebl,0x583e47ad0861fe1al,0x788208311a2ee98el,
wolfSSL 14:167253f4e170 32563 0xd5f06a29e587cc07l },
wolfSSL 14:167253f4e170 32564 0 },
wolfSSL 14:167253f4e170 32565 /* 4 << 0 */
wolfSSL 14:167253f4e170 32566 { { 0x74b0b50d46918dccl,0x4650a6edc623c173l,0x0cdaacace8100af2l,
wolfSSL 14:167253f4e170 32567 0x577362f541b0176bl },
wolfSSL 14:167253f4e170 32568 { 0x2d96f24ce4cbaba6l,0x17628471fad6f447l,0x6b6c36dee5ddd22el,
wolfSSL 14:167253f4e170 32569 0x84b14c394c5ab863l },
wolfSSL 14:167253f4e170 32570 0 },
wolfSSL 14:167253f4e170 32571 /* 5 << 0 */
wolfSSL 14:167253f4e170 32572 { { 0xbe1b8aaec45c61f5l,0x90ec649a94b9537dl,0x941cb5aad076c20cl,
wolfSSL 14:167253f4e170 32573 0xc9079605890523c8l },
wolfSSL 14:167253f4e170 32574 { 0xeb309b4ae7ba4f10l,0x73c568efe5eb882bl,0x3540a9877e7a1f68l,
wolfSSL 14:167253f4e170 32575 0x73a076bb2dd1e916l },
wolfSSL 14:167253f4e170 32576 0 },
wolfSSL 14:167253f4e170 32577 /* 7 << 0 */
wolfSSL 14:167253f4e170 32578 { { 0x0746354ea0173b4fl,0x2bd20213d23c00f7l,0xf43eaab50c23bb08l,
wolfSSL 14:167253f4e170 32579 0x13ba5119c3123e03l },
wolfSSL 14:167253f4e170 32580 { 0x2847d0303f5b9d4dl,0x6742f2f25da67bddl,0xef933bdc77c94195l,
wolfSSL 14:167253f4e170 32581 0xeaedd9156e240867l },
wolfSSL 14:167253f4e170 32582 0 },
wolfSSL 14:167253f4e170 32583 /* 9 << 0 */
wolfSSL 14:167253f4e170 32584 { { 0x75c96e8f264e20e8l,0xabe6bfed59a7a841l,0x2cc09c0444c8eb00l,
wolfSSL 14:167253f4e170 32585 0xe05b3080f0c4e16bl },
wolfSSL 14:167253f4e170 32586 { 0x1eb7777aa45f3314l,0x56af7bedce5d45e3l,0x2b6e019a88b12f1al,
wolfSSL 14:167253f4e170 32587 0x086659cdfd835f9bl },
wolfSSL 14:167253f4e170 32588 0 },
wolfSSL 14:167253f4e170 32589 /* 10 << 0 */
wolfSSL 14:167253f4e170 32590 { { 0x2c18dbd19dc21ec8l,0x98f9868a0fcf8139l,0x737d2cd648250b49l,
wolfSSL 14:167253f4e170 32591 0xcc61c94724b3428fl },
wolfSSL 14:167253f4e170 32592 { 0x0c2b407880dd9e76l,0xc43a8991383fbe08l,0x5f7d2d65779be5d2l,
wolfSSL 14:167253f4e170 32593 0x78719a54eb3b4ab5l },
wolfSSL 14:167253f4e170 32594 0 },
wolfSSL 14:167253f4e170 32595 /* 11 << 0 */
wolfSSL 14:167253f4e170 32596 { { 0xea7d260a6245e404l,0x9de407956e7fdfe0l,0x1ff3a4158dac1ab5l,
wolfSSL 14:167253f4e170 32597 0x3e7090f1649c9073l },
wolfSSL 14:167253f4e170 32598 { 0x1a7685612b944e88l,0x250f939ee57f61c8l,0x0c0daa891ead643dl,
wolfSSL 14:167253f4e170 32599 0x68930023e125b88el },
wolfSSL 14:167253f4e170 32600 0 },
wolfSSL 14:167253f4e170 32601 /* 13 << 0 */
wolfSSL 14:167253f4e170 32602 { { 0xccc425634b2ed709l,0x0e356769856fd30dl,0xbcbcd43f559e9811l,
wolfSSL 14:167253f4e170 32603 0x738477ac5395b759l },
wolfSSL 14:167253f4e170 32604 { 0x35752b90c00ee17fl,0x68748390742ed2e3l,0x7cd06422bd1f5bc1l,
wolfSSL 14:167253f4e170 32605 0xfbc08769c9e7b797l },
wolfSSL 14:167253f4e170 32606 0 },
wolfSSL 14:167253f4e170 32607 /* 15 << 0 */
wolfSSL 14:167253f4e170 32608 { { 0x72bcd8b7bc60055bl,0x03cc23ee56e27e4bl,0xee337424e4819370l,
wolfSSL 14:167253f4e170 32609 0xe2aa0e430ad3da09l },
wolfSSL 14:167253f4e170 32610 { 0x40b8524f6383c45dl,0xd766355442a41b25l,0x64efa6de778a4797l,
wolfSSL 14:167253f4e170 32611 0x2042170a7079adf4l },
wolfSSL 14:167253f4e170 32612 0 },
wolfSSL 14:167253f4e170 32613 /* 16 << 0 */
wolfSSL 14:167253f4e170 32614 { { 0x808b0b650bc6fb80l,0x5882e0753ffe2e6bl,0xd5ef2f7c2c83f549l,
wolfSSL 14:167253f4e170 32615 0x54d63c809103b723l },
wolfSSL 14:167253f4e170 32616 { 0xf2f11bd652a23f9bl,0x3670c3194b0b6587l,0x55c4623bb1580e9el,
wolfSSL 14:167253f4e170 32617 0x64edf7b201efe220l },
wolfSSL 14:167253f4e170 32618 0 },
wolfSSL 14:167253f4e170 32619 /* 17 << 0 */
wolfSSL 14:167253f4e170 32620 { { 0x97091dcbd53c5c9dl,0xf17624b6ac0a177bl,0xb0f139752cfe2dffl,
wolfSSL 14:167253f4e170 32621 0xc1a35c0a6c7a574el },
wolfSSL 14:167253f4e170 32622 { 0x227d314693e79987l,0x0575bf30e89cb80el,0x2f4e247f0d1883bbl,
wolfSSL 14:167253f4e170 32623 0xebd512263274c3d0l },
wolfSSL 14:167253f4e170 32624 0 },
wolfSSL 14:167253f4e170 32625 /* 19 << 0 */
wolfSSL 14:167253f4e170 32626 { { 0xfea912baa5659ae8l,0x68363aba25e1a16el,0xb8842277752c41acl,
wolfSSL 14:167253f4e170 32627 0xfe545c282897c3fcl },
wolfSSL 14:167253f4e170 32628 { 0x2d36e9e7dc4c696bl,0x5806244afba977c5l,0x85665e9be39508c1l,
wolfSSL 14:167253f4e170 32629 0xf720ee256d12597bl },
wolfSSL 14:167253f4e170 32630 0 },
wolfSSL 14:167253f4e170 32631 /* 21 << 0 */
wolfSSL 14:167253f4e170 32632 { { 0x562e4cecc135b208l,0x74e1b2654783f47dl,0x6d2a506c5a3f3b30l,
wolfSSL 14:167253f4e170 32633 0xecead9f4c16762fcl },
wolfSSL 14:167253f4e170 32634 { 0xf29dd4b2e286e5b9l,0x1b0fadc083bb3c61l,0x7a75023e7fac29a4l,
wolfSSL 14:167253f4e170 32635 0xc086d5f1c9477fa3l },
wolfSSL 14:167253f4e170 32636 0 },
wolfSSL 14:167253f4e170 32637 /* 23 << 0 */
wolfSSL 14:167253f4e170 32638 { { 0xf4f876532de45068l,0x37c7a7e89e2e1f6el,0xd0825fa2a3584069l,
wolfSSL 14:167253f4e170 32639 0xaf2cea7c1727bf42l },
wolfSSL 14:167253f4e170 32640 { 0x0360a4fb9e4785a9l,0xe5fda49c27299f4al,0x48068e1371ac2f71l,
wolfSSL 14:167253f4e170 32641 0x83d0687b9077666fl },
wolfSSL 14:167253f4e170 32642 0 },
wolfSSL 14:167253f4e170 32643 /* 25 << 0 */
wolfSSL 14:167253f4e170 32644 { { 0xa4a319acd837879fl,0x6fc1b49eed6b67b0l,0xe395993332f1f3afl,
wolfSSL 14:167253f4e170 32645 0x966742eb65432a2el },
wolfSSL 14:167253f4e170 32646 { 0x4b8dc9feb4966228l,0x96cc631243f43950l,0x12068859c9b731eel,
wolfSSL 14:167253f4e170 32647 0x7b948dc356f79968l },
wolfSSL 14:167253f4e170 32648 0 },
wolfSSL 14:167253f4e170 32649 /* 27 << 0 */
wolfSSL 14:167253f4e170 32650 { { 0x042c2af497e2feb4l,0xd36a42d7aebf7313l,0x49d2c9eb084ffdd7l,
wolfSSL 14:167253f4e170 32651 0x9f8aa54b2ef7c76al },
wolfSSL 14:167253f4e170 32652 { 0x9200b7ba09895e70l,0x3bd0c66fddb7fb58l,0x2d97d10878eb4cbbl,
wolfSSL 14:167253f4e170 32653 0x2d431068d84bde31l },
wolfSSL 14:167253f4e170 32654 0 },
wolfSSL 14:167253f4e170 32655 /* 28 << 0 */
wolfSSL 14:167253f4e170 32656 { { 0x4b523eb7172ccd1fl,0x7323cb2830a6a892l,0x97082ec0cfe153ebl,
wolfSSL 14:167253f4e170 32657 0xe97f6b6af2aadb97l },
wolfSSL 14:167253f4e170 32658 { 0x1d3d393ed1a83da1l,0xa6a7f9c7804b2a68l,0x4a688b482d0cb71el,
wolfSSL 14:167253f4e170 32659 0xa9b4cc5f40585278l },
wolfSSL 14:167253f4e170 32660 0 },
wolfSSL 14:167253f4e170 32661 /* 29 << 0 */
wolfSSL 14:167253f4e170 32662 { { 0x5e5db46acb66e132l,0xf1be963a0d925880l,0x944a70270317b9e2l,
wolfSSL 14:167253f4e170 32663 0xe266f95948603d48l },
wolfSSL 14:167253f4e170 32664 { 0x98db66735c208899l,0x90472447a2fb18a3l,0x8a966939777c619fl,
wolfSSL 14:167253f4e170 32665 0x3798142a2a3be21bl },
wolfSSL 14:167253f4e170 32666 0 },
wolfSSL 14:167253f4e170 32667 /* 31 << 0 */
wolfSSL 14:167253f4e170 32668 { { 0xe2f73c696755ff89l,0xdd3cf7e7473017e6l,0x8ef5689d3cf7600dl,
wolfSSL 14:167253f4e170 32669 0x948dc4f8b1fc87b4l },
wolfSSL 14:167253f4e170 32670 { 0xd9e9fe814ea53299l,0x2d921ca298eb6028l,0xfaecedfd0c9803fcl,
wolfSSL 14:167253f4e170 32671 0xf38ae8914d7b4745l },
wolfSSL 14:167253f4e170 32672 0 },
wolfSSL 14:167253f4e170 32673 /* 33 << 0 */
wolfSSL 14:167253f4e170 32674 { { 0x871514560f664534l,0x85ceae7c4b68f103l,0xac09c4ae65578ab9l,
wolfSSL 14:167253f4e170 32675 0x33ec6868f044b10cl },
wolfSSL 14:167253f4e170 32676 { 0x6ac4832b3a8ec1f1l,0x5509d1285847d5efl,0xf909604f763f1574l,
wolfSSL 14:167253f4e170 32677 0xb16c4303c32f63c4l },
wolfSSL 14:167253f4e170 32678 0 },
wolfSSL 14:167253f4e170 32679 /* 34 << 0 */
wolfSSL 14:167253f4e170 32680 { { 0xb6ab20147ca23cd3l,0xcaa7a5c6a391849dl,0x5b0673a375678d94l,
wolfSSL 14:167253f4e170 32681 0xc982ddd4dd303e64l },
wolfSSL 14:167253f4e170 32682 { 0xfd7b000b5db6f971l,0xbba2cb1f6f876f92l,0xc77332a33c569426l,
wolfSSL 14:167253f4e170 32683 0xa159100c570d74f8l },
wolfSSL 14:167253f4e170 32684 0 },
wolfSSL 14:167253f4e170 32685 /* 35 << 0 */
wolfSSL 14:167253f4e170 32686 { { 0xfd16847fdec67ef5l,0x742ee464233e76b7l,0x0b8e4134efc2b4c8l,
wolfSSL 14:167253f4e170 32687 0xca640b8642a3e521l },
wolfSSL 14:167253f4e170 32688 { 0x653a01908ceb6aa9l,0x313c300c547852d5l,0x24e4ab126b237af7l,
wolfSSL 14:167253f4e170 32689 0x2ba901628bb47af8l },
wolfSSL 14:167253f4e170 32690 0 },
wolfSSL 14:167253f4e170 32691 /* 36 << 0 */
wolfSSL 14:167253f4e170 32692 { { 0x3d5e58d6a8219bb7l,0xc691d0bd1b06c57fl,0x0ae4cb10d257576el,
wolfSSL 14:167253f4e170 32693 0x3569656cd54a3dc3l },
wolfSSL 14:167253f4e170 32694 { 0xe5ebaebd94cda03al,0x934e82d3162bfe13l,0x450ac0bae251a0c6l,
wolfSSL 14:167253f4e170 32695 0x480b9e11dd6da526l },
wolfSSL 14:167253f4e170 32696 0 },
wolfSSL 14:167253f4e170 32697 /* 37 << 0 */
wolfSSL 14:167253f4e170 32698 { { 0x00467bc58cce08b5l,0xb636458c7f178d55l,0xc5748baea677d806l,
wolfSSL 14:167253f4e170 32699 0x2763a387dfa394ebl },
wolfSSL 14:167253f4e170 32700 { 0xa12b448a7d3cebb6l,0xe7adda3e6f20d850l,0xf63ebce51558462cl,
wolfSSL 14:167253f4e170 32701 0x58b36143620088a8l },
wolfSSL 14:167253f4e170 32702 0 },
wolfSSL 14:167253f4e170 32703 /* 39 << 0 */
wolfSSL 14:167253f4e170 32704 { { 0xa9d89488a059c142l,0x6f5ae714ff0b9346l,0x068f237d16fb3664l,
wolfSSL 14:167253f4e170 32705 0x5853e4c4363186acl },
wolfSSL 14:167253f4e170 32706 { 0xe2d87d2363c52f98l,0x2ec4a76681828876l,0x47b864fae14e7b1cl,
wolfSSL 14:167253f4e170 32707 0x0c0bc0e569192408l },
wolfSSL 14:167253f4e170 32708 0 },
wolfSSL 14:167253f4e170 32709 /* 40 << 0 */
wolfSSL 14:167253f4e170 32710 { { 0xe4d7681db82e9f3el,0x83200f0bdf25e13cl,0x8909984c66f27280l,
wolfSSL 14:167253f4e170 32711 0x462d7b0075f73227l },
wolfSSL 14:167253f4e170 32712 { 0xd90ba188f2651798l,0x74c6e18c36ab1c34l,0xab256ea35ef54359l,
wolfSSL 14:167253f4e170 32713 0x03466612d1aa702fl },
wolfSSL 14:167253f4e170 32714 0 },
wolfSSL 14:167253f4e170 32715 /* 41 << 0 */
wolfSSL 14:167253f4e170 32716 { { 0x624d60492ed22e91l,0x6fdfe0b56f072822l,0xeeca111539ce2271l,
wolfSSL 14:167253f4e170 32717 0x98100a4fdb01614fl },
wolfSSL 14:167253f4e170 32718 { 0xb6b0daa2a35c628fl,0xb6f94d2ec87e9a47l,0xc67732591d57d9cel,
wolfSSL 14:167253f4e170 32719 0xf70bfeec03884a7bl },
wolfSSL 14:167253f4e170 32720 0 },
wolfSSL 14:167253f4e170 32721 /* 43 << 0 */
wolfSSL 14:167253f4e170 32722 { { 0x4ff23ffd248a7d06l,0x80c5bfb4878873fal,0xb7d9ad9005745981l,
wolfSSL 14:167253f4e170 32723 0x179c85db3db01994l },
wolfSSL 14:167253f4e170 32724 { 0xba41b06261a6966cl,0x4d82d052eadce5a8l,0x9e91cd3ba5e6a318l,
wolfSSL 14:167253f4e170 32725 0x47795f4f95b2dda0l },
wolfSSL 14:167253f4e170 32726 0 },
wolfSSL 14:167253f4e170 32727 /* 44 << 0 */
wolfSSL 14:167253f4e170 32728 { { 0xecfd7c1fd55a897cl,0x009194abb29110fbl,0x5f0e2046e381d3b0l,
wolfSSL 14:167253f4e170 32729 0x5f3425f6a98dd291l },
wolfSSL 14:167253f4e170 32730 { 0xbfa06687730d50dal,0x0423446c4b083b7fl,0x397a247dd69d3417l,
wolfSSL 14:167253f4e170 32731 0xeb629f90387ba42al },
wolfSSL 14:167253f4e170 32732 0 },
wolfSSL 14:167253f4e170 32733 /* 45 << 0 */
wolfSSL 14:167253f4e170 32734 { { 0x1ee426ccd5cd79bfl,0x0032940b946c6e18l,0x1b1e8ae057477f58l,
wolfSSL 14:167253f4e170 32735 0xe94f7d346d823278l },
wolfSSL 14:167253f4e170 32736 { 0xc747cb96782ba21al,0xc5254469f72b33a5l,0x772ef6dec7f80c81l,
wolfSSL 14:167253f4e170 32737 0xd73acbfe2cd9e6b5l },
wolfSSL 14:167253f4e170 32738 0 },
wolfSSL 14:167253f4e170 32739 /* 46 << 0 */
wolfSSL 14:167253f4e170 32740 { { 0x4075b5b149ee90d9l,0x785c339aa06e9ebal,0xa1030d5babf825e0l,
wolfSSL 14:167253f4e170 32741 0xcec684c3a42931dcl },
wolfSSL 14:167253f4e170 32742 { 0x42ab62c9c1586e63l,0x45431d665ab43f2bl,0x57c8b2c055f7835dl,
wolfSSL 14:167253f4e170 32743 0x033da338c1b7f865l },
wolfSSL 14:167253f4e170 32744 0 },
wolfSSL 14:167253f4e170 32745 /* 47 << 0 */
wolfSSL 14:167253f4e170 32746 { { 0x283c7513caa76097l,0x0a624fa936c83906l,0x6b20afec715af2c7l,
wolfSSL 14:167253f4e170 32747 0x4b969974eba78bfdl },
wolfSSL 14:167253f4e170 32748 { 0x220755ccd921d60el,0x9b944e107baeca13l,0x04819d515ded93d4l,
wolfSSL 14:167253f4e170 32749 0x9bbff86e6dddfd27l },
wolfSSL 14:167253f4e170 32750 0 },
wolfSSL 14:167253f4e170 32751 /* 48 << 0 */
wolfSSL 14:167253f4e170 32752 { { 0x6b34413077adc612l,0xa7496529bbd803a0l,0x1a1baaa76d8805bdl,
wolfSSL 14:167253f4e170 32753 0xc8403902470343adl },
wolfSSL 14:167253f4e170 32754 { 0x39f59f66175adff1l,0x0b26d7fbb7d8c5b7l,0xa875f5ce529d75e3l,
wolfSSL 14:167253f4e170 32755 0x85efc7e941325cc2l },
wolfSSL 14:167253f4e170 32756 0 },
wolfSSL 14:167253f4e170 32757 /* 49 << 0 */
wolfSSL 14:167253f4e170 32758 { { 0x21950b421ff6acd3l,0xffe7048453dc6909l,0xff4cd0b228766127l,
wolfSSL 14:167253f4e170 32759 0xabdbe6084fb7db2bl },
wolfSSL 14:167253f4e170 32760 { 0x837c92285e1109e8l,0x26147d27f4645b5al,0x4d78f592f7818ed8l,
wolfSSL 14:167253f4e170 32761 0xd394077ef247fa36l },
wolfSSL 14:167253f4e170 32762 0 },
wolfSSL 14:167253f4e170 32763 /* 51 << 0 */
wolfSSL 14:167253f4e170 32764 { { 0x508cec1c3b3f64c9l,0xe20bc0ba1e5edf3fl,0xda1deb852f4318d4l,
wolfSSL 14:167253f4e170 32765 0xd20ebe0d5c3fa443l },
wolfSSL 14:167253f4e170 32766 { 0x370b4ea773241ea3l,0x61f1511c5e1a5f65l,0x99a5e23d82681c62l,
wolfSSL 14:167253f4e170 32767 0xd731e383a2f54c2dl },
wolfSSL 14:167253f4e170 32768 0 },
wolfSSL 14:167253f4e170 32769 /* 52 << 0 */
wolfSSL 14:167253f4e170 32770 { { 0x2692f36e83445904l,0x2e0ec469af45f9c0l,0x905a3201c67528b7l,
wolfSSL 14:167253f4e170 32771 0x88f77f34d0e5e542l },
wolfSSL 14:167253f4e170 32772 { 0xf67a8d295864687cl,0x23b92eae22df3562l,0x5c27014b9bbec39el,
wolfSSL 14:167253f4e170 32773 0x7ef2f2269c0f0f8dl },
wolfSSL 14:167253f4e170 32774 0 },
wolfSSL 14:167253f4e170 32775 /* 53 << 0 */
wolfSSL 14:167253f4e170 32776 { { 0x97359638546c4d8dl,0x5f9c3fc492f24679l,0x912e8beda8c8acd9l,
wolfSSL 14:167253f4e170 32777 0xec3a318d306634b0l },
wolfSSL 14:167253f4e170 32778 { 0x80167f41c31cb264l,0x3db82f6f522113f2l,0xb155bcd2dcafe197l,
wolfSSL 14:167253f4e170 32779 0xfba1da5943465283l },
wolfSSL 14:167253f4e170 32780 0 },
wolfSSL 14:167253f4e170 32781 /* 55 << 0 */
wolfSSL 14:167253f4e170 32782 { { 0x258bbbf9e7305683l,0x31eea5bf07ef5be6l,0x0deb0e4a46c814c1l,
wolfSSL 14:167253f4e170 32783 0x5cee8449a7b730ddl },
wolfSSL 14:167253f4e170 32784 { 0xeab495c5a0182bdel,0xee759f879e27a6b4l,0xc2cf6a6880e518cal,
wolfSSL 14:167253f4e170 32785 0x25e8013ff14cf3f4l },
wolfSSL 14:167253f4e170 32786 0 },
wolfSSL 14:167253f4e170 32787 /* 57 << 0 */
wolfSSL 14:167253f4e170 32788 { { 0x3ec832e77acaca28l,0x1bfeea57c7385b29l,0x068212e3fd1eaf38l,
wolfSSL 14:167253f4e170 32789 0xc13298306acf8cccl },
wolfSSL 14:167253f4e170 32790 { 0xb909f2db2aac9e59l,0x5748060db661782al,0xc5ab2632c79b7a01l,
wolfSSL 14:167253f4e170 32791 0xda44c6c600017626l },
wolfSSL 14:167253f4e170 32792 0 },
wolfSSL 14:167253f4e170 32793 /* 59 << 0 */
wolfSSL 14:167253f4e170 32794 { { 0x69d44ed65c46aa8el,0x2100d5d3a8d063d1l,0xcb9727eaa2d17c36l,
wolfSSL 14:167253f4e170 32795 0x4c2bab1b8add53b7l },
wolfSSL 14:167253f4e170 32796 { 0xa084e90c15426704l,0x778afcd3a837ebeal,0x6651f7017ce477f8l,
wolfSSL 14:167253f4e170 32797 0xa062499846fb7a8bl },
wolfSSL 14:167253f4e170 32798 0 },
wolfSSL 14:167253f4e170 32799 /* 60 << 0 */
wolfSSL 14:167253f4e170 32800 { { 0xdc1e6828ed8a6e19l,0x33fc23364189d9c7l,0x026f8fe2671c39bcl,
wolfSSL 14:167253f4e170 32801 0xd40c4ccdbc6f9915l },
wolfSSL 14:167253f4e170 32802 { 0xafa135bbf80e75cal,0x12c651a022adff2cl,0xc40a04bd4f51ad96l,
wolfSSL 14:167253f4e170 32803 0x04820109bbe4e832l },
wolfSSL 14:167253f4e170 32804 0 },
wolfSSL 14:167253f4e170 32805 /* 61 << 0 */
wolfSSL 14:167253f4e170 32806 { { 0x3667eb1a7f4c04ccl,0x59556621a9404f84l,0x71cdf6537eceb50al,
wolfSSL 14:167253f4e170 32807 0x994a44a69b8335fal },
wolfSSL 14:167253f4e170 32808 { 0xd7faf819dbeb9b69l,0x473c5680eed4350dl,0xb6658466da44bba2l,
wolfSSL 14:167253f4e170 32809 0x0d1bc780872bdbf3l },
wolfSSL 14:167253f4e170 32810 0 },
wolfSSL 14:167253f4e170 32811 /* 63 << 0 */
wolfSSL 14:167253f4e170 32812 { { 0xb8d3d9319ff91fe5l,0x039c4800f0518eedl,0x95c376329182cb26l,
wolfSSL 14:167253f4e170 32813 0x0763a43482fc568dl },
wolfSSL 14:167253f4e170 32814 { 0x707c04d5383e76bal,0xac98b930824e8197l,0x92bf7c8f91230de0l,
wolfSSL 14:167253f4e170 32815 0x90876a0140959b70l },
wolfSSL 14:167253f4e170 32816 0 },
wolfSSL 14:167253f4e170 32817 /* 64 << 0 */
wolfSSL 14:167253f4e170 32818 { { 0xdb6d96f305968b80l,0x380a0913089f73b9l,0x7da70b83c2c61e01l,
wolfSSL 14:167253f4e170 32819 0x95fb8394569b38c7l },
wolfSSL 14:167253f4e170 32820 { 0x9a3c651280edfe2fl,0x8f726bb98faeaf82l,0x8010a4a078424bf8l,
wolfSSL 14:167253f4e170 32821 0x296720440e844970l },
wolfSSL 14:167253f4e170 32822 0 },
wolfSSL 14:167253f4e170 32823 /* 65 << 0 */
wolfSSL 14:167253f4e170 32824 { { 0xdc2306ebfcdbb2b2l,0x79527db7ba66f4b9l,0xbf639ed67765765el,
wolfSSL 14:167253f4e170 32825 0x01628c4706b6090al },
wolfSSL 14:167253f4e170 32826 { 0x66eb62f1b957b4a1l,0x33cb7691ba659f46l,0x2c90d98cf3e055d6l,
wolfSSL 14:167253f4e170 32827 0x7d096ac42f174750l },
wolfSSL 14:167253f4e170 32828 0 },
wolfSSL 14:167253f4e170 32829 /* 71 << 0 */
wolfSSL 14:167253f4e170 32830 { { 0xf19f382e92aa7864l,0x49c7cb94fc05804bl,0xf94aa89b40750d01l,
wolfSSL 14:167253f4e170 32831 0xdd421b5d4a210364l },
wolfSSL 14:167253f4e170 32832 { 0x56cd001e39df3672l,0x030a119fdd4af1ecl,0x11f947e696cd0572l,
wolfSSL 14:167253f4e170 32833 0x574cc7b293786791l },
wolfSSL 14:167253f4e170 32834 0 },
wolfSSL 14:167253f4e170 32835 /* 77 << 0 */
wolfSSL 14:167253f4e170 32836 { { 0x0a2193bfc266f85cl,0x719a87be5a0ec9cel,0x9c30c6422b2f9c49l,
wolfSSL 14:167253f4e170 32837 0xdb15e4963d5baeb1l },
wolfSSL 14:167253f4e170 32838 { 0x83c3139be0d37321l,0x4788522b2e9fdbb2l,0x2b4f0c7877eb94eal,
wolfSSL 14:167253f4e170 32839 0x854dc9d595105f9el },
wolfSSL 14:167253f4e170 32840 0 },
wolfSSL 14:167253f4e170 32841 /* 83 << 0 */
wolfSSL 14:167253f4e170 32842 { { 0x2c9ee62dc3363a22l,0x125d4714ec67199al,0xf87abebf2ab80485l,
wolfSSL 14:167253f4e170 32843 0xcf3086e87a243ca4l },
wolfSSL 14:167253f4e170 32844 { 0x5c52b051c64e09ddl,0x5e9b16125625aad7l,0x0536a39db19c6126l,
wolfSSL 14:167253f4e170 32845 0x97f0013247b64be5l },
wolfSSL 14:167253f4e170 32846 0 },
wolfSSL 14:167253f4e170 32847 /* 89 << 0 */
wolfSSL 14:167253f4e170 32848 { { 0xc1ee6264a7eabe67l,0x62d51e29fd54487dl,0x3ea123446310eb5al,
wolfSSL 14:167253f4e170 32849 0xbd88aca74765b805l },
wolfSSL 14:167253f4e170 32850 { 0xb7b284be14fb691al,0x640388f83b9fffefl,0x7ab49dd209f98f9al,
wolfSSL 14:167253f4e170 32851 0x7150f87e7211e445l },
wolfSSL 14:167253f4e170 32852 0 },
wolfSSL 14:167253f4e170 32853 /* 95 << 0 */
wolfSSL 14:167253f4e170 32854 { { 0x263e039bb308cc40l,0x6684ad762b346fd2l,0x9a127f2bcaa12d0dl,
wolfSSL 14:167253f4e170 32855 0x76a8f9fea974291fl },
wolfSSL 14:167253f4e170 32856 { 0xc802049b68aa19e4l,0x65499c990c5dbba0l,0xee1b1cb5344455a1l,
wolfSSL 14:167253f4e170 32857 0x3f293fda2cd6f439l },
wolfSSL 14:167253f4e170 32858 0 },
wolfSSL 14:167253f4e170 32859 /* 101 << 0 */
wolfSSL 14:167253f4e170 32860 { { 0xb7a96e0a4ea6fdf7l,0xbbe914d3b99cd026l,0x6a610374c569a602l,
wolfSSL 14:167253f4e170 32861 0xe9b1c23914da499el },
wolfSSL 14:167253f4e170 32862 { 0xb5f6f0feadc19a99l,0x731251826f21687cl,0x5a8a14644be77793l,
wolfSSL 14:167253f4e170 32863 0x94ce9e0adba8bfc7l },
wolfSSL 14:167253f4e170 32864 0 },
wolfSSL 14:167253f4e170 32865 /* 107 << 0 */
wolfSSL 14:167253f4e170 32866 { { 0x2ca0ba9c3796f4c7l,0x3571e4d1592ce334l,0x28f9cdebe9f6e877l,
wolfSSL 14:167253f4e170 32867 0xee206023efce1a70l },
wolfSSL 14:167253f4e170 32868 { 0xb2159e08b76369dcl,0x2754e4260a7f687cl,0xe008039e02de2ff1l,
wolfSSL 14:167253f4e170 32869 0xccd7e9418ea700c1l },
wolfSSL 14:167253f4e170 32870 0 },
wolfSSL 14:167253f4e170 32871 /* 113 << 0 */
wolfSSL 14:167253f4e170 32872 { { 0xa125e6c1b7ebcb88l,0x3289e86e10ec0d40l,0xcc3a5ecb98353869l,
wolfSSL 14:167253f4e170 32873 0x734e0d078a2b0d3al },
wolfSSL 14:167253f4e170 32874 { 0xe0d92e9a51933360l,0xfa6bcdb1786076b9l,0xd13cca90747f19ecl,
wolfSSL 14:167253f4e170 32875 0x61d8209d49f3a53dl },
wolfSSL 14:167253f4e170 32876 0 },
wolfSSL 14:167253f4e170 32877 /* 116 << 0 */
wolfSSL 14:167253f4e170 32878 { { 0x87f9793bc9826344l,0x4b3de89bb2f5f79cl,0xc9f08a5659cb1b6el,
wolfSSL 14:167253f4e170 32879 0xd8f1fc5f6a92b9aal },
wolfSSL 14:167253f4e170 32880 { 0x86357f9eb412595el,0x53c30bbe65b80f16l,0xf06c2c8c70549a57l,
wolfSSL 14:167253f4e170 32881 0xa9c8a4b42b9157dal },
wolfSSL 14:167253f4e170 32882 0 },
wolfSSL 14:167253f4e170 32883 /* 119 << 0 */
wolfSSL 14:167253f4e170 32884 { { 0x87af199e6cc47305l,0x062afb7c1e314ddel,0x2be22ba0f3a49fb4l,
wolfSSL 14:167253f4e170 32885 0x6ed0b988157b7f56l },
wolfSSL 14:167253f4e170 32886 { 0x8162cf502d653fd9l,0x17d29c64877b7497l,0xd7e814380f67b514l,
wolfSSL 14:167253f4e170 32887 0xfedf1014fe6ee703l },
wolfSSL 14:167253f4e170 32888 0 },
wolfSSL 14:167253f4e170 32889 /* 125 << 0 */
wolfSSL 14:167253f4e170 32890 { { 0xaab54cfc93740130l,0xf72dab6d225733fal,0x04b76d2d1ed32559l,
wolfSSL 14:167253f4e170 32891 0xa9fe2396bb85b9cbl },
wolfSSL 14:167253f4e170 32892 { 0x128b0d24bf2219f0l,0x2292393b579f3ce2l,0x51dc5fac145ff0d5l,
wolfSSL 14:167253f4e170 32893 0xb16d6af8c3febbc1l },
wolfSSL 14:167253f4e170 32894 0 },
wolfSSL 14:167253f4e170 32895 },
wolfSSL 14:167253f4e170 32896 {
wolfSSL 14:167253f4e170 32897 /* 0 << 8 */
wolfSSL 14:167253f4e170 32898 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 32899 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 32900 1 },
wolfSSL 14:167253f4e170 32901 /* 1 << 8 */
wolfSSL 14:167253f4e170 32902 { { 0x486d8ffa696946fcl,0x50fbc6d8b9cba56dl,0x7e3d423e90f35a15l,
wolfSSL 14:167253f4e170 32903 0x7c3da195c0dd962cl },
wolfSSL 14:167253f4e170 32904 { 0xe673fdb03cfd5d8bl,0x0704b7c2889dfca5l,0xf6ce581ff52305aal,
wolfSSL 14:167253f4e170 32905 0x399d49eb914d5e53l },
wolfSSL 14:167253f4e170 32906 0 },
wolfSSL 14:167253f4e170 32907 /* 3 << 8 */
wolfSSL 14:167253f4e170 32908 { { 0x35d6a53eed4c3717l,0x9f8240cf3d0ed2a3l,0x8c0d4d05e5543aa5l,
wolfSSL 14:167253f4e170 32909 0x45d5bbfbdd33b4b4l },
wolfSSL 14:167253f4e170 32910 { 0xfa04cc73137fd28el,0x862ac6efc73b3ffdl,0x403ff9f531f51ef2l,
wolfSSL 14:167253f4e170 32911 0x34d5e0fcbc73f5a2l },
wolfSSL 14:167253f4e170 32912 0 },
wolfSSL 14:167253f4e170 32913 /* 4 << 8 */
wolfSSL 14:167253f4e170 32914 { { 0x4f7081e144cc3addl,0xd5ffa1d687be82cfl,0x89890b6c0edd6472l,
wolfSSL 14:167253f4e170 32915 0xada26e1a3ed17863l },
wolfSSL 14:167253f4e170 32916 { 0x276f271563483caal,0xe6924cd92f6077fdl,0x05a7fe980a466e3cl,
wolfSSL 14:167253f4e170 32917 0xf1c794b0b1902d1fl },
wolfSSL 14:167253f4e170 32918 0 },
wolfSSL 14:167253f4e170 32919 /* 5 << 8 */
wolfSSL 14:167253f4e170 32920 { { 0x33b2385c08369a90l,0x2990c59b190eb4f8l,0x819a6145c68eac80l,
wolfSSL 14:167253f4e170 32921 0x7a786d622ec4a014l },
wolfSSL 14:167253f4e170 32922 { 0x33faadbe20ac3a8dl,0x31a217815aba2d30l,0x209d2742dba4f565l,
wolfSSL 14:167253f4e170 32923 0xdb2ce9e355aa0fbbl },
wolfSSL 14:167253f4e170 32924 0 },
wolfSSL 14:167253f4e170 32925 /* 7 << 8 */
wolfSSL 14:167253f4e170 32926 { { 0x0c4a58d474a86108l,0xf8048a8fee4c5d90l,0xe3c7c924e86d4c80l,
wolfSSL 14:167253f4e170 32927 0x28c889de056a1e60l },
wolfSSL 14:167253f4e170 32928 { 0x57e2662eb214a040l,0xe8c48e9837e10347l,0x8774286280ac748al,
wolfSSL 14:167253f4e170 32929 0xf1c24022186b06f2l },
wolfSSL 14:167253f4e170 32930 0 },
wolfSSL 14:167253f4e170 32931 /* 9 << 8 */
wolfSSL 14:167253f4e170 32932 { { 0xe8cbf1e5d5923359l,0xdb0cea9d539b9fb0l,0x0c5b34cf49859b98l,
wolfSSL 14:167253f4e170 32933 0x5e583c56a4403cc6l },
wolfSSL 14:167253f4e170 32934 { 0x11fc1a2dd48185b7l,0xc93fbc7e6e521787l,0x47e7a05805105b8bl,
wolfSSL 14:167253f4e170 32935 0x7b4d4d58db8260c8l },
wolfSSL 14:167253f4e170 32936 0 },
wolfSSL 14:167253f4e170 32937 /* 10 << 8 */
wolfSSL 14:167253f4e170 32938 { { 0xb31bd6136339c083l,0x39ff8155dfb64701l,0x7c3388d2e29604abl,
wolfSSL 14:167253f4e170 32939 0x1e19084ba6b10442l },
wolfSSL 14:167253f4e170 32940 { 0x17cf54c0eccd47efl,0x896933854a5dfb30l,0x69d023fb47daf9f6l,
wolfSSL 14:167253f4e170 32941 0x9222840b7d91d959l },
wolfSSL 14:167253f4e170 32942 0 },
wolfSSL 14:167253f4e170 32943 /* 11 << 8 */
wolfSSL 14:167253f4e170 32944 { { 0xc510610939842194l,0xb7e2353e49d05295l,0xfc8c1d5cefb42ee0l,
wolfSSL 14:167253f4e170 32945 0xe04884eb08ce811cl },
wolfSSL 14:167253f4e170 32946 { 0xf1f75d817419f40el,0x5b0ac162a995c241l,0x120921bbc4c55646l,
wolfSSL 14:167253f4e170 32947 0x713520c28d33cf97l },
wolfSSL 14:167253f4e170 32948 0 },
wolfSSL 14:167253f4e170 32949 /* 13 << 8 */
wolfSSL 14:167253f4e170 32950 { { 0x41d04ee21726931al,0x0bbbb2c83660ecfdl,0xa6ef6de524818e18l,
wolfSSL 14:167253f4e170 32951 0xe421cc51e7d57887l },
wolfSSL 14:167253f4e170 32952 { 0xf127d208bea87be6l,0x16a475d3b1cdd682l,0x9db1b684439b63f7l,
wolfSSL 14:167253f4e170 32953 0x5359b3dbf0f113b6l },
wolfSSL 14:167253f4e170 32954 0 },
wolfSSL 14:167253f4e170 32955 /* 15 << 8 */
wolfSSL 14:167253f4e170 32956 { { 0x3a5c752edcc18770l,0x4baf1f2f8825c3a5l,0xebd63f7421b153edl,
wolfSSL 14:167253f4e170 32957 0xa2383e47b2f64723l },
wolfSSL 14:167253f4e170 32958 { 0xe7bf620a2646d19al,0x56cb44ec03c83ffdl,0xaf7267c94f6be9f1l,
wolfSSL 14:167253f4e170 32959 0x8b2dfd7bc06bb5e9l },
wolfSSL 14:167253f4e170 32960 0 },
wolfSSL 14:167253f4e170 32961 /* 16 << 8 */
wolfSSL 14:167253f4e170 32962 { { 0x6772b0e5ab4b35a2l,0x1d8b6001f5eeaacfl,0x728f7ce4795b9580l,
wolfSSL 14:167253f4e170 32963 0x4a20ed2a41fb81dal },
wolfSSL 14:167253f4e170 32964 { 0x9f685cd44fec01e6l,0x3ed7ddcca7ff50adl,0x460fd2640c2d97fdl,
wolfSSL 14:167253f4e170 32965 0x3a241426eb82f4f9l },
wolfSSL 14:167253f4e170 32966 0 },
wolfSSL 14:167253f4e170 32967 /* 17 << 8 */
wolfSSL 14:167253f4e170 32968 { { 0xc503cd33bccd9617l,0x365dede4ba7730a3l,0x798c63555ddb0786l,
wolfSSL 14:167253f4e170 32969 0xa6c3200efc9cd3bcl },
wolfSSL 14:167253f4e170 32970 { 0x060ffb2ce5e35efdl,0x99a4e25b5555a1c1l,0x11d95375f70b3751l,
wolfSSL 14:167253f4e170 32971 0x0a57354a160e1bf6l },
wolfSSL 14:167253f4e170 32972 0 },
wolfSSL 14:167253f4e170 32973 /* 19 << 8 */
wolfSSL 14:167253f4e170 32974 { { 0xc033bdc719803511l,0xa9f97b3b8888c3bel,0x3d68aebc85c6d05el,
wolfSSL 14:167253f4e170 32975 0xc3b88a9d193919ebl },
wolfSSL 14:167253f4e170 32976 { 0x2d300748c48b0ee3l,0x7506bc7c07a746c1l,0xfc48437c6e6d57f3l,
wolfSSL 14:167253f4e170 32977 0x5bd71587cfeaa91al },
wolfSSL 14:167253f4e170 32978 0 },
wolfSSL 14:167253f4e170 32979 /* 21 << 8 */
wolfSSL 14:167253f4e170 32980 { { 0xe40736d3df61bc76l,0x13a619c03f778cdbl,0x6dd921a4c56ea28fl,
wolfSSL 14:167253f4e170 32981 0x76a524332fa647b4l },
wolfSSL 14:167253f4e170 32982 { 0x23591891ac5bdc5dl,0xff4a1a72bac7dc01l,0x9905e26162df8453l,
wolfSSL 14:167253f4e170 32983 0x3ac045dfe63b265fl },
wolfSSL 14:167253f4e170 32984 0 },
wolfSSL 14:167253f4e170 32985 /* 23 << 8 */
wolfSSL 14:167253f4e170 32986 { { 0x8435bd6994b03ed1l,0xd9ad1de3634cc546l,0x2cf423fc00e420cal,
wolfSSL 14:167253f4e170 32987 0xeed26d80a03096ddl },
wolfSSL 14:167253f4e170 32988 { 0xd7f60be7a4db09d2l,0xf47f569d960622f7l,0xe5925fd77296c729l,
wolfSSL 14:167253f4e170 32989 0xeff2db2626ca2715l },
wolfSSL 14:167253f4e170 32990 0 },
wolfSSL 14:167253f4e170 32991 /* 25 << 8 */
wolfSSL 14:167253f4e170 32992 { { 0x5dfee80f83774bddl,0x6313160285734485l,0xa1b524ae914a69a9l,
wolfSSL 14:167253f4e170 32993 0xebc2ffafd4e300d7l },
wolfSSL 14:167253f4e170 32994 { 0x52c93db77cfa46a5l,0x71e6161f21653b50l,0x3574fc57a4bc580al,
wolfSSL 14:167253f4e170 32995 0xc09015dde1bc1253l },
wolfSSL 14:167253f4e170 32996 0 },
wolfSSL 14:167253f4e170 32997 /* 27 << 8 */
wolfSSL 14:167253f4e170 32998 { { 0x9c38ddcceb5b76c1l,0x746f528526fc0ab4l,0x52a63a50d62c269fl,
wolfSSL 14:167253f4e170 32999 0x60049c5599458621l },
wolfSSL 14:167253f4e170 33000 { 0xe7f48f823c2f7c9el,0x6bd99043917d5cf3l,0xeb1317a88701f469l,
wolfSSL 14:167253f4e170 33001 0xbd3fe2ed9a449fe0l },
wolfSSL 14:167253f4e170 33002 0 },
wolfSSL 14:167253f4e170 33003 /* 28 << 8 */
wolfSSL 14:167253f4e170 33004 { { 0xe652533b3cef0d7dl,0xd94f7b182bbb4381l,0x838752be0e80f500l,
wolfSSL 14:167253f4e170 33005 0x8e6e24889e9c9bfbl },
wolfSSL 14:167253f4e170 33006 { 0xc975169716caca6al,0x866c49d838531ad9l,0xc917e2397151ade1l,
wolfSSL 14:167253f4e170 33007 0x2d016ec16037c407l },
wolfSSL 14:167253f4e170 33008 0 },
wolfSSL 14:167253f4e170 33009 /* 29 << 8 */
wolfSSL 14:167253f4e170 33010 { { 0x202f6a9c31c71f7bl,0x01f95aa3296ffe5cl,0x5fc0601453cec3a3l,
wolfSSL 14:167253f4e170 33011 0xeb9912375f498a45l },
wolfSSL 14:167253f4e170 33012 { 0xae9a935e5d91ba87l,0xc6ac62810b564a19l,0x8a8fe81c3bd44e69l,
wolfSSL 14:167253f4e170 33013 0x7c8b467f9dd11d45l },
wolfSSL 14:167253f4e170 33014 0 },
wolfSSL 14:167253f4e170 33015 /* 31 << 8 */
wolfSSL 14:167253f4e170 33016 { { 0x21d3634d39eedbbal,0x35cd2e680455a46dl,0xc8cafe65f9d7eb0cl,
wolfSSL 14:167253f4e170 33017 0xbda3ce9e00cefb3el },
wolfSSL 14:167253f4e170 33018 { 0xddc17a602c9cf7a4l,0x01572ee47bcb8773l,0xa92b2b018c7548dfl,
wolfSSL 14:167253f4e170 33019 0x732fd309a84600e3l },
wolfSSL 14:167253f4e170 33020 0 },
wolfSSL 14:167253f4e170 33021 /* 33 << 8 */
wolfSSL 14:167253f4e170 33022 { { 0x65cf89a2e0600afal,0xcf51482f753c5ceal,0x4f2b2d25a5c2bfc5l,
wolfSSL 14:167253f4e170 33023 0x9381f57187098256l },
wolfSSL 14:167253f4e170 33024 { 0x89210f676e976e4bl,0xe2cf12f489f47a7bl,0xc21a1658e8484050l,
wolfSSL 14:167253f4e170 33025 0xa224dbf82f0fff01l },
wolfSSL 14:167253f4e170 33026 0 },
wolfSSL 14:167253f4e170 33027 /* 34 << 8 */
wolfSSL 14:167253f4e170 33028 { { 0xc28961087282513dl,0x9a78c4296a3f8fb8l,0xddfa56f9a31e24b7l,
wolfSSL 14:167253f4e170 33029 0xb1e14f84fb72611fl },
wolfSSL 14:167253f4e170 33030 { 0x1d0f70ab45078d65l,0xb247aef3819924d8l,0x8d519f9dbb9877c1l,
wolfSSL 14:167253f4e170 33031 0x495c2ece8368c7c9l },
wolfSSL 14:167253f4e170 33032 0 },
wolfSSL 14:167253f4e170 33033 /* 35 << 8 */
wolfSSL 14:167253f4e170 33034 { { 0xca9129a0bdb69d12l,0xbe3e319978f39adfl,0xa88506df5fe49438l,
wolfSSL 14:167253f4e170 33035 0x17ddb7a7aafe894cl },
wolfSSL 14:167253f4e170 33036 { 0x28d1456f6d1d742fl,0xeec09651917d1268l,0xdecb1c700fd5b4c0l,
wolfSSL 14:167253f4e170 33037 0x32d14f6acf2861dbl },
wolfSSL 14:167253f4e170 33038 0 },
wolfSSL 14:167253f4e170 33039 /* 36 << 8 */
wolfSSL 14:167253f4e170 33040 { { 0x903f6e3960e913afl,0xb2b58bee98bf140dl,0x9deff025354890b8l,
wolfSSL 14:167253f4e170 33041 0x155810068d2e924el },
wolfSSL 14:167253f4e170 33042 { 0xb5755db493c95e5bl,0x3fac42f0dae20eb8l,0x9377c8c109b6d8e0l,
wolfSSL 14:167253f4e170 33043 0xa43e2b46ab47ceffl },
wolfSSL 14:167253f4e170 33044 0 },
wolfSSL 14:167253f4e170 33045 /* 37 << 8 */
wolfSSL 14:167253f4e170 33046 { { 0x6c3f5a51cb61e7e7l,0x264aebc80d9c73b2l,0xc404b2114a0d9288l,
wolfSSL 14:167253f4e170 33047 0x5178d3cf8b3a79e9l },
wolfSSL 14:167253f4e170 33048 { 0x4080be5372a420d7l,0xa39396adef026429l,0x22fbb92e8dde4728l,
wolfSSL 14:167253f4e170 33049 0x19e42d8874d949fcl },
wolfSSL 14:167253f4e170 33050 0 },
wolfSSL 14:167253f4e170 33051 /* 39 << 8 */
wolfSSL 14:167253f4e170 33052 { { 0xde352d78387f5557l,0x6770149969367413l,0x255bb8c00b0cc102l,
wolfSSL 14:167253f4e170 33053 0x63cad1be1f4d262el },
wolfSSL 14:167253f4e170 33054 { 0xf34f9a8a3f8f4fb6l,0x32bc13aae03a969fl,0xb29d4336218371cdl,
wolfSSL 14:167253f4e170 33055 0x799d76ab285bd210l },
wolfSSL 14:167253f4e170 33056 0 },
wolfSSL 14:167253f4e170 33057 /* 40 << 8 */
wolfSSL 14:167253f4e170 33058 { { 0x5f57b2fbfacfa459l,0x874b1498c1b5aa6bl,0xb9e89acac4db2092l,
wolfSSL 14:167253f4e170 33059 0x1362bf8ddf4381dal },
wolfSSL 14:167253f4e170 33060 { 0x25d76830b76328a0l,0x38188b7098572ae4l,0xb43e941429132f7dl,
wolfSSL 14:167253f4e170 33061 0x7895a29f22dd42c9l },
wolfSSL 14:167253f4e170 33062 0 },
wolfSSL 14:167253f4e170 33063 /* 41 << 8 */
wolfSSL 14:167253f4e170 33064 { { 0x85bded619e808c05l,0x6e0fc2bcc7ef83bbl,0xed70e0b499bedf77l,
wolfSSL 14:167253f4e170 33065 0x300e777dc1aaffc0l },
wolfSSL 14:167253f4e170 33066 { 0xe2da2359c43e6d2cl,0xacf6d60a275226e0l,0x18ca38f7f82558bdl,
wolfSSL 14:167253f4e170 33067 0xd7b017d475ae2591l },
wolfSSL 14:167253f4e170 33068 0 },
wolfSSL 14:167253f4e170 33069 /* 43 << 8 */
wolfSSL 14:167253f4e170 33070 { { 0xed299e2d7cd92ee2l,0x2c08eb37ad847153l,0x7b372aa712acfd81l,
wolfSSL 14:167253f4e170 33071 0x574d27f5fabda29cl },
wolfSSL 14:167253f4e170 33072 { 0xbd8247f0f2ee6ebcl,0x8bf76710d06be261l,0x26e95b4bcb186d4cl,
wolfSSL 14:167253f4e170 33073 0x4fa3ac1d1ebb4a46l },
wolfSSL 14:167253f4e170 33074 0 },
wolfSSL 14:167253f4e170 33075 /* 44 << 8 */
wolfSSL 14:167253f4e170 33076 { { 0xcbde78dd5e22cbb2l,0xf449c85b76bb4391l,0x4289f357b6a4273bl,
wolfSSL 14:167253f4e170 33077 0x9fce23fd48e84a19l },
wolfSSL 14:167253f4e170 33078 { 0xcfc32730939eb3b4l,0x8b3d982c16c32280l,0x5ac234bad5f1346cl,
wolfSSL 14:167253f4e170 33079 0x781954b470769fc9l },
wolfSSL 14:167253f4e170 33080 0 },
wolfSSL 14:167253f4e170 33081 /* 45 << 8 */
wolfSSL 14:167253f4e170 33082 { { 0xff0d4d30062c7dbdl,0x2c483081e6f9fcf0l,0x22f96316d67e070fl,
wolfSSL 14:167253f4e170 33083 0xdd9be459c0e68c44l },
wolfSSL 14:167253f4e170 33084 { 0xb9c1edffce2edd4dl,0x1a54782021fc538cl,0x93849be49979aee1l,
wolfSSL 14:167253f4e170 33085 0x3f313629a590949el },
wolfSSL 14:167253f4e170 33086 0 },
wolfSSL 14:167253f4e170 33087 /* 46 << 8 */
wolfSSL 14:167253f4e170 33088 { { 0x160b836b266be332l,0x49de38215f340575l,0x782e8f6701edce66l,
wolfSSL 14:167253f4e170 33089 0x83ae008b5df1a93el },
wolfSSL 14:167253f4e170 33090 { 0x85d33a263ed9ffebl,0xae2f9f961e79db97l,0xf64f209b95ae9e34l,
wolfSSL 14:167253f4e170 33091 0x2b6b03455e957d49l },
wolfSSL 14:167253f4e170 33092 0 },
wolfSSL 14:167253f4e170 33093 /* 47 << 8 */
wolfSSL 14:167253f4e170 33094 { { 0x7a24a21a331d6bdal,0xfdba302f6328f742l,0x37a36dd47744dca4l,
wolfSSL 14:167253f4e170 33095 0xda2832ce6fef500fl },
wolfSSL 14:167253f4e170 33096 { 0x23da304a7b49d73al,0xeede2cebc6ad834fl,0xf21a81248dec3c78l,
wolfSSL 14:167253f4e170 33097 0x4bc9469b19b721e3l },
wolfSSL 14:167253f4e170 33098 0 },
wolfSSL 14:167253f4e170 33099 /* 48 << 8 */
wolfSSL 14:167253f4e170 33100 { { 0x6faf68feaae6ee70l,0x78f4cc155602b0c9l,0x7e3321a86e94052al,
wolfSSL 14:167253f4e170 33101 0x2fb3a0d6734d5d80l },
wolfSSL 14:167253f4e170 33102 { 0xf3b98f3bb25a43bal,0x30bf803119ee2951l,0x7ffee43321b0612al,
wolfSSL 14:167253f4e170 33103 0x12f775e42eb821d0l },
wolfSSL 14:167253f4e170 33104 0 },
wolfSSL 14:167253f4e170 33105 /* 49 << 8 */
wolfSSL 14:167253f4e170 33106 { { 0x31cc342913e5c1d6l,0x05deaa3cee54e334l,0x21ea2b61cd5087d8l,
wolfSSL 14:167253f4e170 33107 0x73a1841e70d1b8bcl },
wolfSSL 14:167253f4e170 33108 { 0xd44e2b41b078bf14l,0xc295732fcea2a30el,0x30cdab42954939f7l,
wolfSSL 14:167253f4e170 33109 0xc1b4e43a2dba0b7cl },
wolfSSL 14:167253f4e170 33110 0 },
wolfSSL 14:167253f4e170 33111 /* 51 << 8 */
wolfSSL 14:167253f4e170 33112 { { 0x5f33f618b6a20132l,0xc8d73e3cfbbf3022l,0xf3b9844d47ed4320l,
wolfSSL 14:167253f4e170 33113 0xab5868aa927f00cal },
wolfSSL 14:167253f4e170 33114 { 0x06cb1113077f6e1cl,0x1417b43a5c94faaal,0x7666cb90cf4cd1e9l,
wolfSSL 14:167253f4e170 33115 0x99e009f210900566l },
wolfSSL 14:167253f4e170 33116 0 },
wolfSSL 14:167253f4e170 33117 /* 52 << 8 */
wolfSSL 14:167253f4e170 33118 { { 0x4fdff805f57209b5l,0x9bd65ac3f952ac8dl,0x02a3abd3c7969a6fl,
wolfSSL 14:167253f4e170 33119 0x1359927ef523775fl },
wolfSSL 14:167253f4e170 33120 { 0xe09b463f88d2e861l,0x661d2199623287c3l,0x821e64495a70eb7al,
wolfSSL 14:167253f4e170 33121 0x0afbbb1dd67dc684l },
wolfSSL 14:167253f4e170 33122 0 },
wolfSSL 14:167253f4e170 33123 /* 53 << 8 */
wolfSSL 14:167253f4e170 33124 { { 0x2c5a2b2d55750eb2l,0x54d756c29dc28d9fl,0x798c8d113af97f71l,
wolfSSL 14:167253f4e170 33125 0x54e21ee21f6d1853l },
wolfSSL 14:167253f4e170 33126 { 0x34e0c8bceffc3f8al,0xed3cc4dda96f193fl,0x86436a84fad97110l,
wolfSSL 14:167253f4e170 33127 0x8530ca522c97205el },
wolfSSL 14:167253f4e170 33128 0 },
wolfSSL 14:167253f4e170 33129 /* 55 << 8 */
wolfSSL 14:167253f4e170 33130 { { 0x9b6c8452f7236867l,0x21cf260c777b44fdl,0x659fc99dceb00c52l,
wolfSSL 14:167253f4e170 33131 0xda97098e2439e8dbl },
wolfSSL 14:167253f4e170 33132 { 0x647efe510ed6e14fl,0x37c8ca122a6600f3l,0x53e89b0badf6f4a7l,
wolfSSL 14:167253f4e170 33133 0xd9fc8c716645618al },
wolfSSL 14:167253f4e170 33134 0 },
wolfSSL 14:167253f4e170 33135 /* 57 << 8 */
wolfSSL 14:167253f4e170 33136 { { 0x9cecfb8eee6ebd31l,0x4603994b1ff25529l,0x707bc80af4b141c4l,
wolfSSL 14:167253f4e170 33137 0x3a83d56c07524d3al },
wolfSSL 14:167253f4e170 33138 { 0x7035c746613a3020l,0x7aa766b286626a1cl,0x3af656095ac76c78l,
wolfSSL 14:167253f4e170 33139 0x4039c655171e47d6l },
wolfSSL 14:167253f4e170 33140 0 },
wolfSSL 14:167253f4e170 33141 /* 59 << 8 */
wolfSSL 14:167253f4e170 33142 { { 0x79cb147f0ce33b63l,0xa1328a622d160c61l,0xf99538f3cf7eb87el,
wolfSSL 14:167253f4e170 33143 0x0334d4958e2241d5l },
wolfSSL 14:167253f4e170 33144 { 0x3ad97e02f3e49e48l,0xdcfcc754037c3679l,0x76078ba61a8ff67cl,
wolfSSL 14:167253f4e170 33145 0x8054aa55c2a64964l },
wolfSSL 14:167253f4e170 33146 0 },
wolfSSL 14:167253f4e170 33147 /* 60 << 8 */
wolfSSL 14:167253f4e170 33148 { { 0x5852104b87453b28l,0x073e8128b387344dl,0x300e78e4817cfc08l,
wolfSSL 14:167253f4e170 33149 0x3a82ed4799362088l },
wolfSSL 14:167253f4e170 33150 { 0xe222304c88de46a4l,0x666c94fd57fadf4al,0x40b2d08ea0c8e108l,
wolfSSL 14:167253f4e170 33151 0x4b2955b909e050fal },
wolfSSL 14:167253f4e170 33152 0 },
wolfSSL 14:167253f4e170 33153 /* 61 << 8 */
wolfSSL 14:167253f4e170 33154 { { 0x656078565f814881l,0x0fc3d1ce58466117l,0x0ae377d3c6c1e68al,
wolfSSL 14:167253f4e170 33155 0xe3dd8d5cba566c48l },
wolfSSL 14:167253f4e170 33156 { 0x9404849ec4b63be6l,0x1e22b03ba5be9c92l,0x08145122a8b03e63l,
wolfSSL 14:167253f4e170 33157 0x71248243771fe153l },
wolfSSL 14:167253f4e170 33158 0 },
wolfSSL 14:167253f4e170 33159 /* 63 << 8 */
wolfSSL 14:167253f4e170 33160 { { 0xa80a0e83b41ac541l,0xa77570ea533e5f9bl,0x416a14c0216dc452l,
wolfSSL 14:167253f4e170 33161 0x2a8d728a19f7ee59l },
wolfSSL 14:167253f4e170 33162 { 0x58494c8cd6552eaal,0x4d635acd60145722l,0xa8e9b127327b1cbcl,
wolfSSL 14:167253f4e170 33163 0xb429a62e9f8235f0l },
wolfSSL 14:167253f4e170 33164 0 },
wolfSSL 14:167253f4e170 33165 /* 64 << 8 */
wolfSSL 14:167253f4e170 33166 { { 0xf8d112e76e6485b3l,0x4d3e24db771c52f8l,0x48e3ee41684a2f6dl,
wolfSSL 14:167253f4e170 33167 0x7161957d21d95551l },
wolfSSL 14:167253f4e170 33168 { 0x19631283cdb12a6cl,0xbf3fa8822e50e164l,0xf6254b633166cc73l,
wolfSSL 14:167253f4e170 33169 0x3aefa7aeaee8cc38l },
wolfSSL 14:167253f4e170 33170 0 },
wolfSSL 14:167253f4e170 33171 /* 65 << 8 */
wolfSSL 14:167253f4e170 33172 { { 0xd52d2cb746ef1c7el,0xebd4f7c4d8fb6e07l,0x16f77a48cf6dd2b4l,
wolfSSL 14:167253f4e170 33173 0x6e8f0431e77e4d51l },
wolfSSL 14:167253f4e170 33174 { 0x59d94cc4e9177bf2l,0xb58a578f7a7181a1l,0xeefbc4cde8f6d330l,
wolfSSL 14:167253f4e170 33175 0xa66c85560fe05490l },
wolfSSL 14:167253f4e170 33176 0 },
wolfSSL 14:167253f4e170 33177 /* 71 << 8 */
wolfSSL 14:167253f4e170 33178 { { 0x0e6db7a35d9649dal,0x4d2f25193be3d362l,0xcd891fd5a6b137b5l,
wolfSSL 14:167253f4e170 33179 0xa4b7e4ddacd377a9l },
wolfSSL 14:167253f4e170 33180 { 0x20ccd6f24355f258l,0x842c08673aafb413l,0xdd55db99d6873b88l,
wolfSSL 14:167253f4e170 33181 0x04d15f4fea5a2a55l },
wolfSSL 14:167253f4e170 33182 0 },
wolfSSL 14:167253f4e170 33183 /* 77 << 8 */
wolfSSL 14:167253f4e170 33184 { { 0x679cd93dfae289c2l,0x84cadd61ff92ba1bl,0x548b5a6f2cd734aal,
wolfSSL 14:167253f4e170 33185 0x1827507db8267082l },
wolfSSL 14:167253f4e170 33186 { 0xa903a6010c6d5b4cl,0xde0d96befdfb952bl,0x2fc9419c6a2e24f9l,
wolfSSL 14:167253f4e170 33187 0x27333e3936bb3203l },
wolfSSL 14:167253f4e170 33188 0 },
wolfSSL 14:167253f4e170 33189 /* 83 << 8 */
wolfSSL 14:167253f4e170 33190 { { 0x3eb7f062dde4aa6al,0x40effae07f354cc0l,0xe9a14bc2a066c05el,
wolfSSL 14:167253f4e170 33191 0x7817b11356afc543l },
wolfSSL 14:167253f4e170 33192 { 0x5f0ed1f28bdda262l,0x001e23d2e007ec13l,0x435878a59c57de6al,
wolfSSL 14:167253f4e170 33193 0x84d0e20895ac263cl },
wolfSSL 14:167253f4e170 33194 0 },
wolfSSL 14:167253f4e170 33195 /* 89 << 8 */
wolfSSL 14:167253f4e170 33196 { { 0xedf24aec97a66678l,0xd1f93cf8ccf55671l,0x4ed2ce8a9379a49dl,
wolfSSL 14:167253f4e170 33197 0x64991862c39b0ac9l },
wolfSSL 14:167253f4e170 33198 { 0xc15b24e31ff67e04l,0x4ee8fc76c3c084fel,0x262012b4f64bcd46l,
wolfSSL 14:167253f4e170 33199 0x3b5086732425c622l },
wolfSSL 14:167253f4e170 33200 0 },
wolfSSL 14:167253f4e170 33201 /* 95 << 8 */
wolfSSL 14:167253f4e170 33202 { { 0xaa3e451fe65002f7l,0xf5ff2617eb46d253l,0x918d146e572afca2l,
wolfSSL 14:167253f4e170 33203 0x0a9333b7e56a8553l },
wolfSSL 14:167253f4e170 33204 { 0x9b7e232d94127dc0l,0xcd0687d6831014e6l,0x725ce5baf08e1c71l,
wolfSSL 14:167253f4e170 33205 0x56e26f48cde0e4edl },
wolfSSL 14:167253f4e170 33206 0 },
wolfSSL 14:167253f4e170 33207 /* 101 << 8 */
wolfSSL 14:167253f4e170 33208 { { 0xae78dde8db833460l,0xaf1736fe762cb78al,0x5cd85742eae5ac60l,
wolfSSL 14:167253f4e170 33209 0x7b6c52fe955e981al },
wolfSSL 14:167253f4e170 33210 { 0x9f823e8555599f97l,0xb9ce70d21a4b46b3l,0xb6076175d7d09829l,
wolfSSL 14:167253f4e170 33211 0x21e77d22abf390a4l },
wolfSSL 14:167253f4e170 33212 0 },
wolfSSL 14:167253f4e170 33213 /* 107 << 8 */
wolfSSL 14:167253f4e170 33214 { { 0xf704f09da142ad7el,0xb60ec2e1bab9f5d2l,0x4180314681e54d0dl,
wolfSSL 14:167253f4e170 33215 0x0de50506309335e6l },
wolfSSL 14:167253f4e170 33216 { 0x4135374e05aec64fl,0xb5d31041b556808al,0x0092eb86049033a8l,
wolfSSL 14:167253f4e170 33217 0x5b7a2fa0bde0d737l },
wolfSSL 14:167253f4e170 33218 0 },
wolfSSL 14:167253f4e170 33219 /* 113 << 8 */
wolfSSL 14:167253f4e170 33220 { { 0xc0dfa6bbefb40cfal,0x86a6fe279c5037f3l,0xf153cd37f71155f4l,
wolfSSL 14:167253f4e170 33221 0xf16d6029767664f9l },
wolfSSL 14:167253f4e170 33222 { 0x7441aa54c635aa57l,0x547f82e9e8186b2el,0x330b464bfbf7c7fel,
wolfSSL 14:167253f4e170 33223 0xb5556770a1f6fddel },
wolfSSL 14:167253f4e170 33224 0 },
wolfSSL 14:167253f4e170 33225 /* 116 << 8 */
wolfSSL 14:167253f4e170 33226 { { 0xa0a9c5d1e8f9edf1l,0x9814c26b6946cea3l,0xcbb47a37d8e6a08dl,
wolfSSL 14:167253f4e170 33227 0x517a3d9b2cba11b1l },
wolfSSL 14:167253f4e170 33228 { 0x94edc73dab43c540l,0x4fd0b82a753e552cl,0x419aab8bd14ae853l,
wolfSSL 14:167253f4e170 33229 0x94955f9ca68abad8l },
wolfSSL 14:167253f4e170 33230 0 },
wolfSSL 14:167253f4e170 33231 /* 119 << 8 */
wolfSSL 14:167253f4e170 33232 { { 0x3a162e06ed169150l,0x8c9683a6ba1194a8l,0x53fead66ccc28d04l,
wolfSSL 14:167253f4e170 33233 0xdbb2a85bef09809al },
wolfSSL 14:167253f4e170 33234 { 0x58e677439d3ab018l,0xff9a2046b6e56bd0l,0xf4b8215eb28061e9l,
wolfSSL 14:167253f4e170 33235 0xcf16d9f7b10e358fl },
wolfSSL 14:167253f4e170 33236 0 },
wolfSSL 14:167253f4e170 33237 /* 125 << 8 */
wolfSSL 14:167253f4e170 33238 { { 0x265ceae9a55abe39l,0x9e3783f796a98f84l,0xb799628af0757d99l,
wolfSSL 14:167253f4e170 33239 0xebb5f12665472fb3l },
wolfSSL 14:167253f4e170 33240 { 0xd83619f52ba517d8l,0x5672105f50382bdfl,0x32c5681c4a12ee9fl,
wolfSSL 14:167253f4e170 33241 0x31e6f60d834a9fedl },
wolfSSL 14:167253f4e170 33242 0 },
wolfSSL 14:167253f4e170 33243 },
wolfSSL 14:167253f4e170 33244 {
wolfSSL 14:167253f4e170 33245 /* 0 << 16 */
wolfSSL 14:167253f4e170 33246 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 33247 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 33248 1 },
wolfSSL 14:167253f4e170 33249 /* 1 << 16 */
wolfSSL 14:167253f4e170 33250 { { 0x0f0165fce3779ee3l,0xe00e7f9dbd495d9el,0x1fa4efa220284e7al,
wolfSSL 14:167253f4e170 33251 0x4564bade47ac6219l },
wolfSSL 14:167253f4e170 33252 { 0x90e6312ac4708e8el,0x4f5725fba71e9adfl,0xe95f55ae3d684b9fl,
wolfSSL 14:167253f4e170 33253 0x47f7ccb11e94b415l },
wolfSSL 14:167253f4e170 33254 0 },
wolfSSL 14:167253f4e170 33255 /* 3 << 16 */
wolfSSL 14:167253f4e170 33256 { { 0xbd9b8b1dbe7a2af3l,0xec51caa94fb74a72l,0xb9937a4b63879697l,
wolfSSL 14:167253f4e170 33257 0x7c9a9d20ec2687d5l },
wolfSSL 14:167253f4e170 33258 { 0x1773e44f6ef5f014l,0x8abcf412e90c6900l,0x387bd0228142161el,
wolfSSL 14:167253f4e170 33259 0x50393755fcb6ff2al },
wolfSSL 14:167253f4e170 33260 0 },
wolfSSL 14:167253f4e170 33261 /* 4 << 16 */
wolfSSL 14:167253f4e170 33262 { { 0xfabf770977f7195al,0x8ec86167adeb838fl,0xea1285a8bb4f012dl,
wolfSSL 14:167253f4e170 33263 0xd68835039a3eab3fl },
wolfSSL 14:167253f4e170 33264 { 0xee5d24f8309004c2l,0xa96e4b7613ffe95el,0x0cdffe12bd223ea4l,
wolfSSL 14:167253f4e170 33265 0x8f5c2ee5b6739a53l },
wolfSSL 14:167253f4e170 33266 0 },
wolfSSL 14:167253f4e170 33267 /* 5 << 16 */
wolfSSL 14:167253f4e170 33268 { { 0x3d61333959145a65l,0xcd9bc368fa406337l,0x82d11be32d8a52a0l,
wolfSSL 14:167253f4e170 33269 0xf6877b2797a1c590l },
wolfSSL 14:167253f4e170 33270 { 0x837a819bf5cbdb25l,0x2a4fd1d8de090249l,0x622a7de774990e5fl,
wolfSSL 14:167253f4e170 33271 0x840fa5a07945511bl },
wolfSSL 14:167253f4e170 33272 0 },
wolfSSL 14:167253f4e170 33273 /* 7 << 16 */
wolfSSL 14:167253f4e170 33274 { { 0x26e08c07e3533d77l,0xd7222e6a2e341c99l,0x9d60ec3d8d2dc4edl,
wolfSSL 14:167253f4e170 33275 0xbdfe0d8f7c476cf8l },
wolfSSL 14:167253f4e170 33276 { 0x1fe59ab61d056605l,0xa9ea9df686a8551fl,0x8489941e47fb8d8cl,
wolfSSL 14:167253f4e170 33277 0xfeb874eb4a7f1b10l },
wolfSSL 14:167253f4e170 33278 0 },
wolfSSL 14:167253f4e170 33279 /* 9 << 16 */
wolfSSL 14:167253f4e170 33280 { { 0x9164088d977eab40l,0x51f4c5b62760b390l,0xd238238f340dd553l,
wolfSSL 14:167253f4e170 33281 0x358566c3db1d31c9l },
wolfSSL 14:167253f4e170 33282 { 0x3a5ad69e5068f5ffl,0xf31435fcdaff6b06l,0xae549a5bd6debff0l,
wolfSSL 14:167253f4e170 33283 0x59e5f0b775e01331l },
wolfSSL 14:167253f4e170 33284 0 },
wolfSSL 14:167253f4e170 33285 /* 10 << 16 */
wolfSSL 14:167253f4e170 33286 { { 0x2cc5226138634818l,0x501814f4b44c2e0bl,0xf7e181aa54dfdba3l,
wolfSSL 14:167253f4e170 33287 0xcfd58ff0e759718cl },
wolfSSL 14:167253f4e170 33288 { 0xf90cdb14d3b507a8l,0x57bd478ec50bdad8l,0x29c197e250e5f9aal,
wolfSSL 14:167253f4e170 33289 0x4db6eef8e40bc855l },
wolfSSL 14:167253f4e170 33290 0 },
wolfSSL 14:167253f4e170 33291 /* 11 << 16 */
wolfSSL 14:167253f4e170 33292 { { 0xd5d5cdd35958cd79l,0x3580a1b51d373114l,0xa36e4c91fa935726l,
wolfSSL 14:167253f4e170 33293 0xa38c534def20d760l },
wolfSSL 14:167253f4e170 33294 { 0x7088e40a2ff5845bl,0xe5bb40bdbd78177fl,0x4f06a7a8857f9920l,
wolfSSL 14:167253f4e170 33295 0xe3cc3e50e968f05dl },
wolfSSL 14:167253f4e170 33296 0 },
wolfSSL 14:167253f4e170 33297 /* 13 << 16 */
wolfSSL 14:167253f4e170 33298 { { 0x10595b5696a71cbal,0x944938b2fdcadeb7l,0xa282da4cfccd8471l,
wolfSSL 14:167253f4e170 33299 0x98ec05f30d37bfe1l },
wolfSSL 14:167253f4e170 33300 { 0xe171ce1b0698304al,0x2d69144421bdf79bl,0xd0cd3b741b21dec1l,
wolfSSL 14:167253f4e170 33301 0x712ecd8b16a15f71l },
wolfSSL 14:167253f4e170 33302 0 },
wolfSSL 14:167253f4e170 33303 /* 15 << 16 */
wolfSSL 14:167253f4e170 33304 { { 0xe89f48c85963a46el,0x658ab875a99e61c7l,0x6e296f874b8517b4l,
wolfSSL 14:167253f4e170 33305 0x36c4fcdcfc1bc656l },
wolfSSL 14:167253f4e170 33306 { 0xde5227a1a3906defl,0x9fe95f5762418945l,0x20c91e81fdd96cdel,
wolfSSL 14:167253f4e170 33307 0x5adbe47eda4480del },
wolfSSL 14:167253f4e170 33308 0 },
wolfSSL 14:167253f4e170 33309 /* 16 << 16 */
wolfSSL 14:167253f4e170 33310 { { 0xa7a8746a584c5e20l,0x267e4ea1b9dc7035l,0x593a15cfb9548c9bl,
wolfSSL 14:167253f4e170 33311 0x5e6e21354bd012f3l },
wolfSSL 14:167253f4e170 33312 { 0xdf31cc6a8c8f936el,0x8af84d04b5c241dcl,0x63990a6f345efb86l,
wolfSSL 14:167253f4e170 33313 0x6fef4e61b9b962cbl },
wolfSSL 14:167253f4e170 33314 0 },
wolfSSL 14:167253f4e170 33315 /* 17 << 16 */
wolfSSL 14:167253f4e170 33316 { { 0xaa35809ddfe6e2a0l,0xebb4d7d4356a2222l,0x7d500a6a319f33b7l,
wolfSSL 14:167253f4e170 33317 0x4895a47d4ac99011l },
wolfSSL 14:167253f4e170 33318 { 0x300ab40bdf3812b2l,0xd0764ec88aec8b9fl,0x86b61d95e591b2a7l,
wolfSSL 14:167253f4e170 33319 0xc1b2a0b72ed74603l },
wolfSSL 14:167253f4e170 33320 0 },
wolfSSL 14:167253f4e170 33321 /* 19 << 16 */
wolfSSL 14:167253f4e170 33322 { { 0x6001bf5d3849c680l,0xd7a1a4e4c1d3faccl,0xa0f2776418c5e351l,
wolfSSL 14:167253f4e170 33323 0x0849c0736c29c623l },
wolfSSL 14:167253f4e170 33324 { 0x3317e143ac751c0cl,0x9bcb1f3eda06200bl,0x40a63a75541419b5l,
wolfSSL 14:167253f4e170 33325 0x8fad9c983f62c513l },
wolfSSL 14:167253f4e170 33326 0 },
wolfSSL 14:167253f4e170 33327 /* 21 << 16 */
wolfSSL 14:167253f4e170 33328 { { 0xacff0828d03b2242l,0x5a9375c43abb7389l,0x41b1a318d0192baal,
wolfSSL 14:167253f4e170 33329 0x105bd3100458e97bl },
wolfSSL 14:167253f4e170 33330 { 0x71582dc7ed496315l,0x8ab2884a4d4bda18l,0xb8b638b494bc5bb8l,
wolfSSL 14:167253f4e170 33331 0xb42ed1309500bb04l },
wolfSSL 14:167253f4e170 33332 0 },
wolfSSL 14:167253f4e170 33333 /* 23 << 16 */
wolfSSL 14:167253f4e170 33334 { { 0x73e04f02ad1ed952l,0x680051cadfa5bdb7l,0xbe0bef3c0c7437b9l,
wolfSSL 14:167253f4e170 33335 0x45d6f3a40e65e627l },
wolfSSL 14:167253f4e170 33336 { 0x5295e060c9436a75l,0xbe84ba78d289ba9el,0x350887fd69c09364l,
wolfSSL 14:167253f4e170 33337 0xf27bfd17671c64a7l },
wolfSSL 14:167253f4e170 33338 0 },
wolfSSL 14:167253f4e170 33339 /* 25 << 16 */
wolfSSL 14:167253f4e170 33340 { { 0xc8afbdc3adf6ffc5l,0x4a4fb35876385891l,0xc7fa86424d41453fl,
wolfSSL 14:167253f4e170 33341 0x19490b7672eedd06l },
wolfSSL 14:167253f4e170 33342 { 0xc883e45337d22d6al,0x8e6e38e4a9009f96l,0x44e2811eb1c560c6l,
wolfSSL 14:167253f4e170 33343 0x8a0021bf4439cfcfl },
wolfSSL 14:167253f4e170 33344 0 },
wolfSSL 14:167253f4e170 33345 /* 27 << 16 */
wolfSSL 14:167253f4e170 33346 { { 0xba768f8b7615a327l,0x6c8b320d7b15bbe7l,0x5d8d5bcbaaa9ca64l,
wolfSSL 14:167253f4e170 33347 0x19a2b99f3d13cdfdl },
wolfSSL 14:167253f4e170 33348 { 0x858288a26f172e10l,0x2412a4da37a00f94l,0xfc67fd2edaa7f6c6l,
wolfSSL 14:167253f4e170 33349 0x4aea0eadafa2a5c5l },
wolfSSL 14:167253f4e170 33350 0 },
wolfSSL 14:167253f4e170 33351 /* 28 << 16 */
wolfSSL 14:167253f4e170 33352 { { 0x5c80ccef6cd77b30l,0x49978299ec99b6d0l,0x6bf4485eb939d335l,
wolfSSL 14:167253f4e170 33353 0xc53e61ab86d7c147l },
wolfSSL 14:167253f4e170 33354 { 0xdd948052fb601dddl,0x34c5eb393511dd48l,0x91f5c67600e6f61cl,
wolfSSL 14:167253f4e170 33355 0x33f1b525b1e71f34l },
wolfSSL 14:167253f4e170 33356 0 },
wolfSSL 14:167253f4e170 33357 /* 29 << 16 */
wolfSSL 14:167253f4e170 33358 { { 0xb4cb4a151d2dad36l,0x709a61631e60b60dl,0x2f18f3bd932ece4fl,
wolfSSL 14:167253f4e170 33359 0x70f495a8e92368bel },
wolfSSL 14:167253f4e170 33360 { 0x6e88be2bb7aeaa6fl,0x4efebd9ae1bf1d6el,0x49925e6e44e94993l,
wolfSSL 14:167253f4e170 33361 0x33b7aba0ef0517dcl },
wolfSSL 14:167253f4e170 33362 0 },
wolfSSL 14:167253f4e170 33363 /* 31 << 16 */
wolfSSL 14:167253f4e170 33364 { { 0x69ce1f207afe6c37l,0xe1148ba984f68db5l,0x32668bdc2c594a8al,
wolfSSL 14:167253f4e170 33365 0x2cb60d3063ac4fb3l },
wolfSSL 14:167253f4e170 33366 { 0x5e6efe1dd9e036f8l,0x917cb2a27db4739fl,0x70ea601ded4e0b5el,
wolfSSL 14:167253f4e170 33367 0x5928f068ae7ac8a6l },
wolfSSL 14:167253f4e170 33368 0 },
wolfSSL 14:167253f4e170 33369 /* 33 << 16 */
wolfSSL 14:167253f4e170 33370 { { 0x9e4ad0073f2d96abl,0x51a9697f2d058c03l,0xcd5c0a7522d1e795l,
wolfSSL 14:167253f4e170 33371 0xaa1a121c2ac4f019l },
wolfSSL 14:167253f4e170 33372 { 0xa837c14c3e3631f4l,0x6a997381236a5576l,0xb305e7db2753782bl,
wolfSSL 14:167253f4e170 33373 0xae561b0237243afbl },
wolfSSL 14:167253f4e170 33374 0 },
wolfSSL 14:167253f4e170 33375 /* 34 << 16 */
wolfSSL 14:167253f4e170 33376 { { 0x20176baca787897bl,0x057b8b979a9f67d9l,0xe7d5c4f761e14e09l,
wolfSSL 14:167253f4e170 33377 0x8e4856901e6cd6d0l },
wolfSSL 14:167253f4e170 33378 { 0x3eeffbba9b925d52l,0xe651a5383046927bl,0x02326d1fe92d4352l,
wolfSSL 14:167253f4e170 33379 0xad2d6493d697369fl },
wolfSSL 14:167253f4e170 33380 0 },
wolfSSL 14:167253f4e170 33381 /* 35 << 16 */
wolfSSL 14:167253f4e170 33382 { { 0xe9de299c548c4ca5l,0x66f64ef54be3bde3l,0xcf6d39ebf2d5ebc9l,
wolfSSL 14:167253f4e170 33383 0x665ca727898953e1l },
wolfSSL 14:167253f4e170 33384 { 0x521ec435e33ac1b4l,0x8418fa7534ab2b82l,0x94d6c0c4771a3a87l,
wolfSSL 14:167253f4e170 33385 0x21feb6054859ee22l },
wolfSSL 14:167253f4e170 33386 0 },
wolfSSL 14:167253f4e170 33387 /* 36 << 16 */
wolfSSL 14:167253f4e170 33388 { { 0xde7153f8eed9dd1dl,0xba09ad1152ebcb2el,0xaa41b015e1843fb6l,
wolfSSL 14:167253f4e170 33389 0xf933a2abdd4ce6f0l },
wolfSSL 14:167253f4e170 33390 { 0x777f834313f6b83fl,0x28df7da4db113a75l,0x6d7d1b3c72a5d143l,
wolfSSL 14:167253f4e170 33391 0x6f789698966c6ddfl },
wolfSSL 14:167253f4e170 33392 0 },
wolfSSL 14:167253f4e170 33393 /* 37 << 16 */
wolfSSL 14:167253f4e170 33394 { { 0x57d11ed7a95e704el,0x7d5ac6dc380ad582l,0xb175421d5ab6e377l,
wolfSSL 14:167253f4e170 33395 0x4e383b0ba760dd4dl },
wolfSSL 14:167253f4e170 33396 { 0xde07b81a352b6cb3l,0x342abe825c2e1704l,0x90988de20dd48537l,
wolfSSL 14:167253f4e170 33397 0x4a7fec0544821591l },
wolfSSL 14:167253f4e170 33398 0 },
wolfSSL 14:167253f4e170 33399 /* 39 << 16 */
wolfSSL 14:167253f4e170 33400 { { 0xb0e4d17c90a94eb7l,0x27555067aceb0176l,0x587576e15c38c4e2l,
wolfSSL 14:167253f4e170 33401 0xe647d9dd445f2880l },
wolfSSL 14:167253f4e170 33402 { 0x00beb2f5ca502f83l,0x4e89e638c44767c7l,0xbef361da154a5757l,
wolfSSL 14:167253f4e170 33403 0x2dc632a2dc0675f2l },
wolfSSL 14:167253f4e170 33404 0 },
wolfSSL 14:167253f4e170 33405 /* 40 << 16 */
wolfSSL 14:167253f4e170 33406 { { 0xed439a33a72ba054l,0xa3170a15ead265bal,0xcf7eb903fe99a58el,
wolfSSL 14:167253f4e170 33407 0xcf6db0c633d80c26l },
wolfSSL 14:167253f4e170 33408 { 0xd031255ef613e71al,0x12ccbe5718ca255cl,0xdd21d0537808c40dl,
wolfSSL 14:167253f4e170 33409 0xf5488ebc3af2be6bl },
wolfSSL 14:167253f4e170 33410 0 },
wolfSSL 14:167253f4e170 33411 /* 41 << 16 */
wolfSSL 14:167253f4e170 33412 { { 0x589a125ac10f8157l,0x3c8a15bde1353e49l,0x7d9bbd0c22ce2dd0l,
wolfSSL 14:167253f4e170 33413 0xdfcd019211ac7bb1l },
wolfSSL 14:167253f4e170 33414 { 0x0e1d67151193c5b1l,0xd4de115ab0e8c285l,0x0b3e94c2272c29fel,
wolfSSL 14:167253f4e170 33415 0xea640843c8213581l },
wolfSSL 14:167253f4e170 33416 0 },
wolfSSL 14:167253f4e170 33417 /* 43 << 16 */
wolfSSL 14:167253f4e170 33418 { { 0x7a01aeed6aca2231l,0x8135cf2ace80abbel,0xdc1a41b2ae5fdec9l,
wolfSSL 14:167253f4e170 33419 0xde34ea4da0174364l },
wolfSSL 14:167253f4e170 33420 { 0xa5104e453cf8b845l,0x4b6fd986675ba557l,0x4bc750af29c8cb4al,
wolfSSL 14:167253f4e170 33421 0x8bebb266583f9391l },
wolfSSL 14:167253f4e170 33422 0 },
wolfSSL 14:167253f4e170 33423 /* 44 << 16 */
wolfSSL 14:167253f4e170 33424 { { 0x47110d7c1be3f9c5l,0x12b9e4485eadb4ddl,0x6e8c09870b713d41l,
wolfSSL 14:167253f4e170 33425 0xe1e20356733d56ael },
wolfSSL 14:167253f4e170 33426 { 0xe68d6bab445ea727l,0x9ef4f6eac934a1a4l,0xe0155547f8cef1c3l,
wolfSSL 14:167253f4e170 33427 0xdb5c3909159bdcbfl },
wolfSSL 14:167253f4e170 33428 0 },
wolfSSL 14:167253f4e170 33429 /* 45 << 16 */
wolfSSL 14:167253f4e170 33430 { { 0xef0449cb32fa8a37l,0x95071f5dcd246405l,0x1c56ad776c598891l,
wolfSSL 14:167253f4e170 33431 0x981781de0fa9cd42l },
wolfSSL 14:167253f4e170 33432 { 0x0f93d456d29c0500l,0x43aa7bc1483f52c4l,0xd7c8736666c8abadl,
wolfSSL 14:167253f4e170 33433 0x47552530ea5050efl },
wolfSSL 14:167253f4e170 33434 0 },
wolfSSL 14:167253f4e170 33435 /* 46 << 16 */
wolfSSL 14:167253f4e170 33436 { { 0x40dd9ca9fa9b8d3dl,0xf27b7bc056da41d9l,0x87967f4b66db8845l,
wolfSSL 14:167253f4e170 33437 0xf6918c9444de6bc7l },
wolfSSL 14:167253f4e170 33438 { 0x4d76d51135568d4dl,0x7ab18f9a40e7fa5al,0x069a44bba5bbbdc6l,
wolfSSL 14:167253f4e170 33439 0x19e6c04bb4c8f808l },
wolfSSL 14:167253f4e170 33440 0 },
wolfSSL 14:167253f4e170 33441 /* 47 << 16 */
wolfSSL 14:167253f4e170 33442 { { 0x5fd2501108b2b6c7l,0xcce85a3ec41cad21l,0x90857daffdd70387l,
wolfSSL 14:167253f4e170 33443 0x7a679062c63789f4l },
wolfSSL 14:167253f4e170 33444 { 0x9c462134ef8666e2l,0xcb7dba108c8505bdl,0x7c4a7e2fc610f2e7l,
wolfSSL 14:167253f4e170 33445 0x22906f65d68315f9l },
wolfSSL 14:167253f4e170 33446 0 },
wolfSSL 14:167253f4e170 33447 /* 48 << 16 */
wolfSSL 14:167253f4e170 33448 { { 0xf2efe23d442a8ad1l,0xc3816a7d06b9c164l,0xa9df2d8bdc0aa5e5l,
wolfSSL 14:167253f4e170 33449 0x191ae46f120a8e65l },
wolfSSL 14:167253f4e170 33450 { 0x83667f8700611c5bl,0x83171ed7ff109948l,0x33a2ecf8ca695952l,
wolfSSL 14:167253f4e170 33451 0xfa4a73eef48d1a13l },
wolfSSL 14:167253f4e170 33452 0 },
wolfSSL 14:167253f4e170 33453 /* 49 << 16 */
wolfSSL 14:167253f4e170 33454 { { 0x41dd38c1118de9a0l,0x3485cb3be2d8f6f5l,0xd4bac751b1dcc577l,
wolfSSL 14:167253f4e170 33455 0x2148d93fed12ea6bl },
wolfSSL 14:167253f4e170 33456 { 0xde3504729da8cb18l,0x6046daf89eb85925l,0xddbc357b942b1044l,
wolfSSL 14:167253f4e170 33457 0x248e7afe815b8b7cl },
wolfSSL 14:167253f4e170 33458 0 },
wolfSSL 14:167253f4e170 33459 /* 51 << 16 */
wolfSSL 14:167253f4e170 33460 { { 0xd4bb77b3acb21004l,0xe9f236cf83392035l,0xa9894c5c52133743l,
wolfSSL 14:167253f4e170 33461 0x4d6112749a7b054al },
wolfSSL 14:167253f4e170 33462 { 0xa61675ea4ba2a553l,0x59c199681da6aa78l,0x3988c36590f474del,
wolfSSL 14:167253f4e170 33463 0x73e751bbd001be43l },
wolfSSL 14:167253f4e170 33464 0 },
wolfSSL 14:167253f4e170 33465 /* 52 << 16 */
wolfSSL 14:167253f4e170 33466 { { 0x97cacf846604007dl,0x1e92b4b22d47a9f1l,0x858ae0d6374ed165l,
wolfSSL 14:167253f4e170 33467 0x4c973e6f307aefb8l },
wolfSSL 14:167253f4e170 33468 { 0x6f524a238a10eb72l,0x7b4a92a9eb2849d6l,0x3678bda42fe91eddl,
wolfSSL 14:167253f4e170 33469 0x56092acd7c0fc35cl },
wolfSSL 14:167253f4e170 33470 0 },
wolfSSL 14:167253f4e170 33471 /* 53 << 16 */
wolfSSL 14:167253f4e170 33472 { { 0x93bea99b1b9b43c4l,0x2f6af6f3e145fda2l,0x862f0607278adf0dl,
wolfSSL 14:167253f4e170 33473 0x647be08398456ccal },
wolfSSL 14:167253f4e170 33474 { 0xce79ba1487250c28l,0x1c1c4fc8efedab42l,0x966f612af90caa8dl,
wolfSSL 14:167253f4e170 33475 0xb1a2cf6e72c440f8l },
wolfSSL 14:167253f4e170 33476 0 },
wolfSSL 14:167253f4e170 33477 /* 55 << 16 */
wolfSSL 14:167253f4e170 33478 { { 0x2fca1be45b3b7dd5l,0x453c19853c211bcal,0x313cb21969a46484l,
wolfSSL 14:167253f4e170 33479 0x66082837414bd5dfl },
wolfSSL 14:167253f4e170 33480 { 0xab7a97bf2ac1cdf7l,0x45cd1792676d778fl,0x42fb6c4f6a5b560al,
wolfSSL 14:167253f4e170 33481 0x45747fe30b8f17e9l },
wolfSSL 14:167253f4e170 33482 0 },
wolfSSL 14:167253f4e170 33483 /* 57 << 16 */
wolfSSL 14:167253f4e170 33484 { { 0x38b6db6235db6218l,0xa10cdfe1bb54bacal,0x56fd4a1d610f7f6bl,
wolfSSL 14:167253f4e170 33485 0xc4bea78b76d183d7l },
wolfSSL 14:167253f4e170 33486 { 0xc0e6ca9fbf730d26l,0x1b1e271aed6cf535l,0x6fef275faadbe375l,
wolfSSL 14:167253f4e170 33487 0xfa2e8da903e489bal },
wolfSSL 14:167253f4e170 33488 0 },
wolfSSL 14:167253f4e170 33489 /* 59 << 16 */
wolfSSL 14:167253f4e170 33490 { { 0x6f79d25c7c4626ecl,0xfe27690232d55d6cl,0x3f5c5768afa19ce3l,
wolfSSL 14:167253f4e170 33491 0xa1373777f8834739l },
wolfSSL 14:167253f4e170 33492 { 0x761d67a8a4ce960al,0xb34de1ea459e656al,0x8725b0f09db6f269l,
wolfSSL 14:167253f4e170 33493 0x75316f250dbfe22el },
wolfSSL 14:167253f4e170 33494 0 },
wolfSSL 14:167253f4e170 33495 /* 60 << 16 */
wolfSSL 14:167253f4e170 33496 { { 0x091d5b631a093b40l,0xb85c1c075862f24al,0xc5d74eb53e8f85bfl,
wolfSSL 14:167253f4e170 33497 0xf51c7746cab22456l },
wolfSSL 14:167253f4e170 33498 { 0xc25cb8d9e761da89l,0x2670ec2fc0f028b5l,0x873fd30d2db9af5cl,
wolfSSL 14:167253f4e170 33499 0x3d0f1ea18262565el },
wolfSSL 14:167253f4e170 33500 0 },
wolfSSL 14:167253f4e170 33501 /* 61 << 16 */
wolfSSL 14:167253f4e170 33502 { { 0x8f9492c261c23b3cl,0xd366baeb631688a4l,0x55e759e78093bb07l,
wolfSSL 14:167253f4e170 33503 0xf6d0eaf47218f765l },
wolfSSL 14:167253f4e170 33504 { 0xb8a174ff54ca583bl,0x790f10e0b23d14cel,0xfebe7333be83cbbal,
wolfSSL 14:167253f4e170 33505 0xfeb6dcc5eed67536l },
wolfSSL 14:167253f4e170 33506 0 },
wolfSSL 14:167253f4e170 33507 /* 63 << 16 */
wolfSSL 14:167253f4e170 33508 { { 0x175b3bacce027e5bl,0xe0728a99c48252c4l,0x0be25d4507a39c7cl,
wolfSSL 14:167253f4e170 33509 0xcb9c2d3aba8e8c72l },
wolfSSL 14:167253f4e170 33510 { 0x6185a48d1abd459al,0x27207feadff9a27bl,0xfd92e8231d34393fl,
wolfSSL 14:167253f4e170 33511 0x738511534351d965l },
wolfSSL 14:167253f4e170 33512 0 },
wolfSSL 14:167253f4e170 33513 /* 64 << 16 */
wolfSSL 14:167253f4e170 33514 { { 0xfcde7cc8f43a730fl,0xe89b6f3c33ab590el,0xc823f529ad03240bl,
wolfSSL 14:167253f4e170 33515 0x82b79afe98bea5dbl },
wolfSSL 14:167253f4e170 33516 { 0x568f2856962fe5del,0x0c590adb60c591f3l,0x1fc74a144a28a858l,
wolfSSL 14:167253f4e170 33517 0x3b662498b3203f4cl },
wolfSSL 14:167253f4e170 33518 0 },
wolfSSL 14:167253f4e170 33519 /* 65 << 16 */
wolfSSL 14:167253f4e170 33520 { { 0x8ede0fcdc11682eel,0x41e3faa1b2ab5664l,0x58b2a7dc26a35ff5l,
wolfSSL 14:167253f4e170 33521 0x939bcd6b701b89e9l },
wolfSSL 14:167253f4e170 33522 { 0x55f66fd188e0838fl,0x99d1a77b4ff1f975l,0x103abbf72e060cc5l,
wolfSSL 14:167253f4e170 33523 0x91c77beb6bc4bdbbl },
wolfSSL 14:167253f4e170 33524 0 },
wolfSSL 14:167253f4e170 33525 /* 71 << 16 */
wolfSSL 14:167253f4e170 33526 { { 0xcd048abca380cc72l,0x91cab1bbd0e13662l,0x68115b18686de4cel,
wolfSSL 14:167253f4e170 33527 0x484724e63deccbf5l },
wolfSSL 14:167253f4e170 33528 { 0xf164ba54f176137el,0x5189793662ab2728l,0x6afdecf9b60a5458l,
wolfSSL 14:167253f4e170 33529 0xca40472d0aabafd2l },
wolfSSL 14:167253f4e170 33530 0 },
wolfSSL 14:167253f4e170 33531 /* 77 << 16 */
wolfSSL 14:167253f4e170 33532 { { 0x7a9439183b98d725l,0x1c1763e8ece1ea3cl,0x45c44ef639840476l,
wolfSSL 14:167253f4e170 33533 0x689271e69c009133l },
wolfSSL 14:167253f4e170 33534 { 0xa017405f56a51fe1l,0xd54cc7253e0d0970l,0x212ad075cfe09e8bl,
wolfSSL 14:167253f4e170 33535 0x999f21c37af7bf30l },
wolfSSL 14:167253f4e170 33536 0 },
wolfSSL 14:167253f4e170 33537 /* 83 << 16 */
wolfSSL 14:167253f4e170 33538 { { 0xdc2a2af12bf95f73l,0xb88b4ca76de82cbel,0xa31a21aaecb8e84el,
wolfSSL 14:167253f4e170 33539 0x86d19a601b74f5bel },
wolfSSL 14:167253f4e170 33540 { 0xc68bf64406008019l,0xe52ab50e9431c694l,0x6375463d627ab11cl,
wolfSSL 14:167253f4e170 33541 0xdd3eeaa03c0ef241l },
wolfSSL 14:167253f4e170 33542 0 },
wolfSSL 14:167253f4e170 33543 /* 89 << 16 */
wolfSSL 14:167253f4e170 33544 { { 0x608d9cb323f1caf8l,0x95069450b1700741l,0xe3132bd2bc2fa7aal,
wolfSSL 14:167253f4e170 33545 0xc4f363e7f64e4f06l },
wolfSSL 14:167253f4e170 33546 { 0xb059c4191ca888c2l,0x1004cb1f8d17bf5dl,0x6b6ba6f934ea5711l,
wolfSSL 14:167253f4e170 33547 0x071d94abd79b2c8al },
wolfSSL 14:167253f4e170 33548 0 },
wolfSSL 14:167253f4e170 33549 /* 95 << 16 */
wolfSSL 14:167253f4e170 33550 { { 0xc7ef9b42d147a39dl,0x36dd5d770a10cd5bl,0x3bf6cc77d0eea34bl,
wolfSSL 14:167253f4e170 33551 0x60c84591197479c7l },
wolfSSL 14:167253f4e170 33552 { 0xf95860ac50ba50edl,0xe1c94a8dc4cdc8fal,0x780818d685e24a23l,
wolfSSL 14:167253f4e170 33553 0x1950e3c0c8abbd27l },
wolfSSL 14:167253f4e170 33554 0 },
wolfSSL 14:167253f4e170 33555 /* 101 << 16 */
wolfSSL 14:167253f4e170 33556 { { 0x9908c694ae04778el,0x2e37a6790a0d36ffl,0x212a340f52b067bdl,
wolfSSL 14:167253f4e170 33557 0xec89c9fad080b914l },
wolfSSL 14:167253f4e170 33558 { 0x920dc2f005ab8a23l,0xecff5c78655e8984l,0x80eedd34f66211acl,
wolfSSL 14:167253f4e170 33559 0xa7a56366ef58d4d8l },
wolfSSL 14:167253f4e170 33560 0 },
wolfSSL 14:167253f4e170 33561 /* 107 << 16 */
wolfSSL 14:167253f4e170 33562 { { 0x4f95debe2bca42f0l,0xf0346307844334d2l,0x7003a60521d600aal,
wolfSSL 14:167253f4e170 33563 0x1eb98c6365c5248al },
wolfSSL 14:167253f4e170 33564 { 0x6757b3822fa202cal,0x32765d399fb12f36l,0xe851b476d7b44c9al,
wolfSSL 14:167253f4e170 33565 0x27cd7d1b4e0bab4cl },
wolfSSL 14:167253f4e170 33566 0 },
wolfSSL 14:167253f4e170 33567 /* 113 << 16 */
wolfSSL 14:167253f4e170 33568 { { 0xd0c1f7c9c43ea1a3l,0x73d944f49f42907dl,0xd113f34619352c92l,
wolfSSL 14:167253f4e170 33569 0x86a1ad53b149cdc1l },
wolfSSL 14:167253f4e170 33570 { 0x32c34e8f848d1be4l,0xba8afda7c3d9360bl,0x17e8bc32eea8bf96l,
wolfSSL 14:167253f4e170 33571 0x3174cae499c87febl },
wolfSSL 14:167253f4e170 33572 0 },
wolfSSL 14:167253f4e170 33573 /* 116 << 16 */
wolfSSL 14:167253f4e170 33574 { { 0x4b215f016671b47el,0xb67633ca4a8dae2al,0x2915120f79fd3cdbl,
wolfSSL 14:167253f4e170 33575 0xc1f8a06fb064e6del },
wolfSSL 14:167253f4e170 33576 { 0xf4d5368cc1d57420l,0x6ada51a8e18de475l,0xa0f0d47cc749d4b0l,
wolfSSL 14:167253f4e170 33577 0xabfa2c0074526aa5l },
wolfSSL 14:167253f4e170 33578 0 },
wolfSSL 14:167253f4e170 33579 /* 119 << 16 */
wolfSSL 14:167253f4e170 33580 { { 0xf752f6659e5ce44fl,0x7b97ebfa189d35ecl,0x9540cbb90fc609abl,
wolfSSL 14:167253f4e170 33581 0x19c1dc6999632cc8l },
wolfSSL 14:167253f4e170 33582 { 0x0a957700e08ca9a8l,0xb0cd0ab7a3246a4el,0xca687cfcc8d6a544l,
wolfSSL 14:167253f4e170 33583 0xb6281f0035f82a77l },
wolfSSL 14:167253f4e170 33584 0 },
wolfSSL 14:167253f4e170 33585 /* 125 << 16 */
wolfSSL 14:167253f4e170 33586 { { 0x547027012b818036l,0xf72315f729c8f14cl,0x95f1bc15230e74bel,
wolfSSL 14:167253f4e170 33587 0x2e7c492f1abe20d4l },
wolfSSL 14:167253f4e170 33588 { 0xe1ea8b1cd7e78ab1l,0xc3f6ba59043585adl,0xac404ea9477ac053l,
wolfSSL 14:167253f4e170 33589 0xaa6872914ec6d0e3l },
wolfSSL 14:167253f4e170 33590 0 },
wolfSSL 14:167253f4e170 33591 },
wolfSSL 14:167253f4e170 33592 {
wolfSSL 14:167253f4e170 33593 /* 0 << 24 */
wolfSSL 14:167253f4e170 33594 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 33595 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 33596 1 },
wolfSSL 14:167253f4e170 33597 /* 1 << 24 */
wolfSSL 14:167253f4e170 33598 { { 0xd9d0c8c4868af75dl,0xd7325cff45c8c7eal,0xab471996cc81ecb0l,
wolfSSL 14:167253f4e170 33599 0xff5d55f3611824edl },
wolfSSL 14:167253f4e170 33600 { 0xbe3145411977a0eel,0x5085c4c5722038c6l,0x2d5335bff94bb495l,
wolfSSL 14:167253f4e170 33601 0x894ad8a6c8e2a082l },
wolfSSL 14:167253f4e170 33602 0 },
wolfSSL 14:167253f4e170 33603 /* 3 << 24 */
wolfSSL 14:167253f4e170 33604 { { 0xd1e059b21994ef20l,0x2a653b69638ae318l,0x70d5eb582f699010l,
wolfSSL 14:167253f4e170 33605 0x279739f709f5f84al },
wolfSSL 14:167253f4e170 33606 { 0x5da4663c8b799336l,0xfdfdf14d203c37ebl,0x32d8a9dca1dbfb2dl,
wolfSSL 14:167253f4e170 33607 0xab40cff077d48f9bl },
wolfSSL 14:167253f4e170 33608 0 },
wolfSSL 14:167253f4e170 33609 /* 4 << 24 */
wolfSSL 14:167253f4e170 33610 { { 0xf2369f0b879fbbedl,0x0ff0ae86da9d1869l,0x5251d75956766f45l,
wolfSSL 14:167253f4e170 33611 0x4984d8c02be8d0fcl },
wolfSSL 14:167253f4e170 33612 { 0x7ecc95a6d21008f0l,0x29bd54a03a1a1c49l,0xab9828c5d26c50f3l,
wolfSSL 14:167253f4e170 33613 0x32c0087c51d0d251l },
wolfSSL 14:167253f4e170 33614 0 },
wolfSSL 14:167253f4e170 33615 /* 5 << 24 */
wolfSSL 14:167253f4e170 33616 { { 0xf61790abfbaf50a5l,0xdf55e76b684e0750l,0xec516da7f176b005l,
wolfSSL 14:167253f4e170 33617 0x575553bb7a2dddc7l },
wolfSSL 14:167253f4e170 33618 { 0x37c87ca3553afa73l,0x315f3ffc4d55c251l,0xe846442aaf3e5d35l,
wolfSSL 14:167253f4e170 33619 0x61b911496495ff28l },
wolfSSL 14:167253f4e170 33620 0 },
wolfSSL 14:167253f4e170 33621 /* 7 << 24 */
wolfSSL 14:167253f4e170 33622 { { 0x4bdf3a4956f90823l,0xba0f5080741d777bl,0x091d71c3f38bf760l,
wolfSSL 14:167253f4e170 33623 0x9633d50f9b625b02l },
wolfSSL 14:167253f4e170 33624 { 0x03ecb743b8c9de61l,0xb47512545de74720l,0x9f9defc974ce1cb2l,
wolfSSL 14:167253f4e170 33625 0x774a4f6a00bd32efl },
wolfSSL 14:167253f4e170 33626 0 },
wolfSSL 14:167253f4e170 33627 /* 9 << 24 */
wolfSSL 14:167253f4e170 33628 { { 0x327bc002b0131e5bl,0x1739e6d5cb2514d9l,0xc8cbdafe55a81543l,
wolfSSL 14:167253f4e170 33629 0x5bb1a36ce1137243l },
wolfSSL 14:167253f4e170 33630 { 0x205da3c517325327l,0xc35c1a36515a057el,0xf00f64c942925f9bl,
wolfSSL 14:167253f4e170 33631 0xbd14633cb7d59f7al },
wolfSSL 14:167253f4e170 33632 0 },
wolfSSL 14:167253f4e170 33633 /* 10 << 24 */
wolfSSL 14:167253f4e170 33634 { { 0xae2ad171656e8c3al,0xc0e2a4631acd0705l,0x006f6a8aa0b6055cl,
wolfSSL 14:167253f4e170 33635 0xaf4513d72b65a26el },
wolfSSL 14:167253f4e170 33636 { 0x3f549e14d616d5bcl,0x64ee395571253b1fl,0xe8b10bc1b8ce243al,
wolfSSL 14:167253f4e170 33637 0xbcbeace5913a4e77l },
wolfSSL 14:167253f4e170 33638 0 },
wolfSSL 14:167253f4e170 33639 /* 11 << 24 */
wolfSSL 14:167253f4e170 33640 { { 0x47c1004341f37dbdl,0x96eccae36168ecf6l,0x65bde59d1ca46aa3l,
wolfSSL 14:167253f4e170 33641 0x38a7027ab8698ffal },
wolfSSL 14:167253f4e170 33642 { 0xa2b89dc86dc34437l,0x5a0a118d43a4153fl,0x9e330a861ce22fd8l,
wolfSSL 14:167253f4e170 33643 0x28382af6b3bbd3bcl },
wolfSSL 14:167253f4e170 33644 0 },
wolfSSL 14:167253f4e170 33645 /* 13 << 24 */
wolfSSL 14:167253f4e170 33646 { { 0x0b2e27c0d81e0271l,0xa67a7596117a317cl,0x17f08928a6723d99l,
wolfSSL 14:167253f4e170 33647 0x71a75681485310a3l },
wolfSSL 14:167253f4e170 33648 { 0x90465462afb66ca9l,0x185e97ccfbbe229dl,0x6a1a606addad8fc2l,
wolfSSL 14:167253f4e170 33649 0x2431f316b3c797cfl },
wolfSSL 14:167253f4e170 33650 0 },
wolfSSL 14:167253f4e170 33651 /* 15 << 24 */
wolfSSL 14:167253f4e170 33652 { { 0x4703401193529432l,0x1f106bdd30743462l,0xabfb9964cd66d8cal,
wolfSSL 14:167253f4e170 33653 0x934d9d5ae9bdadd5l },
wolfSSL 14:167253f4e170 33654 { 0x5976d815908e3d22l,0x344a362f28e057bdl,0xf92cdadc5443dfb3l,
wolfSSL 14:167253f4e170 33655 0x001297adf089603bl },
wolfSSL 14:167253f4e170 33656 0 },
wolfSSL 14:167253f4e170 33657 /* 16 << 24 */
wolfSSL 14:167253f4e170 33658 { { 0x7f99824f20151427l,0x206828b692430206l,0xaa9097d7e1112357l,
wolfSSL 14:167253f4e170 33659 0xacf9a2f209e414ecl },
wolfSSL 14:167253f4e170 33660 { 0xdbdac9da27915356l,0x7e0734b7001efee3l,0x54fab5bbd2b288e2l,
wolfSSL 14:167253f4e170 33661 0x4c630fc4f62dd09cl },
wolfSSL 14:167253f4e170 33662 0 },
wolfSSL 14:167253f4e170 33663 /* 17 << 24 */
wolfSSL 14:167253f4e170 33664 { { 0x4a2fce605044066bl,0x904a019cfa3a47f4l,0xba81ea9c0c5c0a60l,
wolfSSL 14:167253f4e170 33665 0xd7e4ea0d96c098bdl },
wolfSSL 14:167253f4e170 33666 { 0xefe700419cd50a02l,0xc0c839d42d7f048cl,0xe2daf264e09b561fl,
wolfSSL 14:167253f4e170 33667 0x0cbc13185034b18bl },
wolfSSL 14:167253f4e170 33668 0 },
wolfSSL 14:167253f4e170 33669 /* 19 << 24 */
wolfSSL 14:167253f4e170 33670 { { 0x11e5f2e388323f7al,0xe07a74c2927584cdl,0x1e774b3495613d2dl,
wolfSSL 14:167253f4e170 33671 0x9c9b52c52c787488l },
wolfSSL 14:167253f4e170 33672 { 0x3cdd3c3ebe421f08l,0x5ff7819e223e3d5fl,0xba8739b2c1da09b9l,
wolfSSL 14:167253f4e170 33673 0x6b7263164e8b491bl },
wolfSSL 14:167253f4e170 33674 0 },
wolfSSL 14:167253f4e170 33675 /* 21 << 24 */
wolfSSL 14:167253f4e170 33676 { { 0xb5afd13ca0943befl,0xd651772957abb1ccl,0x9d5a52dc9b61b5bcl,
wolfSSL 14:167253f4e170 33677 0x85cefaa6806e31cdl },
wolfSSL 14:167253f4e170 33678 { 0xab84257a720a1deal,0x6a60261bced70d35l,0xc023f94db9d6da61l,
wolfSSL 14:167253f4e170 33679 0x947f7eec54a0ae0el },
wolfSSL 14:167253f4e170 33680 0 },
wolfSSL 14:167253f4e170 33681 /* 23 << 24 */
wolfSSL 14:167253f4e170 33682 { { 0xc3b787569f83b787l,0xd6d249263694ddd7l,0x58d248945d70a02el,
wolfSSL 14:167253f4e170 33683 0xac16670e8c278c6al },
wolfSSL 14:167253f4e170 33684 { 0x71a94d58e370b6e6l,0xe4d763840253db05l,0x99b1c98814b32cfel,
wolfSSL 14:167253f4e170 33685 0x4e6bd870cc78cc95l },
wolfSSL 14:167253f4e170 33686 0 },
wolfSSL 14:167253f4e170 33687 /* 25 << 24 */
wolfSSL 14:167253f4e170 33688 { { 0xf5f7ca79c8b63614l,0xf3bfb2158af4903cl,0x2bdb9f5496d47bd3l,
wolfSSL 14:167253f4e170 33689 0xd6e715300e8a63bal },
wolfSSL 14:167253f4e170 33690 { 0x67e90a497a93bec4l,0x8613478b8c1e63eel,0xe36bd9c8f2dde561l,
wolfSSL 14:167253f4e170 33691 0x681486518a768689l },
wolfSSL 14:167253f4e170 33692 0 },
wolfSSL 14:167253f4e170 33693 /* 27 << 24 */
wolfSSL 14:167253f4e170 33694 { { 0xef617a9494aa531cl,0x9ac35e2fd6f4ad87l,0xbcd2a047122468fbl,
wolfSSL 14:167253f4e170 33695 0xbd7a423fef7c5ca6l },
wolfSSL 14:167253f4e170 33696 { 0xab58cb52064c8040l,0x93ef4ed54a644716l,0xf7d17097c32cd48dl,
wolfSSL 14:167253f4e170 33697 0xb249a173d17fcf42l },
wolfSSL 14:167253f4e170 33698 0 },
wolfSSL 14:167253f4e170 33699 /* 28 << 24 */
wolfSSL 14:167253f4e170 33700 { { 0x66fe0fffe298cdf5l,0x3f61bea47b2e51b6l,0x7d372117bad3afa4l,
wolfSSL 14:167253f4e170 33701 0x6521a09cef656e2fl },
wolfSSL 14:167253f4e170 33702 { 0xb3b8c966e8a58fe7l,0x25203a115a47ebc7l,0xfe81588d5c4be573l,
wolfSSL 14:167253f4e170 33703 0x6132e2f31f49a03cl },
wolfSSL 14:167253f4e170 33704 0 },
wolfSSL 14:167253f4e170 33705 /* 29 << 24 */
wolfSSL 14:167253f4e170 33706 { { 0xbbe5c108b7a7ecc4l,0x62a5a78ebfd22e4cl,0xb7974033df188bd2l,
wolfSSL 14:167253f4e170 33707 0xcf11deea4df7d1ael },
wolfSSL 14:167253f4e170 33708 { 0x99cc774a53ace3eal,0xe0373a71105cc1f6l,0xd751987f133d7a20l,
wolfSSL 14:167253f4e170 33709 0xab86ee04ae215871l },
wolfSSL 14:167253f4e170 33710 0 },
wolfSSL 14:167253f4e170 33711 /* 31 << 24 */
wolfSSL 14:167253f4e170 33712 { { 0x2094f9a280cd10e6l,0x045232aa7b8a0da7l,0x969a81b69c03244el,
wolfSSL 14:167253f4e170 33713 0x1293b4ca7e98d955l },
wolfSSL 14:167253f4e170 33714 { 0x1631421dd68f3ab0l,0xa0106422c3738c82l,0xc5f43845f82c4ff9l,
wolfSSL 14:167253f4e170 33715 0xb479acbe1aa0f58fl },
wolfSSL 14:167253f4e170 33716 0 },
wolfSSL 14:167253f4e170 33717 /* 33 << 24 */
wolfSSL 14:167253f4e170 33718 { { 0xf1db0267f67683cfl,0xa6b13c9e44ce009dl,0x04b4eed505884a69l,
wolfSSL 14:167253f4e170 33719 0xf2ff9c16d9087a0bl },
wolfSSL 14:167253f4e170 33720 { 0x2c53699b3e35b4a6l,0x5020c0142369afb8l,0xf83bfe0095be37f1l,
wolfSSL 14:167253f4e170 33721 0xd300d8c553b29d80l },
wolfSSL 14:167253f4e170 33722 0 },
wolfSSL 14:167253f4e170 33723 /* 34 << 24 */
wolfSSL 14:167253f4e170 33724 { { 0x16893055811cf4bbl,0x580dd1e55aeb5027l,0xcaf47fba5ae3c71cl,
wolfSSL 14:167253f4e170 33725 0xde79698129ebbb07l },
wolfSSL 14:167253f4e170 33726 { 0xbed1db33d262cdd3l,0x78315e3748c7313bl,0xfc9561f02fe1368dl,
wolfSSL 14:167253f4e170 33727 0xe0209698ccacacc7l },
wolfSSL 14:167253f4e170 33728 0 },
wolfSSL 14:167253f4e170 33729 /* 35 << 24 */
wolfSSL 14:167253f4e170 33730 { { 0xd61af89a781ece24l,0xf3b90626008f41e9l,0xd715dbf7c5693191l,
wolfSSL 14:167253f4e170 33731 0x8d6c05de6f299edel },
wolfSSL 14:167253f4e170 33732 { 0xf18d62637ca50aacl,0x7987bf5cb0dd5fdcl,0x424136bd2cfa702bl,
wolfSSL 14:167253f4e170 33733 0xaa7e237ded859db2l },
wolfSSL 14:167253f4e170 33734 0 },
wolfSSL 14:167253f4e170 33735 /* 36 << 24 */
wolfSSL 14:167253f4e170 33736 { { 0xde7169e4e5d41796l,0x6700333e33c0a380l,0xe20b95780343a994l,
wolfSSL 14:167253f4e170 33737 0xa745455e1fb3a1c3l },
wolfSSL 14:167253f4e170 33738 { 0x97e0ff88ce029a7fl,0x3b3481c976e384bcl,0x028b339dddad5951l,
wolfSSL 14:167253f4e170 33739 0xa1fdcdbae4b95cfcl },
wolfSSL 14:167253f4e170 33740 0 },
wolfSSL 14:167253f4e170 33741 /* 37 << 24 */
wolfSSL 14:167253f4e170 33742 { { 0xcc9221baed20c6adl,0xf2619a51fa9c73aal,0xfc2cff847d7f55a5l,
wolfSSL 14:167253f4e170 33743 0xd56c23d65f01d4dal },
wolfSSL 14:167253f4e170 33744 { 0x6d20f88cb3d84d5fl,0x048825f75dcc615dl,0x73634d3f85631a6el,
wolfSSL 14:167253f4e170 33745 0xa57a02e3ad7b2e2dl },
wolfSSL 14:167253f4e170 33746 0 },
wolfSSL 14:167253f4e170 33747 /* 39 << 24 */
wolfSSL 14:167253f4e170 33748 { { 0x067a8dcf08aa81ffl,0x62948258c23f3d16l,0xb61bd04316f2fe7bl,
wolfSSL 14:167253f4e170 33749 0xf250f769b6a766b1l },
wolfSSL 14:167253f4e170 33750 { 0x32df97246d0b241el,0xb736e4bb714e5f88l,0x50da15022c1d40d7l,
wolfSSL 14:167253f4e170 33751 0x013e0edebdd285a4l },
wolfSSL 14:167253f4e170 33752 0 },
wolfSSL 14:167253f4e170 33753 /* 40 << 24 */
wolfSSL 14:167253f4e170 33754 { { 0x1b92c3a0181a5d8fl,0x6429531d9adb77c7l,0x629152b53af710eel,
wolfSSL 14:167253f4e170 33755 0x4e3f27370bd5647el },
wolfSSL 14:167253f4e170 33756 { 0xfb7c392b77553c7dl,0xa930abacefe78c87l,0xf80c8cd6a05a6991l,
wolfSSL 14:167253f4e170 33757 0x751469b71be5f6f5l },
wolfSSL 14:167253f4e170 33758 0 },
wolfSSL 14:167253f4e170 33759 /* 41 << 24 */
wolfSSL 14:167253f4e170 33760 { { 0xf89f2b0b3e2f2af0l,0x52f634099eefc39al,0x505005c679906cb6l,
wolfSSL 14:167253f4e170 33761 0x820c2216b2de0b1el },
wolfSSL 14:167253f4e170 33762 { 0x96f0f2831f20ad7al,0xcd33125c718ffcb0l,0xf6130ef278f0c578l,
wolfSSL 14:167253f4e170 33763 0x4cda2471d0b76b95l },
wolfSSL 14:167253f4e170 33764 0 },
wolfSSL 14:167253f4e170 33765 /* 43 << 24 */
wolfSSL 14:167253f4e170 33766 { { 0x611dd83f39485581l,0x96c47051803e1b20l,0xefacc736830f44c7l,
wolfSSL 14:167253f4e170 33767 0x5588d8ce688b12bal },
wolfSSL 14:167253f4e170 33768 { 0x44f4edf3eee70fadl,0x1026dfd8869539f7l,0xa4c146ee8ddb0e00l,
wolfSSL 14:167253f4e170 33769 0x9f4f55816efb41c8l },
wolfSSL 14:167253f4e170 33770 0 },
wolfSSL 14:167253f4e170 33771 /* 44 << 24 */
wolfSSL 14:167253f4e170 33772 { { 0x6036ed0236cbace7l,0x5a70e4abada837ddl,0xf06918aff10b2fefl,
wolfSSL 14:167253f4e170 33773 0x08a8a9f69fd31590l },
wolfSSL 14:167253f4e170 33774 { 0x6c4a1ba6916af88dl,0x4868bc1466016037l,0x06d345af164228a9l,
wolfSSL 14:167253f4e170 33775 0x2c1961d19b550dd9l },
wolfSSL 14:167253f4e170 33776 0 },
wolfSSL 14:167253f4e170 33777 /* 45 << 24 */
wolfSSL 14:167253f4e170 33778 { { 0x8b72775c6851f0acl,0x7827242bd70f5975l,0x2de91f1e34db4a6fl,
wolfSSL 14:167253f4e170 33779 0x586bf3d58538f5eel },
wolfSSL 14:167253f4e170 33780 { 0xf0a15aed25d9a09bl,0x43018e56f74deb46l,0xc2af1ad0f50e0e67l,
wolfSSL 14:167253f4e170 33781 0x49cc9528b10cff6fl },
wolfSSL 14:167253f4e170 33782 0 },
wolfSSL 14:167253f4e170 33783 /* 46 << 24 */
wolfSSL 14:167253f4e170 33784 { { 0x05eb146c9d55c425l,0xe2b557ccbc62261fl,0x2a716301bd077089l,
wolfSSL 14:167253f4e170 33785 0x83a63c81e0527d02l },
wolfSSL 14:167253f4e170 33786 { 0x055ff7f8a0d9203bl,0x05d09f0525bf5a04l,0x2e44545fb3eb0b30l,
wolfSSL 14:167253f4e170 33787 0xed7c57c4d279a1adl },
wolfSSL 14:167253f4e170 33788 0 },
wolfSSL 14:167253f4e170 33789 /* 47 << 24 */
wolfSSL 14:167253f4e170 33790 { { 0x6928f6e45e0ebdd5l,0xd7e44ddf092d233bl,0xe7148066d1b7026fl,
wolfSSL 14:167253f4e170 33791 0xf645a2e53d5f25c3l },
wolfSSL 14:167253f4e170 33792 { 0x6eeb25ee58ff9eb4l,0x60f1fcf737f87ebfl,0x9eaaf1e5c4679c70l,
wolfSSL 14:167253f4e170 33793 0x4609fb13b7b7dc7el },
wolfSSL 14:167253f4e170 33794 0 },
wolfSSL 14:167253f4e170 33795 /* 48 << 24 */
wolfSSL 14:167253f4e170 33796 { { 0xae915f5d5fa067d1l,0x4134b57f9668960cl,0xbd3656d6a48edaacl,
wolfSSL 14:167253f4e170 33797 0xdac1e3e4fc1d7436l },
wolfSSL 14:167253f4e170 33798 { 0x674ff869d81fbb26l,0x449ed3ecb26c33d4l,0x85138705d94203e8l,
wolfSSL 14:167253f4e170 33799 0xccde538bbeeb6f4al },
wolfSSL 14:167253f4e170 33800 0 },
wolfSSL 14:167253f4e170 33801 /* 49 << 24 */
wolfSSL 14:167253f4e170 33802 { { 0x27f317af2b33987fl,0xd2d3cf5d51e59588l,0x333999bd031f27c9l,
wolfSSL 14:167253f4e170 33803 0x6ddfa3f22e0a3306l },
wolfSSL 14:167253f4e170 33804 { 0x23e0e651990041b0l,0xf028aba1585837acl,0x1c6ad72b25226f53l,
wolfSSL 14:167253f4e170 33805 0xf243c991d1fca64al },
wolfSSL 14:167253f4e170 33806 0 },
wolfSSL 14:167253f4e170 33807 /* 51 << 24 */
wolfSSL 14:167253f4e170 33808 { { 0x72b8a13272cbae1fl,0xfe0b1c4fbfdbd64al,0x98bc7876c5e76921l,
wolfSSL 14:167253f4e170 33809 0x51c726bfdb1f5af7l },
wolfSSL 14:167253f4e170 33810 { 0x97e88a842c186e8bl,0x9ed99516ed8eb7b4l,0x3e54a17dafc818ebl,
wolfSSL 14:167253f4e170 33811 0xfcfbf25a1e8f77d8l },
wolfSSL 14:167253f4e170 33812 0 },
wolfSSL 14:167253f4e170 33813 /* 52 << 24 */
wolfSSL 14:167253f4e170 33814 { { 0x7780d7d68f7d5c6el,0x6725b49a454101e6l,0xceddc26586b0770cl,
wolfSSL 14:167253f4e170 33815 0xc26624615666f504l },
wolfSSL 14:167253f4e170 33816 { 0x16b77477ce040f75l,0x13f9113c293f8b45l,0xff0cfa07e2dcc91el,
wolfSSL 14:167253f4e170 33817 0x1948d8bd41c202f5l },
wolfSSL 14:167253f4e170 33818 0 },
wolfSSL 14:167253f4e170 33819 /* 53 << 24 */
wolfSSL 14:167253f4e170 33820 { { 0x4c6ae39a1dfbe13al,0xafb1e5c46be9c200l,0x39e728d168bb08c3l,
wolfSSL 14:167253f4e170 33821 0xc794b905acc9166fl },
wolfSSL 14:167253f4e170 33822 { 0x1cb0dec2d9c7c3e4l,0xc4c3053289f14d65l,0x4af80801a6a9d609l,
wolfSSL 14:167253f4e170 33823 0x79d7e82de0d6ab24l },
wolfSSL 14:167253f4e170 33824 0 },
wolfSSL 14:167253f4e170 33825 /* 55 << 24 */
wolfSSL 14:167253f4e170 33826 { { 0xb905c6af8ad4cf6el,0x785590b0f6d1be13l,0x78f402c2a0ef76bel,
wolfSSL 14:167253f4e170 33827 0x739b22ea5c19a40bl },
wolfSSL 14:167253f4e170 33828 { 0xd4d3262553d596b6l,0x01598eb4d571666bl,0xf8dc150b8173486al,
wolfSSL 14:167253f4e170 33829 0xd8aa43af15e94f09l },
wolfSSL 14:167253f4e170 33830 0 },
wolfSSL 14:167253f4e170 33831 /* 57 << 24 */
wolfSSL 14:167253f4e170 33832 { { 0xcfa387cd984393b5l,0x1645659e21a1bf92l,0xb4ab3966dd46c7eel,
wolfSSL 14:167253f4e170 33833 0xcf8c296d89482623l },
wolfSSL 14:167253f4e170 33834 { 0x72e4d01cf976b4c0l,0x44ad07e8fa0fa5ebl,0xd6c82681b486fdd2l,
wolfSSL 14:167253f4e170 33835 0x2d9074f89b8845b4l },
wolfSSL 14:167253f4e170 33836 0 },
wolfSSL 14:167253f4e170 33837 /* 59 << 24 */
wolfSSL 14:167253f4e170 33838 { { 0x96e4fc08d96862dbl,0xf9e29bb6c50c14b2l,0xfedaad64f8f9be75l,
wolfSSL 14:167253f4e170 33839 0xab6b2d79ae9e1274l },
wolfSSL 14:167253f4e170 33840 { 0x033e3eb58d84dec0l,0xc136904ccbd113e7l,0xb82b0aed6061f289l,
wolfSSL 14:167253f4e170 33841 0x3476d9247b699e25l },
wolfSSL 14:167253f4e170 33842 0 },
wolfSSL 14:167253f4e170 33843 /* 60 << 24 */
wolfSSL 14:167253f4e170 33844 { { 0x8fb5ceeb969231dcl,0xaed13be1686ff6cdl,0x71d7c67bdd69db87l,
wolfSSL 14:167253f4e170 33845 0x49613e08fb53f33al },
wolfSSL 14:167253f4e170 33846 { 0x2899729ead8e802fl,0x83bfde49d1982a1dl,0x675c45ea878239d2l,
wolfSSL 14:167253f4e170 33847 0xb7bf59cd0d8240d3l },
wolfSSL 14:167253f4e170 33848 0 },
wolfSSL 14:167253f4e170 33849 /* 61 << 24 */
wolfSSL 14:167253f4e170 33850 { { 0x853d8cd1baf53b8bl,0x9c73d04cff95fc18l,0xae8a94412d1d6aacl,
wolfSSL 14:167253f4e170 33851 0xd8a15ce901500b70l },
wolfSSL 14:167253f4e170 33852 { 0xaef813499aacba59l,0x2cd2ba0ac493cd8dl,0x01c37ee1f398f034l,
wolfSSL 14:167253f4e170 33853 0xed72d51d0f7299fcl },
wolfSSL 14:167253f4e170 33854 0 },
wolfSSL 14:167253f4e170 33855 /* 63 << 24 */
wolfSSL 14:167253f4e170 33856 { { 0x2c204940e7592fb1l,0xcc1bb19b49366f08l,0x31855e8a7c927935l,
wolfSSL 14:167253f4e170 33857 0x16f7e9a2c590b81dl },
wolfSSL 14:167253f4e170 33858 { 0xa5fbb7c1ed8df240l,0x7b5204122de2d7f5l,0x7eb1eb989a637588l,
wolfSSL 14:167253f4e170 33859 0x5ef4eca89540d2e8l },
wolfSSL 14:167253f4e170 33860 0 },
wolfSSL 14:167253f4e170 33861 /* 64 << 24 */
wolfSSL 14:167253f4e170 33862 { { 0x55d5c68da61a76fal,0x598b441dca1554dcl,0xd39923b9773b279cl,
wolfSSL 14:167253f4e170 33863 0x33331d3c36bf9efcl },
wolfSSL 14:167253f4e170 33864 { 0x2d4c848e298de399l,0xcfdb8e77a1a27f56l,0x94c855ea57b8ab70l,
wolfSSL 14:167253f4e170 33865 0xdcdb9dae6f7879bal },
wolfSSL 14:167253f4e170 33866 0 },
wolfSSL 14:167253f4e170 33867 /* 65 << 24 */
wolfSSL 14:167253f4e170 33868 { { 0x811e14dd9594afb8l,0xaf6c1b10d349124al,0x8488021b6528a642l,
wolfSSL 14:167253f4e170 33869 0xecf6834341cf1447l },
wolfSSL 14:167253f4e170 33870 { 0x7a40acb756924446l,0xd9c11bbed98ec4cfl,0x0cef00bfb2bff163l,
wolfSSL 14:167253f4e170 33871 0xfaaad8015432803bl },
wolfSSL 14:167253f4e170 33872 0 },
wolfSSL 14:167253f4e170 33873 /* 71 << 24 */
wolfSSL 14:167253f4e170 33874 { { 0x5a217d5e6b075cbel,0x7ef88d1dc89b513bl,0xb6d015da0531c93bl,
wolfSSL 14:167253f4e170 33875 0x477b502a6333834al },
wolfSSL 14:167253f4e170 33876 { 0x4655e48b2fb458d5l,0x93f21a7cb7674ca8l,0xa0616786502d1f3al,
wolfSSL 14:167253f4e170 33877 0x82d16d17f26bb6ccl },
wolfSSL 14:167253f4e170 33878 0 },
wolfSSL 14:167253f4e170 33879 /* 77 << 24 */
wolfSSL 14:167253f4e170 33880 { { 0x3d995aa9183c1688l,0xa125906c3766d2e8l,0x23ed7871c5f10d5bl,
wolfSSL 14:167253f4e170 33881 0xdfe1e1cc6df80368l },
wolfSSL 14:167253f4e170 33882 { 0x8bfcb54271eaae2cl,0xe94e6f910945a7bbl,0xd543ef90862f650al,
wolfSSL 14:167253f4e170 33883 0x0dc043b803eed66bl },
wolfSSL 14:167253f4e170 33884 0 },
wolfSSL 14:167253f4e170 33885 /* 83 << 24 */
wolfSSL 14:167253f4e170 33886 { { 0x0c6a5620060d2ccdl,0xcd8200e37a8a03a4l,0x6018d304793867e6l,
wolfSSL 14:167253f4e170 33887 0xad23dd61a74d054dl },
wolfSSL 14:167253f4e170 33888 { 0x5a856faeebc21eb4l,0x66be16714b5cd7dbl,0xe0d0441ec75f8c9dl,
wolfSSL 14:167253f4e170 33889 0xb80ca9ecf90dbc6dl },
wolfSSL 14:167253f4e170 33890 0 },
wolfSSL 14:167253f4e170 33891 /* 89 << 24 */
wolfSSL 14:167253f4e170 33892 { { 0xbd6902ccd24692cbl,0xbcce6bbc21920408l,0x40f120ca55dec4c5l,
wolfSSL 14:167253f4e170 33893 0xd9f1f5ef5361c8b3l },
wolfSSL 14:167253f4e170 33894 { 0x535d368226935dffl,0x9635447b01a9998al,0x8c4ec40d99e36d12l,
wolfSSL 14:167253f4e170 33895 0xbaeef8912b793369l },
wolfSSL 14:167253f4e170 33896 0 },
wolfSSL 14:167253f4e170 33897 /* 95 << 24 */
wolfSSL 14:167253f4e170 33898 { { 0xded3a51c1cd887ebl,0xd43225568376515cl,0xdaf3a2271ca7c097l,
wolfSSL 14:167253f4e170 33899 0x089156fdecd4d90cl },
wolfSSL 14:167253f4e170 33900 { 0x2b354810ca0727c9l,0xb7257c1966c19d8cl,0x5e68a379432d5072l,
wolfSSL 14:167253f4e170 33901 0x75c04c2443e585c7l },
wolfSSL 14:167253f4e170 33902 0 },
wolfSSL 14:167253f4e170 33903 /* 101 << 24 */
wolfSSL 14:167253f4e170 33904 { { 0xb5ba2a8fe5e0952fl,0x2c2d086811040b4el,0x27448bd5f818e253l,
wolfSSL 14:167253f4e170 33905 0x720f677987a92c85l },
wolfSSL 14:167253f4e170 33906 { 0x2c9b2367b9d035fal,0xf18ad8ce16c15ab9l,0xd65a360841bd57eel,
wolfSSL 14:167253f4e170 33907 0xeb4b07c9ff6ae897l },
wolfSSL 14:167253f4e170 33908 0 },
wolfSSL 14:167253f4e170 33909 /* 107 << 24 */
wolfSSL 14:167253f4e170 33910 { { 0xcffb6d71d38589acl,0x812372920fa509d3l,0x94db5ba6e54725e8l,
wolfSSL 14:167253f4e170 33911 0x1ad2b4206cfbb825l },
wolfSSL 14:167253f4e170 33912 { 0x8592c1f238cfb9f2l,0xbe8e917e0eec6a27l,0x53921bfe9d93d42fl,
wolfSSL 14:167253f4e170 33913 0x1aa95e6269454a35l },
wolfSSL 14:167253f4e170 33914 0 },
wolfSSL 14:167253f4e170 33915 /* 113 << 24 */
wolfSSL 14:167253f4e170 33916 { { 0xc25e8934d898049dl,0xeeaf4e6d3bb3d459l,0xc3ac44447d29ad10l,
wolfSSL 14:167253f4e170 33917 0xccdf9fcbcef8fa04l },
wolfSSL 14:167253f4e170 33918 { 0x1d995a3fb9679cb9l,0x3d6c5eab46fabc14l,0xd3849ff066385d4dl,
wolfSSL 14:167253f4e170 33919 0xc0eb21bacff08be2l },
wolfSSL 14:167253f4e170 33920 0 },
wolfSSL 14:167253f4e170 33921 /* 116 << 24 */
wolfSSL 14:167253f4e170 33922 { { 0x8213c71e90d13fd6l,0x114321149bb6b733l,0xaaf8037880ac4902l,
wolfSSL 14:167253f4e170 33923 0xb24e046b555f7557l },
wolfSSL 14:167253f4e170 33924 { 0x5f6ed2881db79832l,0xd493a758ac760e5dl,0xbc30a2a7a1c0f570l,
wolfSSL 14:167253f4e170 33925 0xa5009807161174e3l },
wolfSSL 14:167253f4e170 33926 0 },
wolfSSL 14:167253f4e170 33927 /* 119 << 24 */
wolfSSL 14:167253f4e170 33928 { { 0x9e9b864a6889e952l,0xee908932f352f31al,0xe421f2423166b932l,
wolfSSL 14:167253f4e170 33929 0x6dd4aa3b7ddbdb35l },
wolfSSL 14:167253f4e170 33930 { 0x553cc5639e8b88a4l,0x05457f171f04704dl,0x1dcc3004c9554e6bl,
wolfSSL 14:167253f4e170 33931 0x3a4a3a253f1b61e7l },
wolfSSL 14:167253f4e170 33932 0 },
wolfSSL 14:167253f4e170 33933 /* 125 << 24 */
wolfSSL 14:167253f4e170 33934 { { 0x7ac0a5e7c56e303al,0x7c7bab64037b0a19l,0x11f103fcc8d29a2bl,
wolfSSL 14:167253f4e170 33935 0x7d99dc46cf0b1340l },
wolfSSL 14:167253f4e170 33936 { 0x0481588ceffba92el,0x8a817356b04e77bcl,0x19edf4dbce1b708dl,
wolfSSL 14:167253f4e170 33937 0xa2a1f7a6e6f9d52cl },
wolfSSL 14:167253f4e170 33938 0 },
wolfSSL 14:167253f4e170 33939 },
wolfSSL 14:167253f4e170 33940 {
wolfSSL 14:167253f4e170 33941 /* 0 << 32 */
wolfSSL 14:167253f4e170 33942 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 33943 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 33944 1 },
wolfSSL 14:167253f4e170 33945 /* 1 << 32 */
wolfSSL 14:167253f4e170 33946 { { 0x202886024147519al,0xd0981eac26b372f0l,0xa9d4a7caa785ebc8l,
wolfSSL 14:167253f4e170 33947 0xd953c50ddbdf58e9l },
wolfSSL 14:167253f4e170 33948 { 0x9d6361ccfd590f8fl,0x72e9626b44e6c917l,0x7fd9611022eb64cfl,
wolfSSL 14:167253f4e170 33949 0x863ebb7e9eb288f3l },
wolfSSL 14:167253f4e170 33950 0 },
wolfSSL 14:167253f4e170 33951 /* 3 << 32 */
wolfSSL 14:167253f4e170 33952 { { 0xa18f07e0e90fb21el,0x00fd2b80bba7fca1l,0x20387f2795cd67b5l,
wolfSSL 14:167253f4e170 33953 0x5b89a4e7d39707f7l },
wolfSSL 14:167253f4e170 33954 { 0x8f83ad3f894407cel,0xa0025b946c226132l,0xc79563c7f906c13bl,
wolfSSL 14:167253f4e170 33955 0x5f548f314e7bb025l },
wolfSSL 14:167253f4e170 33956 0 },
wolfSSL 14:167253f4e170 33957 /* 4 << 32 */
wolfSSL 14:167253f4e170 33958 { { 0x0ee6d3a7c35d8794l,0x042e65580356bae5l,0x9f59698d643322fdl,
wolfSSL 14:167253f4e170 33959 0x9379ae1550a61967l },
wolfSSL 14:167253f4e170 33960 { 0x64b9ae62fcc9981el,0xaed3d6316d2934c6l,0x2454b3025e4e65ebl,
wolfSSL 14:167253f4e170 33961 0xab09f647f9950428l },
wolfSSL 14:167253f4e170 33962 0 },
wolfSSL 14:167253f4e170 33963 /* 5 << 32 */
wolfSSL 14:167253f4e170 33964 { { 0xc1b3d3d331b85f09l,0x0f45354aa88ae64al,0xa8b626d32fec50fdl,
wolfSSL 14:167253f4e170 33965 0x1bdcfbd4e828834fl },
wolfSSL 14:167253f4e170 33966 { 0xe45a2866cd522539l,0xfa9d4732810f7ab3l,0xd8c1d6b4c905f293l,
wolfSSL 14:167253f4e170 33967 0x10ac80473461b597l },
wolfSSL 14:167253f4e170 33968 0 },
wolfSSL 14:167253f4e170 33969 /* 7 << 32 */
wolfSSL 14:167253f4e170 33970 { { 0xbbb175146fc627e2l,0xa0569bc591573a51l,0xa7016d9e358243d5l,
wolfSSL 14:167253f4e170 33971 0x0dac0c56ac1d6692l },
wolfSSL 14:167253f4e170 33972 { 0x993833b5da590d5fl,0xa8067803de817491l,0x65b4f2124dbf75d0l,
wolfSSL 14:167253f4e170 33973 0xcc960232ccf80cfbl },
wolfSSL 14:167253f4e170 33974 0 },
wolfSSL 14:167253f4e170 33975 /* 9 << 32 */
wolfSSL 14:167253f4e170 33976 { { 0x35d742806cf3d65bl,0x4b7c790678b28dd9l,0xc4fcdd2f95e1f85fl,
wolfSSL 14:167253f4e170 33977 0xcf6fb7ba591350b6l },
wolfSSL 14:167253f4e170 33978 { 0x9f8e3287edfc26afl,0xe2dd9e73c2d0ed9al,0xeab5d67f24cbb703l,
wolfSSL 14:167253f4e170 33979 0x60c293999a759a5al },
wolfSSL 14:167253f4e170 33980 0 },
wolfSSL 14:167253f4e170 33981 /* 10 << 32 */
wolfSSL 14:167253f4e170 33982 { { 0xcf8625d7708f97cdl,0xfb6c5119ea419de4l,0xe8cb234dc03f9b06l,
wolfSSL 14:167253f4e170 33983 0x5a7822c335e23972l },
wolfSSL 14:167253f4e170 33984 { 0x9b876319a284ff10l,0xefcc49977093fdcel,0xdddfd62a878fe39al,
wolfSSL 14:167253f4e170 33985 0x44bfbe53910aa059l },
wolfSSL 14:167253f4e170 33986 0 },
wolfSSL 14:167253f4e170 33987 /* 11 << 32 */
wolfSSL 14:167253f4e170 33988 { { 0xfb93ca3d7ca53d5fl,0x432649f004379cbfl,0xf506113acba2ff75l,
wolfSSL 14:167253f4e170 33989 0x4594ae2103718b35l },
wolfSSL 14:167253f4e170 33990 { 0x1aa6cee50d044627l,0xc0e0d2b7f5c94aa2l,0x0bf33d3dee4dd3f5l,
wolfSSL 14:167253f4e170 33991 0xaca96e288477c97al },
wolfSSL 14:167253f4e170 33992 0 },
wolfSSL 14:167253f4e170 33993 /* 13 << 32 */
wolfSSL 14:167253f4e170 33994 { { 0x995c068e6861a713l,0xa9ba339463de88dcl,0xab954344689a964fl,
wolfSSL 14:167253f4e170 33995 0x58195aec0f5a0d6cl },
wolfSSL 14:167253f4e170 33996 { 0xc5f207d5c98f8b50l,0x6600cd280c98ccf6l,0x1a680fe339c3e6c2l,
wolfSSL 14:167253f4e170 33997 0xa23f3931660e87c0l },
wolfSSL 14:167253f4e170 33998 0 },
wolfSSL 14:167253f4e170 33999 /* 15 << 32 */
wolfSSL 14:167253f4e170 34000 { { 0x43bc1b42c78440a1l,0x9a07e22632ac6c3fl,0xaf3d7ba10f4bcd15l,
wolfSSL 14:167253f4e170 34001 0x3ad43c9da36814c6l },
wolfSSL 14:167253f4e170 34002 { 0xca11f742a0c9c162l,0xd3e06fc6c90b96ecl,0xeace6e766bf2d03fl,
wolfSSL 14:167253f4e170 34003 0x8bcd98e8f8032795l },
wolfSSL 14:167253f4e170 34004 0 },
wolfSSL 14:167253f4e170 34005 /* 16 << 32 */
wolfSSL 14:167253f4e170 34006 { { 0xe27a6dbe305406ddl,0x8eb7dc7fdd5d1957l,0xf54a6876387d4d8fl,
wolfSSL 14:167253f4e170 34007 0x9c479409c7762de4l },
wolfSSL 14:167253f4e170 34008 { 0xbe4d5b5d99b30778l,0x25380c566e793682l,0x602d37f3dac740e3l,
wolfSSL 14:167253f4e170 34009 0x140deabe1566e4ael },
wolfSSL 14:167253f4e170 34010 0 },
wolfSSL 14:167253f4e170 34011 /* 17 << 32 */
wolfSSL 14:167253f4e170 34012 { { 0x7be3ddb77099ae96l,0x83d6157306e0da6al,0x31bcac5f74bf9870l,
wolfSSL 14:167253f4e170 34013 0x7f7aa3b422b256f1l },
wolfSSL 14:167253f4e170 34014 { 0xff84d63caa212e20l,0x7d636556decdc8b5l,0x8fed824dbf909d62l,
wolfSSL 14:167253f4e170 34015 0x62d70186e5fb1445l },
wolfSSL 14:167253f4e170 34016 0 },
wolfSSL 14:167253f4e170 34017 /* 19 << 32 */
wolfSSL 14:167253f4e170 34018 { { 0x8796989f67d8ab8al,0xa46282253700b772l,0xa353cadf05f799abl,
wolfSSL 14:167253f4e170 34019 0x7a8be2741eeb06bbl },
wolfSSL 14:167253f4e170 34020 { 0xf74a367e4653b134l,0x4e43449660c70340l,0xc99b6d6b72e10b18l,
wolfSSL 14:167253f4e170 34021 0xcf1adf0f1ba636e1l },
wolfSSL 14:167253f4e170 34022 0 },
wolfSSL 14:167253f4e170 34023 /* 21 << 32 */
wolfSSL 14:167253f4e170 34024 { { 0xb0260fb57c6a0958l,0xae791b9c2fc2731el,0xb339f2bf8ce6e575l,
wolfSSL 14:167253f4e170 34025 0x769214a816e2639fl },
wolfSSL 14:167253f4e170 34026 { 0xbaf422e1346da10el,0xc7805fdf7a56f463l,0xf47b6b766f845428l,
wolfSSL 14:167253f4e170 34027 0x8f21369e38492948l },
wolfSSL 14:167253f4e170 34028 0 },
wolfSSL 14:167253f4e170 34029 /* 23 << 32 */
wolfSSL 14:167253f4e170 34030 { { 0x2bac716a17931a90l,0x42a5e27cc8267236l,0xfd4b367c0bafeb78l,
wolfSSL 14:167253f4e170 34031 0x5856e69c6173db02l },
wolfSSL 14:167253f4e170 34032 { 0xfaac7358973d73c4l,0xbfbffcc36768d285l,0x05444ff2be3eb243l,
wolfSSL 14:167253f4e170 34033 0x9f8d3692f3c323fel },
wolfSSL 14:167253f4e170 34034 0 },
wolfSSL 14:167253f4e170 34035 /* 25 << 32 */
wolfSSL 14:167253f4e170 34036 { { 0xac296863221c31a9l,0x46f3a24ef1ca99a9l,0xd927648a7535a864l,
wolfSSL 14:167253f4e170 34037 0xd7e3c47d5848e497l },
wolfSSL 14:167253f4e170 34038 { 0xc19595b782a98ac7l,0x9a9bf627273ff554l,0xe29aa48fb62298a1l,
wolfSSL 14:167253f4e170 34039 0xed3f068ee797e9e3l },
wolfSSL 14:167253f4e170 34040 0 },
wolfSSL 14:167253f4e170 34041 /* 27 << 32 */
wolfSSL 14:167253f4e170 34042 { { 0x8d16a1660eb9227bl,0xe04c6bc58c37c74bl,0xd1be9585cc1ef78cl,
wolfSSL 14:167253f4e170 34043 0xa5cfe1962e929d9bl },
wolfSSL 14:167253f4e170 34044 { 0xc9b0ea21417c1cc6l,0x316352d345b79599l,0xc1502c4dc2d54af7l,
wolfSSL 14:167253f4e170 34045 0xe7f4412990f83445l },
wolfSSL 14:167253f4e170 34046 0 },
wolfSSL 14:167253f4e170 34047 /* 28 << 32 */
wolfSSL 14:167253f4e170 34048 { { 0x0f6704abd95917e8l,0x168dafaeaec6e899l,0xd2833e8cde710027l,
wolfSSL 14:167253f4e170 34049 0x34ea277e68ee3c59l },
wolfSSL 14:167253f4e170 34050 { 0x3689e2350054d4e5l,0x6f3a568d11013943l,0xb5ce1ff69bc2b144l,
wolfSSL 14:167253f4e170 34051 0x705bfe7e72b33a59l },
wolfSSL 14:167253f4e170 34052 0 },
wolfSSL 14:167253f4e170 34053 /* 29 << 32 */
wolfSSL 14:167253f4e170 34054 { { 0x1baa4f02c8e93284l,0xec6b93ea3c97d3e8l,0xb656c149034f8b32l,
wolfSSL 14:167253f4e170 34055 0x3cab9063cd4cc69fl },
wolfSSL 14:167253f4e170 34056 { 0xd8de5989d61031ccl,0xcf85329fc1b1de1dl,0xf18b78b323d8cb9al,
wolfSSL 14:167253f4e170 34057 0x6dc04bc61a6b69eal },
wolfSSL 14:167253f4e170 34058 0 },
wolfSSL 14:167253f4e170 34059 /* 31 << 32 */
wolfSSL 14:167253f4e170 34060 { { 0x79cf86314a1d4f8fl,0xda5ba331aa47394el,0x36f9c0be8ff20527l,
wolfSSL 14:167253f4e170 34061 0xccdc719bbc7097f6l },
wolfSSL 14:167253f4e170 34062 { 0x2304a3ba5cb052bbl,0xab80cdea392f0ab5l,0x0ac1858bf38de03bl,
wolfSSL 14:167253f4e170 34063 0xd6e2119878a8f55dl },
wolfSSL 14:167253f4e170 34064 0 },
wolfSSL 14:167253f4e170 34065 /* 33 << 32 */
wolfSSL 14:167253f4e170 34066 { { 0x6bdebc26584bc618l,0x499f0f1894591499l,0xd35ed50bf4a573dal,
wolfSSL 14:167253f4e170 34067 0x5a622e73ff2792d0l },
wolfSSL 14:167253f4e170 34068 { 0x8510cbce68d41a3bl,0x6610f43c94e919afl,0x4527373dc163c8a1l,
wolfSSL 14:167253f4e170 34069 0x50afb46f280a8a7dl },
wolfSSL 14:167253f4e170 34070 0 },
wolfSSL 14:167253f4e170 34071 /* 34 << 32 */
wolfSSL 14:167253f4e170 34072 { { 0x33e779cd8de7707al,0xf94bbd94438f535bl,0x61159864be144878l,
wolfSSL 14:167253f4e170 34073 0xb6623235f098ce4al },
wolfSSL 14:167253f4e170 34074 { 0x6813b71ba65568d8l,0x6603dd4c2f796451l,0x9a97d88c8b9ee5b2l,
wolfSSL 14:167253f4e170 34075 0xaaa4593549d5926cl },
wolfSSL 14:167253f4e170 34076 0 },
wolfSSL 14:167253f4e170 34077 /* 35 << 32 */
wolfSSL 14:167253f4e170 34078 { { 0x2e01fc75ebe75bf2l,0x8270318d6cbdd09cl,0x534e4f21d3f1a196l,
wolfSSL 14:167253f4e170 34079 0x6c9eaeca9459173el },
wolfSSL 14:167253f4e170 34080 { 0xda454fe0b642a1d4l,0xe45b69bfc4664c4al,0x4724bd423e078dc8l,
wolfSSL 14:167253f4e170 34081 0x39ac8fe603336b81l },
wolfSSL 14:167253f4e170 34082 0 },
wolfSSL 14:167253f4e170 34083 /* 36 << 32 */
wolfSSL 14:167253f4e170 34084 { { 0x0a2e53dd302e9485l,0x75882a19deaa9ff4l,0xe283242eac8de4ddl,
wolfSSL 14:167253f4e170 34085 0x2742105cc678dba7l },
wolfSSL 14:167253f4e170 34086 { 0x9f6f0a88cdb3a8a2l,0x5c9d3338f722e894l,0xf1fa3143c38c31c1l,
wolfSSL 14:167253f4e170 34087 0x22137e2db18c77acl },
wolfSSL 14:167253f4e170 34088 0 },
wolfSSL 14:167253f4e170 34089 /* 37 << 32 */
wolfSSL 14:167253f4e170 34090 { { 0xd821665e368d7835l,0x3300c012b596c6ecl,0xb60da7353557b2ddl,
wolfSSL 14:167253f4e170 34091 0x6c3d9db6fb8cf9ael },
wolfSSL 14:167253f4e170 34092 { 0x092d8b0b8b4b0d34l,0x900a0bf4b3d4107dl,0x75371a245e813ec3l,
wolfSSL 14:167253f4e170 34093 0x91125a17f2ad56d5l },
wolfSSL 14:167253f4e170 34094 0 },
wolfSSL 14:167253f4e170 34095 /* 39 << 32 */
wolfSSL 14:167253f4e170 34096 { { 0x5e6594e2fe0073e6l,0x908a93778be13cb7l,0xa2c3d5c8ac26617cl,
wolfSSL 14:167253f4e170 34097 0xa0bab085c317c6b9l },
wolfSSL 14:167253f4e170 34098 { 0x0bdc183b83664109l,0x6bbba2b468f9dcd9l,0x697a50785814be41l,
wolfSSL 14:167253f4e170 34099 0x12a59b183a5e5f98l },
wolfSSL 14:167253f4e170 34100 0 },
wolfSSL 14:167253f4e170 34101 /* 40 << 32 */
wolfSSL 14:167253f4e170 34102 { { 0xbd9802e6c30fa92bl,0x5a70d96d9a552784l,0x9085c4ea3f83169bl,
wolfSSL 14:167253f4e170 34103 0xfa9423bb06908228l },
wolfSSL 14:167253f4e170 34104 { 0x2ffebe12fe97a5b9l,0x85da604971b99118l,0x9cbc2f7f63178846l,
wolfSSL 14:167253f4e170 34105 0xfd96bc709153218el },
wolfSSL 14:167253f4e170 34106 0 },
wolfSSL 14:167253f4e170 34107 /* 41 << 32 */
wolfSSL 14:167253f4e170 34108 { { 0xb5a85c61bfa70ca6l,0x4edc7f2d4c1f745fl,0x05aea9aa3ded1eb5l,
wolfSSL 14:167253f4e170 34109 0x750385efb82e5918l },
wolfSSL 14:167253f4e170 34110 { 0xdcbc53221fdc5164l,0x32a5721f6794184el,0x5c5b2269ff09c90bl,
wolfSSL 14:167253f4e170 34111 0x96d009115323ca42l },
wolfSSL 14:167253f4e170 34112 0 },
wolfSSL 14:167253f4e170 34113 /* 43 << 32 */
wolfSSL 14:167253f4e170 34114 { { 0x12c73403f43f1440l,0xc94813eb66cc1f50l,0x04d5957b9b035151l,
wolfSSL 14:167253f4e170 34115 0x76011bca4bfaafa8l },
wolfSSL 14:167253f4e170 34116 { 0x56806c13574f1f0al,0x98f63a4697652a62l,0x17c63ef4a3178de9l,
wolfSSL 14:167253f4e170 34117 0xf7ce961a65009a52l },
wolfSSL 14:167253f4e170 34118 0 },
wolfSSL 14:167253f4e170 34119 /* 44 << 32 */
wolfSSL 14:167253f4e170 34120 { { 0x58f92aebe4173516l,0xdc37d99275e42d44l,0x76dcec5b4d48e1bal,
wolfSSL 14:167253f4e170 34121 0x07e0608e25676448l },
wolfSSL 14:167253f4e170 34122 { 0xa1877bcd1d4af36al,0x38b62b3c5a8ccf0cl,0x60522e88aeab7f75l,
wolfSSL 14:167253f4e170 34123 0xbef213ed5e03547al },
wolfSSL 14:167253f4e170 34124 0 },
wolfSSL 14:167253f4e170 34125 /* 45 << 32 */
wolfSSL 14:167253f4e170 34126 { { 0x8acd5ba4e6ed0282l,0x792328f06a04531dl,0xe95de8aa80297e50l,
wolfSSL 14:167253f4e170 34127 0x79d33ce07d60e05cl },
wolfSSL 14:167253f4e170 34128 { 0xcb84646dd827d602l,0xd3421521302a608cl,0x867970a4524f9751l,
wolfSSL 14:167253f4e170 34129 0x05e2f7e347a75734l },
wolfSSL 14:167253f4e170 34130 0 },
wolfSSL 14:167253f4e170 34131 /* 46 << 32 */
wolfSSL 14:167253f4e170 34132 { { 0x64e4de4a01c66263l,0xbcfe16a4d0033d4cl,0x359e23d4817de1dcl,
wolfSSL 14:167253f4e170 34133 0xb01e812ec259449cl },
wolfSSL 14:167253f4e170 34134 { 0x90c9ade2df53499fl,0xabbeaa27288c6862l,0x5a655db4cd1b896fl,
wolfSSL 14:167253f4e170 34135 0x416f10a5a022a3d6l },
wolfSSL 14:167253f4e170 34136 0 },
wolfSSL 14:167253f4e170 34137 /* 47 << 32 */
wolfSSL 14:167253f4e170 34138 { { 0x0d17e1ef98601fd5l,0x9a3f85e0eab76a6fl,0x0b9eaed1510b80a1l,
wolfSSL 14:167253f4e170 34139 0x3282fd747ec30422l },
wolfSSL 14:167253f4e170 34140 { 0xaca5815a70a4a402l,0xfad3121cf2439cb2l,0xba251af81fccabd6l,
wolfSSL 14:167253f4e170 34141 0xb382843fa5c127d5l },
wolfSSL 14:167253f4e170 34142 0 },
wolfSSL 14:167253f4e170 34143 /* 48 << 32 */
wolfSSL 14:167253f4e170 34144 { { 0x958381db1782269bl,0xae34bf792597e550l,0xbb5c60645f385153l,
wolfSSL 14:167253f4e170 34145 0x6f0e96afe3088048l },
wolfSSL 14:167253f4e170 34146 { 0xbf6a021577884456l,0xb3b5688c69310ea7l,0x17c9429504fad2del,
wolfSSL 14:167253f4e170 34147 0xe020f0e517896d4dl },
wolfSSL 14:167253f4e170 34148 0 },
wolfSSL 14:167253f4e170 34149 /* 49 << 32 */
wolfSSL 14:167253f4e170 34150 { { 0x442fdfe920cd1ebel,0xa8317dfa6a250d62l,0x5214576d082d5a2dl,
wolfSSL 14:167253f4e170 34151 0xc1a5d31930803c33l },
wolfSSL 14:167253f4e170 34152 { 0x33eee5b25e4a2cd0l,0x7df181b3b4db8011l,0x249285145b5c6b0bl,
wolfSSL 14:167253f4e170 34153 0x464c1c5828bf8837l },
wolfSSL 14:167253f4e170 34154 0 },
wolfSSL 14:167253f4e170 34155 /* 51 << 32 */
wolfSSL 14:167253f4e170 34156 { { 0x5464da65d55babd1l,0x50eaad2a0048d80fl,0x782ca3dd2b9bce90l,
wolfSSL 14:167253f4e170 34157 0x41107164ab526844l },
wolfSSL 14:167253f4e170 34158 { 0xad3f0602d56e0a5fl,0xc1f0248018455114l,0xe05d8dcab1527931l,
wolfSSL 14:167253f4e170 34159 0x87818cf5bb1295d7l },
wolfSSL 14:167253f4e170 34160 0 },
wolfSSL 14:167253f4e170 34161 /* 52 << 32 */
wolfSSL 14:167253f4e170 34162 { { 0x95aeb5bd483e333al,0x003af31effeaededl,0xfc5532e87efb1e4fl,
wolfSSL 14:167253f4e170 34163 0xb37e0fb52dfa24a5l },
wolfSSL 14:167253f4e170 34164 { 0x485d4cecdc140b08l,0xb81a0d23983bd787l,0xd19928dae8d489fdl,
wolfSSL 14:167253f4e170 34165 0x3fa0312c177b9dbdl },
wolfSSL 14:167253f4e170 34166 0 },
wolfSSL 14:167253f4e170 34167 /* 53 << 32 */
wolfSSL 14:167253f4e170 34168 { { 0xade391470c6d7e88l,0x4fd1e8cd47072c45l,0x145760fed5a65c56l,
wolfSSL 14:167253f4e170 34169 0x198960c7be4887del },
wolfSSL 14:167253f4e170 34170 { 0xfe7974a82640257al,0xf838a19b774febefl,0xb2aecad11b6e988el,
wolfSSL 14:167253f4e170 34171 0x643f44fa448e4a8fl },
wolfSSL 14:167253f4e170 34172 0 },
wolfSSL 14:167253f4e170 34173 /* 55 << 32 */
wolfSSL 14:167253f4e170 34174 { { 0xc35ceffdee756e71l,0x2c1364d88ea932c4l,0xbd594d8d837d2d9fl,
wolfSSL 14:167253f4e170 34175 0x5b334bdac9d74d48l },
wolfSSL 14:167253f4e170 34176 { 0x72dc3e03b8fac08bl,0x38f01de006fdf70fl,0x4bde74b31d298ba4l,
wolfSSL 14:167253f4e170 34177 0x2598d183ad5f42a9l },
wolfSSL 14:167253f4e170 34178 0 },
wolfSSL 14:167253f4e170 34179 /* 57 << 32 */
wolfSSL 14:167253f4e170 34180 { { 0x02c6ba15f62befa2l,0x6399ceb55c8ccee9l,0x3638bd6e08d3473el,
wolfSSL 14:167253f4e170 34181 0xb8f1f13d2f8f4a9cl },
wolfSSL 14:167253f4e170 34182 { 0x50d7560655827a74l,0x8d6e65f33fb4f32cl,0x40a5d21189ee621al,
wolfSSL 14:167253f4e170 34183 0x6d3f9e11c4474716l },
wolfSSL 14:167253f4e170 34184 0 },
wolfSSL 14:167253f4e170 34185 /* 59 << 32 */
wolfSSL 14:167253f4e170 34186 { { 0xcb633a4ce9b2bb8fl,0x0475703f8c529253l,0x61e007b5a8878873l,
wolfSSL 14:167253f4e170 34187 0x342d77ba14504159l },
wolfSSL 14:167253f4e170 34188 { 0x2925175c313578dfl,0x4e631897b6b097f1l,0xe64d138929350e41l,
wolfSSL 14:167253f4e170 34189 0x2fb20608ec7adccdl },
wolfSSL 14:167253f4e170 34190 0 },
wolfSSL 14:167253f4e170 34191 /* 60 << 32 */
wolfSSL 14:167253f4e170 34192 { { 0xa560c234d5c0f5d1l,0x74f84bf62bdef0efl,0x61ed00005cbd3d0bl,
wolfSSL 14:167253f4e170 34193 0xc74262d087fb408bl },
wolfSSL 14:167253f4e170 34194 { 0xad30a6496cc64128l,0x708e3a31a4a8b154l,0xaf21ce2637f82074l,
wolfSSL 14:167253f4e170 34195 0x31d33b38204c9a74l },
wolfSSL 14:167253f4e170 34196 0 },
wolfSSL 14:167253f4e170 34197 /* 61 << 32 */
wolfSSL 14:167253f4e170 34198 { { 0x8f609fe04cc2f575l,0xe44f9784b35488c4l,0x0d464bb6180fa375l,
wolfSSL 14:167253f4e170 34199 0x4f44d5d2de2247b8l },
wolfSSL 14:167253f4e170 34200 { 0xf538eb38141ef077l,0x781f8f6e8fa456a4l,0x67e9a46429b4f39dl,
wolfSSL 14:167253f4e170 34201 0x245d21e8b704c3e9l },
wolfSSL 14:167253f4e170 34202 0 },
wolfSSL 14:167253f4e170 34203 /* 63 << 32 */
wolfSSL 14:167253f4e170 34204 { { 0x45a94ee858ffa7cdl,0x4d38bc6818053549l,0x0b4bc65a499d79f3l,
wolfSSL 14:167253f4e170 34205 0xa81e3ab09159cab7l },
wolfSSL 14:167253f4e170 34206 { 0xf13716efb47898cel,0xb7ee597c2e2d9044l,0x09396b90e6158276l,
wolfSSL 14:167253f4e170 34207 0x5c644dc36a533fcel },
wolfSSL 14:167253f4e170 34208 0 },
wolfSSL 14:167253f4e170 34209 /* 64 << 32 */
wolfSSL 14:167253f4e170 34210 { { 0xcca4428dbbe5a1a9l,0x8187fd5f3126bd67l,0x0036973a48105826l,
wolfSSL 14:167253f4e170 34211 0xa39b6663b8bd61a0l },
wolfSSL 14:167253f4e170 34212 { 0x6d42deef2d65a808l,0x4969044f94636b19l,0xf611ee47dd5d564cl,
wolfSSL 14:167253f4e170 34213 0x7b2f3a49d2873077l },
wolfSSL 14:167253f4e170 34214 0 },
wolfSSL 14:167253f4e170 34215 /* 65 << 32 */
wolfSSL 14:167253f4e170 34216 { { 0xbe4c16c3bf429668l,0xd32f56f0ef35db3bl,0xae8355de9ea4e3f1l,
wolfSSL 14:167253f4e170 34217 0x8f66c4a2a450944el },
wolfSSL 14:167253f4e170 34218 { 0xafab94c8b798fbe2l,0x18c57baff7f3d5cfl,0x692d191c5cfa5c7dl,
wolfSSL 14:167253f4e170 34219 0xc0c25f69a689daebl },
wolfSSL 14:167253f4e170 34220 0 },
wolfSSL 14:167253f4e170 34221 /* 71 << 32 */
wolfSSL 14:167253f4e170 34222 { { 0x15fb3ae398340d4cl,0xa8b9233a7de82134l,0x44971a545fc0dbc6l,
wolfSSL 14:167253f4e170 34223 0xb2b4f0f3a1d3f094l },
wolfSSL 14:167253f4e170 34224 { 0x8d9eaba1b6242bd4l,0xd8aad777787cc557l,0xb1ab8b7870d1a2bbl,
wolfSSL 14:167253f4e170 34225 0x5d20f48cead3bfe3l },
wolfSSL 14:167253f4e170 34226 0 },
wolfSSL 14:167253f4e170 34227 /* 77 << 32 */
wolfSSL 14:167253f4e170 34228 { { 0x4dacbf09a2bf9772l,0x969a4c4357aa8457l,0xadbe673b273ebfc5l,
wolfSSL 14:167253f4e170 34229 0xb85582bb927778c9l },
wolfSSL 14:167253f4e170 34230 { 0x748371855c03752cl,0xc337bc6bc2f60d11l,0x2c3838e4ad456a09l,
wolfSSL 14:167253f4e170 34231 0xaf479c897e381842l },
wolfSSL 14:167253f4e170 34232 0 },
wolfSSL 14:167253f4e170 34233 /* 83 << 32 */
wolfSSL 14:167253f4e170 34234 { { 0x8530ae751b1aea77l,0xf43b923ba8310cb9l,0x9c1a60c6bf4dd6c5l,
wolfSSL 14:167253f4e170 34235 0x11885b863e3aaaa5l },
wolfSSL 14:167253f4e170 34236 { 0x594a8fa90f69821el,0x1eece3d66bc37998l,0x1fd718f518df32bfl,
wolfSSL 14:167253f4e170 34237 0x1c00c7d461d84082l },
wolfSSL 14:167253f4e170 34238 0 },
wolfSSL 14:167253f4e170 34239 /* 89 << 32 */
wolfSSL 14:167253f4e170 34240 { { 0xd67ee3a4c763c3cfl,0x760b128305969234l,0x1a5ff331ec17f2d1l,
wolfSSL 14:167253f4e170 34241 0x25f0392a84fecfefl },
wolfSSL 14:167253f4e170 34242 { 0xb1bc004a3a80d47el,0xf450bf08182fee3bl,0xf11117681e19751el,
wolfSSL 14:167253f4e170 34243 0x5b4127dae28ed23fl },
wolfSSL 14:167253f4e170 34244 0 },
wolfSSL 14:167253f4e170 34245 /* 95 << 32 */
wolfSSL 14:167253f4e170 34246 { { 0x91e00defdaf08f09l,0x7ef41724f4738a07l,0x990fbbceaf1263fcl,
wolfSSL 14:167253f4e170 34247 0x779121e3e6eeb5aal },
wolfSSL 14:167253f4e170 34248 { 0x3e162c7a5a3ecf52l,0x73ae568a51be5faal,0x8bea1bfa451be8a9l,
wolfSSL 14:167253f4e170 34249 0x3e8cd5db90e11097l },
wolfSSL 14:167253f4e170 34250 0 },
wolfSSL 14:167253f4e170 34251 /* 101 << 32 */
wolfSSL 14:167253f4e170 34252 { { 0x90390f7224d27159l,0x685c139efd07e5d4l,0x4e21e44a3bc234a8l,
wolfSSL 14:167253f4e170 34253 0x61b50f34eeb14dacl },
wolfSSL 14:167253f4e170 34254 { 0x7beb0aa087555d58l,0x781326bcc806f0d2l,0xc289537a1eb7199fl,
wolfSSL 14:167253f4e170 34255 0x44a31a037b42766el },
wolfSSL 14:167253f4e170 34256 0 },
wolfSSL 14:167253f4e170 34257 /* 107 << 32 */
wolfSSL 14:167253f4e170 34258 { { 0x7d778206edde4b40l,0x34539fa18eb92fcdl,0x5a0bdd79bf52a552l,
wolfSSL 14:167253f4e170 34259 0x066d3672fdcca75el },
wolfSSL 14:167253f4e170 34260 { 0xd73fa893e28b5a5bl,0xb495135876c38698l,0x44469b0114ae16cfl,
wolfSSL 14:167253f4e170 34261 0xb428c763691d6618l },
wolfSSL 14:167253f4e170 34262 0 },
wolfSSL 14:167253f4e170 34263 /* 113 << 32 */
wolfSSL 14:167253f4e170 34264 { { 0x9022db8b69196353l,0x152ebb7dd7a4afd0l,0xea36fae57fcf1765l,
wolfSSL 14:167253f4e170 34265 0xa8fc00ba0decea8al },
wolfSSL 14:167253f4e170 34266 { 0x1047206a0c0b0414l,0x6607d8ade076df28l,0xf343e19966b8aba1l,
wolfSSL 14:167253f4e170 34267 0x7f03c1ad311e208dl },
wolfSSL 14:167253f4e170 34268 0 },
wolfSSL 14:167253f4e170 34269 /* 116 << 32 */
wolfSSL 14:167253f4e170 34270 { { 0xe6b4c96e888f3870l,0xa21bb618fe544042l,0x7122ee88bd817699l,
wolfSSL 14:167253f4e170 34271 0xcb38ecebfa66e173l },
wolfSSL 14:167253f4e170 34272 { 0x6ed5b3482c9cc05fl,0x591affc84ae0fd9el,0x7cf325ac6e7aaac0l,
wolfSSL 14:167253f4e170 34273 0x2397c053d05e5be0l },
wolfSSL 14:167253f4e170 34274 0 },
wolfSSL 14:167253f4e170 34275 /* 119 << 32 */
wolfSSL 14:167253f4e170 34276 { { 0x95363f61eaa96552l,0xe03bc6b38fb15b73l,0xa5c5808f2c389053l,
wolfSSL 14:167253f4e170 34277 0xcd021e6c11b2030cl },
wolfSSL 14:167253f4e170 34278 { 0x349ca9bdc038e30al,0x0a3368d4165afa2cl,0x043630debbfa1cc6l,
wolfSSL 14:167253f4e170 34279 0xb8c4456ba7cdbf69l },
wolfSSL 14:167253f4e170 34280 0 },
wolfSSL 14:167253f4e170 34281 /* 125 << 32 */
wolfSSL 14:167253f4e170 34282 { { 0x63aa3315fd7d2983l,0xaf4c96afa6a04bedl,0x3a5c0b5410814a74l,
wolfSSL 14:167253f4e170 34283 0x9906f5e30f9b0770l },
wolfSSL 14:167253f4e170 34284 { 0x622be6523676986fl,0x09ac5bc0173e7cb5l,0x1c40e56a502c8b3cl,
wolfSSL 14:167253f4e170 34285 0xabb9a0f7253ce8f6l },
wolfSSL 14:167253f4e170 34286 0 },
wolfSSL 14:167253f4e170 34287 },
wolfSSL 14:167253f4e170 34288 {
wolfSSL 14:167253f4e170 34289 /* 0 << 40 */
wolfSSL 14:167253f4e170 34290 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 34291 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 34292 1 },
wolfSSL 14:167253f4e170 34293 /* 1 << 40 */
wolfSSL 14:167253f4e170 34294 { { 0x889f6d65533ef217l,0x7158c7e4c3ca2e87l,0xfb670dfbdc2b4167l,
wolfSSL 14:167253f4e170 34295 0x75910a01844c257fl },
wolfSSL 14:167253f4e170 34296 { 0xf336bf07cf88577dl,0x22245250e45e2acel,0x2ed92e8d7ca23d85l,
wolfSSL 14:167253f4e170 34297 0x29f8be4c2b812f58l },
wolfSSL 14:167253f4e170 34298 0 },
wolfSSL 14:167253f4e170 34299 /* 3 << 40 */
wolfSSL 14:167253f4e170 34300 { { 0xc51e414351facc61l,0xbaf2647de68a25bcl,0x8f5271a00ff872edl,
wolfSSL 14:167253f4e170 34301 0x8f32ef993d2d9659l },
wolfSSL 14:167253f4e170 34302 { 0xca12488c7593cbd4l,0xed266c5d02b82fabl,0x0a2f78ad14eb3f16l,
wolfSSL 14:167253f4e170 34303 0xc34049484d47afe3l },
wolfSSL 14:167253f4e170 34304 0 },
wolfSSL 14:167253f4e170 34305 /* 4 << 40 */
wolfSSL 14:167253f4e170 34306 { { 0xa6f3d574c005979dl,0xc2072b426a40e350l,0xfca5c1568de2ecf9l,
wolfSSL 14:167253f4e170 34307 0xa8c8bf5ba515344el },
wolfSSL 14:167253f4e170 34308 { 0x97aee555114df14al,0xd4374a4dfdc5ec6bl,0x754cc28f2ca85418l,
wolfSSL 14:167253f4e170 34309 0x71cb9e27d3c41f78l },
wolfSSL 14:167253f4e170 34310 0 },
wolfSSL 14:167253f4e170 34311 /* 5 << 40 */
wolfSSL 14:167253f4e170 34312 { { 0x09c1670209470496l,0xa489a5edebd23815l,0xc4dde4648edd4398l,
wolfSSL 14:167253f4e170 34313 0x3ca7b94a80111696l },
wolfSSL 14:167253f4e170 34314 { 0x3c385d682ad636a4l,0x6702702508dc5f1el,0x0c1965deafa21943l,
wolfSSL 14:167253f4e170 34315 0x18666e16610be69el },
wolfSSL 14:167253f4e170 34316 0 },
wolfSSL 14:167253f4e170 34317 /* 7 << 40 */
wolfSSL 14:167253f4e170 34318 { { 0x45beb4ca2a604b3bl,0x56f651843a616762l,0xf52f5a70978b806el,
wolfSSL 14:167253f4e170 34319 0x7aa3978711dc4480l },
wolfSSL 14:167253f4e170 34320 { 0xe13fac2a0e01fabcl,0x7c6ee8a5237d99f9l,0x251384ee05211ffel,
wolfSSL 14:167253f4e170 34321 0x4ff6976d1bc9d3ebl },
wolfSSL 14:167253f4e170 34322 0 },
wolfSSL 14:167253f4e170 34323 /* 9 << 40 */
wolfSSL 14:167253f4e170 34324 { { 0xdde0492316e043a2l,0x98a452611dd3d209l,0xeaf9f61bd431ebe8l,
wolfSSL 14:167253f4e170 34325 0x00919f4dbaf56abdl },
wolfSSL 14:167253f4e170 34326 { 0xe42417db6d8774b1l,0x5fc5279c58e0e309l,0x64aa40613adf81eal,
wolfSSL 14:167253f4e170 34327 0xef419edabc627c7fl },
wolfSSL 14:167253f4e170 34328 0 },
wolfSSL 14:167253f4e170 34329 /* 10 << 40 */
wolfSSL 14:167253f4e170 34330 { { 0x3919759239ef620fl,0x9d47284074fa29c4l,0x4e428fa39d416d83l,
wolfSSL 14:167253f4e170 34331 0xd1a7c25129f30269l },
wolfSSL 14:167253f4e170 34332 { 0x46076e1cd746218fl,0xf3ad6ee8110d967el,0xfbb5f434a00ae61fl,
wolfSSL 14:167253f4e170 34333 0x3cd2c01980d4c929l },
wolfSSL 14:167253f4e170 34334 0 },
wolfSSL 14:167253f4e170 34335 /* 11 << 40 */
wolfSSL 14:167253f4e170 34336 { { 0xfa24d0537a4af00fl,0x3f938926ca294614l,0x0d700c183982182el,
wolfSSL 14:167253f4e170 34337 0x801334434cc59947l },
wolfSSL 14:167253f4e170 34338 { 0xf0397106ec87c925l,0x62bd59fc0ed6665cl,0xe8414348c7cca8b5l,
wolfSSL 14:167253f4e170 34339 0x574c76209f9f0a30l },
wolfSSL 14:167253f4e170 34340 0 },
wolfSSL 14:167253f4e170 34341 /* 13 << 40 */
wolfSSL 14:167253f4e170 34342 { { 0x95be42e2bb8b6a07l,0x64be74eeca23f86al,0xa73d74fd154ce470l,
wolfSSL 14:167253f4e170 34343 0x1c2d2857d8dc076al },
wolfSSL 14:167253f4e170 34344 { 0xb1fa1c575a887868l,0x38df8e0b3de64818l,0xd88e52f9c34e8967l,
wolfSSL 14:167253f4e170 34345 0x274b4f018b4cc76cl },
wolfSSL 14:167253f4e170 34346 0 },
wolfSSL 14:167253f4e170 34347 /* 15 << 40 */
wolfSSL 14:167253f4e170 34348 { { 0x3f5c05b4f8b7559dl,0x0be4c7acfae29200l,0xdd6d3ef756532accl,
wolfSSL 14:167253f4e170 34349 0xf6c3ed87eea7a285l },
wolfSSL 14:167253f4e170 34350 { 0xe463b0a8f46ec59bl,0x531d9b14ecea6c83l,0x3d6bdbafc2dc836bl,
wolfSSL 14:167253f4e170 34351 0x3ee501e92ab27f0bl },
wolfSSL 14:167253f4e170 34352 0 },
wolfSSL 14:167253f4e170 34353 /* 16 << 40 */
wolfSSL 14:167253f4e170 34354 { { 0x8df275455922ac1cl,0xa7b3ef5ca52b3f63l,0x8e77b21471de57c4l,
wolfSSL 14:167253f4e170 34355 0x31682c10834c008bl },
wolfSSL 14:167253f4e170 34356 { 0xc76824f04bd55d31l,0xb6d1c08617b61c71l,0x31db0903c2a5089dl,
wolfSSL 14:167253f4e170 34357 0x9c092172184e5d3fl },
wolfSSL 14:167253f4e170 34358 0 },
wolfSSL 14:167253f4e170 34359 /* 17 << 40 */
wolfSSL 14:167253f4e170 34360 { { 0x7b1a921ea6b3340bl,0x6d7c4d7d7438a53el,0x2b9ef73c5bf71d8fl,
wolfSSL 14:167253f4e170 34361 0xb5f6e0182b167a7cl },
wolfSSL 14:167253f4e170 34362 { 0x5ada98ab0ce536a3l,0xee0f16f9e1fea850l,0xf6424e9d74f1c0c5l,
wolfSSL 14:167253f4e170 34363 0x4d00de0cd3d10b41l },
wolfSSL 14:167253f4e170 34364 0 },
wolfSSL 14:167253f4e170 34365 /* 19 << 40 */
wolfSSL 14:167253f4e170 34366 { { 0xd542f522a6533610l,0xfdde15a734ec439al,0x696560fedc87dd0dl,
wolfSSL 14:167253f4e170 34367 0x69eab421e01fd05fl },
wolfSSL 14:167253f4e170 34368 { 0xca4febdc95cc5988l,0x839be396c44d92fbl,0x7bedff6daffe543bl,
wolfSSL 14:167253f4e170 34369 0xd2bb97296f6da43al },
wolfSSL 14:167253f4e170 34370 0 },
wolfSSL 14:167253f4e170 34371 /* 21 << 40 */
wolfSSL 14:167253f4e170 34372 { { 0x5bc6dea80b8d0077l,0xb2adf5d1ea9c49efl,0x7104c20eaafe8659l,
wolfSSL 14:167253f4e170 34373 0x1e3604f37866ee7el },
wolfSSL 14:167253f4e170 34374 { 0x0cfc7e7b3075c8c5l,0x5281d9bb639c5a2bl,0xcbdf42494bc44ee3l,
wolfSSL 14:167253f4e170 34375 0x835ab066655e9209l },
wolfSSL 14:167253f4e170 34376 0 },
wolfSSL 14:167253f4e170 34377 /* 23 << 40 */
wolfSSL 14:167253f4e170 34378 { { 0x78fbda4b90b94ffal,0x447e52eb7beb993cl,0x920011bc92620d15l,
wolfSSL 14:167253f4e170 34379 0x7bad6ecf481fd396l },
wolfSSL 14:167253f4e170 34380 { 0xad3bd28ba989a09el,0x20491784a3e62b78l,0xcdcd7096b07bd9efl,
wolfSSL 14:167253f4e170 34381 0x9bf5bb7337d780adl },
wolfSSL 14:167253f4e170 34382 0 },
wolfSSL 14:167253f4e170 34383 /* 25 << 40 */
wolfSSL 14:167253f4e170 34384 { { 0xbe911a71a976c8d4l,0xba0346743fdd778el,0x2359e7434cf87ea1l,
wolfSSL 14:167253f4e170 34385 0x8dccf65f07ebb691l },
wolfSSL 14:167253f4e170 34386 { 0x6c2c18eb09746d87l,0x6a19945fd2ecc8fal,0xc67121ff2ffa0339l,
wolfSSL 14:167253f4e170 34387 0x408c95ba9bd9fc31l },
wolfSSL 14:167253f4e170 34388 0 },
wolfSSL 14:167253f4e170 34389 /* 27 << 40 */
wolfSSL 14:167253f4e170 34390 { { 0xa317204bcaa5da39l,0xd390df7468bf53d7l,0x56de18b2dbd71c0dl,
wolfSSL 14:167253f4e170 34391 0xcb4d3bee75184779l },
wolfSSL 14:167253f4e170 34392 { 0x815a219499d920a5l,0x9e10fb4ecf3d3a64l,0x7fd4901dfe92e1eel,
wolfSSL 14:167253f4e170 34393 0x5d86d10d3ab87b2el },
wolfSSL 14:167253f4e170 34394 0 },
wolfSSL 14:167253f4e170 34395 /* 28 << 40 */
wolfSSL 14:167253f4e170 34396 { { 0x24f2a692840bb336l,0x7c353bdca669fa7bl,0xda20d6fcdec9c300l,
wolfSSL 14:167253f4e170 34397 0x625fbe2fa13a4f17l },
wolfSSL 14:167253f4e170 34398 { 0xa2b1b61adbc17328l,0x008965bfa9515621l,0x49690939c620ff46l,
wolfSSL 14:167253f4e170 34399 0x182dd27d8717e91cl },
wolfSSL 14:167253f4e170 34400 0 },
wolfSSL 14:167253f4e170 34401 /* 29 << 40 */
wolfSSL 14:167253f4e170 34402 { { 0x98e9136c878303e4l,0x2769e74fd1e65efdl,0x6154c545809da56el,
wolfSSL 14:167253f4e170 34403 0x8c5d50a04301638cl },
wolfSSL 14:167253f4e170 34404 { 0x10f3d2068214b763l,0x2da9a2fc44df0644l,0xca912bab588a6fcdl,
wolfSSL 14:167253f4e170 34405 0xe9e82d9b227e1932l },
wolfSSL 14:167253f4e170 34406 0 },
wolfSSL 14:167253f4e170 34407 /* 31 << 40 */
wolfSSL 14:167253f4e170 34408 { { 0xcbdc4d66d080e55bl,0xad3f11e5b8f98d6bl,0x31bea68e18a32480l,
wolfSSL 14:167253f4e170 34409 0xdf1c6fd52c1bcf6el },
wolfSSL 14:167253f4e170 34410 { 0xadcda7ee118a3f39l,0xbd02f857ac060d5fl,0xd2d0265d86631997l,
wolfSSL 14:167253f4e170 34411 0xb866a7d33818f2d4l },
wolfSSL 14:167253f4e170 34412 0 },
wolfSSL 14:167253f4e170 34413 /* 33 << 40 */
wolfSSL 14:167253f4e170 34414 { { 0xfbcce2d31892d98dl,0x2e34bc9507de73dcl,0x3a48d1a94891eec1l,
wolfSSL 14:167253f4e170 34415 0xe64499c24d31060bl },
wolfSSL 14:167253f4e170 34416 { 0xe9674b7149745520l,0xf126ccaca6594a2cl,0x33e5c1a079945342l,
wolfSSL 14:167253f4e170 34417 0x02aa0629066e061fl },
wolfSSL 14:167253f4e170 34418 0 },
wolfSSL 14:167253f4e170 34419 /* 34 << 40 */
wolfSSL 14:167253f4e170 34420 { { 0xdfd7c0ae7af3191el,0x923ec111d68c70d9l,0xb6f1380bb675f013l,
wolfSSL 14:167253f4e170 34421 0x9192a224f23d45bal },
wolfSSL 14:167253f4e170 34422 { 0xbe7890f9524891e3l,0x45b24c47eba996bbl,0x59331e48320447e9l,
wolfSSL 14:167253f4e170 34423 0x0e4d8753ac9afad4l },
wolfSSL 14:167253f4e170 34424 0 },
wolfSSL 14:167253f4e170 34425 /* 35 << 40 */
wolfSSL 14:167253f4e170 34426 { { 0x49e49c38c9f5a6c3l,0x3f5eea44d8ee2a65l,0x02bf3e761c74bbb4l,
wolfSSL 14:167253f4e170 34427 0x50d291cdef565571l },
wolfSSL 14:167253f4e170 34428 { 0xf4edc290a36dd5fal,0x3015df9556dd6b85l,0x4494926aa5549a16l,
wolfSSL 14:167253f4e170 34429 0x5de6c59390399e4al },
wolfSSL 14:167253f4e170 34430 0 },
wolfSSL 14:167253f4e170 34431 /* 36 << 40 */
wolfSSL 14:167253f4e170 34432 { { 0x29be11c6ce800998l,0x72bb1752b90360d9l,0x2c1931975a4ad590l,
wolfSSL 14:167253f4e170 34433 0x2ba2f5489fc1dbc0l },
wolfSSL 14:167253f4e170 34434 { 0x7fe4eebbe490ebe0l,0x12a0a4cd7fae11c0l,0x7197cf81e903ba37l,
wolfSSL 14:167253f4e170 34435 0xcf7d4aa8de1c6dd8l },
wolfSSL 14:167253f4e170 34436 0 },
wolfSSL 14:167253f4e170 34437 /* 37 << 40 */
wolfSSL 14:167253f4e170 34438 { { 0x961fa6317e249e7bl,0x5c4f707796caed50l,0x6b176e62d7e50885l,
wolfSSL 14:167253f4e170 34439 0x4dd5de72f390cbecl },
wolfSSL 14:167253f4e170 34440 { 0x91fa29954b2bd762l,0x80427e6395b8dadel,0xd565bf1de2c34743l,
wolfSSL 14:167253f4e170 34441 0x911da39d16e6c841l },
wolfSSL 14:167253f4e170 34442 0 },
wolfSSL 14:167253f4e170 34443 /* 39 << 40 */
wolfSSL 14:167253f4e170 34444 { { 0x48365465802ff016l,0x6d2a561f71beece6l,0xdd299ce6f9707052l,
wolfSSL 14:167253f4e170 34445 0x62a32698a23407bbl },
wolfSSL 14:167253f4e170 34446 { 0x1d55bdb147004afbl,0xfadec124369b1084l,0x1ce78adf291c89f7l,
wolfSSL 14:167253f4e170 34447 0x9f2eaf03278bc529l },
wolfSSL 14:167253f4e170 34448 0 },
wolfSSL 14:167253f4e170 34449 /* 40 << 40 */
wolfSSL 14:167253f4e170 34450 { { 0x92af6bf43fd5684cl,0x2b26eecf80360aa1l,0xbd960f3000546a82l,
wolfSSL 14:167253f4e170 34451 0x407b3c43f59ad8fel },
wolfSSL 14:167253f4e170 34452 { 0x86cae5fe249c82bal,0x9e0faec72463744cl,0x87f551e894916272l,
wolfSSL 14:167253f4e170 34453 0x033f93446ceb0615l },
wolfSSL 14:167253f4e170 34454 0 },
wolfSSL 14:167253f4e170 34455 /* 41 << 40 */
wolfSSL 14:167253f4e170 34456 { { 0x04658ad212dba0cel,0x9e600624068822f0l,0x84661f11b26d368bl,
wolfSSL 14:167253f4e170 34457 0xbca867d894ebb87al },
wolfSSL 14:167253f4e170 34458 { 0x79506dc42f1bad89l,0x1a8322d3ebcbe7a1l,0xb4f1e102ac197178l,
wolfSSL 14:167253f4e170 34459 0x29a950b779f7198cl },
wolfSSL 14:167253f4e170 34460 0 },
wolfSSL 14:167253f4e170 34461 /* 43 << 40 */
wolfSSL 14:167253f4e170 34462 { { 0x19a6fb0984a3d1d5l,0x6c75c3a2ba5f5307l,0x7983485bf9698447l,
wolfSSL 14:167253f4e170 34463 0x689f41b88b1cdc1el },
wolfSSL 14:167253f4e170 34464 { 0x18f6fbd74c1979d0l,0x3e6be9a27a0b6708l,0x06acb615f63d5a8al,
wolfSSL 14:167253f4e170 34465 0x8a817c098d0f64b1l },
wolfSSL 14:167253f4e170 34466 0 },
wolfSSL 14:167253f4e170 34467 /* 44 << 40 */
wolfSSL 14:167253f4e170 34468 { { 0x1e5eb0d18be82e84l,0x89967f0e7a582fefl,0xbcf687d5a6e921fal,
wolfSSL 14:167253f4e170 34469 0xdfee4cf3d37a09bal },
wolfSSL 14:167253f4e170 34470 { 0x94f06965b493c465l,0x638b9a1c7635c030l,0x7666786466f05e9fl,
wolfSSL 14:167253f4e170 34471 0xccaf6808c04da725l },
wolfSSL 14:167253f4e170 34472 0 },
wolfSSL 14:167253f4e170 34473 /* 45 << 40 */
wolfSSL 14:167253f4e170 34474 { { 0xa9b3479b1b53a173l,0xc041eda3392eddc0l,0xdb8f804755edd7eel,
wolfSSL 14:167253f4e170 34475 0xaf1f7a37ab60683cl },
wolfSSL 14:167253f4e170 34476 { 0x9318603a72c0accbl,0xab1bb9fe401cbf3cl,0xc40e991e88afe245l,
wolfSSL 14:167253f4e170 34477 0x9298a4580d06ac35l },
wolfSSL 14:167253f4e170 34478 0 },
wolfSSL 14:167253f4e170 34479 /* 46 << 40 */
wolfSSL 14:167253f4e170 34480 { { 0x58e127d5036c2fe7l,0x5fe5020555b93361l,0xc1373d850f74a045l,
wolfSSL 14:167253f4e170 34481 0x28cd79dbe8228e4bl },
wolfSSL 14:167253f4e170 34482 { 0x0ae82320c2018d9al,0xf6d0049c78f8016al,0x381b6fe2149b31fbl,
wolfSSL 14:167253f4e170 34483 0x33a0e8adec3cfbcfl },
wolfSSL 14:167253f4e170 34484 0 },
wolfSSL 14:167253f4e170 34485 /* 47 << 40 */
wolfSSL 14:167253f4e170 34486 { { 0x23a6612e9eab5da7l,0xb645fe29d94d6431l,0xe3d74594ca1210c4l,
wolfSSL 14:167253f4e170 34487 0xdc1376bceeca0674l },
wolfSSL 14:167253f4e170 34488 { 0xfd40dfef657f0154l,0x7952a548d52cbac5l,0x0ee189583685ad28l,
wolfSSL 14:167253f4e170 34489 0xd13639409ba9ca46l },
wolfSSL 14:167253f4e170 34490 0 },
wolfSSL 14:167253f4e170 34491 /* 48 << 40 */
wolfSSL 14:167253f4e170 34492 { { 0xca2eb690768fccfcl,0xf402d37db835b362l,0x0efac0d0e2fdfccel,
wolfSSL 14:167253f4e170 34493 0xefc9cdefb638d990l },
wolfSSL 14:167253f4e170 34494 { 0x2af12b72d1669a8bl,0x33c536bc5774ccbdl,0x30b21909fb34870el,
wolfSSL 14:167253f4e170 34495 0xc38fa2f77df25acal },
wolfSSL 14:167253f4e170 34496 0 },
wolfSSL 14:167253f4e170 34497 /* 49 << 40 */
wolfSSL 14:167253f4e170 34498 { { 0x1337902f1c982cd6l,0x222e08fe14ec53eal,0x6c8abd0d330ef3e5l,
wolfSSL 14:167253f4e170 34499 0xeb59e01531f6fd9dl },
wolfSSL 14:167253f4e170 34500 { 0xd74ae554a8532df4l,0xbc010db1ab44c83el,0xe98016561b8f9285l,
wolfSSL 14:167253f4e170 34501 0x65a9612783acc546l },
wolfSSL 14:167253f4e170 34502 0 },
wolfSSL 14:167253f4e170 34503 /* 51 << 40 */
wolfSSL 14:167253f4e170 34504 { { 0x36a8b0a76770cfb1l,0x3338d52f9bb578fcl,0x5136c785f5ed12a4l,
wolfSSL 14:167253f4e170 34505 0x652d47ed87bf129el },
wolfSSL 14:167253f4e170 34506 { 0x9c6c827e6067c2d0l,0x61fc2f410345533al,0x2d7fb182130cea19l,
wolfSSL 14:167253f4e170 34507 0x71a0186330b3ef85l },
wolfSSL 14:167253f4e170 34508 0 },
wolfSSL 14:167253f4e170 34509 /* 52 << 40 */
wolfSSL 14:167253f4e170 34510 { { 0x74c5f02bbf81f3f5l,0x0525a5aeaf7e4581l,0x88d2aaba433c54ael,
wolfSSL 14:167253f4e170 34511 0xed9775db806a56c5l },
wolfSSL 14:167253f4e170 34512 { 0xd320738ac0edb37dl,0x25fdb6ee66cc1f51l,0xac661d1710600d76l,
wolfSSL 14:167253f4e170 34513 0x931ec1f3bdd1ed76l },
wolfSSL 14:167253f4e170 34514 0 },
wolfSSL 14:167253f4e170 34515 /* 53 << 40 */
wolfSSL 14:167253f4e170 34516 { { 0xb81e239161faa569l,0xb379f759bb40eebfl,0x9f2fd1b2a2c54549l,
wolfSSL 14:167253f4e170 34517 0x0a968f4b0d6ba0ael },
wolfSSL 14:167253f4e170 34518 { 0xaa869e6eedfe8c75l,0x0e36b298645ab173l,0x5a76282b0bcdefd7l,
wolfSSL 14:167253f4e170 34519 0x9e949331d05293f2l },
wolfSSL 14:167253f4e170 34520 0 },
wolfSSL 14:167253f4e170 34521 /* 55 << 40 */
wolfSSL 14:167253f4e170 34522 { { 0xc1cfa9a1c59fac6el,0x2648bffcb72747cel,0x5f8a39805f2e2637l,
wolfSSL 14:167253f4e170 34523 0x8bd3a8eb73e65758l },
wolfSSL 14:167253f4e170 34524 { 0xd9c43f1df14381a7l,0xecc1c3b0d6a86c10l,0xffcf4fa8a4a6dc74l,
wolfSSL 14:167253f4e170 34525 0x7304fa834cea0a46l },
wolfSSL 14:167253f4e170 34526 0 },
wolfSSL 14:167253f4e170 34527 /* 57 << 40 */
wolfSSL 14:167253f4e170 34528 { { 0x4460760c34dca952l,0xeac9cf2444c70444l,0xb879297b8493c87el,
wolfSSL 14:167253f4e170 34529 0x295941a54b2dccb7l },
wolfSSL 14:167253f4e170 34530 { 0x1e5cecede58721cdl,0xc8b58db74ca0d12bl,0x1927965c6da1d034l,
wolfSSL 14:167253f4e170 34531 0x7220b02839ed1369l },
wolfSSL 14:167253f4e170 34532 0 },
wolfSSL 14:167253f4e170 34533 /* 59 << 40 */
wolfSSL 14:167253f4e170 34534 { { 0xc38746c83c2e34b6l,0x9f27362e38a51042l,0x26febec02067afebl,
wolfSSL 14:167253f4e170 34535 0xd9c4e15544e7371fl },
wolfSSL 14:167253f4e170 34536 { 0x6035f469f92930d1l,0xe6ed7c08b4431b8bl,0xa25bf5903e16410dl,
wolfSSL 14:167253f4e170 34537 0x147d83368adf4c18l },
wolfSSL 14:167253f4e170 34538 0 },
wolfSSL 14:167253f4e170 34539 /* 60 << 40 */
wolfSSL 14:167253f4e170 34540 { { 0x7f01c9ecaa80ba59l,0x3083411a68538e51l,0x970370f1e88128afl,
wolfSSL 14:167253f4e170 34541 0x625cc3db91dec14bl },
wolfSSL 14:167253f4e170 34542 { 0xfef9666c01ac3107l,0xb2a8d577d5057ac3l,0xb0f2629992be5df7l,
wolfSSL 14:167253f4e170 34543 0xf579c8e500353924l },
wolfSSL 14:167253f4e170 34544 0 },
wolfSSL 14:167253f4e170 34545 /* 61 << 40 */
wolfSSL 14:167253f4e170 34546 { { 0xbd9398d6ca02669fl,0x896e053bf9ad11a1l,0xe024b699a3556f9fl,
wolfSSL 14:167253f4e170 34547 0x23b4b96ad53cbca3l },
wolfSSL 14:167253f4e170 34548 { 0x549d2d6c89733dd6l,0x3dae193f394f3179l,0x8bf7ec1cdfeda825l,
wolfSSL 14:167253f4e170 34549 0xf6a1db7a8a4844b4l },
wolfSSL 14:167253f4e170 34550 0 },
wolfSSL 14:167253f4e170 34551 /* 63 << 40 */
wolfSSL 14:167253f4e170 34552 { { 0x3b5403d56437a027l,0xda32bbd233ed30aal,0xd2ad3baa906de0cal,
wolfSSL 14:167253f4e170 34553 0x3b6df514533f736el },
wolfSSL 14:167253f4e170 34554 { 0x986f1cab5df9b9c4l,0x41cd2088970d330el,0xaae7c2238c20a923l,
wolfSSL 14:167253f4e170 34555 0x52760a6e1e951dc0l },
wolfSSL 14:167253f4e170 34556 0 },
wolfSSL 14:167253f4e170 34557 /* 64 << 40 */
wolfSSL 14:167253f4e170 34558 { { 0xb8fa3d931341ed7al,0x4223272ca7b59d49l,0x3dcb194783b8c4a4l,
wolfSSL 14:167253f4e170 34559 0x4e413c01ed1302e4l },
wolfSSL 14:167253f4e170 34560 { 0x6d999127e17e44cel,0xee86bf7533b3adfbl,0xf6902fe625aa96cal,
wolfSSL 14:167253f4e170 34561 0xb73540e4e5aae47dl },
wolfSSL 14:167253f4e170 34562 0 },
wolfSSL 14:167253f4e170 34563 /* 65 << 40 */
wolfSSL 14:167253f4e170 34564 { { 0x55318a525e34036cl,0xc3acafaaf9884e3fl,0xe5ba15cea042ba04l,
wolfSSL 14:167253f4e170 34565 0x56a1d8960ada550el },
wolfSSL 14:167253f4e170 34566 { 0xa5198cae87b76764l,0xd079d1f0b6fd84fbl,0xb22b637bcbe363edl,
wolfSSL 14:167253f4e170 34567 0xbe8ab7d64499deaal },
wolfSSL 14:167253f4e170 34568 0 },
wolfSSL 14:167253f4e170 34569 /* 71 << 40 */
wolfSSL 14:167253f4e170 34570 { { 0xbe8eba5eb4925f25l,0x00f8bf582e3159d6l,0xb1aa24fa18856070l,
wolfSSL 14:167253f4e170 34571 0x22ea8b74e4c30b22l },
wolfSSL 14:167253f4e170 34572 { 0x512f633e55bbe4e8l,0x82ba62318678aee9l,0xea05da90fdf72b7el,
wolfSSL 14:167253f4e170 34573 0x616b9bc7a4fc65eel },
wolfSSL 14:167253f4e170 34574 0 },
wolfSSL 14:167253f4e170 34575 /* 77 << 40 */
wolfSSL 14:167253f4e170 34576 { { 0xe31ee3b3b7c221e7l,0x10353824e353fa43l,0x9d2f3df69dd2a86fl,
wolfSSL 14:167253f4e170 34577 0x8a12ab9322ccffecl },
wolfSSL 14:167253f4e170 34578 { 0x25c8e326d666f9e5l,0x33ea98a0598da7fbl,0x2fc1de0917f74e17l,
wolfSSL 14:167253f4e170 34579 0x0d0b6c7a35efb211l },
wolfSSL 14:167253f4e170 34580 0 },
wolfSSL 14:167253f4e170 34581 /* 83 << 40 */
wolfSSL 14:167253f4e170 34582 { { 0x22a82c6c804e6ecel,0x824a170b1d8fce9el,0x621802becee65ed0l,
wolfSSL 14:167253f4e170 34583 0x4a4e9e7895ec4285l },
wolfSSL 14:167253f4e170 34584 { 0x8da0988fa8940b7al,0xaff89c5b86445aa5l,0x386fdbdad689cde9l,
wolfSSL 14:167253f4e170 34585 0x3aeaae7d9f5caaccl },
wolfSSL 14:167253f4e170 34586 0 },
wolfSSL 14:167253f4e170 34587 /* 89 << 40 */
wolfSSL 14:167253f4e170 34588 { { 0xe9cb9e68a7b62f4cl,0x515cae0ec3b7092el,0xb8abec354b491f52l,
wolfSSL 14:167253f4e170 34589 0x672673fd01eeabc1l },
wolfSSL 14:167253f4e170 34590 { 0x65e5739f7ad6e8a1l,0xc2da8e003d91b2f9l,0xcc43229cced84319l,
wolfSSL 14:167253f4e170 34591 0x0f8cbf9574ccf2d1l },
wolfSSL 14:167253f4e170 34592 0 },
wolfSSL 14:167253f4e170 34593 /* 95 << 40 */
wolfSSL 14:167253f4e170 34594 { { 0xb03d1cfb1b2f872al,0x88aef4670872b6f7l,0xaafe55e48ea9170cl,
wolfSSL 14:167253f4e170 34595 0xd5cc4875f24aa689l },
wolfSSL 14:167253f4e170 34596 { 0x7e5732908458ce84l,0xef4e143d58bfc16dl,0xc58626efaa222836l,
wolfSSL 14:167253f4e170 34597 0x01c60ec0ca5e0cb8l },
wolfSSL 14:167253f4e170 34598 0 },
wolfSSL 14:167253f4e170 34599 /* 101 << 40 */
wolfSSL 14:167253f4e170 34600 { { 0x123901aa36337c09l,0x1697acadd2f5e675l,0xc0a1ddd022fe2bael,
wolfSSL 14:167253f4e170 34601 0xf68ea88cff0210ddl },
wolfSSL 14:167253f4e170 34602 { 0x665d11e014168709l,0x912a575f45f25321l,0x7e7ed38070c78934l,
wolfSSL 14:167253f4e170 34603 0x663d692cb0a46322l },
wolfSSL 14:167253f4e170 34604 0 },
wolfSSL 14:167253f4e170 34605 /* 107 << 40 */
wolfSSL 14:167253f4e170 34606 { { 0x912ab8bd8642cba4l,0x97fab1a3b6b50b73l,0x76666b3cb86ef354l,
wolfSSL 14:167253f4e170 34607 0x16d41330fa5ecce9l },
wolfSSL 14:167253f4e170 34608 { 0x77c7c138c7da404bl,0xc6508cb78c983fb0l,0xe5881733f9004984l,
wolfSSL 14:167253f4e170 34609 0x76dea7794182c7abl },
wolfSSL 14:167253f4e170 34610 0 },
wolfSSL 14:167253f4e170 34611 /* 113 << 40 */
wolfSSL 14:167253f4e170 34612 { { 0x16db18583556b765l,0x39c18c200263755al,0x7b6691f591c15201l,
wolfSSL 14:167253f4e170 34613 0x4e4c17b168514ea9l },
wolfSSL 14:167253f4e170 34614 { 0xacbe449e06f5f20al,0xeb9119d2541ddfb6l,0x2f6e687bf2eac86fl,
wolfSSL 14:167253f4e170 34615 0xb161471ec14ac508l },
wolfSSL 14:167253f4e170 34616 0 },
wolfSSL 14:167253f4e170 34617 /* 116 << 40 */
wolfSSL 14:167253f4e170 34618 { { 0x58846d32c4744733l,0x40517c71379f9e34l,0x2f65655f130ef6cal,
wolfSSL 14:167253f4e170 34619 0x526e4488f1f3503fl },
wolfSSL 14:167253f4e170 34620 { 0x8467bd177ee4a976l,0x1d9dc913921363d1l,0xd8d24c33b069e041l,
wolfSSL 14:167253f4e170 34621 0x5eb5da0a2cdf7f51l },
wolfSSL 14:167253f4e170 34622 0 },
wolfSSL 14:167253f4e170 34623 /* 119 << 40 */
wolfSSL 14:167253f4e170 34624 { { 0x81c2cc32951ab3e7l,0xc86d9a109b0c7e87l,0x0b7a18bd606ef408l,
wolfSSL 14:167253f4e170 34625 0x099b5bbfe6c2251el },
wolfSSL 14:167253f4e170 34626 { 0x46d627d0bfce880fl,0xbfaddcbbe1c6865al,0xa9ab6183d2bb9a00l,
wolfSSL 14:167253f4e170 34627 0x23cb9a2720ad9789l },
wolfSSL 14:167253f4e170 34628 0 },
wolfSSL 14:167253f4e170 34629 /* 125 << 40 */
wolfSSL 14:167253f4e170 34630 { { 0x1592d0630c25fbebl,0x13869ec24995a3fal,0x6413f494861d0a73l,
wolfSSL 14:167253f4e170 34631 0xa3b782342f9f1b89l },
wolfSSL 14:167253f4e170 34632 { 0x113689e2b6cad351l,0x53be2014a873dcc1l,0xccf405e0c6bb1be7l,
wolfSSL 14:167253f4e170 34633 0x4fff7b4ca9061ca9l },
wolfSSL 14:167253f4e170 34634 0 },
wolfSSL 14:167253f4e170 34635 },
wolfSSL 14:167253f4e170 34636 {
wolfSSL 14:167253f4e170 34637 /* 0 << 48 */
wolfSSL 14:167253f4e170 34638 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 34639 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 34640 1 },
wolfSSL 14:167253f4e170 34641 /* 1 << 48 */
wolfSSL 14:167253f4e170 34642 { { 0xcc7a64880a750c0fl,0x39bacfe34e548e83l,0x3d418c760c110f05l,
wolfSSL 14:167253f4e170 34643 0x3e4daa4cb1f11588l },
wolfSSL 14:167253f4e170 34644 { 0x2733e7b55ffc69ffl,0x46f147bc92053127l,0x885b2434d722df94l,
wolfSSL 14:167253f4e170 34645 0x6a444f65e6fc6b7cl },
wolfSSL 14:167253f4e170 34646 0 },
wolfSSL 14:167253f4e170 34647 /* 3 << 48 */
wolfSSL 14:167253f4e170 34648 { { 0x6d0b16f4bdaedfbdl,0x23fd326086746cedl,0x8bfb1d2fff4b3e17l,
wolfSSL 14:167253f4e170 34649 0xc7f2ec2d019c14c8l },
wolfSSL 14:167253f4e170 34650 { 0x3e0832f245104b0dl,0x5f00dafbadea2b7el,0x29e5cf6699fbfb0fl,
wolfSSL 14:167253f4e170 34651 0x264f972361827cdal },
wolfSSL 14:167253f4e170 34652 0 },
wolfSSL 14:167253f4e170 34653 /* 4 << 48 */
wolfSSL 14:167253f4e170 34654 { { 0x97b14f7ea90567e6l,0x513257b7b6ae5cb7l,0x85454a3c9f10903dl,
wolfSSL 14:167253f4e170 34655 0xd8d2c9ad69bc3724l },
wolfSSL 14:167253f4e170 34656 { 0x38da93246b29cb44l,0xb540a21d77c8cbacl,0x9bbfe43501918e42l,
wolfSSL 14:167253f4e170 34657 0xfffa707a56c3614el },
wolfSSL 14:167253f4e170 34658 0 },
wolfSSL 14:167253f4e170 34659 /* 5 << 48 */
wolfSSL 14:167253f4e170 34660 { { 0x6eb1a2f3e30bc27fl,0xe5f0c05ab0836511l,0x4d741bbf4965ab0el,
wolfSSL 14:167253f4e170 34661 0xfeec41ca83464bbdl },
wolfSSL 14:167253f4e170 34662 { 0x1aca705f99d0b09fl,0xc5d6cc56f42da5fal,0x49964eddcc52b931l,
wolfSSL 14:167253f4e170 34663 0x8ae59615c884d8d8l },
wolfSSL 14:167253f4e170 34664 0 },
wolfSSL 14:167253f4e170 34665 /* 7 << 48 */
wolfSSL 14:167253f4e170 34666 { { 0xf634b57b39f8868al,0xe27f4fd475cc69afl,0xa47e58cbd0d5496el,
wolfSSL 14:167253f4e170 34667 0x8a26793fd323e07fl },
wolfSSL 14:167253f4e170 34668 { 0xc61a9b72fa30f349l,0x94c9d9c9b696d134l,0x792beca85880a6d1l,
wolfSSL 14:167253f4e170 34669 0xbdcc4645af039995l },
wolfSSL 14:167253f4e170 34670 0 },
wolfSSL 14:167253f4e170 34671 /* 9 << 48 */
wolfSSL 14:167253f4e170 34672 { { 0xce7ef8e58c796c3cl,0x9adaae84dd66e57al,0x784ae13e45227f33l,
wolfSSL 14:167253f4e170 34673 0xb046c5b82a85e757l },
wolfSSL 14:167253f4e170 34674 { 0xb7aa50aeec37631fl,0xbedc4fca3b300758l,0x0f82567e0ac9700bl,
wolfSSL 14:167253f4e170 34675 0x1071d9d44ff5f8d2l },
wolfSSL 14:167253f4e170 34676 0 },
wolfSSL 14:167253f4e170 34677 /* 10 << 48 */
wolfSSL 14:167253f4e170 34678 { { 0x61360ee99e240d18l,0x057cdcacb4b94466l,0xe7667cd12fe5325cl,
wolfSSL 14:167253f4e170 34679 0x1fa297b521974e3bl },
wolfSSL 14:167253f4e170 34680 { 0xfa4081e7db083d76l,0x31993be6f206bd15l,0x8949269b14c19f8cl,
wolfSSL 14:167253f4e170 34681 0x21468d72a9d92357l },
wolfSSL 14:167253f4e170 34682 0 },
wolfSSL 14:167253f4e170 34683 /* 11 << 48 */
wolfSSL 14:167253f4e170 34684 { { 0xd09ef6c4e51a2811l,0x39f6862bb8fb66b9l,0x64e77f8d22dfaa99l,
wolfSSL 14:167253f4e170 34685 0x7b10504461b08aacl },
wolfSSL 14:167253f4e170 34686 { 0x71704e4c4a7df332l,0xd09734342ffe015bl,0xab0eaf4408d3020el,
wolfSSL 14:167253f4e170 34687 0x28b1909eed63b97al },
wolfSSL 14:167253f4e170 34688 0 },
wolfSSL 14:167253f4e170 34689 /* 13 << 48 */
wolfSSL 14:167253f4e170 34690 { { 0x2f3fa882cdadcd4fl,0xa4ef68595f631995l,0xe52ca2f9e531766fl,
wolfSSL 14:167253f4e170 34691 0x20af5c3057e2c1d3l },
wolfSSL 14:167253f4e170 34692 { 0x1e4828f6e51e94b8l,0xf900a1751a2f5d4fl,0xe831adb3392c58a0l,
wolfSSL 14:167253f4e170 34693 0x4c5a90ca1b6e5866l },
wolfSSL 14:167253f4e170 34694 0 },
wolfSSL 14:167253f4e170 34695 /* 15 << 48 */
wolfSSL 14:167253f4e170 34696 { { 0x5f3dcba86182827cl,0xd1a448ddbd7e7252l,0x2d8f96fcf493b815l,
wolfSSL 14:167253f4e170 34697 0xba0a4c263b0aa95fl },
wolfSSL 14:167253f4e170 34698 { 0x88a1514063a0007fl,0x9564c25e6a9c5846l,0x5a4d7b0fdc0fcbcal,
wolfSSL 14:167253f4e170 34699 0x2275daa33f8a740el },
wolfSSL 14:167253f4e170 34700 0 },
wolfSSL 14:167253f4e170 34701 /* 16 << 48 */
wolfSSL 14:167253f4e170 34702 { { 0x83f49167ceca9754l,0x426d2cf64b7939a0l,0x2555e355723fd0bfl,
wolfSSL 14:167253f4e170 34703 0xa96e6d06c4f144e2l },
wolfSSL 14:167253f4e170 34704 { 0x4768a8dd87880e61l,0x15543815e508e4d5l,0x09d7e772b1b65e15l,
wolfSSL 14:167253f4e170 34705 0x63439dd6ac302fa0l },
wolfSSL 14:167253f4e170 34706 0 },
wolfSSL 14:167253f4e170 34707 /* 17 << 48 */
wolfSSL 14:167253f4e170 34708 { { 0x159591cc0461086bl,0xb695aa9495e66e51l,0x2d4c946779ded531l,
wolfSSL 14:167253f4e170 34709 0xbd2482ba89c2be79l },
wolfSSL 14:167253f4e170 34710 { 0x8ee2658aa20bbf19l,0xc000528a32247917l,0xd924be4affeae845l,
wolfSSL 14:167253f4e170 34711 0x51312bebed992c8bl },
wolfSSL 14:167253f4e170 34712 0 },
wolfSSL 14:167253f4e170 34713 /* 19 << 48 */
wolfSSL 14:167253f4e170 34714 { { 0x3a01b958dc752bd9l,0x2babdbc20c215d45l,0xe689d79a131641c1l,
wolfSSL 14:167253f4e170 34715 0x48e8f0da80e05ed4l },
wolfSSL 14:167253f4e170 34716 { 0x4b505feb77bb70c4l,0xefbd3e2bb6057ef7l,0x7583e22dce603ca5l,
wolfSSL 14:167253f4e170 34717 0xfbe3b1f22c5c70c7l },
wolfSSL 14:167253f4e170 34718 0 },
wolfSSL 14:167253f4e170 34719 /* 21 << 48 */
wolfSSL 14:167253f4e170 34720 { { 0x8ec1ecf029e5e35al,0x2f3168e58645c2b3l,0xe9297362c7f94cb2l,
wolfSSL 14:167253f4e170 34721 0x4fbf1466d1c90b39l },
wolfSSL 14:167253f4e170 34722 { 0x3e4f7656920bae2al,0x805d04b9f1beb172l,0x729a7208dbdbd4b4l,
wolfSSL 14:167253f4e170 34723 0x1aade45687aeca53l },
wolfSSL 14:167253f4e170 34724 0 },
wolfSSL 14:167253f4e170 34725 /* 23 << 48 */
wolfSSL 14:167253f4e170 34726 { { 0xb0ff1f541934a508l,0x19e1397604bbf31al,0xb2a8e6033717a6b4l,
wolfSSL 14:167253f4e170 34727 0xd601e45d0ef12cb9l },
wolfSSL 14:167253f4e170 34728 { 0x563f0af5b515e98el,0x9b129db633984f9bl,0xe34aba2fa47e4a65l,
wolfSSL 14:167253f4e170 34729 0xb56f82d19e3f9d82l },
wolfSSL 14:167253f4e170 34730 0 },
wolfSSL 14:167253f4e170 34731 /* 25 << 48 */
wolfSSL 14:167253f4e170 34732 { { 0x0203effdb1209b86l,0x21f063edb19d6cbfl,0x59f53476980f275bl,
wolfSSL 14:167253f4e170 34733 0x202456d7b7ac5e80l },
wolfSSL 14:167253f4e170 34734 { 0xe5a8c05f4900edc9l,0x04c08eb470f01e86l,0xf74ac2241dcd98cel,
wolfSSL 14:167253f4e170 34735 0x7e77cc0ce2e830dbl },
wolfSSL 14:167253f4e170 34736 0 },
wolfSSL 14:167253f4e170 34737 /* 27 << 48 */
wolfSSL 14:167253f4e170 34738 { { 0x74e37234a9747edel,0x4fc9fbb1361b1013l,0xe7b533733cf357efl,
wolfSSL 14:167253f4e170 34739 0x6aa2dd2c991c4193l },
wolfSSL 14:167253f4e170 34740 { 0x7887e4d2a770917al,0xdd1809b4c20d24cbl,0x004cd7c38e9c2d3el,
wolfSSL 14:167253f4e170 34741 0xc77c5baba9970abel },
wolfSSL 14:167253f4e170 34742 0 },
wolfSSL 14:167253f4e170 34743 /* 28 << 48 */
wolfSSL 14:167253f4e170 34744 { { 0x20ac0351d598d710l,0x272c4166cb3a4da4l,0xdb82fe1aca71de1fl,
wolfSSL 14:167253f4e170 34745 0x746e79f2d8f54b0fl },
wolfSSL 14:167253f4e170 34746 { 0x6e7fc7364b573e9bl,0x75d03f46fd4b5040l,0x5c1cc36d0b98d87bl,
wolfSSL 14:167253f4e170 34747 0x513ba3f11f472da1l },
wolfSSL 14:167253f4e170 34748 0 },
wolfSSL 14:167253f4e170 34749 /* 29 << 48 */
wolfSSL 14:167253f4e170 34750 { { 0x52927eaac3af237fl,0xfaa06065d7398767l,0x042e72b497c6ce0bl,
wolfSSL 14:167253f4e170 34751 0xdaed0cc40a9f2361l },
wolfSSL 14:167253f4e170 34752 { 0xddc2e11c2fc1bb4al,0x631da5770c1a9ef8l,0x8a4cfe44680272bfl,
wolfSSL 14:167253f4e170 34753 0xc76b9f7262fb5cc3l },
wolfSSL 14:167253f4e170 34754 0 },
wolfSSL 14:167253f4e170 34755 /* 31 << 48 */
wolfSSL 14:167253f4e170 34756 { { 0x248f814538b3aae3l,0xb5345864bc204334l,0x66d6b5bc1d127524l,
wolfSSL 14:167253f4e170 34757 0xe312080d14f572d3l },
wolfSSL 14:167253f4e170 34758 { 0x13ed15a716abafebl,0x6f18ce27dba967bel,0x96c9e826ef08552dl,
wolfSSL 14:167253f4e170 34759 0x2c191b06be2b63e0l },
wolfSSL 14:167253f4e170 34760 0 },
wolfSSL 14:167253f4e170 34761 /* 33 << 48 */
wolfSSL 14:167253f4e170 34762 { { 0xde4be45dc115ca51l,0xa028cafe934dabd6l,0x7e875663d1c0f8c5l,
wolfSSL 14:167253f4e170 34763 0xa8e32ab063d17473l },
wolfSSL 14:167253f4e170 34764 { 0x33f55bd5543199aal,0x79d2c937a2071d6el,0xa6a6758ceff16f28l,
wolfSSL 14:167253f4e170 34765 0x9c5f93ef87d85201l },
wolfSSL 14:167253f4e170 34766 0 },
wolfSSL 14:167253f4e170 34767 /* 34 << 48 */
wolfSSL 14:167253f4e170 34768 { { 0x7f2e440381e9ede3l,0x243c3894caf6df0al,0x7c605bb11c073b11l,
wolfSSL 14:167253f4e170 34769 0xcd06a541ba6a4a62l },
wolfSSL 14:167253f4e170 34770 { 0x2916894949d4e2e5l,0x33649d074af66880l,0xbfc0c885e9a85035l,
wolfSSL 14:167253f4e170 34771 0xb4e52113fc410f4bl },
wolfSSL 14:167253f4e170 34772 0 },
wolfSSL 14:167253f4e170 34773 /* 35 << 48 */
wolfSSL 14:167253f4e170 34774 { { 0xe86f21bc3ad4c81el,0x53b408403a37dcebl,0xaa606087383402cdl,
wolfSSL 14:167253f4e170 34775 0xc248caf185452b1dl },
wolfSSL 14:167253f4e170 34776 { 0x38853772576b57cdl,0xe2798e5441b7a6edl,0x7c2f1eed95ef4a33l,
wolfSSL 14:167253f4e170 34777 0xccd7e776adb1873cl },
wolfSSL 14:167253f4e170 34778 0 },
wolfSSL 14:167253f4e170 34779 /* 36 << 48 */
wolfSSL 14:167253f4e170 34780 { { 0xdca3b70678a6513bl,0x92ea4a2a9edb1943l,0x02642216db6e2dd8l,
wolfSSL 14:167253f4e170 34781 0x9b45d0b49fd57894l },
wolfSSL 14:167253f4e170 34782 { 0x114e70dbc69d11ael,0x1477dd194c57595fl,0xbc2208b4ec77c272l,
wolfSSL 14:167253f4e170 34783 0x95c5b4d7db68f59cl },
wolfSSL 14:167253f4e170 34784 0 },
wolfSSL 14:167253f4e170 34785 /* 37 << 48 */
wolfSSL 14:167253f4e170 34786 { { 0xd978bb791c61030al,0xa47325d2218222f3l,0x65ad4d4832e67d97l,
wolfSSL 14:167253f4e170 34787 0x31e4ed632e0d162al },
wolfSSL 14:167253f4e170 34788 { 0x7308ea317f76da37l,0xcfdffe87d93f35d8l,0xf4b2d60ee6f96cc4l,
wolfSSL 14:167253f4e170 34789 0x8028f3bd0117c421l },
wolfSSL 14:167253f4e170 34790 0 },
wolfSSL 14:167253f4e170 34791 /* 39 << 48 */
wolfSSL 14:167253f4e170 34792 { { 0x7df80cbb9543edb6l,0xa07a54df40b0b3bcl,0xacbd067cc1888488l,
wolfSSL 14:167253f4e170 34793 0x61ad61318a00c721l },
wolfSSL 14:167253f4e170 34794 { 0x67e7599ebe2e6fe6l,0x8349d568f7270e06l,0x5630aabc307bc0c7l,
wolfSSL 14:167253f4e170 34795 0x97210b3f71af442fl },
wolfSSL 14:167253f4e170 34796 0 },
wolfSSL 14:167253f4e170 34797 /* 40 << 48 */
wolfSSL 14:167253f4e170 34798 { { 0xfe541fa47ea67c77l,0x952bd2afe3ea810cl,0x791fef568d01d374l,
wolfSSL 14:167253f4e170 34799 0xa3a1c6210f11336el },
wolfSSL 14:167253f4e170 34800 { 0x5ad0d5a9c7ec6d79l,0xff7038af3225c342l,0x003c6689bc69601bl,
wolfSSL 14:167253f4e170 34801 0x25059bc745e8747dl },
wolfSSL 14:167253f4e170 34802 0 },
wolfSSL 14:167253f4e170 34803 /* 41 << 48 */
wolfSSL 14:167253f4e170 34804 { { 0x58bdabb7ef701b5fl,0x64f987aee00c3a96l,0x533b391e2d585679l,
wolfSSL 14:167253f4e170 34805 0x30ad79d97a862e03l },
wolfSSL 14:167253f4e170 34806 { 0xd941471e8177b261l,0x33f65cb856a9018el,0x985ce9f607759fc4l,
wolfSSL 14:167253f4e170 34807 0x9b085f33aefdbd9el },
wolfSSL 14:167253f4e170 34808 0 },
wolfSSL 14:167253f4e170 34809 /* 43 << 48 */
wolfSSL 14:167253f4e170 34810 { { 0xab2fa51a9c43ee15l,0x457f338263f30575l,0xce8dcd863e75a6e0l,
wolfSSL 14:167253f4e170 34811 0x67a03ab86e70421al },
wolfSSL 14:167253f4e170 34812 { 0xe72c37893e174230l,0x45ffff6c066f4816l,0x3a3dd84879a2d4a7l,
wolfSSL 14:167253f4e170 34813 0xefa4b7e68b76c24cl },
wolfSSL 14:167253f4e170 34814 0 },
wolfSSL 14:167253f4e170 34815 /* 44 << 48 */
wolfSSL 14:167253f4e170 34816 { { 0x9a75c80676cb2566l,0x8f76acb1b24892d9l,0x7ae7b9cc1f08fe45l,
wolfSSL 14:167253f4e170 34817 0x19ef73296a4907d8l },
wolfSSL 14:167253f4e170 34818 { 0x2db4ab715f228bf0l,0xf3cdea39817032d7l,0x0b1f482edcabe3c0l,
wolfSSL 14:167253f4e170 34819 0x3baf76b4bb86325cl },
wolfSSL 14:167253f4e170 34820 0 },
wolfSSL 14:167253f4e170 34821 /* 45 << 48 */
wolfSSL 14:167253f4e170 34822 { { 0xd6be8f00e39e056al,0xb58f87a6232fa3bcl,0xd5cb09dc6b18c772l,
wolfSSL 14:167253f4e170 34823 0x3177256da8e7e17bl },
wolfSSL 14:167253f4e170 34824 { 0x1877fd34230bf92cl,0x6f9031175a36f632l,0x526a288728e2c9d9l,
wolfSSL 14:167253f4e170 34825 0xc373fc94415ec45cl },
wolfSSL 14:167253f4e170 34826 0 },
wolfSSL 14:167253f4e170 34827 /* 46 << 48 */
wolfSSL 14:167253f4e170 34828 { { 0xd49065e010089465l,0x3bab5d298e77c596l,0x7636c3a6193dbd95l,
wolfSSL 14:167253f4e170 34829 0xdef5d294b246e499l },
wolfSSL 14:167253f4e170 34830 { 0xb22c58b9286b2475l,0xa0b93939cd80862bl,0x3002c83af0992388l,
wolfSSL 14:167253f4e170 34831 0x6de01f9beacbe14cl },
wolfSSL 14:167253f4e170 34832 0 },
wolfSSL 14:167253f4e170 34833 /* 47 << 48 */
wolfSSL 14:167253f4e170 34834 { { 0x70fa6e2a2bf5e373l,0x501691739271694cl,0xd6ebb98c5d2ed9f1l,
wolfSSL 14:167253f4e170 34835 0x11fd0b3f225bf92dl },
wolfSSL 14:167253f4e170 34836 { 0x51ffbcea1e3d5520l,0xa7c549875513ad47l,0xe9689750b431d46dl,
wolfSSL 14:167253f4e170 34837 0x6e69fecbb620cb9al },
wolfSSL 14:167253f4e170 34838 0 },
wolfSSL 14:167253f4e170 34839 /* 48 << 48 */
wolfSSL 14:167253f4e170 34840 { { 0x6aac688eadd70482l,0x708de92a7b4a4e8al,0x75b6dd73758a6eefl,
wolfSSL 14:167253f4e170 34841 0xea4bf352725b3c43l },
wolfSSL 14:167253f4e170 34842 { 0x10041f2c87912868l,0xb1b1be95ef09297al,0x19ae23c5a9f3860al,
wolfSSL 14:167253f4e170 34843 0xc4f0f839515dcf4bl },
wolfSSL 14:167253f4e170 34844 0 },
wolfSSL 14:167253f4e170 34845 /* 49 << 48 */
wolfSSL 14:167253f4e170 34846 { { 0xf3c22398e04b5734l,0x4fba59b275f2579dl,0xbf95182d691901b3l,
wolfSSL 14:167253f4e170 34847 0x4c139534eb599496l },
wolfSSL 14:167253f4e170 34848 { 0xf3f821de33b77e8bl,0x66e580743785d42fl,0xe3ba3d5abdc89c2dl,
wolfSSL 14:167253f4e170 34849 0x7ee988bdd19f37b9l },
wolfSSL 14:167253f4e170 34850 0 },
wolfSSL 14:167253f4e170 34851 /* 51 << 48 */
wolfSSL 14:167253f4e170 34852 { { 0xe9ba62ca2ee53eb0l,0x64295ae23401d7dal,0x70ed8be24e493580l,
wolfSSL 14:167253f4e170 34853 0x702caa624502732fl },
wolfSSL 14:167253f4e170 34854 { 0xb1f4e21278d0cedfl,0x130b114bdc97057bl,0x9c5d0bd3c38c77b5l,
wolfSSL 14:167253f4e170 34855 0xd9d641e18bad68e7l },
wolfSSL 14:167253f4e170 34856 0 },
wolfSSL 14:167253f4e170 34857 /* 52 << 48 */
wolfSSL 14:167253f4e170 34858 { { 0xc71e27bf8538a5c6l,0x195c63dd89abff17l,0xfd3152851b71e3dal,
wolfSSL 14:167253f4e170 34859 0x9cbdfda7fa680fa0l },
wolfSSL 14:167253f4e170 34860 { 0x9db876ca849d7eabl,0xebe2764b3c273271l,0x663357e3f208dceal,
wolfSSL 14:167253f4e170 34861 0x8c5bd833565b1b70l },
wolfSSL 14:167253f4e170 34862 0 },
wolfSSL 14:167253f4e170 34863 /* 53 << 48 */
wolfSSL 14:167253f4e170 34864 { { 0x7c2dea1d122aebd4l,0x090bee4a138c1e4dl,0x94a9ffe59e4aca6cl,
wolfSSL 14:167253f4e170 34865 0x8f3212ba5d405c7fl },
wolfSSL 14:167253f4e170 34866 { 0x6618185f180b5e85l,0x76298d46f455ab9fl,0x0c804076476b2d88l,
wolfSSL 14:167253f4e170 34867 0x45ea9d03d5a40b39l },
wolfSSL 14:167253f4e170 34868 0 },
wolfSSL 14:167253f4e170 34869 /* 55 << 48 */
wolfSSL 14:167253f4e170 34870 { { 0xdf325ac76a2ed772l,0x35da47ccb0da2765l,0x94ce6f460bc9b166l,
wolfSSL 14:167253f4e170 34871 0xe0fc82fb5f7f3628l },
wolfSSL 14:167253f4e170 34872 { 0x2b26d588c055f576l,0xb9d37c97ec2bae98l,0xffbbead856908806l,
wolfSSL 14:167253f4e170 34873 0xa8c2df87437f4c84l },
wolfSSL 14:167253f4e170 34874 0 },
wolfSSL 14:167253f4e170 34875 /* 57 << 48 */
wolfSSL 14:167253f4e170 34876 { { 0x47d11c3528430994l,0x0183df71cf13d9d3l,0x98604c89aa138fe5l,
wolfSSL 14:167253f4e170 34877 0xb1432e1c32c09aa1l },
wolfSSL 14:167253f4e170 34878 { 0xf19bc45d99bd5e34l,0xb198be72108e9b89l,0xee500ae9dacde648l,
wolfSSL 14:167253f4e170 34879 0x5936cf98746870a9l },
wolfSSL 14:167253f4e170 34880 0 },
wolfSSL 14:167253f4e170 34881 /* 59 << 48 */
wolfSSL 14:167253f4e170 34882 { { 0x6d8efb98ed1d5a9bl,0x2e0b08e697f778fal,0xda728454dc5e0835l,
wolfSSL 14:167253f4e170 34883 0x2c28a45f8e3651c4l },
wolfSSL 14:167253f4e170 34884 { 0x667fab6f7ee77088l,0xd94429c8f29a94b4l,0xd83d594d9deea5b2l,
wolfSSL 14:167253f4e170 34885 0x2dc08ccbbea58080l },
wolfSSL 14:167253f4e170 34886 0 },
wolfSSL 14:167253f4e170 34887 /* 60 << 48 */
wolfSSL 14:167253f4e170 34888 { { 0xba5514df3fd165e8l,0x499fd6a9061f8811l,0x72cd1fe0bfef9f00l,
wolfSSL 14:167253f4e170 34889 0x120a4bb979ad7e8al },
wolfSSL 14:167253f4e170 34890 { 0xf2ffd0955f4a5ac5l,0xcfd174f195a7a2f0l,0xd42301ba9d17baf1l,
wolfSSL 14:167253f4e170 34891 0xd2fa487a77f22089l },
wolfSSL 14:167253f4e170 34892 0 },
wolfSSL 14:167253f4e170 34893 /* 61 << 48 */
wolfSSL 14:167253f4e170 34894 { { 0xfb5f53ba20a9a01el,0x3adb174fd20d6a9cl,0x6db8bb6d80e0f64fl,
wolfSSL 14:167253f4e170 34895 0x596e428df6a26f76l },
wolfSSL 14:167253f4e170 34896 { 0xbab1f846e6a4e362l,0x8bdb22af9b1becbdl,0x62b48335f31352adl,
wolfSSL 14:167253f4e170 34897 0xd72c26409634f727l },
wolfSSL 14:167253f4e170 34898 0 },
wolfSSL 14:167253f4e170 34899 /* 63 << 48 */
wolfSSL 14:167253f4e170 34900 { { 0xaaa61cb22b1ec1c3l,0x3b5156722cb6f00el,0x67d1be0a8bf83f60l,
wolfSSL 14:167253f4e170 34901 0x88f1627aa4b804bcl },
wolfSSL 14:167253f4e170 34902 { 0xc52b11a7cdade2abl,0xa6a8b71a606a4e9dl,0x04e0e6697b900551l,
wolfSSL 14:167253f4e170 34903 0x35cfa33c8d5ad0d2l },
wolfSSL 14:167253f4e170 34904 0 },
wolfSSL 14:167253f4e170 34905 /* 64 << 48 */
wolfSSL 14:167253f4e170 34906 { { 0xb93452381d531696l,0x57201c0088cdde69l,0xdde922519a86afc7l,
wolfSSL 14:167253f4e170 34907 0xe3043895bd35cea8l },
wolfSSL 14:167253f4e170 34908 { 0x7608c1e18555970dl,0x8267dfa92535935el,0xd4c60a57322ea38bl,
wolfSSL 14:167253f4e170 34909 0xe0bf7977804ef8b5l },
wolfSSL 14:167253f4e170 34910 0 },
wolfSSL 14:167253f4e170 34911 /* 65 << 48 */
wolfSSL 14:167253f4e170 34912 { { 0x375ca189b60f0d5al,0xc9458cf949a78362l,0x61c1c5024262c03al,
wolfSSL 14:167253f4e170 34913 0x299353db4363d5bel },
wolfSSL 14:167253f4e170 34914 { 0xe3565124dac407fel,0x16ea66cd5b93c532l,0xe5c6aec2749df8e3l,
wolfSSL 14:167253f4e170 34915 0x59181317ce3ee4bfl },
wolfSSL 14:167253f4e170 34916 0 },
wolfSSL 14:167253f4e170 34917 /* 71 << 48 */
wolfSSL 14:167253f4e170 34918 { { 0xd46ea34af41c2a3cl,0x9936184916545c98l,0xd7cb800ccf2498b4l,
wolfSSL 14:167253f4e170 34919 0xe71d088d9353fe87l },
wolfSSL 14:167253f4e170 34920 { 0x43443cbeae2e172cl,0x77131656ca905cb3l,0x76471fd1dce63594l,
wolfSSL 14:167253f4e170 34921 0x346b1d1738f5e264l },
wolfSSL 14:167253f4e170 34922 0 },
wolfSSL 14:167253f4e170 34923 /* 77 << 48 */
wolfSSL 14:167253f4e170 34924 { { 0x22b1e639f6d0a419l,0x8bbb1fad7cea278cl,0xf07f6c01370cc86al,
wolfSSL 14:167253f4e170 34925 0x661bd027d39b837fl },
wolfSSL 14:167253f4e170 34926 { 0x042c7a69de606098l,0x93433b154e44eb12l,0x20f44ada88d8bfe8l,
wolfSSL 14:167253f4e170 34927 0xb44f66e64ccbfab6l },
wolfSSL 14:167253f4e170 34928 0 },
wolfSSL 14:167253f4e170 34929 /* 83 << 48 */
wolfSSL 14:167253f4e170 34930 { { 0x1cc32158583d9745l,0x9306223cad1c2201l,0x76aa8d0995748039l,
wolfSSL 14:167253f4e170 34931 0x29425391707e9b59l },
wolfSSL 14:167253f4e170 34932 { 0x8501c0d4487cdf9el,0xbe08e89c205c5611l,0xa950400b04ccc48bl,
wolfSSL 14:167253f4e170 34933 0xb614b69b637e966bl },
wolfSSL 14:167253f4e170 34934 0 },
wolfSSL 14:167253f4e170 34935 /* 89 << 48 */
wolfSSL 14:167253f4e170 34936 { { 0xd9c3c1238ffa5c4bl,0xc65765f7f3593988l,0x9a7e5d2728242119l,
wolfSSL 14:167253f4e170 34937 0x0ad27b5097ad7620l },
wolfSSL 14:167253f4e170 34938 { 0x154cc5eb413a8b23l,0xae93d8de7afa8254l,0x9ce5116cab9907b5l,
wolfSSL 14:167253f4e170 34939 0x9a163d78063103b9l },
wolfSSL 14:167253f4e170 34940 0 },
wolfSSL 14:167253f4e170 34941 /* 95 << 48 */
wolfSSL 14:167253f4e170 34942 { { 0x5c4c299291086d2al,0x42c6ca9de8e2d951l,0xe67ecf93dd353f30l,
wolfSSL 14:167253f4e170 34943 0xba54557fe7167c2el },
wolfSSL 14:167253f4e170 34944 { 0x04a7eb2db734c779l,0x8f345605e300711al,0x4811c1ad67b27de6l,
wolfSSL 14:167253f4e170 34945 0xb7ac8e842731d5f0l },
wolfSSL 14:167253f4e170 34946 0 },
wolfSSL 14:167253f4e170 34947 /* 101 << 48 */
wolfSSL 14:167253f4e170 34948 { { 0xee33a1d8e449ac46l,0x2500ba0aaaebfa2dl,0x8fb914ebc424eff4l,
wolfSSL 14:167253f4e170 34949 0x3a36545d3989255el },
wolfSSL 14:167253f4e170 34950 { 0xd24f2484761235e6l,0x2fc5d5ddd9b2c04bl,0x73660f86070ab0dbl,
wolfSSL 14:167253f4e170 34951 0x2e266d0479d20c7bl },
wolfSSL 14:167253f4e170 34952 0 },
wolfSSL 14:167253f4e170 34953 /* 107 << 48 */
wolfSSL 14:167253f4e170 34954 { { 0x143752d5316d19a3l,0x56a55e01915497b8l,0x44ba4b2609a5fd15l,
wolfSSL 14:167253f4e170 34955 0xe4fc3e7fd9bee4eel },
wolfSSL 14:167253f4e170 34956 { 0x6f9d8609878a9f26l,0xdf36b5bd2ede7a20l,0x8e03e712a9a3e435l,
wolfSSL 14:167253f4e170 34957 0x4ced555b56546d33l },
wolfSSL 14:167253f4e170 34958 0 },
wolfSSL 14:167253f4e170 34959 /* 113 << 48 */
wolfSSL 14:167253f4e170 34960 { { 0x89a6aaab0882717el,0x56a9736b43fa5153l,0xdb07dcc9d0e1fb1al,
wolfSSL 14:167253f4e170 34961 0xe7c986d34145e227l },
wolfSSL 14:167253f4e170 34962 { 0x57be66abb10dad51l,0xa47b964e4aa01ea7l,0xd851d9f36bb837cbl,
wolfSSL 14:167253f4e170 34963 0x9851ab3d652e13f7l },
wolfSSL 14:167253f4e170 34964 0 },
wolfSSL 14:167253f4e170 34965 /* 116 << 48 */
wolfSSL 14:167253f4e170 34966 { { 0x22b88a805616ee30l,0xfb09548fe7ab1083l,0x8ad6ab0d511270cdl,
wolfSSL 14:167253f4e170 34967 0x61f6c57a6924d9abl },
wolfSSL 14:167253f4e170 34968 { 0xa0f7bf7290aecb08l,0x849f87c90df784a4l,0x27c79c15cfaf1d03l,
wolfSSL 14:167253f4e170 34969 0xbbf9f675c463facel },
wolfSSL 14:167253f4e170 34970 0 },
wolfSSL 14:167253f4e170 34971 /* 119 << 48 */
wolfSSL 14:167253f4e170 34972 { { 0x65512fb716dd6ce1l,0xfa76ebc960d53b35l,0x31e5322e19ada3bel,
wolfSSL 14:167253f4e170 34973 0x7e259b75d0ccc3cdl },
wolfSSL 14:167253f4e170 34974 { 0xd36d03f0e025fd69l,0xbefab782eea9e5f3l,0x1569969dd09ce6a7l,
wolfSSL 14:167253f4e170 34975 0x2df5396178c385b0l },
wolfSSL 14:167253f4e170 34976 0 },
wolfSSL 14:167253f4e170 34977 /* 125 << 48 */
wolfSSL 14:167253f4e170 34978 { { 0x4201652fce0ccac7l,0x12f8e93df1d29d2dl,0x6c2ac9b2220f00c1l,
wolfSSL 14:167253f4e170 34979 0x4ee6a685a850baa9l },
wolfSSL 14:167253f4e170 34980 { 0x2c2371f163ee8829l,0xddff16488f464433l,0xeab6cd8869a2c413l,
wolfSSL 14:167253f4e170 34981 0xcae34beb85e4c2a8l },
wolfSSL 14:167253f4e170 34982 0 },
wolfSSL 14:167253f4e170 34983 },
wolfSSL 14:167253f4e170 34984 {
wolfSSL 14:167253f4e170 34985 /* 0 << 56 */
wolfSSL 14:167253f4e170 34986 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 34987 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 34988 1 },
wolfSSL 14:167253f4e170 34989 /* 1 << 56 */
wolfSSL 14:167253f4e170 34990 { { 0xc7913e91991724f3l,0x5eda799c39cbd686l,0xddb595c763d4fc1el,
wolfSSL 14:167253f4e170 34991 0x6b63b80bac4fed54l },
wolfSSL 14:167253f4e170 34992 { 0x6ea0fc697e5fb516l,0x737708bad0f1c964l,0x9628745f11a92ca5l,
wolfSSL 14:167253f4e170 34993 0x61f379589a86967al },
wolfSSL 14:167253f4e170 34994 0 },
wolfSSL 14:167253f4e170 34995 /* 3 << 56 */
wolfSSL 14:167253f4e170 34996 { { 0x46a8c4180d738dedl,0x6f1a5bb0e0de5729l,0xf10230b98ba81675l,
wolfSSL 14:167253f4e170 34997 0x32c6f30c112b33d4l },
wolfSSL 14:167253f4e170 34998 { 0x7559129dd8fffb62l,0x6a281b47b459bf05l,0x77c1bd3afa3b6776l,
wolfSSL 14:167253f4e170 34999 0x0709b3807829973al },
wolfSSL 14:167253f4e170 35000 0 },
wolfSSL 14:167253f4e170 35001 /* 4 << 56 */
wolfSSL 14:167253f4e170 35002 { { 0x8c26b232a3326505l,0x38d69272ee1d41bfl,0x0459453effe32afal,
wolfSSL 14:167253f4e170 35003 0xce8143ad7cb3ea87l },
wolfSSL 14:167253f4e170 35004 { 0x932ec1fa7e6ab666l,0x6cd2d23022286264l,0x459a46fe6736f8edl,
wolfSSL 14:167253f4e170 35005 0x50bf0d009eca85bbl },
wolfSSL 14:167253f4e170 35006 0 },
wolfSSL 14:167253f4e170 35007 /* 5 << 56 */
wolfSSL 14:167253f4e170 35008 { { 0x0b825852877a21ecl,0x300414a70f537a94l,0x3f1cba4021a9a6a2l,
wolfSSL 14:167253f4e170 35009 0x50824eee76943c00l },
wolfSSL 14:167253f4e170 35010 { 0xa0dbfcecf83cba5dl,0xf953814893b4f3c0l,0x6174416248f24dd7l,
wolfSSL 14:167253f4e170 35011 0x5322d64de4fb09ddl },
wolfSSL 14:167253f4e170 35012 0 },
wolfSSL 14:167253f4e170 35013 /* 7 << 56 */
wolfSSL 14:167253f4e170 35014 { { 0xa337c447f1f0ced1l,0x800cc7939492dd2bl,0x4b93151dbea08efal,
wolfSSL 14:167253f4e170 35015 0x820cf3f8de0a741el },
wolfSSL 14:167253f4e170 35016 { 0xff1982dc1c0f7d13l,0xef92196084dde6cal,0x1ad7d97245f96ee3l,
wolfSSL 14:167253f4e170 35017 0x319c8dbe29dea0c7l },
wolfSSL 14:167253f4e170 35018 0 },
wolfSSL 14:167253f4e170 35019 /* 9 << 56 */
wolfSSL 14:167253f4e170 35020 { { 0x0ae1d63b0eb919b0l,0xd74ee51da74b9620l,0x395458d0a674290cl,
wolfSSL 14:167253f4e170 35021 0x324c930f4620a510l },
wolfSSL 14:167253f4e170 35022 { 0x2d1f4d19fbac27d4l,0x4086e8ca9bedeeacl,0x0cdd211b9b679ab8l,
wolfSSL 14:167253f4e170 35023 0x5970167d7090fec4l },
wolfSSL 14:167253f4e170 35024 0 },
wolfSSL 14:167253f4e170 35025 /* 10 << 56 */
wolfSSL 14:167253f4e170 35026 { { 0x3420f2c9faf1fc63l,0x616d333a328c8bb4l,0x7d65364c57f1fe4al,
wolfSSL 14:167253f4e170 35027 0x9343e87755e5c73al },
wolfSSL 14:167253f4e170 35028 { 0x5795176be970e78cl,0xa36ccebf60533627l,0xfc7c738009cdfc1bl,
wolfSSL 14:167253f4e170 35029 0xb39a2afeb3fec326l },
wolfSSL 14:167253f4e170 35030 0 },
wolfSSL 14:167253f4e170 35031 /* 11 << 56 */
wolfSSL 14:167253f4e170 35032 { { 0xb7ff1ba16224408al,0xcc856e92247cfc5el,0x01f102e7c18bc493l,
wolfSSL 14:167253f4e170 35033 0x4613ab742091c727l },
wolfSSL 14:167253f4e170 35034 { 0xaa25e89cc420bf2bl,0x00a5317690337ec2l,0xd2be9f437d025fc7l,
wolfSSL 14:167253f4e170 35035 0x3316fb856e6fe3dcl },
wolfSSL 14:167253f4e170 35036 0 },
wolfSSL 14:167253f4e170 35037 /* 13 << 56 */
wolfSSL 14:167253f4e170 35038 { { 0x67332cfc2064cfd1l,0x339c31deb0651934l,0x719b28d52a3bcbeal,
wolfSSL 14:167253f4e170 35039 0xee74c82b9d6ae5c6l },
wolfSSL 14:167253f4e170 35040 { 0x0927d05ebaf28ee6l,0x82cecf2c9d719028l,0x0b0d353eddb30289l,
wolfSSL 14:167253f4e170 35041 0xfe4bb977fddb2e29l },
wolfSSL 14:167253f4e170 35042 0 },
wolfSSL 14:167253f4e170 35043 /* 15 << 56 */
wolfSSL 14:167253f4e170 35044 { { 0xe10b2ab817a91cael,0xb89aab6508e27f63l,0x7b3074a7dba3ddf9l,
wolfSSL 14:167253f4e170 35045 0x1c20ce09330c2972l },
wolfSSL 14:167253f4e170 35046 { 0x6b9917b45fcf7e33l,0xe6793743945ceb42l,0x18fc22155c633d19l,
wolfSSL 14:167253f4e170 35047 0xad1adb3cc7485474l },
wolfSSL 14:167253f4e170 35048 0 },
wolfSSL 14:167253f4e170 35049 /* 16 << 56 */
wolfSSL 14:167253f4e170 35050 { { 0x646f96796424c49bl,0xf888dfe867c241c9l,0xe12d4b9324f68b49l,
wolfSSL 14:167253f4e170 35051 0x9a6b62d8a571df20l },
wolfSSL 14:167253f4e170 35052 { 0x81b4b26d179483cbl,0x666f96329511fae2l,0xd281b3e4d53aa51fl,
wolfSSL 14:167253f4e170 35053 0x7f96a7657f3dbd16l },
wolfSSL 14:167253f4e170 35054 0 },
wolfSSL 14:167253f4e170 35055 /* 17 << 56 */
wolfSSL 14:167253f4e170 35056 { { 0xa7f8b5bf074a30cel,0xd7f52107005a32e6l,0x6f9e090750237ed4l,
wolfSSL 14:167253f4e170 35057 0x2f21da478096fa2bl },
wolfSSL 14:167253f4e170 35058 { 0xf3e19cb4eec863a0l,0xd18f77fd9527620al,0x9505c81c407c1cf8l,
wolfSSL 14:167253f4e170 35059 0x9998db4e1b6ec284l },
wolfSSL 14:167253f4e170 35060 0 },
wolfSSL 14:167253f4e170 35061 /* 19 << 56 */
wolfSSL 14:167253f4e170 35062 { { 0x794e2d5984ac066cl,0xf5954a92e68c69a0l,0x28c524584fd99dccl,
wolfSSL 14:167253f4e170 35063 0x60e639fcb1012517l },
wolfSSL 14:167253f4e170 35064 { 0xc2e601257de79248l,0xe9ef6404f12fc6d7l,0x4c4f28082a3b5d32l,
wolfSSL 14:167253f4e170 35065 0x865ad32ec768eb8al },
wolfSSL 14:167253f4e170 35066 0 },
wolfSSL 14:167253f4e170 35067 /* 21 << 56 */
wolfSSL 14:167253f4e170 35068 { { 0x4f4ddf91b2f1ac7al,0xf99eaabb760fee27l,0x57f4008a49c228e5l,
wolfSSL 14:167253f4e170 35069 0x090be4401cf713bbl },
wolfSSL 14:167253f4e170 35070 { 0xac91fbe45004f022l,0xd838c2c2569e1af6l,0xd6c7d20b0f1daaa5l,
wolfSSL 14:167253f4e170 35071 0xaa063ac11bbb02c0l },
wolfSSL 14:167253f4e170 35072 0 },
wolfSSL 14:167253f4e170 35073 /* 23 << 56 */
wolfSSL 14:167253f4e170 35074 { { 0x54935fcb81d73c9el,0x6d07e9790a5e97abl,0x4dc7b30acf3a6babl,
wolfSSL 14:167253f4e170 35075 0x147ab1f3170bee11l },
wolfSSL 14:167253f4e170 35076 { 0x0aaf8e3d9fafdee4l,0xfab3dbcb538a8b95l,0x405df4b36ef13871l,
wolfSSL 14:167253f4e170 35077 0xf1f4e9cb088d5a49l },
wolfSSL 14:167253f4e170 35078 0 },
wolfSSL 14:167253f4e170 35079 /* 25 << 56 */
wolfSSL 14:167253f4e170 35080 { { 0x43c01b87459afccdl,0x6bd45143b7432652l,0x8473453055b5d78el,
wolfSSL 14:167253f4e170 35081 0x81088fdb1554ba7dl },
wolfSSL 14:167253f4e170 35082 { 0xada0a52c1e269375l,0xf9f037c42dc5ec10l,0xc066060794bfbc11l,
wolfSSL 14:167253f4e170 35083 0xc0a630bbc9c40d2fl },
wolfSSL 14:167253f4e170 35084 0 },
wolfSSL 14:167253f4e170 35085 /* 27 << 56 */
wolfSSL 14:167253f4e170 35086 { { 0x9a730ed44763eb50l,0x24a0e221c1ab0d66l,0x643b6393648748f3l,
wolfSSL 14:167253f4e170 35087 0x1982daa16d3c6291l },
wolfSSL 14:167253f4e170 35088 { 0x6f00a9f78bbc5549l,0x7a1783e17f36384el,0xe8346323de977f50l,
wolfSSL 14:167253f4e170 35089 0x91ab688db245502al },
wolfSSL 14:167253f4e170 35090 0 },
wolfSSL 14:167253f4e170 35091 /* 28 << 56 */
wolfSSL 14:167253f4e170 35092 { { 0x331ab6b56d0bdd66l,0x0a6ef32e64b71229l,0x1028150efe7c352fl,
wolfSSL 14:167253f4e170 35093 0x27e04350ce7b39d3l },
wolfSSL 14:167253f4e170 35094 { 0x2a3c8acdc1070c82l,0xfb2034d380c9feefl,0x2d729621709f3729l,
wolfSSL 14:167253f4e170 35095 0x8df290bf62cb4549l },
wolfSSL 14:167253f4e170 35096 0 },
wolfSSL 14:167253f4e170 35097 /* 29 << 56 */
wolfSSL 14:167253f4e170 35098 { { 0x02f99f33fc2e4326l,0x3b30076d5eddf032l,0xbb21f8cf0c652fb5l,
wolfSSL 14:167253f4e170 35099 0x314fb49eed91cf7bl },
wolfSSL 14:167253f4e170 35100 { 0xa013eca52f700750l,0x2b9e3c23712a4575l,0xe5355557af30fbb0l,
wolfSSL 14:167253f4e170 35101 0x1ada35167c77e771l },
wolfSSL 14:167253f4e170 35102 0 },
wolfSSL 14:167253f4e170 35103 /* 31 << 56 */
wolfSSL 14:167253f4e170 35104 { { 0xdc9f46fc609e4a74l,0x2a44a143ba667f91l,0xbc3d8b95b4d83436l,
wolfSSL 14:167253f4e170 35105 0xa01e4bd0c7bd2958l },
wolfSSL 14:167253f4e170 35106 { 0x7b18293273483c90l,0xa79c6aa1a7c7b598l,0xbf3983c6eaaac07el,
wolfSSL 14:167253f4e170 35107 0x8f18181e96e0d4e6l },
wolfSSL 14:167253f4e170 35108 0 },
wolfSSL 14:167253f4e170 35109 /* 33 << 56 */
wolfSSL 14:167253f4e170 35110 { { 0x0bfc27eeacee5043l,0xae419e732eb10f02l,0x19c028d18943fb05l,
wolfSSL 14:167253f4e170 35111 0x71f01cf7ff13aa2al },
wolfSSL 14:167253f4e170 35112 { 0x7790737e8887a132l,0x6751330966318410l,0x9819e8a37ddb795el,
wolfSSL 14:167253f4e170 35113 0xfecb8ef5dad100b2l },
wolfSSL 14:167253f4e170 35114 0 },
wolfSSL 14:167253f4e170 35115 /* 34 << 56 */
wolfSSL 14:167253f4e170 35116 { { 0x59f74a223021926al,0xb7c28a496f9b4c1cl,0xed1a733f912ad0abl,
wolfSSL 14:167253f4e170 35117 0x42a910af01a5659cl },
wolfSSL 14:167253f4e170 35118 { 0x3842c6e07bd68cabl,0x2b57fa3876d70ac8l,0x8a6707a83c53aaebl,
wolfSSL 14:167253f4e170 35119 0x62c1c51065b4db18l },
wolfSSL 14:167253f4e170 35120 0 },
wolfSSL 14:167253f4e170 35121 /* 35 << 56 */
wolfSSL 14:167253f4e170 35122 { { 0x8de2c1fbb2d09dc7l,0xc3dfed12266bd23bl,0x927d039bd5b27db6l,
wolfSSL 14:167253f4e170 35123 0x2fb2f0f1103243dal },
wolfSSL 14:167253f4e170 35124 { 0xf855a07b80be7399l,0xed9327ce1f9f27a8l,0xa0bd99c7729bdef7l,
wolfSSL 14:167253f4e170 35125 0x2b67125e28250d88l },
wolfSSL 14:167253f4e170 35126 0 },
wolfSSL 14:167253f4e170 35127 /* 36 << 56 */
wolfSSL 14:167253f4e170 35128 { { 0x784b26e88670ced7l,0xe3dfe41fc31bd3b4l,0x9e353a06bcc85cbcl,
wolfSSL 14:167253f4e170 35129 0x302e290960178a9dl },
wolfSSL 14:167253f4e170 35130 { 0x860abf11a6eac16el,0x76447000aa2b3aacl,0x46ff9d19850afdabl,
wolfSSL 14:167253f4e170 35131 0x35bdd6a5fdb2d4c1l },
wolfSSL 14:167253f4e170 35132 0 },
wolfSSL 14:167253f4e170 35133 /* 37 << 56 */
wolfSSL 14:167253f4e170 35134 { { 0xe82594b07e5c9ce9l,0x0f379e5320af346el,0x608b31e3bc65ad4al,
wolfSSL 14:167253f4e170 35135 0x710c6b12267c4826l },
wolfSSL 14:167253f4e170 35136 { 0x51c966f971954cf1l,0xb1cec7930d0aa215l,0x1f15598986bd23a8l,
wolfSSL 14:167253f4e170 35137 0xae2ff99cf9452e86l },
wolfSSL 14:167253f4e170 35138 0 },
wolfSSL 14:167253f4e170 35139 /* 39 << 56 */
wolfSSL 14:167253f4e170 35140 { { 0xb5a741a76b2515cfl,0x71c416019585c749l,0x78350d4fe683de97l,
wolfSSL 14:167253f4e170 35141 0x31d6152463d0b5f5l },
wolfSSL 14:167253f4e170 35142 { 0x7a0cc5e1fbce090bl,0xaac927edfbcb2a5bl,0xe920de4920d84c35l,
wolfSSL 14:167253f4e170 35143 0x8c06a0b622b4de26l },
wolfSSL 14:167253f4e170 35144 0 },
wolfSSL 14:167253f4e170 35145 /* 40 << 56 */
wolfSSL 14:167253f4e170 35146 { { 0xd34dd58bafe7ddf3l,0x55851fedc1e6e55bl,0xd1395616960696e7l,
wolfSSL 14:167253f4e170 35147 0x940304b25f22705fl },
wolfSSL 14:167253f4e170 35148 { 0x6f43f861b0a2a860l,0xcf1212820e7cc981l,0x121862120ab64a96l,
wolfSSL 14:167253f4e170 35149 0x09215b9ab789383cl },
wolfSSL 14:167253f4e170 35150 0 },
wolfSSL 14:167253f4e170 35151 /* 41 << 56 */
wolfSSL 14:167253f4e170 35152 { { 0x311eb30537387c09l,0xc5832fcef03ee760l,0x30358f5832f7ea19l,
wolfSSL 14:167253f4e170 35153 0xe01d3c3491d53551l },
wolfSSL 14:167253f4e170 35154 { 0x1ca5ee41da48ea80l,0x34e71e8ecf4fa4c1l,0x312abd257af1e1c7l,
wolfSSL 14:167253f4e170 35155 0xe3afcdeb2153f4a5l },
wolfSSL 14:167253f4e170 35156 0 },
wolfSSL 14:167253f4e170 35157 /* 43 << 56 */
wolfSSL 14:167253f4e170 35158 { { 0x2a17747fa6d74081l,0x60ea4c0555a26214l,0x53514bb41f88c5fel,
wolfSSL 14:167253f4e170 35159 0xedd645677e83426cl },
wolfSSL 14:167253f4e170 35160 { 0xd5d6cbec96460b25l,0xa12fd0ce68dc115el,0xc5bc3ed2697840eal,
wolfSSL 14:167253f4e170 35161 0x969876a8a6331e31l },
wolfSSL 14:167253f4e170 35162 0 },
wolfSSL 14:167253f4e170 35163 /* 44 << 56 */
wolfSSL 14:167253f4e170 35164 { { 0x60c36217472ff580l,0xf42297054ad41393l,0x4bd99ef0a03b8b92l,
wolfSSL 14:167253f4e170 35165 0x501c7317c144f4f6l },
wolfSSL 14:167253f4e170 35166 { 0x159009b318464945l,0x6d5e594c74c5c6bel,0x2d587011321a3660l,
wolfSSL 14:167253f4e170 35167 0xd1e184b13898d022l },
wolfSSL 14:167253f4e170 35168 0 },
wolfSSL 14:167253f4e170 35169 /* 45 << 56 */
wolfSSL 14:167253f4e170 35170 { { 0x5ba047524c6a7e04l,0x47fa1e2b45550b65l,0x9419daf048c0a9a5l,
wolfSSL 14:167253f4e170 35171 0x663629537c243236l },
wolfSSL 14:167253f4e170 35172 { 0xcd0744b15cb12a88l,0x561b6f9a2b646188l,0x599415a566c2c0c0l,
wolfSSL 14:167253f4e170 35173 0xbe3f08590f83f09al },
wolfSSL 14:167253f4e170 35174 0 },
wolfSSL 14:167253f4e170 35175 /* 46 << 56 */
wolfSSL 14:167253f4e170 35176 { { 0x9141c5beb92041b8l,0x01ae38c726477d0dl,0xca8b71f3d12c7a94l,
wolfSSL 14:167253f4e170 35177 0xfab5b31f765c70dbl },
wolfSSL 14:167253f4e170 35178 { 0x76ae7492487443e9l,0x8595a310990d1349l,0xf8dbeda87d460a37l,
wolfSSL 14:167253f4e170 35179 0x7f7ad0821e45a38fl },
wolfSSL 14:167253f4e170 35180 0 },
wolfSSL 14:167253f4e170 35181 /* 47 << 56 */
wolfSSL 14:167253f4e170 35182 { { 0xed1d4db61059705al,0xa3dd492ae6b9c697l,0x4b92ee3a6eb38bd5l,
wolfSSL 14:167253f4e170 35183 0xbab2609d67cc0bb7l },
wolfSSL 14:167253f4e170 35184 { 0x7fc4fe896e70ee82l,0xeff2c56e13e6b7e3l,0x9b18959e34d26fcal,
wolfSSL 14:167253f4e170 35185 0x2517ab66889d6b45l },
wolfSSL 14:167253f4e170 35186 0 },
wolfSSL 14:167253f4e170 35187 /* 48 << 56 */
wolfSSL 14:167253f4e170 35188 { { 0xf167b4e0bdefdd4fl,0x69958465f366e401l,0x5aa368aba73bbec0l,
wolfSSL 14:167253f4e170 35189 0x121487097b240c21l },
wolfSSL 14:167253f4e170 35190 { 0x378c323318969006l,0xcb4d73cee1fe53d1l,0x5f50a80e130c4361l,
wolfSSL 14:167253f4e170 35191 0xd67f59517ef5212bl },
wolfSSL 14:167253f4e170 35192 0 },
wolfSSL 14:167253f4e170 35193 /* 49 << 56 */
wolfSSL 14:167253f4e170 35194 { { 0xf145e21e9e70c72el,0xb2e52e295566d2fbl,0x44eaba4a032397f5l,
wolfSSL 14:167253f4e170 35195 0x5e56937b7e31a7del },
wolfSSL 14:167253f4e170 35196 { 0x68dcf517456c61e1l,0xbc2e954aa8b0a388l,0xe3552fa760a8b755l,
wolfSSL 14:167253f4e170 35197 0x03442dae73ad0cdel },
wolfSSL 14:167253f4e170 35198 0 },
wolfSSL 14:167253f4e170 35199 /* 51 << 56 */
wolfSSL 14:167253f4e170 35200 { { 0x3fcbdbce478e2135l,0x7547b5cfbda35342l,0xa97e81f18a677af6l,
wolfSSL 14:167253f4e170 35201 0xc8c2bf8328817987l },
wolfSSL 14:167253f4e170 35202 { 0xdf07eaaf45580985l,0xc68d1f05c93b45cbl,0x106aa2fec77b4cacl,
wolfSSL 14:167253f4e170 35203 0x4c1d8afc04a7ae86l },
wolfSSL 14:167253f4e170 35204 0 },
wolfSSL 14:167253f4e170 35205 /* 52 << 56 */
wolfSSL 14:167253f4e170 35206 { { 0xdb41c3fd9eb45ab2l,0x5b234b5bd4b22e74l,0xda253decf215958al,
wolfSSL 14:167253f4e170 35207 0x67e0606ea04edfa0l },
wolfSSL 14:167253f4e170 35208 { 0xabbbf070ef751b11l,0xf352f175f6f06dcel,0xdfc4b6af6839f6b4l,
wolfSSL 14:167253f4e170 35209 0x53ddf9a89959848el },
wolfSSL 14:167253f4e170 35210 0 },
wolfSSL 14:167253f4e170 35211 /* 53 << 56 */
wolfSSL 14:167253f4e170 35212 { { 0xda49c379c21520b0l,0x90864ff0dbd5d1b6l,0x2f055d235f49c7f7l,
wolfSSL 14:167253f4e170 35213 0xe51e4e6aa796b2d8l },
wolfSSL 14:167253f4e170 35214 { 0xc361a67f5c9dc340l,0x5ad53c37bca7c620l,0xda1d658832c756d0l,
wolfSSL 14:167253f4e170 35215 0xad60d9118bb67e13l },
wolfSSL 14:167253f4e170 35216 0 },
wolfSSL 14:167253f4e170 35217 /* 55 << 56 */
wolfSSL 14:167253f4e170 35218 { { 0xd1183316fd6f7140l,0xf9fadb5bbd8e81f7l,0x701d5e0c5a02d962l,
wolfSSL 14:167253f4e170 35219 0xfdee4dbf1b601324l },
wolfSSL 14:167253f4e170 35220 { 0xbed1740735d7620el,0x04e3c2c3f48c0012l,0x9ee29da73455449al,
wolfSSL 14:167253f4e170 35221 0x562cdef491a836c4l },
wolfSSL 14:167253f4e170 35222 0 },
wolfSSL 14:167253f4e170 35223 /* 57 << 56 */
wolfSSL 14:167253f4e170 35224 { { 0x147ebf01fad097a5l,0x49883ea8610e815dl,0xe44d60ba8a11de56l,
wolfSSL 14:167253f4e170 35225 0xa970de6e827a7a6dl },
wolfSSL 14:167253f4e170 35226 { 0x2be414245e17fc19l,0xd833c65701214057l,0x1375813b363e723fl,
wolfSSL 14:167253f4e170 35227 0x6820bb88e6a52e9bl },
wolfSSL 14:167253f4e170 35228 0 },
wolfSSL 14:167253f4e170 35229 /* 59 << 56 */
wolfSSL 14:167253f4e170 35230 { { 0xe1b6f60c08191224l,0xc4126ebbde4ec091l,0xe1dff4dc4ae38d84l,
wolfSSL 14:167253f4e170 35231 0xde3f57db4f2ef985l },
wolfSSL 14:167253f4e170 35232 { 0x34964337d446a1ddl,0x7bf217a0859e77f6l,0x8ff105278e1d13f5l,
wolfSSL 14:167253f4e170 35233 0xa304ef0374eeae27l },
wolfSSL 14:167253f4e170 35234 0 },
wolfSSL 14:167253f4e170 35235 /* 60 << 56 */
wolfSSL 14:167253f4e170 35236 { { 0xfc6f5e47d19dfa5al,0xdb007de37fad982bl,0x28205ad1613715f5l,
wolfSSL 14:167253f4e170 35237 0x251e67297889529el },
wolfSSL 14:167253f4e170 35238 { 0x727051841ae98e78l,0xf818537d271cac32l,0xc8a15b7eb7f410f5l,
wolfSSL 14:167253f4e170 35239 0xc474356f81f62393l },
wolfSSL 14:167253f4e170 35240 0 },
wolfSSL 14:167253f4e170 35241 /* 61 << 56 */
wolfSSL 14:167253f4e170 35242 { { 0x92dbdc5ac242316bl,0xabe060acdbf4aff5l,0x6e8c38fe909a8ec6l,
wolfSSL 14:167253f4e170 35243 0x43e514e56116cb94l },
wolfSSL 14:167253f4e170 35244 { 0x2078fa3807d784f9l,0x1161a880f4b5b357l,0x5283ce7913adea3dl,
wolfSSL 14:167253f4e170 35245 0x0756c3e6cc6a910bl },
wolfSSL 14:167253f4e170 35246 0 },
wolfSSL 14:167253f4e170 35247 /* 63 << 56 */
wolfSSL 14:167253f4e170 35248 { { 0xa573a4966d17fbc7l,0x0cd1a70a73d2b24el,0x34e2c5cab2676937l,
wolfSSL 14:167253f4e170 35249 0xe7050b06bf669f21l },
wolfSSL 14:167253f4e170 35250 { 0xfbe948b61ede9046l,0xa053005197662659l,0x58cbd4edf10124c5l,
wolfSSL 14:167253f4e170 35251 0xde2646e4dd6c06c8l },
wolfSSL 14:167253f4e170 35252 0 },
wolfSSL 14:167253f4e170 35253 /* 64 << 56 */
wolfSSL 14:167253f4e170 35254 { { 0x332f81088cad38c0l,0x471b7e906bd68ae2l,0x56ac3fb20d8e27a3l,
wolfSSL 14:167253f4e170 35255 0xb54660db136b4b0dl },
wolfSSL 14:167253f4e170 35256 { 0x123a1e11a6fd8de4l,0x44dbffeaa37799efl,0x4540b977ce6ac17cl,
wolfSSL 14:167253f4e170 35257 0x495173a8af60acefl },
wolfSSL 14:167253f4e170 35258 0 },
wolfSSL 14:167253f4e170 35259 /* 65 << 56 */
wolfSSL 14:167253f4e170 35260 { { 0xc48b1478db447d0bl,0xe1b85f5d46104fbbl,0x4ab31e7d991c60b9l,
wolfSSL 14:167253f4e170 35261 0xaa674a9258a0cfd0l },
wolfSSL 14:167253f4e170 35262 { 0x179fc2cd316f4297l,0x90c18642dcccbc82l,0x65d4309e56a4c163l,
wolfSSL 14:167253f4e170 35263 0xf211a9c7145a33ecl },
wolfSSL 14:167253f4e170 35264 0 },
wolfSSL 14:167253f4e170 35265 /* 71 << 56 */
wolfSSL 14:167253f4e170 35266 { { 0x9669170cdc32717fl,0x52d69b5138133e34l,0xaed24e5fb079c3b2l,
wolfSSL 14:167253f4e170 35267 0xaba44a91a21ea3d2l },
wolfSSL 14:167253f4e170 35268 { 0xd6814f1938d40105l,0x38289fe463462e7al,0x1793eefa3a80cbf5l,
wolfSSL 14:167253f4e170 35269 0x05816a0795f29bacl },
wolfSSL 14:167253f4e170 35270 0 },
wolfSSL 14:167253f4e170 35271 /* 77 << 56 */
wolfSSL 14:167253f4e170 35272 { { 0xdca88ad98f850641l,0x8c1152c447999b0dl,0x509f654e654aff33l,
wolfSSL 14:167253f4e170 35273 0x2228550f08a12f14l },
wolfSSL 14:167253f4e170 35274 { 0x60fe99dbb6a0ccdbl,0x80d6829bfc2cddccl,0x190f454dd5617aa4l,
wolfSSL 14:167253f4e170 35275 0x0aea05fe36295d2dl },
wolfSSL 14:167253f4e170 35276 0 },
wolfSSL 14:167253f4e170 35277 /* 83 << 56 */
wolfSSL 14:167253f4e170 35278 { { 0x1de06c8af9bef9a5l,0xe24d85d3fb2d3164l,0x3dbe455e8d203d3el,
wolfSSL 14:167253f4e170 35279 0x439bee4735ea47a9l },
wolfSSL 14:167253f4e170 35280 { 0xcc143432784893d7l,0x9b71073bd9bebd00l,0x6c106b343aa2fe88l,
wolfSSL 14:167253f4e170 35281 0x9df2a42734746f7al },
wolfSSL 14:167253f4e170 35282 0 },
wolfSSL 14:167253f4e170 35283 /* 89 << 56 */
wolfSSL 14:167253f4e170 35284 { { 0x1ad0b3725a8c2168l,0x64e52d6d143f0402l,0xd933c783e320f31fl,
wolfSSL 14:167253f4e170 35285 0x1ccf90a80ff14f52l },
wolfSSL 14:167253f4e170 35286 { 0xd3a3133ee1e6d0c0l,0xfd75a2d5b4acc8cal,0x62659b8e5559d171l,
wolfSSL 14:167253f4e170 35287 0x5087d6e9f13ad52al },
wolfSSL 14:167253f4e170 35288 0 },
wolfSSL 14:167253f4e170 35289 /* 95 << 56 */
wolfSSL 14:167253f4e170 35290 { { 0xb4d647a5deef31a4l,0x95bf4ab180975ea9l,0x2f92d15adf57b03el,
wolfSSL 14:167253f4e170 35291 0x5ee808ab746b26d6l },
wolfSSL 14:167253f4e170 35292 { 0x4341597c1082f261l,0x027795eb40c45e95l,0xcb77744b3b690c30l,
wolfSSL 14:167253f4e170 35293 0xdd87c084af3f88d1l },
wolfSSL 14:167253f4e170 35294 0 },
wolfSSL 14:167253f4e170 35295 /* 101 << 56 */
wolfSSL 14:167253f4e170 35296 { { 0x469f177572109785l,0xf365e55123f84d6cl,0x8006a9c28a046dbbl,
wolfSSL 14:167253f4e170 35297 0x1b9fbe892fa09f52l },
wolfSSL 14:167253f4e170 35298 { 0xac18a88016075e9el,0x4a3069bc1e3fd628l,0x20c61eaa60c61c14l,
wolfSSL 14:167253f4e170 35299 0x315b59daf61f004bl },
wolfSSL 14:167253f4e170 35300 0 },
wolfSSL 14:167253f4e170 35301 /* 107 << 56 */
wolfSSL 14:167253f4e170 35302 { { 0x0a94387f26d04857l,0x952a4ebc43d6de95l,0xb422e15cf14abdfal,
wolfSSL 14:167253f4e170 35303 0x5b7a0153324ef90cl },
wolfSSL 14:167253f4e170 35304 { 0x6aefa20e9826ec5bl,0x0e529886ad2fe161l,0xb710a74ec0d416e8l,
wolfSSL 14:167253f4e170 35305 0x6cf4b0a5fb6c90bcl },
wolfSSL 14:167253f4e170 35306 0 },
wolfSSL 14:167253f4e170 35307 /* 113 << 56 */
wolfSSL 14:167253f4e170 35308 { { 0x822aea4031979d3bl,0xb504eafde215a109l,0xa8761ead84bf2377l,
wolfSSL 14:167253f4e170 35309 0xb55c1e55efb3d942l },
wolfSSL 14:167253f4e170 35310 { 0xd01f9b0212b7f17bl,0x41b62c2a891bfbbfl,0x50800e6b08938149l,
wolfSSL 14:167253f4e170 35311 0x527b50a9b0a55d82l },
wolfSSL 14:167253f4e170 35312 0 },
wolfSSL 14:167253f4e170 35313 /* 116 << 56 */
wolfSSL 14:167253f4e170 35314 { { 0x6bc84d8d1d9ce3c4l,0x53b465072a308df0l,0x6c3da9bfca79c88al,
wolfSSL 14:167253f4e170 35315 0x9636ad9c36372acfl },
wolfSSL 14:167253f4e170 35316 { 0x8840e92c425ef14cl,0x863191f96af3225bl,0xd56d82d0d369b857l,
wolfSSL 14:167253f4e170 35317 0x2053a2527a4c41f9l },
wolfSSL 14:167253f4e170 35318 0 },
wolfSSL 14:167253f4e170 35319 /* 119 << 56 */
wolfSSL 14:167253f4e170 35320 { { 0x20aecd6609ca8805l,0x945d9b31dc818ee6l,0x1424647c2119b44bl,
wolfSSL 14:167253f4e170 35321 0xbe934d7e5a6641f9l },
wolfSSL 14:167253f4e170 35322 { 0xe91d53184559e55el,0xc2fb8e0b4dfbc3d4l,0x9e92e20676cb937fl,
wolfSSL 14:167253f4e170 35323 0x0f5582e4f2932429l },
wolfSSL 14:167253f4e170 35324 0 },
wolfSSL 14:167253f4e170 35325 /* 125 << 56 */
wolfSSL 14:167253f4e170 35326 { { 0xb5fc22a42d31809fl,0x6d582d2b0e35b7b4l,0x5fac415158c5f576l,
wolfSSL 14:167253f4e170 35327 0xdff239371e4cd7c9l },
wolfSSL 14:167253f4e170 35328 { 0x0f62b329ed4d1925l,0x00994a2e6010fb16l,0xb4b91076bd754837l,
wolfSSL 14:167253f4e170 35329 0xfde219463345103al },
wolfSSL 14:167253f4e170 35330 0 },
wolfSSL 14:167253f4e170 35331 },
wolfSSL 14:167253f4e170 35332 {
wolfSSL 14:167253f4e170 35333 /* 0 << 64 */
wolfSSL 14:167253f4e170 35334 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 35335 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 35336 1 },
wolfSSL 14:167253f4e170 35337 /* 1 << 64 */
wolfSSL 14:167253f4e170 35338 { { 0x4f922fc516a0d2bbl,0x0d5cc16c1a623499l,0x9241cf3a57c62c8bl,
wolfSSL 14:167253f4e170 35339 0x2f5e6961fd1b667fl },
wolfSSL 14:167253f4e170 35340 { 0x5c15c70bf5a01797l,0x3d20b44d60956192l,0x04911b37071fdb52l,
wolfSSL 14:167253f4e170 35341 0xf648f9168d6f0f7bl },
wolfSSL 14:167253f4e170 35342 0 },
wolfSSL 14:167253f4e170 35343 /* 3 << 64 */
wolfSSL 14:167253f4e170 35344 { { 0x4090914bb5def996l,0x1cb69c83233dd1e7l,0xc1e9c1d39b3d5e76l,
wolfSSL 14:167253f4e170 35345 0x1f3338edfccf6012l },
wolfSSL 14:167253f4e170 35346 { 0xb1e95d0d2f5378a8l,0xacf4c2c72f00cd21l,0x6e984240eb5fe290l,
wolfSSL 14:167253f4e170 35347 0xd66c038d248088ael },
wolfSSL 14:167253f4e170 35348 0 },
wolfSSL 14:167253f4e170 35349 /* 4 << 64 */
wolfSSL 14:167253f4e170 35350 { { 0x9ad5462bb4d8bc50l,0x181c0b16a9195770l,0xebd4fe1c78412a68l,
wolfSSL 14:167253f4e170 35351 0xae0341bcc0dff48cl },
wolfSSL 14:167253f4e170 35352 { 0xb6bc45cf7003e866l,0xf11a6dea8a24a41bl,0x5407151ad04c24c2l,
wolfSSL 14:167253f4e170 35353 0x62c9d27dda5b7b68l },
wolfSSL 14:167253f4e170 35354 0 },
wolfSSL 14:167253f4e170 35355 /* 5 << 64 */
wolfSSL 14:167253f4e170 35356 { { 0xd4992b30614c0900l,0xda98d121bd00c24bl,0x7f534dc87ec4bfa1l,
wolfSSL 14:167253f4e170 35357 0x4a5ff67437dc34bcl },
wolfSSL 14:167253f4e170 35358 { 0x68c196b81d7ea1d7l,0x38cf289380a6d208l,0xfd56cd09e3cbbd6el,
wolfSSL 14:167253f4e170 35359 0xec72e27e4205a5b6l },
wolfSSL 14:167253f4e170 35360 0 },
wolfSSL 14:167253f4e170 35361 /* 7 << 64 */
wolfSSL 14:167253f4e170 35362 { { 0xe8b97932b88756ddl,0xed4e8652f17e3e61l,0xc2dd14993ee1c4a4l,
wolfSSL 14:167253f4e170 35363 0xc0aaee17597f8c0el },
wolfSSL 14:167253f4e170 35364 { 0x15c4edb96c168af3l,0x6563c7bfb39ae875l,0xadfadb6f20adb436l,
wolfSSL 14:167253f4e170 35365 0xad55e8c99a042ac0l },
wolfSSL 14:167253f4e170 35366 0 },
wolfSSL 14:167253f4e170 35367 /* 9 << 64 */
wolfSSL 14:167253f4e170 35368 { { 0x65c29219909523c8l,0xa62f648fa3a1c741l,0x88598d4f60c9e55al,
wolfSSL 14:167253f4e170 35369 0xbce9141b0e4f347al },
wolfSSL 14:167253f4e170 35370 { 0x9af97d8435f9b988l,0x0210da62320475b6l,0x3c076e229191476cl,
wolfSSL 14:167253f4e170 35371 0x7520dbd944fc7834l },
wolfSSL 14:167253f4e170 35372 0 },
wolfSSL 14:167253f4e170 35373 /* 10 << 64 */
wolfSSL 14:167253f4e170 35374 { { 0x87a7ebd1e0a1b12al,0x1e4ef88d770ba95fl,0x8c33345cdc2ae9cbl,
wolfSSL 14:167253f4e170 35375 0xcecf127601cc8403l },
wolfSSL 14:167253f4e170 35376 { 0x687c012e1b39b80fl,0xfd90d0ad35c33ba4l,0xa3ef5a675c9661c2l,
wolfSSL 14:167253f4e170 35377 0x368fc88ee017429el },
wolfSSL 14:167253f4e170 35378 0 },
wolfSSL 14:167253f4e170 35379 /* 11 << 64 */
wolfSSL 14:167253f4e170 35380 { { 0x664300b07850ec06l,0xac5a38b97d3a10cfl,0x9233188de34ab39dl,
wolfSSL 14:167253f4e170 35381 0xe77057e45072cbb9l },
wolfSSL 14:167253f4e170 35382 { 0xbcf0c042b59e78dfl,0x4cfc91e81d97de52l,0x4661a26c3ee0ca4al,
wolfSSL 14:167253f4e170 35383 0x5620a4c1fb8507bcl },
wolfSSL 14:167253f4e170 35384 0 },
wolfSSL 14:167253f4e170 35385 /* 13 << 64 */
wolfSSL 14:167253f4e170 35386 { { 0x84b9ca1504b6c5a0l,0x35216f3918f0e3a3l,0x3ec2d2bcbd986c00l,
wolfSSL 14:167253f4e170 35387 0x8bf546d9d19228fel },
wolfSSL 14:167253f4e170 35388 { 0xd1c655a44cd623c3l,0x366ce718502b8e5al,0x2cfc84b4eea0bfe7l,
wolfSSL 14:167253f4e170 35389 0xe01d5ceecf443e8el },
wolfSSL 14:167253f4e170 35390 0 },
wolfSSL 14:167253f4e170 35391 /* 15 << 64 */
wolfSSL 14:167253f4e170 35392 { { 0xa75feacabe063f64l,0x9b392f43bce47a09l,0xd42415091ad07acal,
wolfSSL 14:167253f4e170 35393 0x4b0c591b8d26cd0fl },
wolfSSL 14:167253f4e170 35394 { 0x2d42ddfd92f1169al,0x63aeb1ac4cbf2392l,0x1de9e8770691a2afl,
wolfSSL 14:167253f4e170 35395 0xebe79af7d98021dal },
wolfSSL 14:167253f4e170 35396 0 },
wolfSSL 14:167253f4e170 35397 /* 16 << 64 */
wolfSSL 14:167253f4e170 35398 { { 0x58af2010f5b343bcl,0x0f2e400af2f142fel,0x3483bfdea85f4bdfl,
wolfSSL 14:167253f4e170 35399 0xf0b1d09303bfeaa9l },
wolfSSL 14:167253f4e170 35400 { 0x2ea01b95c7081603l,0xe943e4c93dba1097l,0x47be92adb438f3a6l,
wolfSSL 14:167253f4e170 35401 0x00bb7742e5bf6636l },
wolfSSL 14:167253f4e170 35402 0 },
wolfSSL 14:167253f4e170 35403 /* 17 << 64 */
wolfSSL 14:167253f4e170 35404 { { 0x66917ce63b5f1cc4l,0x37ae52eace872e62l,0xbb087b722905f244l,
wolfSSL 14:167253f4e170 35405 0x120770861e6af74fl },
wolfSSL 14:167253f4e170 35406 { 0x4b644e491058edeal,0x827510e3b638ca1dl,0x8cf2b7046038591cl,
wolfSSL 14:167253f4e170 35407 0xffc8b47afe635063l },
wolfSSL 14:167253f4e170 35408 0 },
wolfSSL 14:167253f4e170 35409 /* 19 << 64 */
wolfSSL 14:167253f4e170 35410 { { 0x7677408d6dfafed3l,0x33a0165339661588l,0x3c9c15ec0b726fa0l,
wolfSSL 14:167253f4e170 35411 0x090cfd936c9b56dal },
wolfSSL 14:167253f4e170 35412 { 0xe34f4baea3c40af5l,0x3469eadbd21129f1l,0xcc51674a1e207ce8l,
wolfSSL 14:167253f4e170 35413 0x1e293b24c83b1ef9l },
wolfSSL 14:167253f4e170 35414 0 },
wolfSSL 14:167253f4e170 35415 /* 21 << 64 */
wolfSSL 14:167253f4e170 35416 { { 0x796d3a85825808bdl,0x51dc3cb73fd6e902l,0x643c768a916219d1l,
wolfSSL 14:167253f4e170 35417 0x36cd7685a2ad7d32l },
wolfSSL 14:167253f4e170 35418 { 0xe3db9d05b22922a4l,0x6494c87edba29660l,0xf0ac91dfbcd2ebc7l,
wolfSSL 14:167253f4e170 35419 0x4deb57a045107f8dl },
wolfSSL 14:167253f4e170 35420 0 },
wolfSSL 14:167253f4e170 35421 /* 23 << 64 */
wolfSSL 14:167253f4e170 35422 { { 0xb6c69ac82094cec3l,0x9976fb88403b770cl,0x1dea026c4859590dl,
wolfSSL 14:167253f4e170 35423 0xb6acbb468562d1fdl },
wolfSSL 14:167253f4e170 35424 { 0x7cd6c46144569d85l,0xc3190a3697f0891dl,0xc6f5319548d5a17dl,
wolfSSL 14:167253f4e170 35425 0x7d919966d749abc8l },
wolfSSL 14:167253f4e170 35426 0 },
wolfSSL 14:167253f4e170 35427 /* 25 << 64 */
wolfSSL 14:167253f4e170 35428 { { 0xb53b7de561906373l,0x858dbadeeb999595l,0x8cbb47b2a59e5c36l,
wolfSSL 14:167253f4e170 35429 0x660318b3dcf4e842l },
wolfSSL 14:167253f4e170 35430 { 0xbd161ccd12ba4b7al,0xf399daabf8c8282al,0x1587633aeeb2130dl,
wolfSSL 14:167253f4e170 35431 0xa465311ada38dd7dl },
wolfSSL 14:167253f4e170 35432 0 },
wolfSSL 14:167253f4e170 35433 /* 27 << 64 */
wolfSSL 14:167253f4e170 35434 { { 0x2dae9082be7cf3a6l,0xcc86ba92bc967274l,0xf28a2ce8aea0a8a9l,
wolfSSL 14:167253f4e170 35435 0x404ca6d96ee988b3l },
wolfSSL 14:167253f4e170 35436 { 0xfd7e9c5d005921b8l,0xf56297f144e79bf9l,0xa163b4600d75ddc2l,
wolfSSL 14:167253f4e170 35437 0x30b23616a1f2be87l },
wolfSSL 14:167253f4e170 35438 0 },
wolfSSL 14:167253f4e170 35439 /* 28 << 64 */
wolfSSL 14:167253f4e170 35440 { { 0x19e6125dec3f1decl,0x07b1f040911178dal,0xd93ededa904a6738l,
wolfSSL 14:167253f4e170 35441 0x55187a5a0bebedcdl },
wolfSSL 14:167253f4e170 35442 { 0xf7d04722eb329d41l,0xf449099ef170b391l,0xfd317a69ca99f828l,
wolfSSL 14:167253f4e170 35443 0x50c3db2b34a4976dl },
wolfSSL 14:167253f4e170 35444 0 },
wolfSSL 14:167253f4e170 35445 /* 29 << 64 */
wolfSSL 14:167253f4e170 35446 { { 0x0064d8585499fb32l,0x7b67bad977a8aeb7l,0x1d3eb9772d08eec5l,
wolfSSL 14:167253f4e170 35447 0x5fc047a6cbabae1dl },
wolfSSL 14:167253f4e170 35448 { 0x0577d159e54a64bbl,0x8862201bc43497e4l,0xad6b4e282ce0608dl,
wolfSSL 14:167253f4e170 35449 0x8b687b7d0b167aacl },
wolfSSL 14:167253f4e170 35450 0 },
wolfSSL 14:167253f4e170 35451 /* 31 << 64 */
wolfSSL 14:167253f4e170 35452 { { 0xe9f9669cda94951el,0x4b6af58d66b8d418l,0xfa32107417d426a4l,
wolfSSL 14:167253f4e170 35453 0xc78e66a99dde6027l },
wolfSSL 14:167253f4e170 35454 { 0x0516c0834a53b964l,0xfc659d38ff602330l,0x0ab55e5c58c5c897l,
wolfSSL 14:167253f4e170 35455 0x985099b2838bc5dfl },
wolfSSL 14:167253f4e170 35456 0 },
wolfSSL 14:167253f4e170 35457 /* 33 << 64 */
wolfSSL 14:167253f4e170 35458 { { 0xe7a935fa1684cb3bl,0x571650b5a7d7e69dl,0x6ba9ffa40328c168l,
wolfSSL 14:167253f4e170 35459 0xac43f6bc7e46f358l },
wolfSSL 14:167253f4e170 35460 { 0x54f75e567cb6a779l,0x4e4e2cc8c61320del,0xb94258bc2b8903d0l,
wolfSSL 14:167253f4e170 35461 0xc7f32d57ceecabe0l },
wolfSSL 14:167253f4e170 35462 0 },
wolfSSL 14:167253f4e170 35463 /* 34 << 64 */
wolfSSL 14:167253f4e170 35464 { { 0x34739f16cd7d9d89l,0x6daab4267ca080b5l,0x772086ff40e19f45l,
wolfSSL 14:167253f4e170 35465 0x43caa56118c61b42l },
wolfSSL 14:167253f4e170 35466 { 0x0ba3d4a8dbf365f1l,0xa0db435ee760ad97l,0xfd6f30d56916c59bl,
wolfSSL 14:167253f4e170 35467 0xab34cb5dafe12f5dl },
wolfSSL 14:167253f4e170 35468 0 },
wolfSSL 14:167253f4e170 35469 /* 35 << 64 */
wolfSSL 14:167253f4e170 35470 { { 0x445b86ea02a3260al,0x8c51d6428d689babl,0x183334d65588904cl,
wolfSSL 14:167253f4e170 35471 0xf8a3b84d479d6422l },
wolfSSL 14:167253f4e170 35472 { 0x581acfa0f0833d00l,0xc50827bc3b567d2dl,0x2c935e6daddcf73el,
wolfSSL 14:167253f4e170 35473 0x2a645f7704dd19f2l },
wolfSSL 14:167253f4e170 35474 0 },
wolfSSL 14:167253f4e170 35475 /* 36 << 64 */
wolfSSL 14:167253f4e170 35476 { { 0x78d2e8dfcb564473l,0x4349a97357d5621al,0x9d835d89218f8b24l,
wolfSSL 14:167253f4e170 35477 0x01fe7bc5079b6ee2l },
wolfSSL 14:167253f4e170 35478 { 0xe57f2a2b5b3b5dcel,0x5a8637b75fe55565l,0x83ff34aea41dbae7l,
wolfSSL 14:167253f4e170 35479 0xfce1199c950a7a8fl },
wolfSSL 14:167253f4e170 35480 0 },
wolfSSL 14:167253f4e170 35481 /* 37 << 64 */
wolfSSL 14:167253f4e170 35482 { { 0x0ca5d25bf8e71ce2l,0x204edc4a062685dal,0x06fe407d87678ec2l,
wolfSSL 14:167253f4e170 35483 0xd16936a07defa39al },
wolfSSL 14:167253f4e170 35484 { 0x3b108d84af3d16d0l,0xf2e9616d0305cad0l,0xbc9537e6f27bed97l,
wolfSSL 14:167253f4e170 35485 0x71c2d699ebc9f45cl },
wolfSSL 14:167253f4e170 35486 0 },
wolfSSL 14:167253f4e170 35487 /* 39 << 64 */
wolfSSL 14:167253f4e170 35488 { { 0x203bdd84cdcd3a85l,0x1107b901ade3ccfal,0xa7da89e95533159dl,
wolfSSL 14:167253f4e170 35489 0x8d834005860e8c64l },
wolfSSL 14:167253f4e170 35490 { 0x914bc0eb2a7638f7l,0xc66ce0a6620e8606l,0x11ef98c2e6c12dc0l,
wolfSSL 14:167253f4e170 35491 0x25666b1d7780fc0el },
wolfSSL 14:167253f4e170 35492 0 },
wolfSSL 14:167253f4e170 35493 /* 40 << 64 */
wolfSSL 14:167253f4e170 35494 { { 0x374f541f3e707706l,0x9a4d3638a831d0cfl,0x4ab4f4831518ca04l,
wolfSSL 14:167253f4e170 35495 0x54e3ee5dfe38c318l },
wolfSSL 14:167253f4e170 35496 { 0x383ae36403c8819bl,0xa9d1daa12e17864cl,0x245a97b350eeaa5bl,
wolfSSL 14:167253f4e170 35497 0x5362d00999bf4e83l },
wolfSSL 14:167253f4e170 35498 0 },
wolfSSL 14:167253f4e170 35499 /* 41 << 64 */
wolfSSL 14:167253f4e170 35500 { { 0x6667e89f4ded8a4fl,0xa59161abc36a7795l,0x1c96f6f9331ccf94l,
wolfSSL 14:167253f4e170 35501 0xf2727e879a686d49l },
wolfSSL 14:167253f4e170 35502 { 0x0f94894bb841295fl,0xb0fe8f744a0503d1l,0x60c581c7ef407926l,
wolfSSL 14:167253f4e170 35503 0x1980c8e13edb7e1cl },
wolfSSL 14:167253f4e170 35504 0 },
wolfSSL 14:167253f4e170 35505 /* 43 << 64 */
wolfSSL 14:167253f4e170 35506 { { 0x47948c84c5de1a41l,0xd595d14a48959688l,0x3bfca4be86ff21c9l,
wolfSSL 14:167253f4e170 35507 0xb5ff59b86a4191cal },
wolfSSL 14:167253f4e170 35508 { 0xced1dd1d65094c86l,0xd57b86559dc9d001l,0xbcac6fa3486e51d7l,
wolfSSL 14:167253f4e170 35509 0x8e97e2637b774c1bl },
wolfSSL 14:167253f4e170 35510 0 },
wolfSSL 14:167253f4e170 35511 /* 44 << 64 */
wolfSSL 14:167253f4e170 35512 { { 0xfc0313c29bd43980l,0x9c954b70f172db29l,0x679bdcb7f954a21al,
wolfSSL 14:167253f4e170 35513 0x6b48170954e2e4fcl },
wolfSSL 14:167253f4e170 35514 { 0x318af5f530baf1d0l,0x26ea8a3ccbf92060l,0xc3c69d7ccd5ae258l,
wolfSSL 14:167253f4e170 35515 0xa73ba0470ead07c9l },
wolfSSL 14:167253f4e170 35516 0 },
wolfSSL 14:167253f4e170 35517 /* 45 << 64 */
wolfSSL 14:167253f4e170 35518 { { 0xe82eb003e35dca85l,0xfd0000fa31e39180l,0xbca90f746735f378l,
wolfSSL 14:167253f4e170 35519 0xe6aa783158c943edl },
wolfSSL 14:167253f4e170 35520 { 0x0e94ecd5b6a438d7l,0xc02b60faf9a5f114l,0x4063568b8b1611ebl,
wolfSSL 14:167253f4e170 35521 0x1398bdc1272509ecl },
wolfSSL 14:167253f4e170 35522 0 },
wolfSSL 14:167253f4e170 35523 /* 46 << 64 */
wolfSSL 14:167253f4e170 35524 { { 0xc2ef6a01be3e92d1l,0x1bce9c27282bd5ddl,0xf7e488f3adda0568l,
wolfSSL 14:167253f4e170 35525 0xd4f15fdb1af9bb8bl },
wolfSSL 14:167253f4e170 35526 { 0x8c490ade4da846efl,0x76229da17f0b825el,0xc8b812082a6711c6l,
wolfSSL 14:167253f4e170 35527 0x511f5e23b4c523aal },
wolfSSL 14:167253f4e170 35528 0 },
wolfSSL 14:167253f4e170 35529 /* 47 << 64 */
wolfSSL 14:167253f4e170 35530 { { 0xbdf4e7049970f46el,0x70e220288dadbd1al,0x2b86c97fb1223d26l,
wolfSSL 14:167253f4e170 35531 0x042ad22ecf62f51al },
wolfSSL 14:167253f4e170 35532 { 0x72944339ba2ed2e9l,0x0ba0d10ef94fa61dl,0x3f86164194e68f15l,
wolfSSL 14:167253f4e170 35533 0x1312a74acb86c545l },
wolfSSL 14:167253f4e170 35534 0 },
wolfSSL 14:167253f4e170 35535 /* 48 << 64 */
wolfSSL 14:167253f4e170 35536 { { 0x3a63c39731815e69l,0x6df9cbd6dcdd2802l,0x4c47ed4a15b4f6afl,
wolfSSL 14:167253f4e170 35537 0x62009d826ac0f978l },
wolfSSL 14:167253f4e170 35538 { 0x664d80d28b898fc7l,0x72f1eeda2c17c91fl,0x9e84d3bc7aae6609l,
wolfSSL 14:167253f4e170 35539 0x58c7c19528376895l },
wolfSSL 14:167253f4e170 35540 0 },
wolfSSL 14:167253f4e170 35541 /* 49 << 64 */
wolfSSL 14:167253f4e170 35542 { { 0x640ebf5d5b8d354al,0xa5f3a8fdb396ff64l,0xd53f041d8378ed81l,
wolfSSL 14:167253f4e170 35543 0x1969d61bc1234ad2l },
wolfSSL 14:167253f4e170 35544 { 0x16d7acffeb68bde2l,0x63767a68f23e9368l,0x937a533c38928d95l,
wolfSSL 14:167253f4e170 35545 0xee2190bbbeb0f1f2l },
wolfSSL 14:167253f4e170 35546 0 },
wolfSSL 14:167253f4e170 35547 /* 51 << 64 */
wolfSSL 14:167253f4e170 35548 { { 0xb6860c9a73a4aafbl,0xb2f996290488870dl,0x16ef6232572d9e25l,
wolfSSL 14:167253f4e170 35549 0x5b9eb1bad1383389l },
wolfSSL 14:167253f4e170 35550 { 0xabf713a7ed8d77f8l,0xd2b4a2e9e2b69e64l,0xa1a22cfd6d6f17c2l,
wolfSSL 14:167253f4e170 35551 0x4bfd6f992d604511l },
wolfSSL 14:167253f4e170 35552 0 },
wolfSSL 14:167253f4e170 35553 /* 52 << 64 */
wolfSSL 14:167253f4e170 35554 { { 0xdcff7630d9294f07l,0x89b765d68dba8fd0l,0x553e55de8dbcaccdl,
wolfSSL 14:167253f4e170 35555 0x9b4a009eed702bf8l },
wolfSSL 14:167253f4e170 35556 { 0xf6e534dd27b8ca0dl,0xc4496b346177fd52l,0x378ce6f6c87bb7b7l,
wolfSSL 14:167253f4e170 35557 0x68633d4844cc19f0l },
wolfSSL 14:167253f4e170 35558 0 },
wolfSSL 14:167253f4e170 35559 /* 53 << 64 */
wolfSSL 14:167253f4e170 35560 { { 0xfe550021bc84c625l,0x8d7169986d45e4a3l,0xa09c6ded4c0c66b7l,
wolfSSL 14:167253f4e170 35561 0xe32313aeb9e1d547l },
wolfSSL 14:167253f4e170 35562 { 0x8ce775b4d1e8e0b9l,0xa899f9102654dd15l,0x7c38aa066cc8b2a9l,
wolfSSL 14:167253f4e170 35563 0xe6ebb291d6ce6cc0l },
wolfSSL 14:167253f4e170 35564 0 },
wolfSSL 14:167253f4e170 35565 /* 55 << 64 */
wolfSSL 14:167253f4e170 35566 { { 0x5963df62a6991216l,0x4c17f72246996010l,0x131dc2b840477722l,
wolfSSL 14:167253f4e170 35567 0x78bf50b0d1765a75l },
wolfSSL 14:167253f4e170 35568 { 0x360afd587ceaca12l,0xebc55dbb139cd470l,0x9083e27e4c05541cl,
wolfSSL 14:167253f4e170 35569 0xc10057a3b873d757l },
wolfSSL 14:167253f4e170 35570 0 },
wolfSSL 14:167253f4e170 35571 /* 57 << 64 */
wolfSSL 14:167253f4e170 35572 { { 0x440009c3deed7769l,0xde2fa58a14fd8a44l,0x509e7df35b627596l,
wolfSSL 14:167253f4e170 35573 0x3d76a87cc3bb07a7l },
wolfSSL 14:167253f4e170 35574 { 0x8018fee5b8ef000al,0x71ce33e9823fd4b6l,0x3a1cac37469c0bb1l,
wolfSSL 14:167253f4e170 35575 0x92fe7aeaf3eec8eel },
wolfSSL 14:167253f4e170 35576 0 },
wolfSSL 14:167253f4e170 35577 /* 59 << 64 */
wolfSSL 14:167253f4e170 35578 { { 0x37ad0eb8de64e568l,0x4ac669bca1e3e20el,0x240d0ac22ce944edl,
wolfSSL 14:167253f4e170 35579 0xd532039a3c1b28fbl },
wolfSSL 14:167253f4e170 35580 { 0xa2bb899a23acba6cl,0xd472af671af937e1l,0x04478f7b8851e753l,
wolfSSL 14:167253f4e170 35581 0x74030eef5ea05307l },
wolfSSL 14:167253f4e170 35582 0 },
wolfSSL 14:167253f4e170 35583 /* 60 << 64 */
wolfSSL 14:167253f4e170 35584 { { 0x3559e7b67dc17874l,0xd0caf0ef8195cc2al,0x07c067880cd24dd9l,
wolfSSL 14:167253f4e170 35585 0x01a99ea002857c41l },
wolfSSL 14:167253f4e170 35586 { 0xd86579e490f82f63l,0xb1e0658ae41c9237l,0x075ffafd93fd1e79l,
wolfSSL 14:167253f4e170 35587 0x6e70403547f60b8fl },
wolfSSL 14:167253f4e170 35588 0 },
wolfSSL 14:167253f4e170 35589 /* 61 << 64 */
wolfSSL 14:167253f4e170 35590 { { 0x2246ad76c1d68c31l,0x9126202b0d5c4677l,0x5f40de81638882dcl,
wolfSSL 14:167253f4e170 35591 0xb131988ca3253a7fl },
wolfSSL 14:167253f4e170 35592 { 0x766f1897ba9ae0a8l,0xf0e01dd41d8b5fefl,0x03e28ce3ed7b12c8l,
wolfSSL 14:167253f4e170 35593 0x44b3a2be1fd20e1el },
wolfSSL 14:167253f4e170 35594 0 },
wolfSSL 14:167253f4e170 35595 /* 63 << 64 */
wolfSSL 14:167253f4e170 35596 { { 0xd4c8e8e5f2a5f247l,0x42ffd816c2c7c979l,0x89e1485211093d1al,
wolfSSL 14:167253f4e170 35597 0x98f44a4613871ebbl },
wolfSSL 14:167253f4e170 35598 { 0x374849964b032e2dl,0x28a430f445995a61l,0xf2f9acbad5be16b6l,
wolfSSL 14:167253f4e170 35599 0xac98a5402d8e02aal },
wolfSSL 14:167253f4e170 35600 0 },
wolfSSL 14:167253f4e170 35601 /* 64 << 64 */
wolfSSL 14:167253f4e170 35602 { { 0x0d53f5c7a3e6fcedl,0xe8cbbdd5f45fbdebl,0xf85c01df13339a70l,
wolfSSL 14:167253f4e170 35603 0x0ff71880142ceb81l },
wolfSSL 14:167253f4e170 35604 { 0x4c4e8774bd70437al,0x5fb32891ba0bda6al,0x1cdbebd2f18bd26el,
wolfSSL 14:167253f4e170 35605 0x2f9526f103a9d522l },
wolfSSL 14:167253f4e170 35606 0 },
wolfSSL 14:167253f4e170 35607 /* 65 << 64 */
wolfSSL 14:167253f4e170 35608 { { 0x48334fdcc20b8d30l,0x25f887d749414fddl,0x9ccd513311a2cf0dl,
wolfSSL 14:167253f4e170 35609 0x7e7799e4d08975a4l },
wolfSSL 14:167253f4e170 35610 { 0xb5993a53729b951cl,0x0cf14a5a62dbc6a8l,0xb39ed36efe4d16eel,
wolfSSL 14:167253f4e170 35611 0xb75f3fb681bda63al },
wolfSSL 14:167253f4e170 35612 0 },
wolfSSL 14:167253f4e170 35613 /* 71 << 64 */
wolfSSL 14:167253f4e170 35614 { { 0xac7db8706d4f68b5l,0x819a13c7be49b3a4l,0x646ae2b1418bf1e9l,
wolfSSL 14:167253f4e170 35615 0x25b53a5f69b3a5ccl },
wolfSSL 14:167253f4e170 35616 { 0xd23d94d37de26578l,0x8bb581caecdd138al,0x9e053f67f857b0dal,
wolfSSL 14:167253f4e170 35617 0xe679cc7a255ff474l },
wolfSSL 14:167253f4e170 35618 0 },
wolfSSL 14:167253f4e170 35619 /* 77 << 64 */
wolfSSL 14:167253f4e170 35620 { { 0x4a4b8d990df097f9l,0x0ae1227a0b4173cal,0x0d401778adb72178l,
wolfSSL 14:167253f4e170 35621 0xd29848b43f421e0cl },
wolfSSL 14:167253f4e170 35622 { 0xc5eec6096eb0722dl,0x527d72877e12c028l,0xed12a9e71b5dcc0cl,
wolfSSL 14:167253f4e170 35623 0x26b27344dcf4b4dal },
wolfSSL 14:167253f4e170 35624 0 },
wolfSSL 14:167253f4e170 35625 /* 83 << 64 */
wolfSSL 14:167253f4e170 35626 { { 0x695c502565e4408al,0x2d23768fcbce94e6l,0x1505fa1e5080b88dl,
wolfSSL 14:167253f4e170 35627 0x5c8fbab6855f7cc1l },
wolfSSL 14:167253f4e170 35628 { 0x70d876f275fb125dl,0x456421330a252007l,0xfe99249a8ee05be1l,
wolfSSL 14:167253f4e170 35629 0x0893b620f4bf5490l },
wolfSSL 14:167253f4e170 35630 0 },
wolfSSL 14:167253f4e170 35631 /* 89 << 64 */
wolfSSL 14:167253f4e170 35632 { { 0x2a59df1ed9fe6bdfl,0x96a9c791785e057fl,0x4b0d795f86a1d751l,
wolfSSL 14:167253f4e170 35633 0x196c8e0aec642886l },
wolfSSL 14:167253f4e170 35634 { 0x6df67899bc0e055cl,0x4173204a63007433l,0xb5ee4efec21c9245l,
wolfSSL 14:167253f4e170 35635 0x2f7d4c75c1451bael },
wolfSSL 14:167253f4e170 35636 0 },
wolfSSL 14:167253f4e170 35637 /* 95 << 64 */
wolfSSL 14:167253f4e170 35638 { { 0x2ad7f836b1047b7fl,0x368d431a71f6bfe1l,0xfcd933b103db4667l,
wolfSSL 14:167253f4e170 35639 0xfff77ed3ecb81330l },
wolfSSL 14:167253f4e170 35640 { 0x3677935b44958bd4l,0xa6cfcda8a1d5a9e7l,0xb2b73bc699ff9fael,
wolfSSL 14:167253f4e170 35641 0x1c2cd628f866d3c4l },
wolfSSL 14:167253f4e170 35642 0 },
wolfSSL 14:167253f4e170 35643 /* 101 << 64 */
wolfSSL 14:167253f4e170 35644 { { 0x2756873495031ceel,0xebed373d51091c1bl,0x398fef0819aa2f27l,
wolfSSL 14:167253f4e170 35645 0x2f26174e2c0a9feal },
wolfSSL 14:167253f4e170 35646 { 0xedca72b6b219be3fl,0x001a8fdc80503df8l,0x9a2fadbb6b93f643l,
wolfSSL 14:167253f4e170 35647 0xd48e552cd44cebc3l },
wolfSSL 14:167253f4e170 35648 0 },
wolfSSL 14:167253f4e170 35649 /* 107 << 64 */
wolfSSL 14:167253f4e170 35650 { { 0x6c0dbb68667a7ab6l,0x00490ce757630e91l,0x04976cd57eb2f382l,
wolfSSL 14:167253f4e170 35651 0x9ee486b655dda4a3l },
wolfSSL 14:167253f4e170 35652 { 0x4ea5c9c9cca0d01cl,0xa6e054b639f69c6dl,0xb3b7ac992ecab239l,
wolfSSL 14:167253f4e170 35653 0x80c9f6d17597512el },
wolfSSL 14:167253f4e170 35654 0 },
wolfSSL 14:167253f4e170 35655 /* 113 << 64 */
wolfSSL 14:167253f4e170 35656 { { 0x64dfdd68b942fad9l,0xe7d8e88da5eb3d14l,0xb7281dc2382f6301l,
wolfSSL 14:167253f4e170 35657 0xcfa2ee6dbfe00a7fl },
wolfSSL 14:167253f4e170 35658 { 0x6e617657dc7be39fl,0x22d58dd6591c6e3al,0xd3a4003918318c13l,
wolfSSL 14:167253f4e170 35659 0xcac6c830981b6b72l },
wolfSSL 14:167253f4e170 35660 0 },
wolfSSL 14:167253f4e170 35661 /* 116 << 64 */
wolfSSL 14:167253f4e170 35662 { { 0x009690ffb4fbfaa0l,0x8bbbdab73619c6dbl,0xc6d44273728356e8l,
wolfSSL 14:167253f4e170 35663 0xfd76f0d8e453ec35l },
wolfSSL 14:167253f4e170 35664 { 0x775c2554aac28a29l,0x28f7af9d5c55e4f0l,0xbacf54a688e8ad4dl,
wolfSSL 14:167253f4e170 35665 0x85b018e80aa76ddfl },
wolfSSL 14:167253f4e170 35666 0 },
wolfSSL 14:167253f4e170 35667 /* 119 << 64 */
wolfSSL 14:167253f4e170 35668 { { 0x27893f7983ce88e4l,0x9556c9977785f13dl,0x83d3c38d3a35831el,
wolfSSL 14:167253f4e170 35669 0x3856c829d12f0a1dl },
wolfSSL 14:167253f4e170 35670 { 0xb308d84c93259c1al,0x4ef87ab4691ffd28l,0x76a18d5321a88c58l,
wolfSSL 14:167253f4e170 35671 0xf13cd5d53503cb4dl },
wolfSSL 14:167253f4e170 35672 0 },
wolfSSL 14:167253f4e170 35673 /* 125 << 64 */
wolfSSL 14:167253f4e170 35674 { { 0x669d93dba8cc0db3l,0x403cb9200dfcfcf4l,0x5def4a03e77c3979l,
wolfSSL 14:167253f4e170 35675 0x2a05c9423e2e2522l },
wolfSSL 14:167253f4e170 35676 { 0xd86dca52b5f48bf0l,0x174766de5828a135l,0x116290b40d3a96d0l,
wolfSSL 14:167253f4e170 35677 0xe1999457aeea1193l },
wolfSSL 14:167253f4e170 35678 0 },
wolfSSL 14:167253f4e170 35679 },
wolfSSL 14:167253f4e170 35680 {
wolfSSL 14:167253f4e170 35681 /* 0 << 72 */
wolfSSL 14:167253f4e170 35682 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 35683 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 35684 1 },
wolfSSL 14:167253f4e170 35685 /* 1 << 72 */
wolfSSL 14:167253f4e170 35686 { { 0x0db2fb5ed005832al,0x5f5efd3b91042e4fl,0x8c4ffdc6ed70f8cal,
wolfSSL 14:167253f4e170 35687 0xe4645d0bb52da9ccl },
wolfSSL 14:167253f4e170 35688 { 0x9596f58bc9001d1fl,0x52c8f0bc4e117205l,0xfd4aa0d2e398a084l,
wolfSSL 14:167253f4e170 35689 0x815bfe3a104f49del },
wolfSSL 14:167253f4e170 35690 0 },
wolfSSL 14:167253f4e170 35691 /* 3 << 72 */
wolfSSL 14:167253f4e170 35692 { { 0x524d226ad7ab9a2dl,0x9c00090d7dfae958l,0x0ba5f5398751d8c2l,
wolfSSL 14:167253f4e170 35693 0x8afcbcdd3ab8262dl },
wolfSSL 14:167253f4e170 35694 { 0x57392729e99d043bl,0xef51263baebc943al,0x9feace9320862935l,
wolfSSL 14:167253f4e170 35695 0x639efc03b06c817bl },
wolfSSL 14:167253f4e170 35696 0 },
wolfSSL 14:167253f4e170 35697 /* 4 << 72 */
wolfSSL 14:167253f4e170 35698 { { 0xe839be7d341d81dcl,0xcddb688932148379l,0xda6211a1f7026eadl,
wolfSSL 14:167253f4e170 35699 0xf3b2575ff4d1cc5el },
wolfSSL 14:167253f4e170 35700 { 0x40cfc8f6a7a73ae6l,0x83879a5e61d5b483l,0xc5acb1ed41a50ebcl,
wolfSSL 14:167253f4e170 35701 0x59a60cc83c07d8fal },
wolfSSL 14:167253f4e170 35702 0 },
wolfSSL 14:167253f4e170 35703 /* 5 << 72 */
wolfSSL 14:167253f4e170 35704 { { 0xdec98d4ac3b81990l,0x1cb837229e0cc8fel,0xfe0b0491d2b427b9l,
wolfSSL 14:167253f4e170 35705 0x0f2386ace983a66cl },
wolfSSL 14:167253f4e170 35706 { 0x930c4d1eb3291213l,0xa2f82b2e59a62ae4l,0x77233853f93e89e3l,
wolfSSL 14:167253f4e170 35707 0x7f8063ac11777c7fl },
wolfSSL 14:167253f4e170 35708 0 },
wolfSSL 14:167253f4e170 35709 /* 7 << 72 */
wolfSSL 14:167253f4e170 35710 { { 0x36e607cf02ff6072l,0xa47d2ca98ad98cdcl,0xbf471d1ef5f56609l,
wolfSSL 14:167253f4e170 35711 0xbcf86623f264ada0l },
wolfSSL 14:167253f4e170 35712 { 0xb70c0687aa9e5cb6l,0xc98124f217401c6cl,0x8189635fd4a61435l,
wolfSSL 14:167253f4e170 35713 0xd28fb8afa9d98ea6l },
wolfSSL 14:167253f4e170 35714 0 },
wolfSSL 14:167253f4e170 35715 /* 9 << 72 */
wolfSSL 14:167253f4e170 35716 { { 0x3d4da8c3017025f3l,0xefcf628cfb9579b4l,0x5c4d00161f3716ecl,
wolfSSL 14:167253f4e170 35717 0x9c27ebc46801116el },
wolfSSL 14:167253f4e170 35718 { 0x5eba0ea11da1767el,0xfe15145247004c57l,0x3ace6df68c2373b7l,
wolfSSL 14:167253f4e170 35719 0x75c3dffe5dbc37acl },
wolfSSL 14:167253f4e170 35720 0 },
wolfSSL 14:167253f4e170 35721 /* 10 << 72 */
wolfSSL 14:167253f4e170 35722 { { 0xa2a147dba28a0749l,0x246c20d6ee519165l,0x5068d1b1d3810715l,
wolfSSL 14:167253f4e170 35723 0xb1e7018c748160b9l },
wolfSSL 14:167253f4e170 35724 { 0x03f5b1faf380ff62l,0xef7fb1ddf3cb2c1el,0xeab539a8fc91a7dal,
wolfSSL 14:167253f4e170 35725 0x83ddb707f3f9b561l },
wolfSSL 14:167253f4e170 35726 0 },
wolfSSL 14:167253f4e170 35727 /* 11 << 72 */
wolfSSL 14:167253f4e170 35728 { { 0xb57276d980101b98l,0x760883fdb82f0f66l,0x89d7de754bc3eff3l,
wolfSSL 14:167253f4e170 35729 0x03b606435dc2ab40l },
wolfSSL 14:167253f4e170 35730 { 0xcd6e53dfe05beeacl,0xf2f1e862bc3325cdl,0xdd0f7921774f03c3l,
wolfSSL 14:167253f4e170 35731 0x97ca72214552cc1bl },
wolfSSL 14:167253f4e170 35732 0 },
wolfSSL 14:167253f4e170 35733 /* 13 << 72 */
wolfSSL 14:167253f4e170 35734 { { 0x760cb3b5e224c5d7l,0xfa3baf8c68616919l,0x9fbca1138d142552l,
wolfSSL 14:167253f4e170 35735 0x1ab18bf17669ebf5l },
wolfSSL 14:167253f4e170 35736 { 0x55e6f53e9bdf25ddl,0x04cc0bf3cb6cd154l,0x595bef4995e89080l,
wolfSSL 14:167253f4e170 35737 0xfe9459a8104a9ac1l },
wolfSSL 14:167253f4e170 35738 0 },
wolfSSL 14:167253f4e170 35739 /* 15 << 72 */
wolfSSL 14:167253f4e170 35740 { { 0x694b64c5abb020e8l,0x3d18c18419c4eec7l,0x9c4673ef1c4793e5l,
wolfSSL 14:167253f4e170 35741 0xc7b8aeb5056092e6l },
wolfSSL 14:167253f4e170 35742 { 0x3aa1ca43f0f8c16bl,0x224ed5ecd679b2f6l,0x0d56eeaf55a205c9l,
wolfSSL 14:167253f4e170 35743 0xbfe115ba4b8e028bl },
wolfSSL 14:167253f4e170 35744 0 },
wolfSSL 14:167253f4e170 35745 /* 16 << 72 */
wolfSSL 14:167253f4e170 35746 { { 0x3e22a7b397acf4ecl,0x0426c4005ea8b640l,0x5e3295a64e969285l,
wolfSSL 14:167253f4e170 35747 0x22aabc59a6a45670l },
wolfSSL 14:167253f4e170 35748 { 0xb929714c5f5942bcl,0x9a6168bdfa3182edl,0x2216a665104152bal,
wolfSSL 14:167253f4e170 35749 0x46908d03b6926368l },
wolfSSL 14:167253f4e170 35750 0 },
wolfSSL 14:167253f4e170 35751 /* 17 << 72 */
wolfSSL 14:167253f4e170 35752 { { 0x9b8be0247fcba850l,0x81eb5797820a181el,0xa0f2812230a01211l,
wolfSSL 14:167253f4e170 35753 0x7e9cdc3cae7b8821l },
wolfSSL 14:167253f4e170 35754 { 0x202332cc72ce15e7l,0xcd3cb2bbcb8238d7l,0xe4ab63dfc6e82c43l,
wolfSSL 14:167253f4e170 35755 0x58bd00283183d717l },
wolfSSL 14:167253f4e170 35756 0 },
wolfSSL 14:167253f4e170 35757 /* 19 << 72 */
wolfSSL 14:167253f4e170 35758 { { 0x02d57b7e717ed7b5l,0xd22e5b244dbce1a2l,0x174bd7712a4cdcf5l,
wolfSSL 14:167253f4e170 35759 0xa6fdb801408205bbl },
wolfSSL 14:167253f4e170 35760 { 0x67b4b0695e1387e9l,0x332b19a10591a442l,0x24edd916ccacf366l,
wolfSSL 14:167253f4e170 35761 0xbe34cc4534958a50l },
wolfSSL 14:167253f4e170 35762 0 },
wolfSSL 14:167253f4e170 35763 /* 21 << 72 */
wolfSSL 14:167253f4e170 35764 { { 0xa3f46e1e3e66d391l,0xb4a732cd7d6369b2l,0x99c3b85d402c1022l,
wolfSSL 14:167253f4e170 35765 0x7dccfcbe2b54932el },
wolfSSL 14:167253f4e170 35766 { 0xa6ddaa7b56b1dfe2l,0x31dc78a5e34a82c9l,0x8abeb3da704f3941l,
wolfSSL 14:167253f4e170 35767 0xdf11a36cca55fa98l },
wolfSSL 14:167253f4e170 35768 0 },
wolfSSL 14:167253f4e170 35769 /* 23 << 72 */
wolfSSL 14:167253f4e170 35770 { { 0x6c01f77a16e00c1bl,0x82515490839eaaacl,0x62f3a4ef3470d334l,
wolfSSL 14:167253f4e170 35771 0x5a29a6491c1dcd6cl },
wolfSSL 14:167253f4e170 35772 { 0x46b6782ece997a25l,0x9978fb35d3579953l,0x98f5a9df0960e0cel,
wolfSSL 14:167253f4e170 35773 0x547dc8391f527a4cl },
wolfSSL 14:167253f4e170 35774 0 },
wolfSSL 14:167253f4e170 35775 /* 25 << 72 */
wolfSSL 14:167253f4e170 35776 { { 0x395b15835d9dc24fl,0xa4256932c73ae680l,0x0542960efaa2c8e9l,
wolfSSL 14:167253f4e170 35777 0x2bb3adee71068c6al },
wolfSSL 14:167253f4e170 35778 { 0xa706099b570b4554l,0x85d12bb5f4e278d6l,0xd78af6f664296843l,
wolfSSL 14:167253f4e170 35779 0xc7d3b3888428c633l },
wolfSSL 14:167253f4e170 35780 0 },
wolfSSL 14:167253f4e170 35781 /* 27 << 72 */
wolfSSL 14:167253f4e170 35782 { { 0x34d44f9343b7e597l,0xdde440a7c2530f42l,0x7270a0817856bdb9l,
wolfSSL 14:167253f4e170 35783 0x86a945eb5353032fl },
wolfSSL 14:167253f4e170 35784 { 0x6c2f8e9966d39810l,0x0642a31b9b8b4b6bl,0x51679e62d1509d82l,
wolfSSL 14:167253f4e170 35785 0x0120001c90f8ff16l },
wolfSSL 14:167253f4e170 35786 0 },
wolfSSL 14:167253f4e170 35787 /* 28 << 72 */
wolfSSL 14:167253f4e170 35788 { { 0x50a1c1062e36e34al,0x74e8f58ce024ed1al,0x3f0f1dfa1300d726l,
wolfSSL 14:167253f4e170 35789 0x6680df267b4a2d18l },
wolfSSL 14:167253f4e170 35790 { 0x12b5979d8235b3b7l,0x1d2fafcb8a611493l,0x73ebda968848ece5l,
wolfSSL 14:167253f4e170 35791 0xe996c275a413e399l },
wolfSSL 14:167253f4e170 35792 0 },
wolfSSL 14:167253f4e170 35793 /* 29 << 72 */
wolfSSL 14:167253f4e170 35794 { { 0x46b7d7c7495ff000l,0xe60ed097baed95d1l,0xaa8804ac6e38f9c0l,
wolfSSL 14:167253f4e170 35795 0x92990c0645c6f9bbl },
wolfSSL 14:167253f4e170 35796 { 0xcae6a439c0919851l,0x713dff151bf5e1f2l,0x5d262c302eb38cdbl,
wolfSSL 14:167253f4e170 35797 0xb73d505190df31dfl },
wolfSSL 14:167253f4e170 35798 0 },
wolfSSL 14:167253f4e170 35799 /* 31 << 72 */
wolfSSL 14:167253f4e170 35800 { { 0x921e7b1c32d9268cl,0x34db2b964276fad4l,0x0ec56d34cc44e730l,
wolfSSL 14:167253f4e170 35801 0x59be3a46096545b7l },
wolfSSL 14:167253f4e170 35802 { 0xe9fdbc9766cf3a6al,0x7b2f83edd04e9b53l,0x6d99b3cc8fbae3e7l,
wolfSSL 14:167253f4e170 35803 0x8eb5646c7ada3a40l },
wolfSSL 14:167253f4e170 35804 0 },
wolfSSL 14:167253f4e170 35805 /* 33 << 72 */
wolfSSL 14:167253f4e170 35806 { { 0xa69ab906fc3302bfl,0x49ae6ba7d0872e90l,0xc9e2d6d1f3a1bfc3l,
wolfSSL 14:167253f4e170 35807 0x11dfe85f1a033500l },
wolfSSL 14:167253f4e170 35808 { 0x45189c2998666dbdl,0xba6aab88bbfd13cel,0xcf9c8b43dbd38cd4l,
wolfSSL 14:167253f4e170 35809 0xa0cb581b68009236l },
wolfSSL 14:167253f4e170 35810 0 },
wolfSSL 14:167253f4e170 35811 /* 34 << 72 */
wolfSSL 14:167253f4e170 35812 { { 0xff18c42a16288a7al,0x6363ace430699163l,0x8546d6332a2ce353l,
wolfSSL 14:167253f4e170 35813 0x5e0379ef7b6b3418l },
wolfSSL 14:167253f4e170 35814 { 0x2df2bb463e941bb2l,0xae7c091888e1aacel,0x6bc0982d83f5a37al,
wolfSSL 14:167253f4e170 35815 0x8521bd02676d09e0l },
wolfSSL 14:167253f4e170 35816 0 },
wolfSSL 14:167253f4e170 35817 /* 35 << 72 */
wolfSSL 14:167253f4e170 35818 { { 0x6531dff33d361aacl,0x59b954477c8cac2el,0xcc104df6c5cb7363l,
wolfSSL 14:167253f4e170 35819 0x68b571c519364acdl },
wolfSSL 14:167253f4e170 35820 { 0x7521e962979c3bc0l,0xbe0544c9c4aa1f92l,0x59127fe92a31eabbl,
wolfSSL 14:167253f4e170 35821 0x760ac28593d8b55bl },
wolfSSL 14:167253f4e170 35822 0 },
wolfSSL 14:167253f4e170 35823 /* 36 << 72 */
wolfSSL 14:167253f4e170 35824 { { 0x62ed534c6115164bl,0xaebe9e4cdce84ceal,0xd81c91a1c83f64c3l,
wolfSSL 14:167253f4e170 35825 0x325a8ca8ecacd09al },
wolfSSL 14:167253f4e170 35826 { 0x7ea57ad968b45df1l,0xa555636fd530c5d2l,0x23aff510591cfe32l,
wolfSSL 14:167253f4e170 35827 0x46ff147637bedab9l },
wolfSSL 14:167253f4e170 35828 0 },
wolfSSL 14:167253f4e170 35829 /* 37 << 72 */
wolfSSL 14:167253f4e170 35830 { { 0xa5a7e81ecb2edb3bl,0x9b0dc5f4f8fbe238l,0xc6f258087c66dd34l,
wolfSSL 14:167253f4e170 35831 0xb4a57503a3f8f38al },
wolfSSL 14:167253f4e170 35832 { 0x195b433513571b5bl,0xa32840763ccbc30bl,0x64ae1ffccf99ddd5l,
wolfSSL 14:167253f4e170 35833 0x0dfc8772aa844e76l },
wolfSSL 14:167253f4e170 35834 0 },
wolfSSL 14:167253f4e170 35835 /* 39 << 72 */
wolfSSL 14:167253f4e170 35836 { { 0x8b471afbfb22341dl,0xbf448b43397afdd2l,0x4cb08409682c37edl,
wolfSSL 14:167253f4e170 35837 0xc3acfae6a948f1f6l },
wolfSSL 14:167253f4e170 35838 { 0xf58462549e634707l,0x50161a78bd949f52l,0xf0529e752fe73566l,
wolfSSL 14:167253f4e170 35839 0xe7e3fdef6fda53e0l },
wolfSSL 14:167253f4e170 35840 0 },
wolfSSL 14:167253f4e170 35841 /* 40 << 72 */
wolfSSL 14:167253f4e170 35842 { { 0x56dab1c8321a518cl,0xfd4439a68bce226fl,0xe0b30d194facb9fal,
wolfSSL 14:167253f4e170 35843 0xb5052f307583571bl },
wolfSSL 14:167253f4e170 35844 { 0x1442641012afd476l,0xd02e417203fe624al,0xfc394f65531c92e6l,
wolfSSL 14:167253f4e170 35845 0x16d4bf5ad4bc0b52l },
wolfSSL 14:167253f4e170 35846 0 },
wolfSSL 14:167253f4e170 35847 /* 41 << 72 */
wolfSSL 14:167253f4e170 35848 { { 0xa38ac25eb4ec4f0fl,0x5399c024de72b27dl,0x08318aafd81a3d65l,
wolfSSL 14:167253f4e170 35849 0x1af227a70c20e5d9l },
wolfSSL 14:167253f4e170 35850 { 0x6389cc9a26c54e25l,0x438298bba47dc27fl,0x75386cca1a63fa0el,
wolfSSL 14:167253f4e170 35851 0xc941e84cdf7bc1b0l },
wolfSSL 14:167253f4e170 35852 0 },
wolfSSL 14:167253f4e170 35853 /* 43 << 72 */
wolfSSL 14:167253f4e170 35854 { { 0x81cad748fdfe3faal,0x752107b453ff1988l,0x8d8bb7001a8fd829l,
wolfSSL 14:167253f4e170 35855 0x69838e15ca821d8el },
wolfSSL 14:167253f4e170 35856 { 0x24371ede3b9f6b34l,0x19b4bb24d91e1495l,0x90899ca1e598ded1l,
wolfSSL 14:167253f4e170 35857 0xbbb78b167c14e9e3l },
wolfSSL 14:167253f4e170 35858 0 },
wolfSSL 14:167253f4e170 35859 /* 44 << 72 */
wolfSSL 14:167253f4e170 35860 { { 0xa577e84cbef239aal,0x656d2b6f8904b4d4l,0x2f6defe6ca4007edl,
wolfSSL 14:167253f4e170 35861 0xca6e517737770796l },
wolfSSL 14:167253f4e170 35862 { 0x4c62fcba298b6448l,0x046849660f62e00dl,0x806c2f0390b07d82l,
wolfSSL 14:167253f4e170 35863 0x730855795e8d1e60l },
wolfSSL 14:167253f4e170 35864 0 },
wolfSSL 14:167253f4e170 35865 /* 45 << 72 */
wolfSSL 14:167253f4e170 35866 { { 0x24488802f4703b78l,0x6c9323bee9eaa1e0l,0x242990e2aa94c170l,
wolfSSL 14:167253f4e170 35867 0x3292bc42a15b5886l },
wolfSSL 14:167253f4e170 35868 { 0x60ccb5bc908af203l,0x8fd63583713b09bdl,0x40791ecad693fa28l,
wolfSSL 14:167253f4e170 35869 0xea80abf2941af8a1l },
wolfSSL 14:167253f4e170 35870 0 },
wolfSSL 14:167253f4e170 35871 /* 46 << 72 */
wolfSSL 14:167253f4e170 35872 { { 0xf9c0315071145fe3l,0x80a71b55d7873a7dl,0xd134244b5e10bac7l,
wolfSSL 14:167253f4e170 35873 0x303f7e12ded3a4b4l },
wolfSSL 14:167253f4e170 35874 { 0x58e6f17e803b7a3bl,0xcd6f64130b1ca6b4l,0x25e744ce2ce65aa2l,
wolfSSL 14:167253f4e170 35875 0xf2bbc66b952efa51l },
wolfSSL 14:167253f4e170 35876 0 },
wolfSSL 14:167253f4e170 35877 /* 47 << 72 */
wolfSSL 14:167253f4e170 35878 { { 0xc8b212e75913e1f3l,0xf018ab208d416886l,0x28249e15b617cac4l,
wolfSSL 14:167253f4e170 35879 0x837fcba1693ed09al },
wolfSSL 14:167253f4e170 35880 { 0x9c457e511c15a1bcl,0x9354758756c7f3f1l,0x1afd80348be18306l,
wolfSSL 14:167253f4e170 35881 0xa43d56982256ab14l },
wolfSSL 14:167253f4e170 35882 0 },
wolfSSL 14:167253f4e170 35883 /* 48 << 72 */
wolfSSL 14:167253f4e170 35884 { { 0xce06b88210395755l,0x117ce6345ec1df80l,0xfefae513eff55e96l,
wolfSSL 14:167253f4e170 35885 0xcf36cba6fd7fed1el },
wolfSSL 14:167253f4e170 35886 { 0x7340eca9a40ebf88l,0xe6ec1bcfb3d37e12l,0xca51b64e86bbf9ffl,
wolfSSL 14:167253f4e170 35887 0x4e0dbb588b40e05el },
wolfSSL 14:167253f4e170 35888 0 },
wolfSSL 14:167253f4e170 35889 /* 49 << 72 */
wolfSSL 14:167253f4e170 35890 { { 0xf9c063f62f2be34bl,0x9ca32fa99c20f16bl,0xe02e350d0125a01al,
wolfSSL 14:167253f4e170 35891 0x62d66c54e6516c25l },
wolfSSL 14:167253f4e170 35892 { 0x21b154ad5120bedbl,0xb1077f4e8d6ff9d8l,0xd01a46c300bb4941l,
wolfSSL 14:167253f4e170 35893 0x9d381847d1460588l },
wolfSSL 14:167253f4e170 35894 0 },
wolfSSL 14:167253f4e170 35895 /* 51 << 72 */
wolfSSL 14:167253f4e170 35896 { { 0xf3a9b311581cb57bl,0x65fb3fb649727d13l,0xb8496e3d35131142l,
wolfSSL 14:167253f4e170 35897 0xf7642f554d0cdab9l },
wolfSSL 14:167253f4e170 35898 { 0xe2f66f0e9f6d7e45l,0xbae14cedaa22fcd4l,0x1f769f0e49b2e05al,
wolfSSL 14:167253f4e170 35899 0x08c4d7784ac5191el },
wolfSSL 14:167253f4e170 35900 0 },
wolfSSL 14:167253f4e170 35901 /* 52 << 72 */
wolfSSL 14:167253f4e170 35902 { { 0x86f9108ece4aa825l,0xbe5b2f317e5a5fbfl,0x2772c1b49254bb78l,
wolfSSL 14:167253f4e170 35903 0xae6cdf5f4ff8ac5cl },
wolfSSL 14:167253f4e170 35904 { 0x106cd94bf6b7a12el,0xbe0915d6d1c7a1a5l,0x8bf6bc8d3b40ac5el,
wolfSSL 14:167253f4e170 35905 0xbb89180423ee3acal },
wolfSSL 14:167253f4e170 35906 0 },
wolfSSL 14:167253f4e170 35907 /* 53 << 72 */
wolfSSL 14:167253f4e170 35908 { { 0x76f15eaa618b5ea1l,0xec1ea62e6d4ad0c8l,0x301b60c8168d57fal,
wolfSSL 14:167253f4e170 35909 0x454d5f771edbfb05l },
wolfSSL 14:167253f4e170 35910 { 0xea888e29a936031al,0x01303d3f0174dd17l,0x8b5e06b4244254e7l,
wolfSSL 14:167253f4e170 35911 0x00ebf03509724acfl },
wolfSSL 14:167253f4e170 35912 0 },
wolfSSL 14:167253f4e170 35913 /* 55 << 72 */
wolfSSL 14:167253f4e170 35914 { { 0x66ce3ded8e66d509l,0x368e38d05a488586l,0x7b9ae220c7eedf5el,
wolfSSL 14:167253f4e170 35915 0x67e9ea52bfbf9d62l },
wolfSSL 14:167253f4e170 35916 { 0xe9cbf53d99b7ecb3l,0xfde3e8c0908bf072l,0x288400ab1107e21fl,
wolfSSL 14:167253f4e170 35917 0x24c8856256532667l },
wolfSSL 14:167253f4e170 35918 0 },
wolfSSL 14:167253f4e170 35919 /* 57 << 72 */
wolfSSL 14:167253f4e170 35920 { { 0x0d5f9955ca9d3ad1l,0x545feba13a1daec0l,0xd22972016cb30f23l,
wolfSSL 14:167253f4e170 35921 0x9660175ccef6cf6el },
wolfSSL 14:167253f4e170 35922 { 0xbf3e341a395738dcl,0x74a5efbc80f7cca4l,0xc4f9a07bbebc6a60l,
wolfSSL 14:167253f4e170 35923 0x2f1e3dad4b1f915al },
wolfSSL 14:167253f4e170 35924 0 },
wolfSSL 14:167253f4e170 35925 /* 59 << 72 */
wolfSSL 14:167253f4e170 35926 { { 0xada4423f0d5e2e34l,0x2d31f4920b372358l,0xd7f469370e2d6a8cl,
wolfSSL 14:167253f4e170 35927 0xf5e7ccfe0028e4ael },
wolfSSL 14:167253f4e170 35928 { 0x20fcb1f3928854b2l,0x2a8973c507271bf6l,0xe87de33e5fa88fe1l,
wolfSSL 14:167253f4e170 35929 0xe9af2dce7bd3c2a6l },
wolfSSL 14:167253f4e170 35930 0 },
wolfSSL 14:167253f4e170 35931 /* 60 << 72 */
wolfSSL 14:167253f4e170 35932 { { 0x185a19d959d097b2l,0xb1c72a3a0dea2875l,0x3b371628f9021f08l,
wolfSSL 14:167253f4e170 35933 0x45f1255bfa9d6ac1l },
wolfSSL 14:167253f4e170 35934 { 0x9ff36a90cfd72c0dl,0x8c7315db24fe2376l,0x9aebcde04b34d42cl,
wolfSSL 14:167253f4e170 35935 0x2129ab16923025f3l },
wolfSSL 14:167253f4e170 35936 0 },
wolfSSL 14:167253f4e170 35937 /* 61 << 72 */
wolfSSL 14:167253f4e170 35938 { { 0x341b9dd714b4cf50l,0x7c6e4634d619d00el,0x571d6e2fdf2165ael,
wolfSSL 14:167253f4e170 35939 0xdedf9cd18dbe9db5l },
wolfSSL 14:167253f4e170 35940 { 0x52a152777c5f3dc3l,0x7d27c97ef2901cf7l,0x5e098b54d02a85dfl,
wolfSSL 14:167253f4e170 35941 0x6fce3e13088e3640l },
wolfSSL 14:167253f4e170 35942 0 },
wolfSSL 14:167253f4e170 35943 /* 63 << 72 */
wolfSSL 14:167253f4e170 35944 { { 0xfa95be147a939904l,0xdfcf5b9bb56365ccl,0xdbb546bdd2d66922l,
wolfSSL 14:167253f4e170 35945 0xf26a8b9cda03ca7fl },
wolfSSL 14:167253f4e170 35946 { 0x96a8042d16821c0cl,0xe6729970e88ede60l,0xd028130d1285e303l,
wolfSSL 14:167253f4e170 35947 0x1678b01688b7de75l },
wolfSSL 14:167253f4e170 35948 0 },
wolfSSL 14:167253f4e170 35949 /* 64 << 72 */
wolfSSL 14:167253f4e170 35950 { { 0x96649933aed1d1f7l,0x566eaff350563090l,0x345057f0ad2e39cfl,
wolfSSL 14:167253f4e170 35951 0x148ff65b1f832124l },
wolfSSL 14:167253f4e170 35952 { 0x042e89d4cf94cf0dl,0x319bec84520c58b3l,0x2a2676265361aa0dl,
wolfSSL 14:167253f4e170 35953 0xc86fa3028fbc87adl },
wolfSSL 14:167253f4e170 35954 0 },
wolfSSL 14:167253f4e170 35955 /* 65 << 72 */
wolfSSL 14:167253f4e170 35956 { { 0x5db4884124627d04l,0xf92740766f7e3febl,0xd09eb11773496240l,
wolfSSL 14:167253f4e170 35957 0xd48e51419a6b9ec9l },
wolfSSL 14:167253f4e170 35958 { 0xcbb2ac97b7336e27l,0xe794fb760640bf6cl,0xc0b7f78dc7c7fa3fl,
wolfSSL 14:167253f4e170 35959 0x1355d071fd2edbb9l },
wolfSSL 14:167253f4e170 35960 0 },
wolfSSL 14:167253f4e170 35961 /* 71 << 72 */
wolfSSL 14:167253f4e170 35962 { { 0x575d9724e84e25a3l,0x068690a13d4d8708l,0x8a7b1c6c54dd62d0l,
wolfSSL 14:167253f4e170 35963 0x8c45e1b37f88e231l },
wolfSSL 14:167253f4e170 35964 { 0x38c665466d85afe2l,0x65231642e1d69f1bl,0xb71c53a090687ec1l,
wolfSSL 14:167253f4e170 35965 0xdf8469d777fb5981l },
wolfSSL 14:167253f4e170 35966 0 },
wolfSSL 14:167253f4e170 35967 /* 77 << 72 */
wolfSSL 14:167253f4e170 35968 { { 0xb920b503144fe6bcl,0x54b0f0593914c130l,0x63188d5a8269b650l,
wolfSSL 14:167253f4e170 35969 0x8d7780962fc7064dl },
wolfSSL 14:167253f4e170 35970 { 0xbf7b0eec5e50839al,0xaf8a7ddbe242cd06l,0x93df850809cecdb9l,
wolfSSL 14:167253f4e170 35971 0x4db58a72410659e9l },
wolfSSL 14:167253f4e170 35972 0 },
wolfSSL 14:167253f4e170 35973 /* 83 << 72 */
wolfSSL 14:167253f4e170 35974 { { 0x460d9b383baba3cdl,0x52386e4d2cf860b8l,0xd224fe5da3924b9al,
wolfSSL 14:167253f4e170 35975 0xe4a4be7bcf14d813l },
wolfSSL 14:167253f4e170 35976 { 0xb0759e82ed3774fdl,0x57c064b38d9b6c59l,0x301ab902aee183d0l,
wolfSSL 14:167253f4e170 35977 0xf1c873495ba207c3l },
wolfSSL 14:167253f4e170 35978 0 },
wolfSSL 14:167253f4e170 35979 /* 89 << 72 */
wolfSSL 14:167253f4e170 35980 { { 0xe8245b0a6dd58696l,0x0714eedb61091043l,0x7d9874459101129bl,
wolfSSL 14:167253f4e170 35981 0x4a7f1f03a0b27a21l },
wolfSSL 14:167253f4e170 35982 { 0x282e5cff71ee2045l,0x25c694a3da5c6b41l,0xb3d8e21f5542ca55l,
wolfSSL 14:167253f4e170 35983 0x57d64170e3601af0l },
wolfSSL 14:167253f4e170 35984 0 },
wolfSSL 14:167253f4e170 35985 /* 95 << 72 */
wolfSSL 14:167253f4e170 35986 { { 0x9c8e86c6c6c4fee6l,0x70194db5a596119bl,0xfc6271d30e06050cl,
wolfSSL 14:167253f4e170 35987 0x17d94c89b15f18d2l },
wolfSSL 14:167253f4e170 35988 { 0x76c9e9bd49817224l,0x42621638b989c5bcl,0x1e9c4cbeb769d70cl,
wolfSSL 14:167253f4e170 35989 0x85e227c3b87f2783l },
wolfSSL 14:167253f4e170 35990 0 },
wolfSSL 14:167253f4e170 35991 /* 101 << 72 */
wolfSSL 14:167253f4e170 35992 { { 0x146185d2117e73c5l,0xbf6214696dc38116l,0x9af9d9b5459e72cbl,
wolfSSL 14:167253f4e170 35993 0x7512882fb3930b85l },
wolfSSL 14:167253f4e170 35994 { 0xfe935379d36583b8l,0xb83ad35e7c7fdcdel,0x093ca0ab2658ae4bl,
wolfSSL 14:167253f4e170 35995 0xc9b16d60a756681bl },
wolfSSL 14:167253f4e170 35996 0 },
wolfSSL 14:167253f4e170 35997 /* 107 << 72 */
wolfSSL 14:167253f4e170 35998 { { 0x12c24d9195d3519bl,0x1fc6db1bdb43fd06l,0x1ae49fed25bbde51l,
wolfSSL 14:167253f4e170 35999 0x27072e0b76d2827bl },
wolfSSL 14:167253f4e170 36000 { 0xdcb92e05aeb8c47fl,0x601d414056145f67l,0xcb7002652a39e8f7l,
wolfSSL 14:167253f4e170 36001 0x6ce9facc35620d8cl },
wolfSSL 14:167253f4e170 36002 0 },
wolfSSL 14:167253f4e170 36003 /* 113 << 72 */
wolfSSL 14:167253f4e170 36004 { { 0x5c428a5ebd702c22l,0xcb6863291616129dl,0xe6278994eabcb9a1l,
wolfSSL 14:167253f4e170 36005 0xb409a10b9327e540l },
wolfSSL 14:167253f4e170 36006 { 0x6899f7cb66cf96aal,0xa9225f051c64b545l,0x00c5522ee3feec21l,
wolfSSL 14:167253f4e170 36007 0x35503728e083315cl },
wolfSSL 14:167253f4e170 36008 0 },
wolfSSL 14:167253f4e170 36009 /* 116 << 72 */
wolfSSL 14:167253f4e170 36010 { { 0x1916d88cf1600077l,0x1ac9c238e3a58b2bl,0x3080df8535f3508dl,
wolfSSL 14:167253f4e170 36011 0x86cc18712744912bl },
wolfSSL 14:167253f4e170 36012 { 0x56aec9d5ccd15044l,0x8dd9061a5db0ab17l,0x84d6bc4e2c84171dl,
wolfSSL 14:167253f4e170 36013 0xd569c7d70989a5bdl },
wolfSSL 14:167253f4e170 36014 0 },
wolfSSL 14:167253f4e170 36015 /* 119 << 72 */
wolfSSL 14:167253f4e170 36016 { { 0x24446b2702af35abl,0x071710478eea4565l,0xba4989db728306e6l,
wolfSSL 14:167253f4e170 36017 0x2cd692a85954a558l },
wolfSSL 14:167253f4e170 36018 { 0x644e02763576b32el,0x7efdb65c1f9fe65dl,0x04b2828e8796c048l,
wolfSSL 14:167253f4e170 36019 0xcfd22481187b979bl },
wolfSSL 14:167253f4e170 36020 0 },
wolfSSL 14:167253f4e170 36021 /* 125 << 72 */
wolfSSL 14:167253f4e170 36022 { { 0xa10d104084ea9701l,0x27dd0dcb415e187dl,0xf667c5e939bfe45cl,
wolfSSL 14:167253f4e170 36023 0x3995e4ae55b67506l },
wolfSSL 14:167253f4e170 36024 { 0xb25117d9b5a14801l,0xeee58525fe142e92l,0x100b856a6dbae9f1l,
wolfSSL 14:167253f4e170 36025 0xada7057629586658l },
wolfSSL 14:167253f4e170 36026 0 },
wolfSSL 14:167253f4e170 36027 },
wolfSSL 14:167253f4e170 36028 {
wolfSSL 14:167253f4e170 36029 /* 0 << 80 */
wolfSSL 14:167253f4e170 36030 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 36031 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 36032 1 },
wolfSSL 14:167253f4e170 36033 /* 1 << 80 */
wolfSSL 14:167253f4e170 36034 { { 0xe4050f1cf1c367cal,0x9bc85a9bc90fbc7dl,0xa373c4a2e1a11032l,
wolfSSL 14:167253f4e170 36035 0xb64232b7ad0393a9l },
wolfSSL 14:167253f4e170 36036 { 0xf5577eb0167dad29l,0x1604f30194b78ab2l,0x0baa94afe829348bl,
wolfSSL 14:167253f4e170 36037 0x77fbd8dd41654342l },
wolfSSL 14:167253f4e170 36038 0 },
wolfSSL 14:167253f4e170 36039 /* 3 << 80 */
wolfSSL 14:167253f4e170 36040 { { 0xa2f7932c68af43eel,0x5502468e703d00bdl,0xe5dc978f2fb061f5l,
wolfSSL 14:167253f4e170 36041 0xc9a1904a28c815adl },
wolfSSL 14:167253f4e170 36042 { 0xd3af538d470c56a4l,0x159abc5f193d8cedl,0x2a37245f20108ef3l,
wolfSSL 14:167253f4e170 36043 0xfa17081e223f7178l },
wolfSSL 14:167253f4e170 36044 0 },
wolfSSL 14:167253f4e170 36045 /* 4 << 80 */
wolfSSL 14:167253f4e170 36046 { { 0x1fe2a9b2b4b4b67cl,0xc1d10df0e8020604l,0x9d64abfcbc8058d8l,
wolfSSL 14:167253f4e170 36047 0x8943b9b2712a0fbbl },
wolfSSL 14:167253f4e170 36048 { 0x90eed9143b3def04l,0x85ab3aa24ce775ffl,0x605fd4ca7bbc9040l,
wolfSSL 14:167253f4e170 36049 0x8b34a564e2c75dfbl },
wolfSSL 14:167253f4e170 36050 0 },
wolfSSL 14:167253f4e170 36051 /* 5 << 80 */
wolfSSL 14:167253f4e170 36052 { { 0x5c18acf88e2f7d90l,0xfdbf33d777be32cdl,0x0a085cd7d2eb5ee9l,
wolfSSL 14:167253f4e170 36053 0x2d702cfbb3201115l },
wolfSSL 14:167253f4e170 36054 { 0xb6e0ebdb85c88ce8l,0x23a3ce3c1e01d617l,0x3041618e567333acl,
wolfSSL 14:167253f4e170 36055 0x9dd0fd8f157edb6bl },
wolfSSL 14:167253f4e170 36056 0 },
wolfSSL 14:167253f4e170 36057 /* 7 << 80 */
wolfSSL 14:167253f4e170 36058 { { 0x516ff3a36fa6110cl,0x74fb1eb1fb93561fl,0x6c0c90478457522bl,
wolfSSL 14:167253f4e170 36059 0xcfd321046bb8bdc6l },
wolfSSL 14:167253f4e170 36060 { 0x2d6884a2cc80ad57l,0x7c27fc3586a9b637l,0x3461baedadf4e8cdl,
wolfSSL 14:167253f4e170 36061 0x1d56251a617242f0l },
wolfSSL 14:167253f4e170 36062 0 },
wolfSSL 14:167253f4e170 36063 /* 9 << 80 */
wolfSSL 14:167253f4e170 36064 { { 0x892c81a321175ec1l,0x9159a505ee018109l,0xc70130532d8be316l,
wolfSSL 14:167253f4e170 36065 0x76060c21426fa2e5l },
wolfSSL 14:167253f4e170 36066 { 0x074d2dfc6b6f0f22l,0x9725fc64ca01a671l,0x3f6679b92770bd8el,
wolfSSL 14:167253f4e170 36067 0x8fe6604fd7c9b3fel },
wolfSSL 14:167253f4e170 36068 0 },
wolfSSL 14:167253f4e170 36069 /* 10 << 80 */
wolfSSL 14:167253f4e170 36070 { { 0xce711154b6e00a84l,0xd9fe7e4224890e60l,0xd10bc6c34560988fl,
wolfSSL 14:167253f4e170 36071 0xbdc2ef526859b004l },
wolfSSL 14:167253f4e170 36072 { 0xdcf0d868d5c890eel,0x893115e6119c47dcl,0xe97966fbee714567l,
wolfSSL 14:167253f4e170 36073 0x117813355c85aa53l },
wolfSSL 14:167253f4e170 36074 0 },
wolfSSL 14:167253f4e170 36075 /* 11 << 80 */
wolfSSL 14:167253f4e170 36076 { { 0x71d530cc73204349l,0xc9df473d94a0679cl,0xc572f0014261e031l,
wolfSSL 14:167253f4e170 36077 0x9786b71f22f135fel },
wolfSSL 14:167253f4e170 36078 { 0xed6505fa6b64e56fl,0xe2fb48e905219c46l,0x0dbec45bedf53d71l,
wolfSSL 14:167253f4e170 36079 0xd7d782f2c589f406l },
wolfSSL 14:167253f4e170 36080 0 },
wolfSSL 14:167253f4e170 36081 /* 13 << 80 */
wolfSSL 14:167253f4e170 36082 { { 0x06513c8a446cd7f4l,0x158c423b906d52a6l,0x71503261c423866cl,
wolfSSL 14:167253f4e170 36083 0x4b96f57093c148eel },
wolfSSL 14:167253f4e170 36084 { 0x5daf9cc7239a8523l,0x611b597695ac4b8bl,0xde3981db724bf7f6l,
wolfSSL 14:167253f4e170 36085 0x7e7d0f7867afc443l },
wolfSSL 14:167253f4e170 36086 0 },
wolfSSL 14:167253f4e170 36087 /* 15 << 80 */
wolfSSL 14:167253f4e170 36088 { { 0x3d1ab80c8ce59954l,0x742c5a9478222ac0l,0x3ddacbf894f878ddl,
wolfSSL 14:167253f4e170 36089 0xfc085117e7d54a99l },
wolfSSL 14:167253f4e170 36090 { 0xfb0f1dfa21e38ec2l,0x1c7b59cb16f4ff7fl,0x988752397ea888fel,
wolfSSL 14:167253f4e170 36091 0x705d270cb10dc889l },
wolfSSL 14:167253f4e170 36092 0 },
wolfSSL 14:167253f4e170 36093 /* 16 << 80 */
wolfSSL 14:167253f4e170 36094 { { 0xe5aa692a87dec0e1l,0x010ded8df7b39d00l,0x7b1b80c854cfa0b5l,
wolfSSL 14:167253f4e170 36095 0x66beb876a0f8ea28l },
wolfSSL 14:167253f4e170 36096 { 0x50d7f5313476cd0el,0xa63d0e65b08d3949l,0x1a09eea953479fc6l,
wolfSSL 14:167253f4e170 36097 0x82ae9891f499e742l },
wolfSSL 14:167253f4e170 36098 0 },
wolfSSL 14:167253f4e170 36099 /* 17 << 80 */
wolfSSL 14:167253f4e170 36100 { { 0xd7c89ba1e7d1cefdl,0xcb33553a9a91e03dl,0xa01caaff59f01e54l,
wolfSSL 14:167253f4e170 36101 0x4a71c141de07def7l },
wolfSSL 14:167253f4e170 36102 { 0xe1616a4034d467d1l,0x6f395ab2e8ba8817l,0xf781ea64e45869abl,
wolfSSL 14:167253f4e170 36103 0x8b9513bb7134f484l },
wolfSSL 14:167253f4e170 36104 0 },
wolfSSL 14:167253f4e170 36105 /* 19 << 80 */
wolfSSL 14:167253f4e170 36106 { { 0x0b0ec9035948c135l,0xaee219539a990127l,0x9d15ba0eb185dda1l,
wolfSSL 14:167253f4e170 36107 0xd87bc2fb2c7d6802l },
wolfSSL 14:167253f4e170 36108 { 0x05a480307a82d7f8l,0x7b591ce4e7e11ec3l,0x14d4cc22a0e15fdbl,
wolfSSL 14:167253f4e170 36109 0xf2d4213576def955l },
wolfSSL 14:167253f4e170 36110 0 },
wolfSSL 14:167253f4e170 36111 /* 21 << 80 */
wolfSSL 14:167253f4e170 36112 { { 0xd56d69e4117a5f59l,0xcae6008a01286e97l,0x716a0a282dab13b0l,
wolfSSL 14:167253f4e170 36113 0xc821da99b3a8d2d0l },
wolfSSL 14:167253f4e170 36114 { 0x6898b66239c305e6l,0xe42d3394c8b61142l,0x54c1d2b253b16712l,
wolfSSL 14:167253f4e170 36115 0x3cec3953a01f4be6l },
wolfSSL 14:167253f4e170 36116 0 },
wolfSSL 14:167253f4e170 36117 /* 23 << 80 */
wolfSSL 14:167253f4e170 36118 { { 0x5bd1e3036951b85el,0x1a73f1fb164d79a4l,0x6e77abd39fb22bc3l,
wolfSSL 14:167253f4e170 36119 0x8ae4c181b3d18dfdl },
wolfSSL 14:167253f4e170 36120 { 0xdd4226f5a6a14ed1l,0x620e111feb4e1d92l,0xffce6e59edca4fe8l,
wolfSSL 14:167253f4e170 36121 0x39f5fc053d0a717dl },
wolfSSL 14:167253f4e170 36122 0 },
wolfSSL 14:167253f4e170 36123 /* 25 << 80 */
wolfSSL 14:167253f4e170 36124 { { 0xef8fa78cd91aff44l,0x6f3f9749bdc03be7l,0x171545f8b8596075l,
wolfSSL 14:167253f4e170 36125 0xbe31a73e2af132cel },
wolfSSL 14:167253f4e170 36126 { 0x5b4e174123884e1dl,0x4373357ea9fa75f0l,0x8dba2731bc06f49el,
wolfSSL 14:167253f4e170 36127 0xa09aebc877fa6de8l },
wolfSSL 14:167253f4e170 36128 0 },
wolfSSL 14:167253f4e170 36129 /* 27 << 80 */
wolfSSL 14:167253f4e170 36130 { { 0xd4974e518293e18cl,0x1e4cfc5331ec0e8fl,0x80b4258325d40b1el,
wolfSSL 14:167253f4e170 36131 0x5cfb73a2a85f7588l },
wolfSSL 14:167253f4e170 36132 { 0xe553efd204c0e00bl,0xdaa6750e9a48ac39l,0xf20936b00abda06al,
wolfSSL 14:167253f4e170 36133 0xbfd3c7e4bf85771cl },
wolfSSL 14:167253f4e170 36134 0 },
wolfSSL 14:167253f4e170 36135 /* 28 << 80 */
wolfSSL 14:167253f4e170 36136 { { 0x72669c3c7292495cl,0xa627e2dd82786572l,0xbdbfce5cd39c3e3dl,
wolfSSL 14:167253f4e170 36137 0xba6164927feed3d6l },
wolfSSL 14:167253f4e170 36138 { 0x4eb5f513e77b7318l,0x133f2e834337c2e0l,0xdea20f07f408bec6l,
wolfSSL 14:167253f4e170 36139 0x848a8396e3c87655l },
wolfSSL 14:167253f4e170 36140 0 },
wolfSSL 14:167253f4e170 36141 /* 29 << 80 */
wolfSSL 14:167253f4e170 36142 { { 0x3086643551138f2bl,0x1176d8e6108a36bal,0xd78b3b400d4d4b66l,
wolfSSL 14:167253f4e170 36143 0x99ddd9bd956dbff1l },
wolfSSL 14:167253f4e170 36144 { 0x91dfe72822f08e5fl,0x7fd8cfe6a081ac4el,0x8ebb278ed75285c2l,
wolfSSL 14:167253f4e170 36145 0x2335fe00ef457ac0l },
wolfSSL 14:167253f4e170 36146 0 },
wolfSSL 14:167253f4e170 36147 /* 31 << 80 */
wolfSSL 14:167253f4e170 36148 { { 0xe9d79c50f058191al,0x6749c3b05d3183f8l,0x5edc2708dbfeb1ecl,
wolfSSL 14:167253f4e170 36149 0x2c18f93621275986l },
wolfSSL 14:167253f4e170 36150 { 0x3a093e1f0703389fl,0xdf065e4a3ef60f44l,0x6860e4df87e7c458l,
wolfSSL 14:167253f4e170 36151 0xdb22d96e8bfe4c7dl },
wolfSSL 14:167253f4e170 36152 0 },
wolfSSL 14:167253f4e170 36153 /* 33 << 80 */
wolfSSL 14:167253f4e170 36154 { { 0xb7193811b48dad42l,0x23b9dca320ad0f0cl,0x55511ffb54efb61bl,
wolfSSL 14:167253f4e170 36155 0xac8ed94626f9ce42l },
wolfSSL 14:167253f4e170 36156 { 0xa42b4bc73fc4cbd9l,0x2a4670905c6f8e39l,0xb50040f87eb592del,
wolfSSL 14:167253f4e170 36157 0x6633f81bdc2541f3l },
wolfSSL 14:167253f4e170 36158 0 },
wolfSSL 14:167253f4e170 36159 /* 34 << 80 */
wolfSSL 14:167253f4e170 36160 { { 0xc104e02ed2d6d9c2l,0xa4876e870302517al,0x0263c9b2912f5005l,
wolfSSL 14:167253f4e170 36161 0x902f364a3d89d268l },
wolfSSL 14:167253f4e170 36162 { 0x76070565bb20a5a8l,0xa3a8977452109e98l,0x51fbffec463aa476l,
wolfSSL 14:167253f4e170 36163 0xfa8519625daa1503l },
wolfSSL 14:167253f4e170 36164 0 },
wolfSSL 14:167253f4e170 36165 /* 35 << 80 */
wolfSSL 14:167253f4e170 36166 { { 0xe449dd8f82a9a4f3l,0xa1a2f405797e6b36l,0x76913537787785e8l,
wolfSSL 14:167253f4e170 36167 0x0315a3cfe064481el },
wolfSSL 14:167253f4e170 36168 { 0xc02291ee83df11e2l,0x5b59a0e9bcd178f0l,0xd5e8d10ce6b4c63al,
wolfSSL 14:167253f4e170 36169 0x9eee599f3fc60a82l },
wolfSSL 14:167253f4e170 36170 0 },
wolfSSL 14:167253f4e170 36171 /* 36 << 80 */
wolfSSL 14:167253f4e170 36172 { { 0x051e589759621468l,0xb92c06327293621el,0xee17ea647762e4f2l,
wolfSSL 14:167253f4e170 36173 0x412107a771abd28cl },
wolfSSL 14:167253f4e170 36174 { 0xa083d87bf02d65ebl,0xbd4a3f165594395el,0x1d5694337c8882f3l,
wolfSSL 14:167253f4e170 36175 0xc5eb10c55f9c63cfl },
wolfSSL 14:167253f4e170 36176 0 },
wolfSSL 14:167253f4e170 36177 /* 37 << 80 */
wolfSSL 14:167253f4e170 36178 { { 0x4b196728c8e62c4el,0x03dbd04cb74a757cl,0xe960a65b8520f044l,
wolfSSL 14:167253f4e170 36179 0x9eda0f33f7937337l },
wolfSSL 14:167253f4e170 36180 { 0x06ff0b86b6dc7dfbl,0x3bd276c11fc1ac35l,0x0e67055b1b255c27l,
wolfSSL 14:167253f4e170 36181 0xe43ae552eff899f8l },
wolfSSL 14:167253f4e170 36182 0 },
wolfSSL 14:167253f4e170 36183 /* 39 << 80 */
wolfSSL 14:167253f4e170 36184 { { 0xc64c914d3b156d76l,0x784c1f61d794345dl,0xcda0c77c365d7a50l,
wolfSSL 14:167253f4e170 36185 0xcc5a1e205b32dbd0l },
wolfSSL 14:167253f4e170 36186 { 0x2f4e78bff90b6ac0l,0xbead62f9a2d4862dl,0xa8f67e7dcc346b53l,
wolfSSL 14:167253f4e170 36187 0xa38d7ae947e59dbdl },
wolfSSL 14:167253f4e170 36188 0 },
wolfSSL 14:167253f4e170 36189 /* 40 << 80 */
wolfSSL 14:167253f4e170 36190 { { 0x7dc1605d480aca4dl,0x08c37750ef263aabl,0xd5c6b7c93f166725l,
wolfSSL 14:167253f4e170 36191 0xf99982f30ff2853bl },
wolfSSL 14:167253f4e170 36192 { 0xc61b9583a8ecb64al,0x041211a91b771741l,0x50ba64154e156f97l,
wolfSSL 14:167253f4e170 36193 0xb6595ea871b8954el },
wolfSSL 14:167253f4e170 36194 0 },
wolfSSL 14:167253f4e170 36195 /* 41 << 80 */
wolfSSL 14:167253f4e170 36196 { { 0x4ae760845eb3b4eel,0xcafefdc6c62ed274l,0x4eabeacf113f790bl,
wolfSSL 14:167253f4e170 36197 0x10c2cc88a5ff64c9l },
wolfSSL 14:167253f4e170 36198 { 0xe7b59f8a49965d80l,0xd04884b50df07712l,0x6316ac5ba5f7bab1l,
wolfSSL 14:167253f4e170 36199 0x388111d99e78a075l },
wolfSSL 14:167253f4e170 36200 0 },
wolfSSL 14:167253f4e170 36201 /* 43 << 80 */
wolfSSL 14:167253f4e170 36202 { { 0x8d437128f24804efl,0x12a687dd7b71dd53l,0x8b8f71d96139a60el,
wolfSSL 14:167253f4e170 36203 0xb047fed42a095ec7l },
wolfSSL 14:167253f4e170 36204 { 0xef238041fba59ee8l,0x61b17fac64045514l,0x45b1cf4857afa184l,
wolfSSL 14:167253f4e170 36205 0x8592c50a4bff5fc5l },
wolfSSL 14:167253f4e170 36206 0 },
wolfSSL 14:167253f4e170 36207 /* 44 << 80 */
wolfSSL 14:167253f4e170 36208 { { 0x2830592394b745dcl,0x53e9ec16b09cb993l,0x59d0b57f9a134ed1l,
wolfSSL 14:167253f4e170 36209 0x89d7b439c56ee0ebl },
wolfSSL 14:167253f4e170 36210 { 0xc3656539991e22a2l,0xd27a89372a345043l,0x55dd5341064038eel,
wolfSSL 14:167253f4e170 36211 0xc9ee3f0348cb42efl },
wolfSSL 14:167253f4e170 36212 0 },
wolfSSL 14:167253f4e170 36213 /* 45 << 80 */
wolfSSL 14:167253f4e170 36214 { { 0x08518c631d56c1cbl,0x5650f79f31235521l,0x33fc08d648911017l,
wolfSSL 14:167253f4e170 36215 0xbb8b58538a0a33c8l },
wolfSSL 14:167253f4e170 36216 { 0xb54554f2f869a62al,0x67f8cf48222457e5l,0x46e13911f276cc0dl,
wolfSSL 14:167253f4e170 36217 0x4b3a2ad6943b389el },
wolfSSL 14:167253f4e170 36218 0 },
wolfSSL 14:167253f4e170 36219 /* 46 << 80 */
wolfSSL 14:167253f4e170 36220 { { 0x0e72b816b11a4c9dl,0x919b2738e9028fa4l,0xab80e1117698a5d6l,
wolfSSL 14:167253f4e170 36221 0xcd7950f56cd49adal },
wolfSSL 14:167253f4e170 36222 { 0x0db75c908dfb13a5l,0x2178578770f12cebl,0xfab72d5243486ff6l,
wolfSSL 14:167253f4e170 36223 0x66d55d726a0673ebl },
wolfSSL 14:167253f4e170 36224 0 },
wolfSSL 14:167253f4e170 36225 /* 47 << 80 */
wolfSSL 14:167253f4e170 36226 { { 0xe98014b922667519l,0x7fcab2b3a95da9c0l,0x9bdbccd8438d5060l,
wolfSSL 14:167253f4e170 36227 0xa72fff5455a726b6l },
wolfSSL 14:167253f4e170 36228 { 0x7ae032943a5e769bl,0xf7291e9b559a0734l,0x18ae4f182ce18eeel,
wolfSSL 14:167253f4e170 36229 0x88e49f7328b7b4f0l },
wolfSSL 14:167253f4e170 36230 0 },
wolfSSL 14:167253f4e170 36231 /* 48 << 80 */
wolfSSL 14:167253f4e170 36232 { { 0x90fe7a1d214aeb18l,0x1506af3c741432f7l,0xbb5565f9e591a0c4l,
wolfSSL 14:167253f4e170 36233 0x10d41a77b44f1bc3l },
wolfSSL 14:167253f4e170 36234 { 0xa09d65e4a84bde96l,0x42f060d8f20a6a1cl,0x652a3bfdf27f9ce7l,
wolfSSL 14:167253f4e170 36235 0xb6bdb65c3b3d739fl },
wolfSSL 14:167253f4e170 36236 0 },
wolfSSL 14:167253f4e170 36237 /* 49 << 80 */
wolfSSL 14:167253f4e170 36238 { { 0xc6a2923e60ef9d87l,0xac66cdd8c3a64f1cl,0x069292d26e0bb0ccl,
wolfSSL 14:167253f4e170 36239 0x9e491414451e52a0l },
wolfSSL 14:167253f4e170 36240 { 0x2e76cedf0e0d35b3l,0x311b7ae9af682b84l,0xaa1017a02f90b176l,
wolfSSL 14:167253f4e170 36241 0xac0b43a794feb6e8l },
wolfSSL 14:167253f4e170 36242 0 },
wolfSSL 14:167253f4e170 36243 /* 51 << 80 */
wolfSSL 14:167253f4e170 36244 { { 0x7ddb42f9214e82f5l,0x91c88566f67269d7l,0x1763ed8cdd0ff422l,
wolfSSL 14:167253f4e170 36245 0x045dd690ad284ddfl },
wolfSSL 14:167253f4e170 36246 { 0x5713bbb141e48fe7l,0xdc5bef28f8eb580fl,0x4bd0b288ed2992c2l,
wolfSSL 14:167253f4e170 36247 0x436587faaf5ef2b3l },
wolfSSL 14:167253f4e170 36248 0 },
wolfSSL 14:167253f4e170 36249 /* 52 << 80 */
wolfSSL 14:167253f4e170 36250 { { 0xbbc1a48d6e5822c4l,0x16c3135daacebd02l,0xd0c6c543b56157dfl,
wolfSSL 14:167253f4e170 36251 0xae249a0ef49f44a1l },
wolfSSL 14:167253f4e170 36252 { 0x1f2c23ce72c47341l,0x8f52dc2a25974313l,0x2c99bc0a958e0e6bl,
wolfSSL 14:167253f4e170 36253 0xe57eab6b950cd492l },
wolfSSL 14:167253f4e170 36254 0 },
wolfSSL 14:167253f4e170 36255 /* 53 << 80 */
wolfSSL 14:167253f4e170 36256 { { 0xea66db638934efc0l,0x7bfe479193c6f7c7l,0x78438d535ef90d99l,
wolfSSL 14:167253f4e170 36257 0xe63b87c9c665736dl },
wolfSSL 14:167253f4e170 36258 { 0x6de32d82db49e1bbl,0xbfa877dcd0ad1648l,0xdb2e85de1197806dl,
wolfSSL 14:167253f4e170 36259 0x74e9dbd3cfee7854l },
wolfSSL 14:167253f4e170 36260 0 },
wolfSSL 14:167253f4e170 36261 /* 55 << 80 */
wolfSSL 14:167253f4e170 36262 { { 0xd2c26e2edb6d7e0al,0x9103119a531009cdl,0xb5dc49869a8b9d54l,
wolfSSL 14:167253f4e170 36263 0x4781b83bb408b427l },
wolfSSL 14:167253f4e170 36264 { 0x70d98b2ccb4ba2f7l,0x112ed5d7fa8a36b8l,0x97257bc6fdde1675l,
wolfSSL 14:167253f4e170 36265 0xd2a9c711db211cb7l },
wolfSSL 14:167253f4e170 36266 0 },
wolfSSL 14:167253f4e170 36267 /* 57 << 80 */
wolfSSL 14:167253f4e170 36268 { { 0xe4aa6a06ee79fe8cl,0x06e210233dff8a54l,0x63e11ac5bf50731al,
wolfSSL 14:167253f4e170 36269 0xb8b9944f544125b8l },
wolfSSL 14:167253f4e170 36270 { 0xcba92c41d359aeb0l,0xd201c893249bca36l,0xfe79bd77cb501216l,
wolfSSL 14:167253f4e170 36271 0x694b21488d525ba4l },
wolfSSL 14:167253f4e170 36272 0 },
wolfSSL 14:167253f4e170 36273 /* 59 << 80 */
wolfSSL 14:167253f4e170 36274 { { 0x60c90e11ee3dde2al,0x7df08e17bb36c4a2l,0xb6c3210dcc5b3c17l,
wolfSSL 14:167253f4e170 36275 0xa814180955cec91cl },
wolfSSL 14:167253f4e170 36276 { 0xf4ecbc05a8193dffl,0xf43cdef8da5744fal,0x4895a6c6f12f8a2el,
wolfSSL 14:167253f4e170 36277 0x44282692eb7b910al },
wolfSSL 14:167253f4e170 36278 0 },
wolfSSL 14:167253f4e170 36279 /* 60 << 80 */
wolfSSL 14:167253f4e170 36280 { { 0x1a405e1886d6e13al,0x6a18c91827a7c67cl,0xc34877ebe127bfd7l,
wolfSSL 14:167253f4e170 36281 0x3c9fab08c098e692l },
wolfSSL 14:167253f4e170 36282 { 0xfe2dc65bc2066586l,0xb107603a8f68a0a9l,0x74ef0ef8127cd340l,
wolfSSL 14:167253f4e170 36283 0xfe577b5b86788d87l },
wolfSSL 14:167253f4e170 36284 0 },
wolfSSL 14:167253f4e170 36285 /* 61 << 80 */
wolfSSL 14:167253f4e170 36286 { { 0xdc7ff83c71234c81l,0xee48d9c6d868c82fl,0xb80bac5e37e4f365l,
wolfSSL 14:167253f4e170 36287 0x2bfbe94efcb951c2l },
wolfSSL 14:167253f4e170 36288 { 0x55829049a374d0b0l,0x2a502cada87a5fb4l,0x0742ac9d9ee840bal,
wolfSSL 14:167253f4e170 36289 0x7689bf53eecd05b1l },
wolfSSL 14:167253f4e170 36290 0 },
wolfSSL 14:167253f4e170 36291 /* 63 << 80 */
wolfSSL 14:167253f4e170 36292 { { 0x0e7f459320059c22l,0x47c273e0e49368a2l,0x5ccb960ac6946ee2l,
wolfSSL 14:167253f4e170 36293 0xd8209ec48b3271b6l },
wolfSSL 14:167253f4e170 36294 { 0x7fd5142cdfb9e947l,0x46a89c83ff737ab1l,0xa45f6b0282d875ecl,
wolfSSL 14:167253f4e170 36295 0x19a16e0e34c296d6l },
wolfSSL 14:167253f4e170 36296 0 },
wolfSSL 14:167253f4e170 36297 /* 64 << 80 */
wolfSSL 14:167253f4e170 36298 { { 0xeb5ddcb6ec7fae9fl,0x995f2714efb66e5al,0xdee95d8e69445d52l,
wolfSSL 14:167253f4e170 36299 0x1b6c2d4609e27620l },
wolfSSL 14:167253f4e170 36300 { 0x32621c318129d716l,0xb03909f10958c1aal,0x8c468ef91af4af63l,
wolfSSL 14:167253f4e170 36301 0x162c429ffba5cdf6l },
wolfSSL 14:167253f4e170 36302 0 },
wolfSSL 14:167253f4e170 36303 /* 65 << 80 */
wolfSSL 14:167253f4e170 36304 { { 0x65c93be33607927bl,0x86feaaecdae5411dl,0x4a1686c6dd2e2c3dl,
wolfSSL 14:167253f4e170 36305 0xf78200068acdf51dl },
wolfSSL 14:167253f4e170 36306 { 0xf82c4d0239ed3e50l,0x5ac04047b4c3a4a4l,0xbdd14d7ec34b07a7l,
wolfSSL 14:167253f4e170 36307 0x9911d7027cc12db5l },
wolfSSL 14:167253f4e170 36308 0 },
wolfSSL 14:167253f4e170 36309 /* 71 << 80 */
wolfSSL 14:167253f4e170 36310 { { 0x4ed5dbbd1751abc9l,0xaf374229a23cc54al,0x9b5fa66ea4ed3f9al,
wolfSSL 14:167253f4e170 36311 0xc56dd9613d380643l },
wolfSSL 14:167253f4e170 36312 { 0x7d77897144b38021l,0xdf4712d0d3584508l,0x0018e2eecd7ab168l,
wolfSSL 14:167253f4e170 36313 0xc8a3a166293d29a7l },
wolfSSL 14:167253f4e170 36314 0 },
wolfSSL 14:167253f4e170 36315 /* 77 << 80 */
wolfSSL 14:167253f4e170 36316 { { 0x34681bdb3a5a0214l,0xe188d6f1f718797el,0xaa751de7db761c5fl,
wolfSSL 14:167253f4e170 36317 0x347c50324959a5cel },
wolfSSL 14:167253f4e170 36318 { 0x108705fc338be49cl,0x1dc5eada95abf7a8l,0xb863808f0fc3f0b7l,
wolfSSL 14:167253f4e170 36319 0x529c27c1a05c4d43l },
wolfSSL 14:167253f4e170 36320 0 },
wolfSSL 14:167253f4e170 36321 /* 83 << 80 */
wolfSSL 14:167253f4e170 36322 { { 0xa75f90677f699f79l,0xd01cf9c866356f99l,0xf90f9b73fdfbaae7l,
wolfSSL 14:167253f4e170 36323 0xe0b5f4412c304d2fl },
wolfSSL 14:167253f4e170 36324 { 0x17cbfb11807f3f57l,0xe902d542af8a9eb4l,0x3335285461f89b4al,
wolfSSL 14:167253f4e170 36325 0x3a51c54d3628c0ael },
wolfSSL 14:167253f4e170 36326 0 },
wolfSSL 14:167253f4e170 36327 /* 89 << 80 */
wolfSSL 14:167253f4e170 36328 { { 0xae5fd487c704212dl,0x82dd07a565e2e32cl,0x46d4c9646c19c199l,
wolfSSL 14:167253f4e170 36329 0xe7f428593778eedcl },
wolfSSL 14:167253f4e170 36330 { 0x084a4e9b6dcc5ec9l,0x757e04ba2d0538b7l,0x4ec0a573a3fba4cdl,
wolfSSL 14:167253f4e170 36331 0x2432a4e5c627c2fcl },
wolfSSL 14:167253f4e170 36332 0 },
wolfSSL 14:167253f4e170 36333 /* 95 << 80 */
wolfSSL 14:167253f4e170 36334 { { 0xfde00b3094c8a424l,0x20a57d8cd224c232l,0xd6ace1a170019992l,
wolfSSL 14:167253f4e170 36335 0x1a648d40697e67a3l },
wolfSSL 14:167253f4e170 36336 { 0xed1fb10691338d84l,0x828004a08372bfc8l,0xb93030fefad3bfedl,
wolfSSL 14:167253f4e170 36337 0x883dea23f27369ecl },
wolfSSL 14:167253f4e170 36338 0 },
wolfSSL 14:167253f4e170 36339 /* 101 << 80 */
wolfSSL 14:167253f4e170 36340 { { 0xfbbf36a62a710d73l,0x8db834024b3cc6bbl,0xa60c47cf16d7b1fcl,
wolfSSL 14:167253f4e170 36341 0xf9778fa6cd16ce8fl },
wolfSSL 14:167253f4e170 36342 { 0xd77023086d14a1a6l,0x01f139cb06e8247cl,0xd89af2979770b9c1l,
wolfSSL 14:167253f4e170 36343 0x94bf1ca97d9fb550l },
wolfSSL 14:167253f4e170 36344 0 },
wolfSSL 14:167253f4e170 36345 /* 107 << 80 */
wolfSSL 14:167253f4e170 36346 { { 0xe17e2e6dc2d45f34l,0x5969d8ee26efc6cbl,0x6f175231b9219cfbl,
wolfSSL 14:167253f4e170 36347 0x027f333c189f1175l },
wolfSSL 14:167253f4e170 36348 { 0x5bc60fad54f6da49l,0xc52e09af8ae5c3f3l,0x6c0e3927ed07f46dl,
wolfSSL 14:167253f4e170 36349 0xbfd9e598f39cf16bl },
wolfSSL 14:167253f4e170 36350 0 },
wolfSSL 14:167253f4e170 36351 /* 113 << 80 */
wolfSSL 14:167253f4e170 36352 { { 0x9dffd95b090aefb9l,0x26db7b73637224fel,0xb78a679e92e2aa0cl,
wolfSSL 14:167253f4e170 36353 0xfc7c824ffc8f895dl },
wolfSSL 14:167253f4e170 36354 { 0xdc8287e8e636b3a8l,0x6b3ccc0f28b7a639l,0x38e6e2cc653de56al,
wolfSSL 14:167253f4e170 36355 0x998cf6985392c3cal },
wolfSSL 14:167253f4e170 36356 0 },
wolfSSL 14:167253f4e170 36357 /* 116 << 80 */
wolfSSL 14:167253f4e170 36358 { { 0xe68de79e57f0d6fal,0xe707b252ff9c06f7l,0x5613698a4a061697l,
wolfSSL 14:167253f4e170 36359 0xd83d6453b5390352l },
wolfSSL 14:167253f4e170 36360 { 0x59b007599867c708l,0xcfe24fd7b41ea7adl,0x4692abf3da5b7de6l,
wolfSSL 14:167253f4e170 36361 0xd99a6f3bf0c54e8fl },
wolfSSL 14:167253f4e170 36362 0 },
wolfSSL 14:167253f4e170 36363 /* 119 << 80 */
wolfSSL 14:167253f4e170 36364 { { 0xe8ee870dea4addc3l,0x0d1fb29559841f3el,0xdc05b5581dba2f14l,
wolfSSL 14:167253f4e170 36365 0xb8bf38324e3f4600l },
wolfSSL 14:167253f4e170 36366 { 0x1a909e66fd57c48al,0xb65ca4c24e2d76dfl,0x0b27755ae7c60d89l,
wolfSSL 14:167253f4e170 36367 0x9fcfa75acb9003f6l },
wolfSSL 14:167253f4e170 36368 0 },
wolfSSL 14:167253f4e170 36369 /* 125 << 80 */
wolfSSL 14:167253f4e170 36370 { { 0xbbbdf4c49e5325aal,0x6879fe11d0d1f281l,0x7a400f890633002el,
wolfSSL 14:167253f4e170 36371 0xc3633c779bb79ac9l },
wolfSSL 14:167253f4e170 36372 { 0x15a4cfae93ab9bc3l,0x379bbdea42594603l,0x7c61dfa257d2af3fl,
wolfSSL 14:167253f4e170 36373 0x20190537b51bfb62l },
wolfSSL 14:167253f4e170 36374 0 },
wolfSSL 14:167253f4e170 36375 },
wolfSSL 14:167253f4e170 36376 {
wolfSSL 14:167253f4e170 36377 /* 0 << 88 */
wolfSSL 14:167253f4e170 36378 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 36379 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 36380 1 },
wolfSSL 14:167253f4e170 36381 /* 1 << 88 */
wolfSSL 14:167253f4e170 36382 { { 0xa80d1db6f79588c0l,0xfa52fc69b55768ccl,0x0b4df1ae7f54438al,
wolfSSL 14:167253f4e170 36383 0x0cadd1a7f9b46a4fl },
wolfSSL 14:167253f4e170 36384 { 0xb40ea6b31803dd6fl,0x488e4fa555eaae35l,0x9f047d55382e4e16l,
wolfSSL 14:167253f4e170 36385 0xc9b5b7e02f6e0c98l },
wolfSSL 14:167253f4e170 36386 0 },
wolfSSL 14:167253f4e170 36387 /* 3 << 88 */
wolfSSL 14:167253f4e170 36388 { { 0x4b7d0e0683a7337bl,0x1e3416d4ffecf249l,0x24840eff66a2b71fl,
wolfSSL 14:167253f4e170 36389 0xd0d9a50ab37cc26dl },
wolfSSL 14:167253f4e170 36390 { 0xe21981506fe28ef7l,0x3cc5ef1623324c7fl,0x220f3455769b5263l,
wolfSSL 14:167253f4e170 36391 0xe2ade2f1a10bf475l },
wolfSSL 14:167253f4e170 36392 0 },
wolfSSL 14:167253f4e170 36393 /* 4 << 88 */
wolfSSL 14:167253f4e170 36394 { { 0x9894344f3a29467al,0xde81e949c51eba6dl,0xdaea066ba5e5c2f2l,
wolfSSL 14:167253f4e170 36395 0x3fc8a61408c8c7b3l },
wolfSSL 14:167253f4e170 36396 { 0x7adff88f06d0de9fl,0xbbc11cf53b75ce0al,0x9fbb7accfbbc87d5l,
wolfSSL 14:167253f4e170 36397 0xa1458e267badfde2l },
wolfSSL 14:167253f4e170 36398 0 },
wolfSSL 14:167253f4e170 36399 /* 5 << 88 */
wolfSSL 14:167253f4e170 36400 { { 0x03b6c8c7dacddb7dl,0x92ed50047e1edcadl,0xa0e46c2f54080633l,
wolfSSL 14:167253f4e170 36401 0xcd37663d46dec1cel },
wolfSSL 14:167253f4e170 36402 { 0x396984c5f365b7ccl,0x294e3a2ae79bb95dl,0x9aa17d7727b1d3c1l,
wolfSSL 14:167253f4e170 36403 0x3ffd3cfae49440f5l },
wolfSSL 14:167253f4e170 36404 0 },
wolfSSL 14:167253f4e170 36405 /* 7 << 88 */
wolfSSL 14:167253f4e170 36406 { { 0x26679d11399f9cf3l,0x78e7a48e1e3c4394l,0x08722dea0d98daf1l,
wolfSSL 14:167253f4e170 36407 0x37e7ed5880030ea3l },
wolfSSL 14:167253f4e170 36408 { 0xf3731ad43c8aae72l,0x7878be95ac729695l,0x6a643affbbc28352l,
wolfSSL 14:167253f4e170 36409 0xef8b801b78759b61l },
wolfSSL 14:167253f4e170 36410 0 },
wolfSSL 14:167253f4e170 36411 /* 9 << 88 */
wolfSSL 14:167253f4e170 36412 { { 0xdcdd3709b63afe75l,0xad9d7f0b3f1af8ffl,0xdd6a8045194f4beel,
wolfSSL 14:167253f4e170 36413 0x867724cc2f7d998cl },
wolfSSL 14:167253f4e170 36414 { 0xd51d0aa5837751bel,0x21d6754a959a0658l,0xd2212611695f7e58l,
wolfSSL 14:167253f4e170 36415 0xec4b93c2297363efl },
wolfSSL 14:167253f4e170 36416 0 },
wolfSSL 14:167253f4e170 36417 /* 10 << 88 */
wolfSSL 14:167253f4e170 36418 { { 0x0ac1c5fab6ef26cfl,0xcd8ba0c5a39de8eel,0x11ba7537dd7796e0l,
wolfSSL 14:167253f4e170 36419 0x1215933476d58d6dl },
wolfSSL 14:167253f4e170 36420 { 0xf51eb76f529fda4cl,0x2fd9209ddedaa8a3l,0x555a675615efac65l,
wolfSSL 14:167253f4e170 36421 0xb784c9ca7fd42fe9l },
wolfSSL 14:167253f4e170 36422 0 },
wolfSSL 14:167253f4e170 36423 /* 11 << 88 */
wolfSSL 14:167253f4e170 36424 { { 0x8165ec11b9d1a70fl,0x01347efc384f6cael,0xe95c01a0ab7aeca9l,
wolfSSL 14:167253f4e170 36425 0x459ba1c5c6c99530l },
wolfSSL 14:167253f4e170 36426 { 0x38967a635cf3416bl,0x5c3761fd1e5457e2l,0x43e6077af03e9df6l,
wolfSSL 14:167253f4e170 36427 0xb15d34628bd1c7f6l },
wolfSSL 14:167253f4e170 36428 0 },
wolfSSL 14:167253f4e170 36429 /* 13 << 88 */
wolfSSL 14:167253f4e170 36430 { { 0xad87d3db35a75c49l,0xc69d800961af03c5l,0x31aef61a3a6a6c4cl,
wolfSSL 14:167253f4e170 36431 0xb3292640aa10a993l },
wolfSSL 14:167253f4e170 36432 { 0x959aae80aaee340fl,0xf900528e7f381a3bl,0x44ecf76e853691a3l,
wolfSSL 14:167253f4e170 36433 0xa081663ce749e68el },
wolfSSL 14:167253f4e170 36434 0 },
wolfSSL 14:167253f4e170 36435 /* 15 << 88 */
wolfSSL 14:167253f4e170 36436 { { 0x4f2782136283e34al,0x6f9fcf60fbfa315fl,0x224a2ab99b701364l,
wolfSSL 14:167253f4e170 36437 0xb4b1b418f9fecadcl },
wolfSSL 14:167253f4e170 36438 { 0xbf7280fe50ba1b9al,0x7e68259c33f36db9l,0x8ccb754e154c9fb0l,
wolfSSL 14:167253f4e170 36439 0xf281adb1db2328f1l },
wolfSSL 14:167253f4e170 36440 0 },
wolfSSL 14:167253f4e170 36441 /* 16 << 88 */
wolfSSL 14:167253f4e170 36442 { { 0xf92dda31be24319al,0x03f7d28be095a8e7l,0xa52fe84098782185l,
wolfSSL 14:167253f4e170 36443 0x276ddafe29c24dbcl },
wolfSSL 14:167253f4e170 36444 { 0x80cd54961d7a64ebl,0xe43608897f1dbe42l,0x2f81a8778438d2d5l,
wolfSSL 14:167253f4e170 36445 0x7e4d52a885169036l },
wolfSSL 14:167253f4e170 36446 0 },
wolfSSL 14:167253f4e170 36447 /* 17 << 88 */
wolfSSL 14:167253f4e170 36448 { { 0xc2a950ad2d6608bel,0xab415e2a51c3c2b6l,0xffbd2a65f5c803e7l,
wolfSSL 14:167253f4e170 36449 0x3f81dc3eca908532l },
wolfSSL 14:167253f4e170 36450 { 0x0ec47397c28c04f4l,0xf6c632e8153f58e8l,0xccac35f8efb4a6d8l,
wolfSSL 14:167253f4e170 36451 0x22a1b677ee6d7407l },
wolfSSL 14:167253f4e170 36452 0 },
wolfSSL 14:167253f4e170 36453 /* 19 << 88 */
wolfSSL 14:167253f4e170 36454 { { 0x276662435243c119l,0x79cb8580e707363el,0x5bf5ebf4d01682d6l,
wolfSSL 14:167253f4e170 36455 0x8a980173762811e0l },
wolfSSL 14:167253f4e170 36456 { 0xe2f2be1fc7547d77l,0x21a50fffb925fec6l,0x5e6cf2ef40115509l,
wolfSSL 14:167253f4e170 36457 0xb69beae18faa0fc0l },
wolfSSL 14:167253f4e170 36458 0 },
wolfSSL 14:167253f4e170 36459 /* 21 << 88 */
wolfSSL 14:167253f4e170 36460 { { 0xfa147da8cec36e75l,0xba184e5a42860484l,0xe8ec25df222fb1e6l,
wolfSSL 14:167253f4e170 36461 0xce91dcb18ff8403cl },
wolfSSL 14:167253f4e170 36462 { 0xf1b0e27ead7faa32l,0x097d881d42a3a205l,0xa8865dd43f8f56d4l,
wolfSSL 14:167253f4e170 36463 0x624d7a451aef929dl },
wolfSSL 14:167253f4e170 36464 0 },
wolfSSL 14:167253f4e170 36465 /* 23 << 88 */
wolfSSL 14:167253f4e170 36466 { { 0x3db0238ad01698e8l,0xbb7186dc00306082l,0x542f4377250f830el,
wolfSSL 14:167253f4e170 36467 0x34b8a67dae438c50l },
wolfSSL 14:167253f4e170 36468 { 0xada528a0858d8048l,0x561aa3336b57afc1l,0x8d9188e0fda35f7al,
wolfSSL 14:167253f4e170 36469 0x5838d1211dcad0c5l },
wolfSSL 14:167253f4e170 36470 0 },
wolfSSL 14:167253f4e170 36471 /* 25 << 88 */
wolfSSL 14:167253f4e170 36472 { { 0x4f97d1529f17511dl,0x8b9f012776fdb9ebl,0x53a0a72d4056e6a7l,
wolfSSL 14:167253f4e170 36473 0x5ff937d64e262eeel },
wolfSSL 14:167253f4e170 36474 { 0xaa64a8dc489fbe6dl,0xc19947dfea02bc69l,0x76f0bbb91492c9bel,
wolfSSL 14:167253f4e170 36475 0xe53881098d89cd01l },
wolfSSL 14:167253f4e170 36476 0 },
wolfSSL 14:167253f4e170 36477 /* 27 << 88 */
wolfSSL 14:167253f4e170 36478 { { 0x16083309456057b7l,0x2810c08040a331f6l,0x0561656c3c166929l,
wolfSSL 14:167253f4e170 36479 0x16f0d8d6ed1c3999l },
wolfSSL 14:167253f4e170 36480 { 0x37b6da7294697927l,0xd821c2cc23ca6c9cl,0x42ef1bdb8ca4351cl,
wolfSSL 14:167253f4e170 36481 0x7ca32bad5edfa682l },
wolfSSL 14:167253f4e170 36482 0 },
wolfSSL 14:167253f4e170 36483 /* 28 << 88 */
wolfSSL 14:167253f4e170 36484 { { 0xdc1de17d98119f10l,0x74353c5d488c36a6l,0x14aaf33a3d8e23dfl,
wolfSSL 14:167253f4e170 36485 0x31e075c078baf593l },
wolfSSL 14:167253f4e170 36486 { 0x0f7ca03a46d1ca3cl,0x99c5e3ac47b660c7l,0x70d0241388fe2e59l,
wolfSSL 14:167253f4e170 36487 0x2e9a6be12a7ec005l },
wolfSSL 14:167253f4e170 36488 0 },
wolfSSL 14:167253f4e170 36489 /* 29 << 88 */
wolfSSL 14:167253f4e170 36490 { { 0x4d1f087f184252b1l,0xfd3ace273f5b49c6l,0x6e874447bbb04da2l,
wolfSSL 14:167253f4e170 36491 0x2347e3a1b3767ff0l },
wolfSSL 14:167253f4e170 36492 { 0x990d4010f868966al,0x35320090dd658b5el,0x1105bfb974fe972al,
wolfSSL 14:167253f4e170 36493 0x3961f7dc8e7ad2c6l },
wolfSSL 14:167253f4e170 36494 0 },
wolfSSL 14:167253f4e170 36495 /* 31 << 88 */
wolfSSL 14:167253f4e170 36496 { { 0x100d8b54741e3286l,0x65d9108ef3abc7afl,0x172b450620ef8fbcl,
wolfSSL 14:167253f4e170 36497 0x11bd7db2d81b8a2el },
wolfSSL 14:167253f4e170 36498 { 0xf89210e1e8e41de5l,0x910613f3d98a868bl,0xbfc85241849aa909l,
wolfSSL 14:167253f4e170 36499 0x68a43e21c7d3a7cal },
wolfSSL 14:167253f4e170 36500 0 },
wolfSSL 14:167253f4e170 36501 /* 33 << 88 */
wolfSSL 14:167253f4e170 36502 { { 0x68f891479a4f8293l,0x48262328a5eb9101l,0x7eca2a178fe218b5l,
wolfSSL 14:167253f4e170 36503 0xde6c22dbc733f768l },
wolfSSL 14:167253f4e170 36504 { 0xde7171d108d6084dl,0xd153827a0f0f8092l,0xc7b52d8f85a9252fl,
wolfSSL 14:167253f4e170 36505 0xfa29ca3a5708b31fl },
wolfSSL 14:167253f4e170 36506 0 },
wolfSSL 14:167253f4e170 36507 /* 34 << 88 */
wolfSSL 14:167253f4e170 36508 { { 0x20518ddf9e0ad7e7l,0x33d5d079e8d28b9bl,0x1149b393d13058b0l,
wolfSSL 14:167253f4e170 36509 0x708cc65586d4651dl },
wolfSSL 14:167253f4e170 36510 { 0xd7fefaa694207435l,0xce882c0d96312f8fl,0x2fd5cb2059d091a7l,
wolfSSL 14:167253f4e170 36511 0x4533a88a0e1ece94l },
wolfSSL 14:167253f4e170 36512 0 },
wolfSSL 14:167253f4e170 36513 /* 35 << 88 */
wolfSSL 14:167253f4e170 36514 { { 0xceddd9b5a59c28bcl,0xaa4808f9572e2a5dl,0x38bc191999014a1el,
wolfSSL 14:167253f4e170 36515 0x1aacefdaa6d85686l },
wolfSSL 14:167253f4e170 36516 { 0xa59283d42a573fddl,0x84359db29c387594l,0x79994773dca3acc8l,
wolfSSL 14:167253f4e170 36517 0xe4323e7654cf7653l },
wolfSSL 14:167253f4e170 36518 0 },
wolfSSL 14:167253f4e170 36519 /* 36 << 88 */
wolfSSL 14:167253f4e170 36520 { { 0xac449695241fbd6fl,0x67c9b170081c1223l,0x16868f21b56aac6fl,
wolfSSL 14:167253f4e170 36521 0x34bd8fa3f8bcb721l },
wolfSSL 14:167253f4e170 36522 { 0x06b6bd33b6691c76l,0x6c924766381a7973l,0x6a12444ca54078dbl,
wolfSSL 14:167253f4e170 36523 0xd02e91a96d1051ccl },
wolfSSL 14:167253f4e170 36524 0 },
wolfSSL 14:167253f4e170 36525 /* 37 << 88 */
wolfSSL 14:167253f4e170 36526 { { 0x512f5fb35f30b344l,0xb13ade169d516885l,0x18812e9b2b468802l,
wolfSSL 14:167253f4e170 36527 0xf15d730e6b28979al },
wolfSSL 14:167253f4e170 36528 { 0x5015616f6889348bl,0xe0b02a0a96af0401l,0x3b02007b61204c89l,
wolfSSL 14:167253f4e170 36529 0x9ece2aa7432742a4l },
wolfSSL 14:167253f4e170 36530 0 },
wolfSSL 14:167253f4e170 36531 /* 39 << 88 */
wolfSSL 14:167253f4e170 36532 { { 0xd5f7e09c7c1cc4a1l,0x313ac04218b2d854l,0xbc4fe2a04c253b10l,
wolfSSL 14:167253f4e170 36533 0x25a696a3c7080b5cl },
wolfSSL 14:167253f4e170 36534 { 0x6de3cb6aef811877l,0x4d242fecd15f9644l,0xb9bfa2480ee6a136l,
wolfSSL 14:167253f4e170 36535 0x8122679e9c8d181el },
wolfSSL 14:167253f4e170 36536 0 },
wolfSSL 14:167253f4e170 36537 /* 40 << 88 */
wolfSSL 14:167253f4e170 36538 { { 0x37e5684744ddfa35l,0x9ccfc5c5dab3f747l,0x9ac1df3f1ee96cf4l,
wolfSSL 14:167253f4e170 36539 0x0c0571a13b480b8fl },
wolfSSL 14:167253f4e170 36540 { 0x2fbeb3d54b3a7b3cl,0x35c036695dcdbb99l,0x52a0f5dcb2415b3al,
wolfSSL 14:167253f4e170 36541 0xd57759b44413ed9al },
wolfSSL 14:167253f4e170 36542 0 },
wolfSSL 14:167253f4e170 36543 /* 41 << 88 */
wolfSSL 14:167253f4e170 36544 { { 0xc2c7daec96a8d727l,0x8a11631a17f3abf9l,0x06aba65c0ae8940al,
wolfSSL 14:167253f4e170 36545 0xfca280c7873d3635l },
wolfSSL 14:167253f4e170 36546 { 0x57496889ddb72b87l,0xaa9a3359320793d4l,0x11b6864d43120741l,
wolfSSL 14:167253f4e170 36547 0x1877cd4e51527639l },
wolfSSL 14:167253f4e170 36548 0 },
wolfSSL 14:167253f4e170 36549 /* 43 << 88 */
wolfSSL 14:167253f4e170 36550 { { 0x8b35ce4e6f43dfc6l,0x4114b2fe9a19f3bfl,0x8c4af8024ffa45cal,
wolfSSL 14:167253f4e170 36551 0xa3ab5f869328b847l },
wolfSSL 14:167253f4e170 36552 { 0x0986de3e555f30f0l,0xaae6e3eac8cb84c4l,0x2a7dcdbaa4ba01f7l,
wolfSSL 14:167253f4e170 36553 0xfa32efa729f5dc6cl },
wolfSSL 14:167253f4e170 36554 0 },
wolfSSL 14:167253f4e170 36555 /* 44 << 88 */
wolfSSL 14:167253f4e170 36556 { { 0x077379c00b33d3f8l,0x421883c67064e409l,0x2d0873d76c29c8f6l,
wolfSSL 14:167253f4e170 36557 0xbfa433a3d274c0c8l },
wolfSSL 14:167253f4e170 36558 { 0x56dc778f23a5891el,0xd663bf6535e2de04l,0x488fdb485db517cel,
wolfSSL 14:167253f4e170 36559 0x00bba55e19b226c2l },
wolfSSL 14:167253f4e170 36560 0 },
wolfSSL 14:167253f4e170 36561 /* 45 << 88 */
wolfSSL 14:167253f4e170 36562 { { 0x879b30ead7260d78l,0x04954ba2eac5201fl,0x3210c0e3ff2529d1l,
wolfSSL 14:167253f4e170 36563 0x0743823488b470b3l },
wolfSSL 14:167253f4e170 36564 { 0x8b618de48854cc0dl,0x98270d5e35b795eel,0x0e47d651aa33ca37l,
wolfSSL 14:167253f4e170 36565 0x77d75fda1e87d0cfl },
wolfSSL 14:167253f4e170 36566 0 },
wolfSSL 14:167253f4e170 36567 /* 46 << 88 */
wolfSSL 14:167253f4e170 36568 { { 0x789dbe987803fbf9l,0x940589aa17ede316l,0x032902bd85a1988cl,
wolfSSL 14:167253f4e170 36569 0x43cbc0031c47f7f0l },
wolfSSL 14:167253f4e170 36570 { 0xc6ff73714709148fl,0x769957122d9b8a5el,0xb4520e462597b70el,
wolfSSL 14:167253f4e170 36571 0x00d19f39f67ff3b8l },
wolfSSL 14:167253f4e170 36572 0 },
wolfSSL 14:167253f4e170 36573 /* 47 << 88 */
wolfSSL 14:167253f4e170 36574 { { 0xe2dfcef9b159f403l,0xe8e9e8d8855644afl,0x2796247163fa1068l,
wolfSSL 14:167253f4e170 36575 0x400e992a968a5400l },
wolfSSL 14:167253f4e170 36576 { 0xe2b9d29f56e563c1l,0xed66759c2885fabfl,0x788b6263750abdffl,
wolfSSL 14:167253f4e170 36577 0x30adb00d6cbbdcacl },
wolfSSL 14:167253f4e170 36578 0 },
wolfSSL 14:167253f4e170 36579 /* 48 << 88 */
wolfSSL 14:167253f4e170 36580 { { 0x1fe647d83d30a2c5l,0x0857f77ef78a81dcl,0x11d5a334131a4a9bl,
wolfSSL 14:167253f4e170 36581 0xc0a94af929d393f5l },
wolfSSL 14:167253f4e170 36582 { 0xbc3a5c0bdaa6ec1al,0xba9fe49388d2d7edl,0xbb4335b4bb614797l,
wolfSSL 14:167253f4e170 36583 0x991c4d6872f83533l },
wolfSSL 14:167253f4e170 36584 0 },
wolfSSL 14:167253f4e170 36585 /* 49 << 88 */
wolfSSL 14:167253f4e170 36586 { { 0x5548d3423fa17b28l,0x38587952823ee731l,0x8ee9b90a0a28bcd1l,
wolfSSL 14:167253f4e170 36587 0xcfc029bf6676917el },
wolfSSL 14:167253f4e170 36588 { 0x7e08306d2a212358l,0x66a9488dc88a66bcl,0x7a09db327d7c9e65l,
wolfSSL 14:167253f4e170 36589 0x20eaf4e72cbc1790l },
wolfSSL 14:167253f4e170 36590 0 },
wolfSSL 14:167253f4e170 36591 /* 51 << 88 */
wolfSSL 14:167253f4e170 36592 { { 0xb3095b491f2a9605l,0x7cfc4205f72691c7l,0x1544bf964d889b90l,
wolfSSL 14:167253f4e170 36593 0xdc44d20ba0bbae7al },
wolfSSL 14:167253f4e170 36594 { 0xee369b670b1f0b23l,0xf3ec25e818a7bdcbl,0xf614ab5df47ecf65l,
wolfSSL 14:167253f4e170 36595 0x4869762f80a4a09dl },
wolfSSL 14:167253f4e170 36596 0 },
wolfSSL 14:167253f4e170 36597 /* 52 << 88 */
wolfSSL 14:167253f4e170 36598 { { 0xedbbeee78a058fb6l,0xb9d19ddcfb09121al,0xa41bb45bd34dddcel,
wolfSSL 14:167253f4e170 36599 0x2dbc80b900964bc4l },
wolfSSL 14:167253f4e170 36600 { 0x4ed9137d1d6cb654l,0x1b9016db483d01c5l,0x5fc501bc6528e22el,
wolfSSL 14:167253f4e170 36601 0xb2d2f8816cad646bl },
wolfSSL 14:167253f4e170 36602 0 },
wolfSSL 14:167253f4e170 36603 /* 53 << 88 */
wolfSSL 14:167253f4e170 36604 { { 0xb57aa72a89043e56l,0x8fbca2435c5319fdl,0xe66aef43b13ce900l,
wolfSSL 14:167253f4e170 36605 0x2c7c3927c3382934l },
wolfSSL 14:167253f4e170 36606 { 0x434d9104a835fdf5l,0x419470b81b3b85bel,0xeaec374abeb4d448l,
wolfSSL 14:167253f4e170 36607 0x26a53b51f33cda51l },
wolfSSL 14:167253f4e170 36608 0 },
wolfSSL 14:167253f4e170 36609 /* 55 << 88 */
wolfSSL 14:167253f4e170 36610 { { 0x421f1725bb1db793l,0x20214d4f558c94a9l,0x3371233b7696092cl,
wolfSSL 14:167253f4e170 36611 0x774d3fcb1902ab0el },
wolfSSL 14:167253f4e170 36612 { 0x4ce223ded149aecel,0x174b260e33057bc7l,0xdf70cfa3f6effee4l,
wolfSSL 14:167253f4e170 36613 0x3d8cd01f80880678l },
wolfSSL 14:167253f4e170 36614 0 },
wolfSSL 14:167253f4e170 36615 /* 57 << 88 */
wolfSSL 14:167253f4e170 36616 { { 0x32db21862e59985cl,0x448865abaa1b39e1l,0x250ce79cd89fe98dl,
wolfSSL 14:167253f4e170 36617 0x962710e763e3fb10l },
wolfSSL 14:167253f4e170 36618 { 0xa8fc70561ac10e3el,0x9eed208fa3b132fbl,0xf499d638937051f5l,
wolfSSL 14:167253f4e170 36619 0x27acf7ec21a9f78fl },
wolfSSL 14:167253f4e170 36620 0 },
wolfSSL 14:167253f4e170 36621 /* 59 << 88 */
wolfSSL 14:167253f4e170 36622 { { 0x148e572a4c7b445el,0xdc10a0214dc95a4fl,0xe60e9c2e02237869l,
wolfSSL 14:167253f4e170 36623 0xbfdfcb3aa393c3a4l },
wolfSSL 14:167253f4e170 36624 { 0x8b799db211a64cf0l,0x1ca865ea2e16f59fl,0x865441fbd3a17e46l,
wolfSSL 14:167253f4e170 36625 0x23315b9753409692l },
wolfSSL 14:167253f4e170 36626 0 },
wolfSSL 14:167253f4e170 36627 /* 60 << 88 */
wolfSSL 14:167253f4e170 36628 { { 0x5e76fb2f286bad39l,0xbad9efe39dcad1e2l,0x60e75190edc7e904l,
wolfSSL 14:167253f4e170 36629 0x6a6f063e0fecb5a5l },
wolfSSL 14:167253f4e170 36630 { 0x5150ed85aed8acc3l,0xb56ccfbc6d20af6cl,0x7e0d1e982c69dbfal,
wolfSSL 14:167253f4e170 36631 0xabf5628a7c7e10a9l },
wolfSSL 14:167253f4e170 36632 0 },
wolfSSL 14:167253f4e170 36633 /* 61 << 88 */
wolfSSL 14:167253f4e170 36634 { { 0xb84af2c00df6d61fl,0x02c651c52acbaf4bl,0xfb605754afaaa0bfl,
wolfSSL 14:167253f4e170 36635 0xa03f5257dff61017l },
wolfSSL 14:167253f4e170 36636 { 0x9e3ffb1672762093l,0x4f9a5da0c4f40bd3l,0x37dce5220d26f8e1l,
wolfSSL 14:167253f4e170 36637 0x260f736fc06a1a07l },
wolfSSL 14:167253f4e170 36638 0 },
wolfSSL 14:167253f4e170 36639 /* 63 << 88 */
wolfSSL 14:167253f4e170 36640 { { 0xb92aba79b1077d55l,0xc52f81081a42f5f5l,0x9913f04f86e5aa99l,
wolfSSL 14:167253f4e170 36641 0x6814b0b1f3c7f504l },
wolfSSL 14:167253f4e170 36642 { 0xb7d61fd34d354bdal,0xf27926e39581d25el,0x97724001c2dc21adl,
wolfSSL 14:167253f4e170 36643 0x835778231d5c4788l },
wolfSSL 14:167253f4e170 36644 0 },
wolfSSL 14:167253f4e170 36645 /* 64 << 88 */
wolfSSL 14:167253f4e170 36646 { { 0x77b868cee978a1d3l,0xe3a68b337ab92d04l,0x5102979487a5b862l,
wolfSSL 14:167253f4e170 36647 0x5f0606c33a61d41dl },
wolfSSL 14:167253f4e170 36648 { 0x2814be276f9326f1l,0x2f521c14c6fe3c2el,0x17464d7dacdf7351l,
wolfSSL 14:167253f4e170 36649 0x10f5f9d3777f7e44l },
wolfSSL 14:167253f4e170 36650 0 },
wolfSSL 14:167253f4e170 36651 /* 65 << 88 */
wolfSSL 14:167253f4e170 36652 { { 0x53857462ff9727a2l,0xe6870e7dc68488e7l,0x276da72808c79656l,
wolfSSL 14:167253f4e170 36653 0x1308eb61d86c24ebl },
wolfSSL 14:167253f4e170 36654 { 0x34c43a84db0a3e56l,0x03961b5525335a59l,0xf9bc2d5805689d86l,
wolfSSL 14:167253f4e170 36655 0xfa4d3c01eb29d6d6l },
wolfSSL 14:167253f4e170 36656 0 },
wolfSSL 14:167253f4e170 36657 /* 71 << 88 */
wolfSSL 14:167253f4e170 36658 { { 0xd07dac3037d10ffal,0xb2b0a0fd8bef0a79l,0xa2e804510ec02505l,
wolfSSL 14:167253f4e170 36659 0xf256c18962f55f5fl },
wolfSSL 14:167253f4e170 36660 { 0x0ca3f9b10b39f4f0l,0x7bf4e1cf3bb7c8e9l,0x7a8a43f8ee11f227l,
wolfSSL 14:167253f4e170 36661 0x2ad8431a3e4056ebl },
wolfSSL 14:167253f4e170 36662 0 },
wolfSSL 14:167253f4e170 36663 /* 77 << 88 */
wolfSSL 14:167253f4e170 36664 { { 0xb8cf71ed031c1871l,0x702431806f703102l,0x9a87e1c24ec6f1b0l,
wolfSSL 14:167253f4e170 36665 0xf7e6e5b4664f275dl },
wolfSSL 14:167253f4e170 36666 { 0xc70a8b4e8c76b505l,0x6ba69bf2a002e9cfl,0x33ed74f7a0d8c9bfl,
wolfSSL 14:167253f4e170 36667 0x17f5f4b18d9989del },
wolfSSL 14:167253f4e170 36668 0 },
wolfSSL 14:167253f4e170 36669 /* 83 << 88 */
wolfSSL 14:167253f4e170 36670 { { 0xcd116dcb1b13a4a1l,0x591adb831c369877l,0x697be1aca6b8e80bl,
wolfSSL 14:167253f4e170 36671 0xb2d4baa1b975d781l },
wolfSSL 14:167253f4e170 36672 { 0xd4a9a496b16b48e7l,0x64de2d7af293997dl,0x039ae039af09a492l,
wolfSSL 14:167253f4e170 36673 0x66e31a2665f3a485l },
wolfSSL 14:167253f4e170 36674 0 },
wolfSSL 14:167253f4e170 36675 /* 89 << 88 */
wolfSSL 14:167253f4e170 36676 { { 0x110a8a42fec01a53l,0x1f5fcc1b38affab8l,0x757310ca9941a19el,
wolfSSL 14:167253f4e170 36677 0x11ef95f76c29d6cbl },
wolfSSL 14:167253f4e170 36678 { 0x0756bdb22dd427bal,0x8de8d44af3e16c33l,0xf9d28355e25aec52l,
wolfSSL 14:167253f4e170 36679 0xeb761efc02f36465l },
wolfSSL 14:167253f4e170 36680 0 },
wolfSSL 14:167253f4e170 36681 /* 95 << 88 */
wolfSSL 14:167253f4e170 36682 { { 0xfc83bf7454bfcd7al,0x51d861794837b6bel,0x8165b3f9801a324dl,
wolfSSL 14:167253f4e170 36683 0x3a5972bc634cfd61l },
wolfSSL 14:167253f4e170 36684 { 0xeecfe6d825258ed6l,0x51d968df1451ced0l,0x3010cdb8316aa0ael,
wolfSSL 14:167253f4e170 36685 0xc295b8522900eaf2l },
wolfSSL 14:167253f4e170 36686 0 },
wolfSSL 14:167253f4e170 36687 /* 101 << 88 */
wolfSSL 14:167253f4e170 36688 { { 0x5ad434a3890cc798l,0x4c17ff5e1531bce4l,0x825b5b5a5ea8e26fl,
wolfSSL 14:167253f4e170 36689 0xacca9d5dd66fd7b3l },
wolfSSL 14:167253f4e170 36690 { 0xb647dbde37ae6f92l,0xa5594868f3600416l,0x7b90ac53ab0c5d63l,
wolfSSL 14:167253f4e170 36691 0x4b66ad7ceb43e1d0l },
wolfSSL 14:167253f4e170 36692 0 },
wolfSSL 14:167253f4e170 36693 /* 107 << 88 */
wolfSSL 14:167253f4e170 36694 { { 0x04a211fac09ccbffl,0x9c96ad9ee873d898l,0x9eb1deb69c481f86l,
wolfSSL 14:167253f4e170 36695 0xb3616ce8b2d70298l },
wolfSSL 14:167253f4e170 36696 { 0x67a6fe9b9073726dl,0x5b8aa37d4c9bf744l,0xf558603ebb6aa0efl,
wolfSSL 14:167253f4e170 36697 0x72767f5103d304fbl },
wolfSSL 14:167253f4e170 36698 0 },
wolfSSL 14:167253f4e170 36699 /* 113 << 88 */
wolfSSL 14:167253f4e170 36700 { { 0x787cb8b8d6e9b7e3l,0x8bb30222e079fc68l,0x651a2ea6e3145a0bl,
wolfSSL 14:167253f4e170 36701 0x0254c5da9ab18fa8l },
wolfSSL 14:167253f4e170 36702 { 0x83722ffc12e1611fl,0xb0ddf1ffa7cc61bel,0x7c9c7e10ac0ac8d7l,
wolfSSL 14:167253f4e170 36703 0x8241a8191da12218l },
wolfSSL 14:167253f4e170 36704 0 },
wolfSSL 14:167253f4e170 36705 /* 116 << 88 */
wolfSSL 14:167253f4e170 36706 { { 0x70bb7719bc407e6el,0x231328efd84ceb41l,0x8bca6a1fc104bb20l,
wolfSSL 14:167253f4e170 36707 0xd6f4e425280b9071l },
wolfSSL 14:167253f4e170 36708 { 0xb41b95a292896a82l,0x735cf435fa34df67l,0xbc331a08d9d6d769l,
wolfSSL 14:167253f4e170 36709 0x579786052682747el },
wolfSSL 14:167253f4e170 36710 0 },
wolfSSL 14:167253f4e170 36711 /* 119 << 88 */
wolfSSL 14:167253f4e170 36712 { { 0x048ba499eb3af9a9l,0x43a8c367d50b82cel,0xedf9e2b21e0724d9l,
wolfSSL 14:167253f4e170 36713 0x3098aab3d607140bl },
wolfSSL 14:167253f4e170 36714 { 0xd1f18f1e5ed49eb9l,0xf9c6bb6ae0bb02a2l,0x204f96aa0cd245ddl,
wolfSSL 14:167253f4e170 36715 0xdaadaf4afb011ed5l },
wolfSSL 14:167253f4e170 36716 0 },
wolfSSL 14:167253f4e170 36717 /* 125 << 88 */
wolfSSL 14:167253f4e170 36718 { { 0xb298ce2de50404b1l,0x04dd38c45bf9b581l,0x229deabdfada51e8l,
wolfSSL 14:167253f4e170 36719 0x74bd233f8788a132l },
wolfSSL 14:167253f4e170 36720 { 0x951ba5ecf03e6c30l,0x9da2f5aa45bf1a41l,0x6bec7fea7e52b860l,
wolfSSL 14:167253f4e170 36721 0x76e3778964b0a9ddl },
wolfSSL 14:167253f4e170 36722 0 },
wolfSSL 14:167253f4e170 36723 },
wolfSSL 14:167253f4e170 36724 {
wolfSSL 14:167253f4e170 36725 /* 0 << 96 */
wolfSSL 14:167253f4e170 36726 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 36727 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 36728 1 },
wolfSSL 14:167253f4e170 36729 /* 1 << 96 */
wolfSSL 14:167253f4e170 36730 { { 0x4fe7ee31b0e63d34l,0xf4600572a9e54fabl,0xc0493334d5e7b5a4l,
wolfSSL 14:167253f4e170 36731 0x8589fb9206d54831l },
wolfSSL 14:167253f4e170 36732 { 0xaa70f5cc6583553al,0x0879094ae25649e5l,0xcc90450710044652l,
wolfSSL 14:167253f4e170 36733 0xebb0696d02541c4fl },
wolfSSL 14:167253f4e170 36734 0 },
wolfSSL 14:167253f4e170 36735 /* 3 << 96 */
wolfSSL 14:167253f4e170 36736 { { 0xb99f0e0399375235l,0x7614c847b9917970l,0xfec93ce9524ec067l,
wolfSSL 14:167253f4e170 36737 0xe40e7bf89b122520l },
wolfSSL 14:167253f4e170 36738 { 0xb5670631ee4c4774l,0x6f03847a3b04914cl,0xc96e9429dc9dd226l,
wolfSSL 14:167253f4e170 36739 0x43489b6c8c57c1f8l },
wolfSSL 14:167253f4e170 36740 0 },
wolfSSL 14:167253f4e170 36741 /* 4 << 96 */
wolfSSL 14:167253f4e170 36742 { { 0x0e299d23fe67ba66l,0x9145076093cf2f34l,0xf45b5ea997fcf913l,
wolfSSL 14:167253f4e170 36743 0x5be008438bd7dddal },
wolfSSL 14:167253f4e170 36744 { 0x358c3e05d53ff04dl,0xbf7ccdc35de91ef7l,0xad684dbfb69ec1a0l,
wolfSSL 14:167253f4e170 36745 0x367e7cf2801fd997l },
wolfSSL 14:167253f4e170 36746 0 },
wolfSSL 14:167253f4e170 36747 /* 5 << 96 */
wolfSSL 14:167253f4e170 36748 { { 0x46ffd227cc2338fbl,0x89ff6fa990e26153l,0xbe570779331a0076l,
wolfSSL 14:167253f4e170 36749 0x43d241c506e1f3afl },
wolfSSL 14:167253f4e170 36750 { 0xfdcdb97dde9b62a3l,0x6a06e984a0ae30eal,0xc9bf16804fbddf7dl,
wolfSSL 14:167253f4e170 36751 0x170471a2d36163c4l },
wolfSSL 14:167253f4e170 36752 0 },
wolfSSL 14:167253f4e170 36753 /* 7 << 96 */
wolfSSL 14:167253f4e170 36754 { { 0x361619e455950cc3l,0xc71d665c56b66bb8l,0xea034b34afac6d84l,
wolfSSL 14:167253f4e170 36755 0xa987f832e5e4c7e3l },
wolfSSL 14:167253f4e170 36756 { 0xa07427727a79a6a7l,0x56e5d017e26d6c23l,0x7e50b97638167e10l,
wolfSSL 14:167253f4e170 36757 0xaa6c81efe88aa84el },
wolfSSL 14:167253f4e170 36758 0 },
wolfSSL 14:167253f4e170 36759 /* 9 << 96 */
wolfSSL 14:167253f4e170 36760 { { 0x473959d74d325bbfl,0x2a61beec8d6114b9l,0x25672a94924be2eel,
wolfSSL 14:167253f4e170 36761 0xa48595dbf2c23d0cl },
wolfSSL 14:167253f4e170 36762 { 0xe476848b6a221838l,0xe743e69a35c1b673l,0x2ab42499d8468503l,
wolfSSL 14:167253f4e170 36763 0x62aa0054e9e90ba7l },
wolfSSL 14:167253f4e170 36764 0 },
wolfSSL 14:167253f4e170 36765 /* 10 << 96 */
wolfSSL 14:167253f4e170 36766 { { 0x358d13f1bc482911l,0x685d1971b7fa7f26l,0x3e67a51d2be1aee4l,
wolfSSL 14:167253f4e170 36767 0xe041850998d114a9l },
wolfSSL 14:167253f4e170 36768 { 0x59639f604e052561l,0x32075c49155d0818l,0x2aa2343b67b64b1cl,
wolfSSL 14:167253f4e170 36769 0x1b445e2967f53e6al },
wolfSSL 14:167253f4e170 36770 0 },
wolfSSL 14:167253f4e170 36771 /* 11 << 96 */
wolfSSL 14:167253f4e170 36772 { { 0xbdfb271773a904e0l,0x7ce1e40b28888d73l,0x2e7e35f6eaa97d1bl,
wolfSSL 14:167253f4e170 36773 0xd061772aa9afa097l },
wolfSSL 14:167253f4e170 36774 { 0x434ac7c47a1f7c59l,0x6e21124ae79b7b9al,0x055acff3bb22ecc7l,
wolfSSL 14:167253f4e170 36775 0x8bfd7ac984c858d3l },
wolfSSL 14:167253f4e170 36776 0 },
wolfSSL 14:167253f4e170 36777 /* 13 << 96 */
wolfSSL 14:167253f4e170 36778 { { 0x2fd57df59f1f68adl,0x5ddcc6dbb06470c8l,0x801b6451a9b47307l,
wolfSSL 14:167253f4e170 36779 0x6b51c8e376551bf4l },
wolfSSL 14:167253f4e170 36780 { 0xef0bd1f7d44e1da9l,0x714bcb1d4d4e600cl,0xc57bb9e40c6540c7l,
wolfSSL 14:167253f4e170 36781 0x71bd1ec2327cc644l },
wolfSSL 14:167253f4e170 36782 0 },
wolfSSL 14:167253f4e170 36783 /* 15 << 96 */
wolfSSL 14:167253f4e170 36784 { { 0x9a52cf7e7f4dd81fl,0xa0132be15e69c05el,0x90dab7472a0f4d72l,
wolfSSL 14:167253f4e170 36785 0xc142f911312d6706l },
wolfSSL 14:167253f4e170 36786 { 0xe8d3631f8261998bl,0xf0f42fae615c1c94l,0x2f4e948caec3fa5dl,
wolfSSL 14:167253f4e170 36787 0x242ae7a8a374101el },
wolfSSL 14:167253f4e170 36788 0 },
wolfSSL 14:167253f4e170 36789 /* 16 << 96 */
wolfSSL 14:167253f4e170 36790 { { 0x0f893a5dc8de610bl,0xe8c515fb67e223cel,0x7774bfa64ead6dc5l,
wolfSSL 14:167253f4e170 36791 0x89d20f95925c728fl },
wolfSSL 14:167253f4e170 36792 { 0x7a1e0966098583cel,0xa2eedb9493f2a7d7l,0x1b2820974c304d4al,
wolfSSL 14:167253f4e170 36793 0x0842e3dac077282dl },
wolfSSL 14:167253f4e170 36794 0 },
wolfSSL 14:167253f4e170 36795 /* 17 << 96 */
wolfSSL 14:167253f4e170 36796 { { 0x1fa878cad088be52l,0x89c2cb07a9e1e656l,0x385bc5c3219d62dbl,
wolfSSL 14:167253f4e170 36797 0xd82b676b5fda2752l },
wolfSSL 14:167253f4e170 36798 { 0x2449dc9ee304eafcl,0x1e9e7991632f4ea2l,0x3036e061cdd5e0b9l,
wolfSSL 14:167253f4e170 36799 0x75a6f6ff830825bcl },
wolfSSL 14:167253f4e170 36800 0 },
wolfSSL 14:167253f4e170 36801 /* 19 << 96 */
wolfSSL 14:167253f4e170 36802 { { 0xb10fcddc449dedb4l,0x2c890042d1244acfl,0x9b3072cac7fc7017l,
wolfSSL 14:167253f4e170 36803 0x1acda6859ce8063fl },
wolfSSL 14:167253f4e170 36804 { 0xd243313c7f51e2f5l,0x52a3f1a4d73d9578l,0xda785b7a64f0ce6el,
wolfSSL 14:167253f4e170 36805 0x2e766315442a4c2dl },
wolfSSL 14:167253f4e170 36806 0 },
wolfSSL 14:167253f4e170 36807 /* 21 << 96 */
wolfSSL 14:167253f4e170 36808 { { 0x94f9b004151f111al,0xc7a5035b07dbc5fal,0x53958ea7609e49d7l,
wolfSSL 14:167253f4e170 36809 0x0526b4d79013f4c0l },
wolfSSL 14:167253f4e170 36810 { 0x66de5ebb593e2fbdl,0x6e7cf8b44c2e0c37l,0x6f72fc8b8c983e78l,
wolfSSL 14:167253f4e170 36811 0x6fab9b632348f9d7l },
wolfSSL 14:167253f4e170 36812 0 },
wolfSSL 14:167253f4e170 36813 /* 23 << 96 */
wolfSSL 14:167253f4e170 36814 { { 0xc748a3526a3d8468l,0x3fab479927e38032l,0x91ad3629fa430ce7l,
wolfSSL 14:167253f4e170 36815 0xc5af0b2c71614c44l },
wolfSSL 14:167253f4e170 36816 { 0xcede3fa50c211611l,0x6e6889ba02338083l,0xee0a195977f0fe32l,
wolfSSL 14:167253f4e170 36817 0x01ea905d0f4bbc5al },
wolfSSL 14:167253f4e170 36818 0 },
wolfSSL 14:167253f4e170 36819 /* 25 << 96 */
wolfSSL 14:167253f4e170 36820 { { 0x12cfb25e8193db48l,0xddb4ae633bea708cl,0xdaae102ef181f821l,
wolfSSL 14:167253f4e170 36821 0x9d9d923024a089d9l },
wolfSSL 14:167253f4e170 36822 { 0x71c4122da0876aeal,0x1a63ea3bbbe19c09l,0x3b898076016f8d0cl,
wolfSSL 14:167253f4e170 36823 0xa5cccc5daea6b713l },
wolfSSL 14:167253f4e170 36824 0 },
wolfSSL 14:167253f4e170 36825 /* 27 << 96 */
wolfSSL 14:167253f4e170 36826 { { 0xc3f22baf4a8e2f61l,0x77d29ede176da6a6l,0x40a55f211607da63l,
wolfSSL 14:167253f4e170 36827 0x858b38561452e391l },
wolfSSL 14:167253f4e170 36828 { 0x0dd3c267fe1b3c56l,0x66c04bdd7d55227al,0xfbd2fe55e6404e09l,
wolfSSL 14:167253f4e170 36829 0x5981cf49ea9cfcbcl },
wolfSSL 14:167253f4e170 36830 0 },
wolfSSL 14:167253f4e170 36831 /* 28 << 96 */
wolfSSL 14:167253f4e170 36832 { { 0xe549237f78890732l,0xc443bef953fcb4d9l,0x9884d8a6eb3480d6l,
wolfSSL 14:167253f4e170 36833 0x8a35b6a13048b186l },
wolfSSL 14:167253f4e170 36834 { 0xb4e4471665e9a90al,0x45bf380d653006c0l,0x8f3f820d4fe9ae3bl,
wolfSSL 14:167253f4e170 36835 0x244a35a0979a3b71l },
wolfSSL 14:167253f4e170 36836 0 },
wolfSSL 14:167253f4e170 36837 /* 29 << 96 */
wolfSSL 14:167253f4e170 36838 { { 0xae46a902aea870afl,0xa9b9fcf57cbedc99l,0x74f2ca3f79b7e793l,
wolfSSL 14:167253f4e170 36839 0xadb8f2231dbeeb28l },
wolfSSL 14:167253f4e170 36840 { 0x6302060e6764df85l,0x363320d257ebd554l,0xd9fd573e798d22e1l,
wolfSSL 14:167253f4e170 36841 0x285f85f5ebb67dedl },
wolfSSL 14:167253f4e170 36842 0 },
wolfSSL 14:167253f4e170 36843 /* 31 << 96 */
wolfSSL 14:167253f4e170 36844 { { 0xd86b329211caa2b5l,0x2a26258e39337bd1l,0x4dc5a9b579c8c291l,
wolfSSL 14:167253f4e170 36845 0x16443d87741942e6l },
wolfSSL 14:167253f4e170 36846 { 0x6bc9a2f8f811400cl,0x819c69359eeb4e0el,0xe1be7273ce0c214bl,
wolfSSL 14:167253f4e170 36847 0x429afb8184b61581l },
wolfSSL 14:167253f4e170 36848 0 },
wolfSSL 14:167253f4e170 36849 /* 33 << 96 */
wolfSSL 14:167253f4e170 36850 { { 0xb37e188756af5812l,0xd662bdb485aff83el,0xc89742d07bc63de7l,
wolfSSL 14:167253f4e170 36851 0xea103f9d0279f487l },
wolfSSL 14:167253f4e170 36852 { 0x4d26916a3a6cc639l,0x4eea3a3c7c743b94l,0x6a3e0dc7007376d9l,
wolfSSL 14:167253f4e170 36853 0xdb6ef3cf573f904el },
wolfSSL 14:167253f4e170 36854 0 },
wolfSSL 14:167253f4e170 36855 /* 34 << 96 */
wolfSSL 14:167253f4e170 36856 { { 0x9b1058ecb0b0fb53l,0x8955f5f75f8a9a9fl,0xf5f92e7f9f6f9e6dl,
wolfSSL 14:167253f4e170 36857 0x03f5df6c50ec198bl },
wolfSSL 14:167253f4e170 36858 { 0x6c8741f2b8aedbcel,0x8f4e60cfed8018f7l,0x6ca5297c9fa01f89l,
wolfSSL 14:167253f4e170 36859 0x8591cf7a864995dbl },
wolfSSL 14:167253f4e170 36860 0 },
wolfSSL 14:167253f4e170 36861 /* 35 << 96 */
wolfSSL 14:167253f4e170 36862 { { 0xa126147eb0a11b9bl,0xeedcc9e198900232l,0x15d94f8c2bead119l,
wolfSSL 14:167253f4e170 36863 0x042423cfefc38691l },
wolfSSL 14:167253f4e170 36864 { 0x6ce86fbe77165d91l,0xa07732126b3fd565l,0x8cdc409150b1f9c7l,
wolfSSL 14:167253f4e170 36865 0x7f5ad1af064595acl },
wolfSSL 14:167253f4e170 36866 0 },
wolfSSL 14:167253f4e170 36867 /* 36 << 96 */
wolfSSL 14:167253f4e170 36868 { { 0xed374a6658926dddl,0x138b2d49908015b8l,0x886c6579de1f7ab8l,
wolfSSL 14:167253f4e170 36869 0x888b9aa0c3020b7al },
wolfSSL 14:167253f4e170 36870 { 0xd3ec034e3a96e355l,0xba65b0b8f30fbe9al,0x064c8e50ff21367al,
wolfSSL 14:167253f4e170 36871 0x1f508ea40b04b46el },
wolfSSL 14:167253f4e170 36872 0 },
wolfSSL 14:167253f4e170 36873 /* 37 << 96 */
wolfSSL 14:167253f4e170 36874 { { 0x73644c158f8402a0l,0x0d9b5354f4730eb9l,0x78542af4e94cc278l,
wolfSSL 14:167253f4e170 36875 0xf4dbede3e395f33al },
wolfSSL 14:167253f4e170 36876 { 0x8fe8cbc590c70b00l,0x9c35bb2d7db197f6l,0x229b4973e6599746l,
wolfSSL 14:167253f4e170 36877 0x0817d04e1a84b986l },
wolfSSL 14:167253f4e170 36878 0 },
wolfSSL 14:167253f4e170 36879 /* 39 << 96 */
wolfSSL 14:167253f4e170 36880 { { 0x8ffe34e95ecd09b3l,0x6a7c3de4153b7cael,0xf02713e4a81044b7l,
wolfSSL 14:167253f4e170 36881 0x85ca6158c70545c8l },
wolfSSL 14:167253f4e170 36882 { 0xd3ff392845d88bffl,0x3a251a07f0bafe89l,0x61290e1287cea7f4l,
wolfSSL 14:167253f4e170 36883 0xa360a17efa4808adl },
wolfSSL 14:167253f4e170 36884 0 },
wolfSSL 14:167253f4e170 36885 /* 40 << 96 */
wolfSSL 14:167253f4e170 36886 { { 0x98561a49747c866cl,0xbbb1e5fe0518a062l,0x20ff4e8becdc3608l,
wolfSSL 14:167253f4e170 36887 0x7f55cded20184027l },
wolfSSL 14:167253f4e170 36888 { 0x8d73ec95f38c85f0l,0x5b589fdf8bc3b8c3l,0xbe95dd980f12b66fl,
wolfSSL 14:167253f4e170 36889 0xf5bd1a090e338e01l },
wolfSSL 14:167253f4e170 36890 0 },
wolfSSL 14:167253f4e170 36891 /* 41 << 96 */
wolfSSL 14:167253f4e170 36892 { { 0x2d1751083edf4e2bl,0x30e6e90fa29c10d0l,0xfee1eb14c9c6ccd2l,
wolfSSL 14:167253f4e170 36893 0x244670c756a81453l },
wolfSSL 14:167253f4e170 36894 { 0x90b33eefc5185c22l,0xd77ae4b63db82d28l,0xce5ee034f228f940l,
wolfSSL 14:167253f4e170 36895 0x5d7660847bb47be5l },
wolfSSL 14:167253f4e170 36896 0 },
wolfSSL 14:167253f4e170 36897 /* 43 << 96 */
wolfSSL 14:167253f4e170 36898 { { 0x88b7eec499b9a8c6l,0x56048d9e14e8ef0cl,0xa18f93215c89cf78l,
wolfSSL 14:167253f4e170 36899 0xbd2087616d327e66l },
wolfSSL 14:167253f4e170 36900 { 0x5b187225d9e53e27l,0xa57ca6c7bf4d0317l,0x187731d2e9557736l,
wolfSSL 14:167253f4e170 36901 0xd4ce2f78a874982el },
wolfSSL 14:167253f4e170 36902 0 },
wolfSSL 14:167253f4e170 36903 /* 44 << 96 */
wolfSSL 14:167253f4e170 36904 { { 0x65163ae55e915918l,0x6158d6d986f8a46bl,0x8466b538eeebf99cl,
wolfSSL 14:167253f4e170 36905 0xca8761f6bca477efl },
wolfSSL 14:167253f4e170 36906 { 0xaf3449c29ebbc601l,0xef3b0f41e0c3ae2fl,0xaa6c577d5de63752l,
wolfSSL 14:167253f4e170 36907 0xe916660164682a51l },
wolfSSL 14:167253f4e170 36908 0 },
wolfSSL 14:167253f4e170 36909 /* 45 << 96 */
wolfSSL 14:167253f4e170 36910 { { 0xf5b602bb29f47deal,0x42853c9659ddd679l,0x5c25be4041d7c001l,
wolfSSL 14:167253f4e170 36911 0x8e069399d4a3b307l },
wolfSSL 14:167253f4e170 36912 { 0x1782152e736ce467l,0x2e264109c9cb4f08l,0xf900cb11ab124698l,
wolfSSL 14:167253f4e170 36913 0x1bbed1d02d6e05b1l },
wolfSSL 14:167253f4e170 36914 0 },
wolfSSL 14:167253f4e170 36915 /* 46 << 96 */
wolfSSL 14:167253f4e170 36916 { { 0x9cc3fedc7da08b1fl,0x0f44949361d5ed38l,0xc8cbc4209b991b6bl,
wolfSSL 14:167253f4e170 36917 0xee62a342891c42e1l },
wolfSSL 14:167253f4e170 36918 { 0x11c496bb1a179139l,0x94ece2892eac4d8el,0x35f303a5a98d5570l,
wolfSSL 14:167253f4e170 36919 0x69d4340514a31552l },
wolfSSL 14:167253f4e170 36920 0 },
wolfSSL 14:167253f4e170 36921 /* 47 << 96 */
wolfSSL 14:167253f4e170 36922 { { 0x29d45e50892dfcbal,0x653e613e5c30cee3l,0x7b8c1ae61868a348l,
wolfSSL 14:167253f4e170 36923 0x40ab51654f2c612al },
wolfSSL 14:167253f4e170 36924 { 0x56e977f9891cdc8cl,0xee1ca12a34ca7cd1l,0xa4e283ee17b5ddf8l,
wolfSSL 14:167253f4e170 36925 0x4e36f2fb6f536205l },
wolfSSL 14:167253f4e170 36926 0 },
wolfSSL 14:167253f4e170 36927 /* 48 << 96 */
wolfSSL 14:167253f4e170 36928 { { 0x5a3097befc15aa1el,0x40d12548b54b0745l,0x5bad4706519a5f12l,
wolfSSL 14:167253f4e170 36929 0xed03f717a439dee6l },
wolfSSL 14:167253f4e170 36930 { 0x0794bb6c4a02c499l,0xf725083dcffe71d2l,0x2cad75190f3adcafl,
wolfSSL 14:167253f4e170 36931 0x7f68ea1c43729310l },
wolfSSL 14:167253f4e170 36932 0 },
wolfSSL 14:167253f4e170 36933 /* 49 << 96 */
wolfSSL 14:167253f4e170 36934 { { 0xa3834d85e89ea13fl,0x2ca00f942db803bbl,0x0f378681400ed3dal,
wolfSSL 14:167253f4e170 36935 0x1028af6b54854da3l },
wolfSSL 14:167253f4e170 36936 { 0x3928c2da06400c7fl,0x21119785d82aac92l,0x06618c17724e4af0l,
wolfSSL 14:167253f4e170 36937 0x22b42b161470736bl },
wolfSSL 14:167253f4e170 36938 0 },
wolfSSL 14:167253f4e170 36939 /* 51 << 96 */
wolfSSL 14:167253f4e170 36940 { { 0x7d0cfd48f7f2ac65l,0x46e1ac705f641b60l,0x0ab9566a0fcf0137l,
wolfSSL 14:167253f4e170 36941 0xbd4380e0db460fb8l },
wolfSSL 14:167253f4e170 36942 { 0x4550efbf6db99b55l,0x33846e669764b744l,0xacffa0cae34ca007l,
wolfSSL 14:167253f4e170 36943 0xce642d6a077e646cl },
wolfSSL 14:167253f4e170 36944 0 },
wolfSSL 14:167253f4e170 36945 /* 52 << 96 */
wolfSSL 14:167253f4e170 36946 { { 0xe747c8c7b7ffd977l,0xec104c3580761a22l,0x8395ebaf5a3ffb83l,
wolfSSL 14:167253f4e170 36947 0xfb3261f4e4b63db7l },
wolfSSL 14:167253f4e170 36948 { 0x53544960d883e544l,0x13520d708cc2eeb8l,0x08f6337bd3d65f99l,
wolfSSL 14:167253f4e170 36949 0x83997db2781cf95bl },
wolfSSL 14:167253f4e170 36950 0 },
wolfSSL 14:167253f4e170 36951 /* 53 << 96 */
wolfSSL 14:167253f4e170 36952 { { 0xd89112c47d8037a3l,0xcba48ad3464c2025l,0x3afea8399814a09dl,
wolfSSL 14:167253f4e170 36953 0x69e52260269030b5l },
wolfSSL 14:167253f4e170 36954 { 0x5b7067365c674805l,0x8c3fd33d87343f56l,0xc572c858b1c61edfl,
wolfSSL 14:167253f4e170 36955 0x43d8f4ded06749cbl },
wolfSSL 14:167253f4e170 36956 0 },
wolfSSL 14:167253f4e170 36957 /* 55 << 96 */
wolfSSL 14:167253f4e170 36958 { { 0x04da1f06b4066003l,0xf7d4e52f372749e8l,0x56cd667114b38747l,
wolfSSL 14:167253f4e170 36959 0x1943a22a22eb6d9el },
wolfSSL 14:167253f4e170 36960 { 0xc2c5391990714b0al,0xb6e3abb7d13cf3ael,0xfcd8d671676115cbl,
wolfSSL 14:167253f4e170 36961 0x178ce1a0c06a0d3al },
wolfSSL 14:167253f4e170 36962 0 },
wolfSSL 14:167253f4e170 36963 /* 57 << 96 */
wolfSSL 14:167253f4e170 36964 { { 0x94485b36913508f8l,0x92f87fe36de83b42l,0xedd476f0ed77e666l,
wolfSSL 14:167253f4e170 36965 0xee90fbc68da2cf53l },
wolfSSL 14:167253f4e170 36966 { 0x6f4afc53fc6cf3d9l,0x231bceb9f21f6ecfl,0x6504a11d494c6e9cl,
wolfSSL 14:167253f4e170 36967 0xd3728f032c211461l },
wolfSSL 14:167253f4e170 36968 0 },
wolfSSL 14:167253f4e170 36969 /* 59 << 96 */
wolfSSL 14:167253f4e170 36970 { { 0x09a9b93799562ca2l,0xb7d5c5cf6a5a5aa8l,0x52f5d7b9987b219dl,
wolfSSL 14:167253f4e170 36971 0x33849f9ec38014d4l },
wolfSSL 14:167253f4e170 36972 { 0x299adaf628f23880l,0x738ecc8874875588l,0x39d707adca2af665l,
wolfSSL 14:167253f4e170 36973 0xc8c11f688f4c5f73l },
wolfSSL 14:167253f4e170 36974 0 },
wolfSSL 14:167253f4e170 36975 /* 60 << 96 */
wolfSSL 14:167253f4e170 36976 { { 0x68e4f15e9afdfb3cl,0x49a561435bdfb6dfl,0xa9bc1bd45f823d97l,
wolfSSL 14:167253f4e170 36977 0xbceb5970ea111c2al },
wolfSSL 14:167253f4e170 36978 { 0x366b455fb269bbc4l,0x7cd85e1ee9bc5d62l,0xc743c41c4f18b086l,
wolfSSL 14:167253f4e170 36979 0xa4b4099095294fb9l },
wolfSSL 14:167253f4e170 36980 0 },
wolfSSL 14:167253f4e170 36981 /* 61 << 96 */
wolfSSL 14:167253f4e170 36982 { { 0x2ae046d66aa34757l,0x34db1addaa6d7e9dl,0x2b4b7e017ccf432bl,
wolfSSL 14:167253f4e170 36983 0xfbe0bfa590d319c6l },
wolfSSL 14:167253f4e170 36984 { 0xfb2981687ec7a7f2l,0x346cc46004f5132el,0x782b2e53b40aceddl,
wolfSSL 14:167253f4e170 36985 0x402e1d64e3f0b8b9l },
wolfSSL 14:167253f4e170 36986 0 },
wolfSSL 14:167253f4e170 36987 /* 63 << 96 */
wolfSSL 14:167253f4e170 36988 { { 0x2aa3b21d25a56088l,0xae6ee57543d08962l,0x669e42bff1e22297l,
wolfSSL 14:167253f4e170 36989 0x7b4c635732e3a47al },
wolfSSL 14:167253f4e170 36990 { 0x22b16260ea464a25l,0xad8ca59072d5cd7al,0x7c244266104eb96al,
wolfSSL 14:167253f4e170 36991 0x1def95e28e7c11d2l },
wolfSSL 14:167253f4e170 36992 0 },
wolfSSL 14:167253f4e170 36993 /* 64 << 96 */
wolfSSL 14:167253f4e170 36994 { { 0x9c7c581d26ee8382l,0xcf17dcc5359d638el,0xee8273abb728ae3dl,
wolfSSL 14:167253f4e170 36995 0x1d112926f821f047l },
wolfSSL 14:167253f4e170 36996 { 0x1149847750491a74l,0x687fa761fde0dfb9l,0x2c2580227ea435abl,
wolfSSL 14:167253f4e170 36997 0x6b8bdb9491ce7e3fl },
wolfSSL 14:167253f4e170 36998 0 },
wolfSSL 14:167253f4e170 36999 /* 65 << 96 */
wolfSSL 14:167253f4e170 37000 { { 0x1f04524cdc27e1f7l,0xa0c74f61572eab14l,0xdd5d0cfced272074l,
wolfSSL 14:167253f4e170 37001 0x95533c1d5bfe4f65l },
wolfSSL 14:167253f4e170 37002 { 0x3039d57ecce817cal,0x029967d73b822082l,0x9fca43866c4a10d3l,
wolfSSL 14:167253f4e170 37003 0xf8b2a7f0bb4968ebl },
wolfSSL 14:167253f4e170 37004 0 },
wolfSSL 14:167253f4e170 37005 /* 71 << 96 */
wolfSSL 14:167253f4e170 37006 { { 0x933cd6dcbfbf6407l,0xd08f21504be673f8l,0x0e1c4d0db1140a2el,
wolfSSL 14:167253f4e170 37007 0x0502a092431b270al },
wolfSSL 14:167253f4e170 37008 { 0x5d99f9508768c00al,0xda3ce5079b3ff3c7l,0x1c648b75031c11abl,
wolfSSL 14:167253f4e170 37009 0x5e3de47bf2776305l },
wolfSSL 14:167253f4e170 37010 0 },
wolfSSL 14:167253f4e170 37011 /* 77 << 96 */
wolfSSL 14:167253f4e170 37012 { { 0xe22af9274d2b9de4l,0xf3690f55a69609ecl,0x20260a6e453fbe18l,
wolfSSL 14:167253f4e170 37013 0x8edcb46b42d0b085l },
wolfSSL 14:167253f4e170 37014 { 0xd4ef250b7d9c7f58l,0x5e8578dfc83c3433l,0x9751d9b9e46e320al,
wolfSSL 14:167253f4e170 37015 0xb02bd03cf3c58af6l },
wolfSSL 14:167253f4e170 37016 0 },
wolfSSL 14:167253f4e170 37017 /* 83 << 96 */
wolfSSL 14:167253f4e170 37018 { { 0x0ab299ede1b4d1ccl,0x22e7301cec4d18d2l,0xf2380f2a7b86d4ffl,
wolfSSL 14:167253f4e170 37019 0xca19ef9e40753713l },
wolfSSL 14:167253f4e170 37020 { 0x52bb0d24678c38a1l,0xcc9d6fd499001c02l,0xa2dd6b00bc5876e4l,
wolfSSL 14:167253f4e170 37021 0xfe04b402409fe2b3l },
wolfSSL 14:167253f4e170 37022 0 },
wolfSSL 14:167253f4e170 37023 /* 89 << 96 */
wolfSSL 14:167253f4e170 37024 { { 0x7db986b1ff69f8d3l,0x648865e59d6266b9l,0x7ccfe96183f7dae5l,
wolfSSL 14:167253f4e170 37025 0x0f59a8bd6828379bl },
wolfSSL 14:167253f4e170 37026 { 0xad97e5ef0ac7c4e8l,0xa75914be784e9c18l,0x053e015bb18c1bb8l,
wolfSSL 14:167253f4e170 37027 0x18f6cefcb347043el },
wolfSSL 14:167253f4e170 37028 0 },
wolfSSL 14:167253f4e170 37029 /* 95 << 96 */
wolfSSL 14:167253f4e170 37030 { { 0xb4d641bdf257c38al,0xadcea4d0c1372574l,0x7f8d20be71c8f0d0l,
wolfSSL 14:167253f4e170 37031 0x14a1d24c41dc6344l },
wolfSSL 14:167253f4e170 37032 { 0xe446054e41f35526l,0x4664213823c952ddl,0xfbde483401f6b0acl,
wolfSSL 14:167253f4e170 37033 0xc89eee66d75b6318l },
wolfSSL 14:167253f4e170 37034 0 },
wolfSSL 14:167253f4e170 37035 /* 101 << 96 */
wolfSSL 14:167253f4e170 37036 { { 0x700242937a087392l,0xd42bd3aad5da04del,0xee64cb5b1f803414l,
wolfSSL 14:167253f4e170 37037 0xd6341ecbbab52988l },
wolfSSL 14:167253f4e170 37038 { 0x7ad522f343170a74l,0x5fba22536d61d9del,0x230304c1e845a6e5l,
wolfSSL 14:167253f4e170 37039 0xd69feabfbc9e326bl },
wolfSSL 14:167253f4e170 37040 0 },
wolfSSL 14:167253f4e170 37041 /* 107 << 96 */
wolfSSL 14:167253f4e170 37042 { { 0xef7e49412e8a11d7l,0x4cb8963662c8bae1l,0xecc741198aad5816l,
wolfSSL 14:167253f4e170 37043 0x13490782c7af5175l },
wolfSSL 14:167253f4e170 37044 { 0x10c701f73e91a604l,0xcb8c6c7124cc30c1l,0xce0d479c071eb382l,
wolfSSL 14:167253f4e170 37045 0xa3dc71fb058087d4l },
wolfSSL 14:167253f4e170 37046 0 },
wolfSSL 14:167253f4e170 37047 /* 113 << 96 */
wolfSSL 14:167253f4e170 37048 { { 0xec368492541eb6d1l,0x567735d6e09a94abl,0xb8039ec172350329l,
wolfSSL 14:167253f4e170 37049 0x3bd83a8f4894ddafl },
wolfSSL 14:167253f4e170 37050 { 0x740ef2a39c07063dl,0xba25e72277da7b59l,0xb09e248e3bf42e82l,
wolfSSL 14:167253f4e170 37051 0x7ff36da0b017d037l },
wolfSSL 14:167253f4e170 37052 0 },
wolfSSL 14:167253f4e170 37053 /* 116 << 96 */
wolfSSL 14:167253f4e170 37054 { { 0xca80416651b8d9a3l,0x42531bc90ffb0db1l,0x72ce4718aa82e7cel,
wolfSSL 14:167253f4e170 37055 0x6e199913df574741l },
wolfSSL 14:167253f4e170 37056 { 0xd5f1b13dd5d36946l,0x8255dc65f68f0194l,0xdc9df4cd8710d230l,
wolfSSL 14:167253f4e170 37057 0x3453c20f138c1988l },
wolfSSL 14:167253f4e170 37058 0 },
wolfSSL 14:167253f4e170 37059 /* 119 << 96 */
wolfSSL 14:167253f4e170 37060 { { 0x913f23b9ed08ac04l,0x18e336643590d098l,0xd3f72934e67536dcl,
wolfSSL 14:167253f4e170 37061 0xf949a757ec7ecde9l },
wolfSSL 14:167253f4e170 37062 { 0x37fc6583cf9cbd37l,0xcbe62cc043b1228el,0x777124948a743274l,
wolfSSL 14:167253f4e170 37063 0x3ea3668c716ce6f1l },
wolfSSL 14:167253f4e170 37064 0 },
wolfSSL 14:167253f4e170 37065 /* 125 << 96 */
wolfSSL 14:167253f4e170 37066 { { 0xc89ce010a90d375bl,0x39ac669340503fe3l,0x9036f782d33ecb0el,
wolfSSL 14:167253f4e170 37067 0x5190656841fdc7d1l },
wolfSSL 14:167253f4e170 37068 { 0xbefd136e917d94cdl,0x05fea2f22a511b24l,0x80e62d76f9076e0cl,
wolfSSL 14:167253f4e170 37069 0x8c57635e418ba653l },
wolfSSL 14:167253f4e170 37070 0 },
wolfSSL 14:167253f4e170 37071 },
wolfSSL 14:167253f4e170 37072 {
wolfSSL 14:167253f4e170 37073 /* 0 << 104 */
wolfSSL 14:167253f4e170 37074 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 37075 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 37076 1 },
wolfSSL 14:167253f4e170 37077 /* 1 << 104 */
wolfSSL 14:167253f4e170 37078 { { 0x20d3c982cf7d62d2l,0x1f36e29d23ba8150l,0x48ae0bf092763f9el,
wolfSSL 14:167253f4e170 37079 0x7a527e6b1d3a7007l },
wolfSSL 14:167253f4e170 37080 { 0xb4a89097581a85e3l,0x1f1a520fdc158be5l,0xf98db37d167d726el,
wolfSSL 14:167253f4e170 37081 0x8802786e1113e862l },
wolfSSL 14:167253f4e170 37082 0 },
wolfSSL 14:167253f4e170 37083 /* 3 << 104 */
wolfSSL 14:167253f4e170 37084 { { 0xf6e894d1f4c6b6ecl,0x526b082718b3cd9bl,0x73f952a812117fbfl,
wolfSSL 14:167253f4e170 37085 0x2be864b011945bf5l },
wolfSSL 14:167253f4e170 37086 { 0x86f18ea542099b64l,0x2770b28a07548ce2l,0x97390f28295c1c9cl,
wolfSSL 14:167253f4e170 37087 0x672e6a43cb5206c3l },
wolfSSL 14:167253f4e170 37088 0 },
wolfSSL 14:167253f4e170 37089 /* 4 << 104 */
wolfSSL 14:167253f4e170 37090 { { 0xc37c7dd0c55c4496l,0xa6a9635725bbabd2l,0x5b7e63f2add7f363l,
wolfSSL 14:167253f4e170 37091 0x9dce37822e73f1dfl },
wolfSSL 14:167253f4e170 37092 { 0xe1e5a16ab2b91f71l,0xe44898235ba0163cl,0xf2759c32f6e515adl,
wolfSSL 14:167253f4e170 37093 0xa5e2f1f88615eecfl },
wolfSSL 14:167253f4e170 37094 0 },
wolfSSL 14:167253f4e170 37095 /* 5 << 104 */
wolfSSL 14:167253f4e170 37096 { { 0xcacce2c847c64367l,0x6a496b9f45af4ec0l,0x2a0836f36034042cl,
wolfSSL 14:167253f4e170 37097 0x14a1f3900b6c62eal },
wolfSSL 14:167253f4e170 37098 { 0xe7fa93633ef1f540l,0xd323b30a72a76d93l,0xffeec8b50feae451l,
wolfSSL 14:167253f4e170 37099 0x4eafc172bd04ef87l },
wolfSSL 14:167253f4e170 37100 0 },
wolfSSL 14:167253f4e170 37101 /* 7 << 104 */
wolfSSL 14:167253f4e170 37102 { { 0xe4435a51b3e59b89l,0x136139554133a1c9l,0x87f46973440bee59l,
wolfSSL 14:167253f4e170 37103 0x714710f800c401e4l },
wolfSSL 14:167253f4e170 37104 { 0xc0cf4bced6c446c9l,0xe0aa7fd66c4d5368l,0xde5d811afc68fc37l,
wolfSSL 14:167253f4e170 37105 0x61febd72b7c2a057l },
wolfSSL 14:167253f4e170 37106 0 },
wolfSSL 14:167253f4e170 37107 /* 9 << 104 */
wolfSSL 14:167253f4e170 37108 { { 0x27375fe665f837e2l,0x93f8c68bd882179fl,0x584feadc59b16187l,
wolfSSL 14:167253f4e170 37109 0xe5b50be9483bc162l },
wolfSSL 14:167253f4e170 37110 { 0x7ad9d6f1a2776625l,0xe9d1008004ff457bl,0x5b56d322677618a6l,
wolfSSL 14:167253f4e170 37111 0x036694eae3e68673l },
wolfSSL 14:167253f4e170 37112 0 },
wolfSSL 14:167253f4e170 37113 /* 10 << 104 */
wolfSSL 14:167253f4e170 37114 { { 0x6ca4f87e822e37bel,0x73f237b4253bda4el,0xf747f3a241190aebl,
wolfSSL 14:167253f4e170 37115 0xf06fa36f804cf284l },
wolfSSL 14:167253f4e170 37116 { 0x0a6bbb6efc621c12l,0x5d624b6440b80ec6l,0x4b0724257ba556f3l,
wolfSSL 14:167253f4e170 37117 0x7fa0c3543e2d20a8l },
wolfSSL 14:167253f4e170 37118 0 },
wolfSSL 14:167253f4e170 37119 /* 11 << 104 */
wolfSSL 14:167253f4e170 37120 { { 0x6feaffc51d8a4fd1l,0x59663b205f1ad208l,0xefc93cef24acb46al,
wolfSSL 14:167253f4e170 37121 0x54929de05967118cl },
wolfSSL 14:167253f4e170 37122 { 0x885708009acffb1cl,0x492bbf2b145639ecl,0x71f495a638f0018el,
wolfSSL 14:167253f4e170 37123 0xe24365dbc2792847l },
wolfSSL 14:167253f4e170 37124 0 },
wolfSSL 14:167253f4e170 37125 /* 13 << 104 */
wolfSSL 14:167253f4e170 37126 { { 0x4bedae86a6f29002l,0x7abedb56e034457al,0x8bf3eec6179bff2al,
wolfSSL 14:167253f4e170 37127 0x9d626d57390f4e6bl },
wolfSSL 14:167253f4e170 37128 { 0x653fe0e914dd6ea3l,0x7483715989bd6d08l,0x85fb05b4ebd9b03dl,
wolfSSL 14:167253f4e170 37129 0x7dc3f2214a768bbcl },
wolfSSL 14:167253f4e170 37130 0 },
wolfSSL 14:167253f4e170 37131 /* 15 << 104 */
wolfSSL 14:167253f4e170 37132 { { 0xaacc63f132b0ed8fl,0x041237242bafefd2l,0x0df9a7987e2d2a13l,
wolfSSL 14:167253f4e170 37133 0x09bd13cf9c27591fl },
wolfSSL 14:167253f4e170 37134 { 0xaa5f5e476e1afb50l,0xcd146a42b66eb646l,0x3f07561d1442ec3cl,
wolfSSL 14:167253f4e170 37135 0x7e5471738ae8ec47l },
wolfSSL 14:167253f4e170 37136 0 },
wolfSSL 14:167253f4e170 37137 /* 16 << 104 */
wolfSSL 14:167253f4e170 37138 { { 0x8de2b7bc453cadd6l,0x203900a7bc0bc1f8l,0xbcd86e47a6abd3afl,
wolfSSL 14:167253f4e170 37139 0x911cac128502effbl },
wolfSSL 14:167253f4e170 37140 { 0x2d550242ec965469l,0x0e9f769229e0017el,0x633f078f65979885l,
wolfSSL 14:167253f4e170 37141 0xfb87d4494cf751efl },
wolfSSL 14:167253f4e170 37142 0 },
wolfSSL 14:167253f4e170 37143 /* 17 << 104 */
wolfSSL 14:167253f4e170 37144 { { 0x2c3e61196c0c6cd5l,0x5e01a49a99f4aac8l,0xfa518fc92ef1565el,
wolfSSL 14:167253f4e170 37145 0xf64ff8714f772366l },
wolfSSL 14:167253f4e170 37146 { 0x52fcbc2b726420d0l,0x30fbf6eb76cfa9eel,0x0bd17139fa618268l,
wolfSSL 14:167253f4e170 37147 0x23ed6e122087535dl },
wolfSSL 14:167253f4e170 37148 0 },
wolfSSL 14:167253f4e170 37149 /* 19 << 104 */
wolfSSL 14:167253f4e170 37150 { { 0x76098e38bb4ccb2cl,0x44e88aeeafbad6d1l,0x5c4d286771928778l,
wolfSSL 14:167253f4e170 37151 0xb1df868138534c94l },
wolfSSL 14:167253f4e170 37152 { 0x67eb8f4d77ce9debl,0x2a86d0461a77c55dl,0xc327181e46a6a3e7l,
wolfSSL 14:167253f4e170 37153 0x68fd611b8710e206l },
wolfSSL 14:167253f4e170 37154 0 },
wolfSSL 14:167253f4e170 37155 /* 21 << 104 */
wolfSSL 14:167253f4e170 37156 { { 0xc093f3fc0c82bdf1l,0x21db25894f76c4a6l,0xf3dcb22ee410a7ael,
wolfSSL 14:167253f4e170 37157 0x1db37114f3c22ffel },
wolfSSL 14:167253f4e170 37158 { 0x9bd0a1fb58f6801dl,0x2cab103bd1b55cc8l,0x2ae1a7f5077ba4b2l,
wolfSSL 14:167253f4e170 37159 0x82b46642ce5ab2b3l },
wolfSSL 14:167253f4e170 37160 0 },
wolfSSL 14:167253f4e170 37161 /* 23 << 104 */
wolfSSL 14:167253f4e170 37162 { { 0xc8477ec52546684cl,0xe3f9387702ff02b5l,0xefb72133ae5d04cdl,
wolfSSL 14:167253f4e170 37163 0x644905c339f10d02l },
wolfSSL 14:167253f4e170 37164 { 0x1750c87c13d8d356l,0x0e9b8063b41e7640l,0xc7ece04f5647b05bl,
wolfSSL 14:167253f4e170 37165 0x89a43da7ca9df9c4l },
wolfSSL 14:167253f4e170 37166 0 },
wolfSSL 14:167253f4e170 37167 /* 25 << 104 */
wolfSSL 14:167253f4e170 37168 { { 0x02610ef1920eb7d9l,0x34bd2fc2e1ea1dc0l,0xcb89da255170b890l,
wolfSSL 14:167253f4e170 37169 0xaaa2796461cff827l },
wolfSSL 14:167253f4e170 37170 { 0xc308c9d37103ed6al,0xe82d63d5a467564al,0x94c897c4a0fa7732l,
wolfSSL 14:167253f4e170 37171 0x75eb52fa64c7aa5fl },
wolfSSL 14:167253f4e170 37172 0 },
wolfSSL 14:167253f4e170 37173 /* 27 << 104 */
wolfSSL 14:167253f4e170 37174 { { 0x52582f9cb985fcb6l,0xaaef8d9f8508a691l,0x494c2c346e505131l,
wolfSSL 14:167253f4e170 37175 0x6d062362d55f30f6l },
wolfSSL 14:167253f4e170 37176 { 0x70059e9122e1e32fl,0x1507c3fe9e51abb0l,0xd8aba31b2b7bda72l,
wolfSSL 14:167253f4e170 37177 0x5acbc5f77b753f13l },
wolfSSL 14:167253f4e170 37178 0 },
wolfSSL 14:167253f4e170 37179 /* 28 << 104 */
wolfSSL 14:167253f4e170 37180 { { 0x15bfb8bf5116f937l,0x7c64a586c1268943l,0x71e25cc38419a2c8l,
wolfSSL 14:167253f4e170 37181 0x9fd6b0c48335f463l },
wolfSSL 14:167253f4e170 37182 { 0x4bf0ba3ce8ee0e0el,0x6f6fba60298c21fal,0x57d57b39ae66bee0l,
wolfSSL 14:167253f4e170 37183 0x292d513022672544l },
wolfSSL 14:167253f4e170 37184 0 },
wolfSSL 14:167253f4e170 37185 /* 29 << 104 */
wolfSSL 14:167253f4e170 37186 { { 0x075dc81953952ff6l,0xd4d9eeda20b7384dl,0x8a81c1bfd2d6c6a5l,
wolfSSL 14:167253f4e170 37187 0x319368a0db050f3bl },
wolfSSL 14:167253f4e170 37188 { 0x91f476de31f1cee2l,0x1b38604500d0e17fl,0xed2081889a820384l,
wolfSSL 14:167253f4e170 37189 0x8d00c411a0f1a637l },
wolfSSL 14:167253f4e170 37190 0 },
wolfSSL 14:167253f4e170 37191 /* 31 << 104 */
wolfSSL 14:167253f4e170 37192 { { 0xb029b687a47fd8f0l,0xa531360696371a05l,0x7b84e88c5ab09140l,
wolfSSL 14:167253f4e170 37193 0x87dad7c85eeb1d14l },
wolfSSL 14:167253f4e170 37194 { 0xef0749b9d0edf6f3l,0x29fc7310e2ef198bl,0x01e05df5069ed399l,
wolfSSL 14:167253f4e170 37195 0x121db4ecdf4e2fcal },
wolfSSL 14:167253f4e170 37196 0 },
wolfSSL 14:167253f4e170 37197 /* 33 << 104 */
wolfSSL 14:167253f4e170 37198 { { 0xe730f3f62826bee0l,0xb9bdbe3fce332a8fl,0x1ecad11766ec00aal,
wolfSSL 14:167253f4e170 37199 0x7503d835617a62d1l },
wolfSSL 14:167253f4e170 37200 { 0x9f34e161b862b139l,0xde42194cf30f6a67l,0x5037a953c1e879fel,
wolfSSL 14:167253f4e170 37201 0x62f321f89bda45dbl },
wolfSSL 14:167253f4e170 37202 0 },
wolfSSL 14:167253f4e170 37203 /* 34 << 104 */
wolfSSL 14:167253f4e170 37204 { { 0xe87771d8033f2876l,0xb0186ec67d5cc3dbl,0x58e8bb803bc9bc1dl,
wolfSSL 14:167253f4e170 37205 0x4d1395cc6f6ef60el },
wolfSSL 14:167253f4e170 37206 { 0xa73c62d6186244a0l,0x918e5f23110a5b53l,0xed4878ca741b7eabl,
wolfSSL 14:167253f4e170 37207 0x3038d71adbe03e51l },
wolfSSL 14:167253f4e170 37208 0 },
wolfSSL 14:167253f4e170 37209 /* 35 << 104 */
wolfSSL 14:167253f4e170 37210 { { 0xcbdba27c40234d55l,0x24352b6cb3eb56c9l,0xae681b85a8e9295al,
wolfSSL 14:167253f4e170 37211 0x2a6cfba1f1171664l },
wolfSSL 14:167253f4e170 37212 { 0x49f045838ca40c3cl,0xe56da25c6eb0f8eal,0x8e62f86fc4341a4el,
wolfSSL 14:167253f4e170 37213 0x7f68bdc64c3f947fl },
wolfSSL 14:167253f4e170 37214 0 },
wolfSSL 14:167253f4e170 37215 /* 36 << 104 */
wolfSSL 14:167253f4e170 37216 { { 0x840204b7a93c3246l,0x21ab6069a0b9b4cdl,0xf5fa6e2bb1d64218l,
wolfSSL 14:167253f4e170 37217 0x1de6ad0ef3d56191l },
wolfSSL 14:167253f4e170 37218 { 0x570aaa88ff1929c7l,0xc6df4c6b640e87b5l,0xde8a74f2c65f0cccl,
wolfSSL 14:167253f4e170 37219 0x8b972fd5e6f6cc01l },
wolfSSL 14:167253f4e170 37220 0 },
wolfSSL 14:167253f4e170 37221 /* 37 << 104 */
wolfSSL 14:167253f4e170 37222 { { 0x862013c00bf22173l,0xfd004c834acd8e23l,0x50e422ca310b1649l,
wolfSSL 14:167253f4e170 37223 0xe6d04de65bbe1854l },
wolfSSL 14:167253f4e170 37224 { 0x651f646385761ef3l,0x3b17d38652cf85c9l,0xbdce284a5f54ecc7l,
wolfSSL 14:167253f4e170 37225 0x72efcd3ec7c2106cl },
wolfSSL 14:167253f4e170 37226 0 },
wolfSSL 14:167253f4e170 37227 /* 39 << 104 */
wolfSSL 14:167253f4e170 37228 { { 0x34324b182ff07e3el,0x29938f38f50bcb71l,0xd0e3d7b977e2bcc3l,
wolfSSL 14:167253f4e170 37229 0x8e78f007c0a3292bl },
wolfSSL 14:167253f4e170 37230 { 0xfa28c530005c2c00l,0x6f9c21d51faa0c5al,0x3df01abd7b9c78f3l,
wolfSSL 14:167253f4e170 37231 0x0e5618c1ccaaeb7el },
wolfSSL 14:167253f4e170 37232 0 },
wolfSSL 14:167253f4e170 37233 /* 40 << 104 */
wolfSSL 14:167253f4e170 37234 { { 0xaa6778fce7560b90l,0xb4073e61a7e824cel,0xff0d693cd642eba8l,
wolfSSL 14:167253f4e170 37235 0x7ce2e57a5dccef38l },
wolfSSL 14:167253f4e170 37236 { 0x89c2c7891df1ad46l,0x83a06922098346fdl,0x2d715d72da2fc177l,
wolfSSL 14:167253f4e170 37237 0x7b6dd71d85b6cf1dl },
wolfSSL 14:167253f4e170 37238 0 },
wolfSSL 14:167253f4e170 37239 /* 41 << 104 */
wolfSSL 14:167253f4e170 37240 { { 0x4601a6a492ad3889l,0xdc8e3364d9a0709fl,0x0c687f2b2c260327l,
wolfSSL 14:167253f4e170 37241 0xe882af62e1a79573l },
wolfSSL 14:167253f4e170 37242 { 0x0cfd00ab945d9017l,0xe6df7505d0e3c188l,0xb389a66dbde825a2l,
wolfSSL 14:167253f4e170 37243 0x126d77b6bcd8e14fl },
wolfSSL 14:167253f4e170 37244 0 },
wolfSSL 14:167253f4e170 37245 /* 43 << 104 */
wolfSSL 14:167253f4e170 37246 { { 0xc800acc7db18ec73l,0x0ebecc78d86e99efl,0x675796cdbd05bc5fl,
wolfSSL 14:167253f4e170 37247 0x254498126afd7c7fl },
wolfSSL 14:167253f4e170 37248 { 0x96293b695969b165l,0xd8514d83c162c8dal,0xe174f8b674a15a5cl,
wolfSSL 14:167253f4e170 37249 0x880d687389a2f73cl },
wolfSSL 14:167253f4e170 37250 0 },
wolfSSL 14:167253f4e170 37251 /* 44 << 104 */
wolfSSL 14:167253f4e170 37252 { { 0x53703a328300129fl,0x1f63766268c43bfdl,0xbcbd191300e54051l,
wolfSSL 14:167253f4e170 37253 0x812fcc627bf5a8c5l },
wolfSSL 14:167253f4e170 37254 { 0x3f969d5f29fb85dal,0x72f4e00a694759e8l,0x426b6e52790726b7l,
wolfSSL 14:167253f4e170 37255 0x617bbc873bdbb209l },
wolfSSL 14:167253f4e170 37256 0 },
wolfSSL 14:167253f4e170 37257 /* 45 << 104 */
wolfSSL 14:167253f4e170 37258 { { 0xf536f07cad1deb2el,0x2a13a11ea87a710el,0x0ce2ccab64f4dc96l,
wolfSSL 14:167253f4e170 37259 0x16178694f5a55464l },
wolfSSL 14:167253f4e170 37260 { 0x1496168da2cb3986l,0xb079a5b9d56a93a9l,0x97005e99092893d3l,
wolfSSL 14:167253f4e170 37261 0x55df5ed6e8fcc6c3l },
wolfSSL 14:167253f4e170 37262 0 },
wolfSSL 14:167253f4e170 37263 /* 46 << 104 */
wolfSSL 14:167253f4e170 37264 { { 0x511f8bb997aee317l,0x812a4096e81536a8l,0x137dfe593ac09b9bl,
wolfSSL 14:167253f4e170 37265 0x0682238fba8c9a7al },
wolfSSL 14:167253f4e170 37266 { 0x7072ead6aeccb4bdl,0x6a34e9aa692ba633l,0xc82eaec26fff9d33l,
wolfSSL 14:167253f4e170 37267 0xfb7535121d4d2b62l },
wolfSSL 14:167253f4e170 37268 0 },
wolfSSL 14:167253f4e170 37269 /* 47 << 104 */
wolfSSL 14:167253f4e170 37270 { { 0x821dca8bbf328b1cl,0x24596ddd5a3d6830l,0x061c4c15635b5b4cl,
wolfSSL 14:167253f4e170 37271 0x0e2b3bef4fa3560al },
wolfSSL 14:167253f4e170 37272 { 0xffced37498906c43l,0x10ebd174e26b3784l,0x7cd068c470039bb5l,
wolfSSL 14:167253f4e170 37273 0xc47dda0f88404e59l },
wolfSSL 14:167253f4e170 37274 0 },
wolfSSL 14:167253f4e170 37275 /* 48 << 104 */
wolfSSL 14:167253f4e170 37276 { { 0x1a0445ff1d7aadabl,0x65d38260d5f6a67cl,0x6e62fb0891cfb26fl,
wolfSSL 14:167253f4e170 37277 0xef1e0fa55c7d91d6l },
wolfSSL 14:167253f4e170 37278 { 0x47e7c7ba33db72cdl,0x017cbc09fa7c74b2l,0x3c931590f50a503cl,
wolfSSL 14:167253f4e170 37279 0xcac54f60616baa42l },
wolfSSL 14:167253f4e170 37280 0 },
wolfSSL 14:167253f4e170 37281 /* 49 << 104 */
wolfSSL 14:167253f4e170 37282 { { 0x7ad7d13569185235l,0x19771949fb69e030l,0xd4de9717bc45fb4fl,
wolfSSL 14:167253f4e170 37283 0x5657b076167e5739l },
wolfSSL 14:167253f4e170 37284 { 0x9503a71fdd27449el,0xfa2fabf73cc01347l,0xf8ecef24c83fb301l,
wolfSSL 14:167253f4e170 37285 0x527012bd5a8d5078l },
wolfSSL 14:167253f4e170 37286 0 },
wolfSSL 14:167253f4e170 37287 /* 51 << 104 */
wolfSSL 14:167253f4e170 37288 { { 0x70a550d7e6fc3a32l,0x8e5875841951fe57l,0x5e6d43eaaab9788bl,
wolfSSL 14:167253f4e170 37289 0x1e406fed80599794l },
wolfSSL 14:167253f4e170 37290 { 0xd8164ace9ed2557cl,0xf9648f30ff593e10l,0x53af2fd80c2ff879l,
wolfSSL 14:167253f4e170 37291 0x6705993cc9409bf4l },
wolfSSL 14:167253f4e170 37292 0 },
wolfSSL 14:167253f4e170 37293 /* 52 << 104 */
wolfSSL 14:167253f4e170 37294 { { 0x04b005b6c6458293l,0x36bb5276e8d10af7l,0xacf2dc138ee617b8l,
wolfSSL 14:167253f4e170 37295 0x470d2d35b004b3d4l },
wolfSSL 14:167253f4e170 37296 { 0x06790832feeb1b77l,0x2bb75c3985657f9cl,0xd70bd4edc0f60004l,
wolfSSL 14:167253f4e170 37297 0xfe797ecc219b018bl },
wolfSSL 14:167253f4e170 37298 0 },
wolfSSL 14:167253f4e170 37299 /* 53 << 104 */
wolfSSL 14:167253f4e170 37300 { { 0xeca02ebf0ef19ceel,0xac691fbe2de090a4l,0x1f3866641b374547l,
wolfSSL 14:167253f4e170 37301 0xbd8018c6a12ee85fl },
wolfSSL 14:167253f4e170 37302 { 0x3e851318ee63e0f1l,0x45b0c37a161987d3l,0x67fe36056eb567c4l,
wolfSSL 14:167253f4e170 37303 0x07c291b563200c5bl },
wolfSSL 14:167253f4e170 37304 0 },
wolfSSL 14:167253f4e170 37305 /* 55 << 104 */
wolfSSL 14:167253f4e170 37306 { { 0xc85535ac1a956a8al,0x7bf4d70bc0ade321l,0xaf2efc48237bc56fl,
wolfSSL 14:167253f4e170 37307 0xf9bfe13e31ba97e7l },
wolfSSL 14:167253f4e170 37308 { 0x2ca5fac4cf7c6c65l,0xc23b14ff03ec3e35l,0xc5109923217bcfd2l,
wolfSSL 14:167253f4e170 37309 0xf02f96a1c58f32f3l },
wolfSSL 14:167253f4e170 37310 0 },
wolfSSL 14:167253f4e170 37311 /* 57 << 104 */
wolfSSL 14:167253f4e170 37312 { { 0x3b1f715b0d0aeff4l,0xbe406d62f0d44536l,0xe413843d567bcb38l,
wolfSSL 14:167253f4e170 37313 0x75b7fb43791e705al },
wolfSSL 14:167253f4e170 37314 { 0x5b831d4b224f85e5l,0x3fea6659d9a35eael,0xd6f8bd097c85480bl,
wolfSSL 14:167253f4e170 37315 0x2a9561a34a959267l },
wolfSSL 14:167253f4e170 37316 0 },
wolfSSL 14:167253f4e170 37317 /* 59 << 104 */
wolfSSL 14:167253f4e170 37318 { { 0x4a96a3535a303c10l,0x9aa3ad71c37c8d7el,0x4e2d077fde52014fl,
wolfSSL 14:167253f4e170 37319 0x4d8bec5df8e3964dl },
wolfSSL 14:167253f4e170 37320 { 0xda88ab94e865e142l,0x52df506d10a88091l,0x9aebff0092fc38a2l,
wolfSSL 14:167253f4e170 37321 0xdfc034395608b0a2l },
wolfSSL 14:167253f4e170 37322 0 },
wolfSSL 14:167253f4e170 37323 /* 60 << 104 */
wolfSSL 14:167253f4e170 37324 { { 0xee23fa819966e7eel,0x64ec4aa805b7920dl,0x2d44462d2d90aad4l,
wolfSSL 14:167253f4e170 37325 0xf44dd195df277ad5l },
wolfSSL 14:167253f4e170 37326 { 0x8d6471f1bb46b6a1l,0x1e65d313fd885090l,0x33a800f513a977b4l,
wolfSSL 14:167253f4e170 37327 0xaca9d7210797e1efl },
wolfSSL 14:167253f4e170 37328 0 },
wolfSSL 14:167253f4e170 37329 /* 61 << 104 */
wolfSSL 14:167253f4e170 37330 { { 0xb1557be2a4ea787el,0x59324973019f667fl,0x262ceced5595367cl,
wolfSSL 14:167253f4e170 37331 0x8a676897ec598640l },
wolfSSL 14:167253f4e170 37332 { 0x2df6cebfc7f06f4fl,0xb255723138078f9al,0xad553c46524a0dd1l,
wolfSSL 14:167253f4e170 37333 0xe20bb20a5a68d62al },
wolfSSL 14:167253f4e170 37334 0 },
wolfSSL 14:167253f4e170 37335 /* 63 << 104 */
wolfSSL 14:167253f4e170 37336 { { 0x6f47e3779589e263l,0x7cb83e3d35106bb8l,0x2642d87bcc632fc2l,
wolfSSL 14:167253f4e170 37337 0x4d18f34d8b77eb36l },
wolfSSL 14:167253f4e170 37338 { 0x7de6bf6d19ca4d1cl,0x438e8f02f7e926aal,0xb539021250ac930al,
wolfSSL 14:167253f4e170 37339 0xe34ddfc15b219a9fl },
wolfSSL 14:167253f4e170 37340 0 },
wolfSSL 14:167253f4e170 37341 /* 64 << 104 */
wolfSSL 14:167253f4e170 37342 { { 0x98857ceb1bf4581cl,0xe635e186aca7b166l,0x278ddd22659722acl,
wolfSSL 14:167253f4e170 37343 0xa0903c4c1db68007l },
wolfSSL 14:167253f4e170 37344 { 0x366e458948f21402l,0x31b49c14b96abda2l,0x329c4b09e0403190l,
wolfSSL 14:167253f4e170 37345 0x97197ca3d29f43fel },
wolfSSL 14:167253f4e170 37346 0 },
wolfSSL 14:167253f4e170 37347 /* 65 << 104 */
wolfSSL 14:167253f4e170 37348 { { 0xfe4de13781479db4l,0x307331f012f08ea5l,0x7f59a64758c04c13l,
wolfSSL 14:167253f4e170 37349 0x6b41189abdc9b3c9l },
wolfSSL 14:167253f4e170 37350 { 0xb10f11e5a6f8c5edl,0x757fb7a3f5b0579el,0x456d0a873c90d027l,
wolfSSL 14:167253f4e170 37351 0x7e8bb6bf32361796l },
wolfSSL 14:167253f4e170 37352 0 },
wolfSSL 14:167253f4e170 37353 /* 71 << 104 */
wolfSSL 14:167253f4e170 37354 { { 0x6aa1dc6c9e689d8dl,0xaa5fa015479cdd09l,0x7eb4dbb582fc000al,
wolfSSL 14:167253f4e170 37355 0x4a57b689eff4e701l },
wolfSSL 14:167253f4e170 37356 { 0x7bfe8d2a8e15cd8cl,0xab109b1cc9074e1al,0x5716715fee1619a5l,
wolfSSL 14:167253f4e170 37357 0xf29a51eccdcb40bcl },
wolfSSL 14:167253f4e170 37358 0 },
wolfSSL 14:167253f4e170 37359 /* 77 << 104 */
wolfSSL 14:167253f4e170 37360 { { 0x14c76234ddf03c6el,0xdfb5d388baeb2eddl,0x4bd85da26d413d2dl,
wolfSSL 14:167253f4e170 37361 0x5b0dd9be3ae38469l },
wolfSSL 14:167253f4e170 37362 { 0xe4d8a9d89ab3ae61l,0xb9e37b880ee63951l,0x17f08e9b21a7f30fl,
wolfSSL 14:167253f4e170 37363 0x173db1e8119af788l },
wolfSSL 14:167253f4e170 37364 0 },
wolfSSL 14:167253f4e170 37365 /* 83 << 104 */
wolfSSL 14:167253f4e170 37366 { { 0x2352ad4a170d43f6l,0x098d74f65a0ae4b0l,0x290f5236c3a46c2al,
wolfSSL 14:167253f4e170 37367 0xea9266102dd87e7fl },
wolfSSL 14:167253f4e170 37368 { 0xd7ee90f6848e6911l,0xebe8f4cce0d8886fl,0xa2038320558ff6a0l,
wolfSSL 14:167253f4e170 37369 0x1f716534f37c38cfl },
wolfSSL 14:167253f4e170 37370 0 },
wolfSSL 14:167253f4e170 37371 /* 89 << 104 */
wolfSSL 14:167253f4e170 37372 { { 0x9754209439a4a159l,0xe6135412fed24278l,0xbba62254d70e2cabl,
wolfSSL 14:167253f4e170 37373 0x4ac6a8ac85895130l },
wolfSSL 14:167253f4e170 37374 { 0xc01614fee1a45363l,0x720ad3f8b67294f2l,0x724ea95cb420ea51l,
wolfSSL 14:167253f4e170 37375 0x1f40ab2d712b856cl },
wolfSSL 14:167253f4e170 37376 0 },
wolfSSL 14:167253f4e170 37377 /* 95 << 104 */
wolfSSL 14:167253f4e170 37378 { { 0x708e1c7975f3d30cl,0x423f1535e2172da3l,0x7a29be342a06a0b1l,
wolfSSL 14:167253f4e170 37379 0x9de5c9eb32c68ba2l },
wolfSSL 14:167253f4e170 37380 { 0x70217b0232d48793l,0x3cf3855bac1471cfl,0x6762d03f8321e179l,
wolfSSL 14:167253f4e170 37381 0x06ee12ea236fa7cfl },
wolfSSL 14:167253f4e170 37382 0 },
wolfSSL 14:167253f4e170 37383 /* 101 << 104 */
wolfSSL 14:167253f4e170 37384 { { 0x1718e7428779109bl,0x6188008d0aca350bl,0xbbe227e00594bc15l,
wolfSSL 14:167253f4e170 37385 0x4a7b6423ddbdea35l },
wolfSSL 14:167253f4e170 37386 { 0x06ad632dfa44e1bfl,0xaf9c163d1e97b409l,0x64dafec3c61f2b2fl,
wolfSSL 14:167253f4e170 37387 0xc6759d905525c0c9l },
wolfSSL 14:167253f4e170 37388 0 },
wolfSSL 14:167253f4e170 37389 /* 107 << 104 */
wolfSSL 14:167253f4e170 37390 { { 0x76d6294787517149l,0x2bda339baa77d325l,0x04b1bec067ad1fd1l,
wolfSSL 14:167253f4e170 37391 0x49f63fcc0aec7c73l },
wolfSSL 14:167253f4e170 37392 { 0x005cb459ec1bf494l,0x8fa99c1b1ec6f8bbl,0x70a4e6d78b59dd43l,
wolfSSL 14:167253f4e170 37393 0xfd70bcb313d6594dl },
wolfSSL 14:167253f4e170 37394 0 },
wolfSSL 14:167253f4e170 37395 /* 113 << 104 */
wolfSSL 14:167253f4e170 37396 { { 0x2987a7cb13966c11l,0x74ad0a26a783f283l,0xf011200ae54d27f0l,
wolfSSL 14:167253f4e170 37397 0xbd8632963fb38396l },
wolfSSL 14:167253f4e170 37398 { 0x7ec7fe8c9b86d059l,0xfa94ca76d0cd33a7l,0xf6ad741cdc646993l,
wolfSSL 14:167253f4e170 37399 0x83054a427ebc34e9l },
wolfSSL 14:167253f4e170 37400 0 },
wolfSSL 14:167253f4e170 37401 /* 116 << 104 */
wolfSSL 14:167253f4e170 37402 { { 0xadef8c5a192ef710l,0x88afbd4b3b7431f9l,0x7e1f740764250c9el,
wolfSSL 14:167253f4e170 37403 0x6e31318db58bec07l },
wolfSSL 14:167253f4e170 37404 { 0xfd4fc4b824f89b4el,0x65a5dd8848c36a2al,0x4f1eccfff024baa7l,
wolfSSL 14:167253f4e170 37405 0x22a21cf2cba94650l },
wolfSSL 14:167253f4e170 37406 0 },
wolfSSL 14:167253f4e170 37407 /* 119 << 104 */
wolfSSL 14:167253f4e170 37408 { { 0x7b45865478f39754l,0xcbb8b96c4564e003l,0xb492d2bf69b35752l,
wolfSSL 14:167253f4e170 37409 0x4e6287e065ee5ad3l },
wolfSSL 14:167253f4e170 37410 { 0x07906c14eb1ffe62l,0xf350390c681fcdf8l,0xc351386f6be3eec3l,
wolfSSL 14:167253f4e170 37411 0x8480d00ee5df919dl },
wolfSSL 14:167253f4e170 37412 0 },
wolfSSL 14:167253f4e170 37413 /* 125 << 104 */
wolfSSL 14:167253f4e170 37414 { { 0x399861ecf8a2d5aal,0xb179adeb046f78cbl,0x056a6cd88792f647l,
wolfSSL 14:167253f4e170 37415 0xd3dfc91c3d411820l },
wolfSSL 14:167253f4e170 37416 { 0x4ccf92d179693be1l,0x12ecd9a3f65cb250l,0x58e5d2102538b9e7l,
wolfSSL 14:167253f4e170 37417 0x4e655882ff977ccal },
wolfSSL 14:167253f4e170 37418 0 },
wolfSSL 14:167253f4e170 37419 },
wolfSSL 14:167253f4e170 37420 {
wolfSSL 14:167253f4e170 37421 /* 0 << 112 */
wolfSSL 14:167253f4e170 37422 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 37423 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 37424 1 },
wolfSSL 14:167253f4e170 37425 /* 1 << 112 */
wolfSSL 14:167253f4e170 37426 { { 0x8ce9b6bfc360e25al,0xe6425195075a1a78l,0x9dc756a8481732f4l,
wolfSSL 14:167253f4e170 37427 0x83c0440f5432b57al },
wolfSSL 14:167253f4e170 37428 { 0xc670b3f1d720281fl,0x2205910ed135e051l,0xded14b0edb052be7l,
wolfSSL 14:167253f4e170 37429 0x697b3d27c568ea39l },
wolfSSL 14:167253f4e170 37430 0 },
wolfSSL 14:167253f4e170 37431 /* 3 << 112 */
wolfSSL 14:167253f4e170 37432 { { 0x0b89de9314092ebbl,0xf17256bd428e240cl,0xcf89a7f393d2f064l,
wolfSSL 14:167253f4e170 37433 0x4f57841ee1ed3b14l },
wolfSSL 14:167253f4e170 37434 { 0x4ee14405e708d855l,0x856aae7203f1c3d0l,0xc8e5424fbdd7eed5l,
wolfSSL 14:167253f4e170 37435 0x3333e4ef73ab4270l },
wolfSSL 14:167253f4e170 37436 0 },
wolfSSL 14:167253f4e170 37437 /* 4 << 112 */
wolfSSL 14:167253f4e170 37438 { { 0x3bc77adedda492f8l,0xc11a3aea78297205l,0x5e89a3e734931b4cl,
wolfSSL 14:167253f4e170 37439 0x17512e2e9f5694bbl },
wolfSSL 14:167253f4e170 37440 { 0x5dc349f3177bf8b6l,0x232ea4ba08c7ff3el,0x9c4f9d16f511145dl,
wolfSSL 14:167253f4e170 37441 0xccf109a333b379c3l },
wolfSSL 14:167253f4e170 37442 0 },
wolfSSL 14:167253f4e170 37443 /* 5 << 112 */
wolfSSL 14:167253f4e170 37444 { { 0xe75e7a88a1f25897l,0x7ac6961fa1b5d4d8l,0xe3e1077308f3ed5cl,
wolfSSL 14:167253f4e170 37445 0x208a54ec0a892dfbl },
wolfSSL 14:167253f4e170 37446 { 0xbe826e1978660710l,0x0cf70a97237df2c8l,0x418a7340ed704da5l,
wolfSSL 14:167253f4e170 37447 0xa3eeb9a908ca33fdl },
wolfSSL 14:167253f4e170 37448 0 },
wolfSSL 14:167253f4e170 37449 /* 7 << 112 */
wolfSSL 14:167253f4e170 37450 { { 0xb4323d588434a920l,0xc0af8e93622103c5l,0x667518ef938dbf9al,
wolfSSL 14:167253f4e170 37451 0xa184307383a9cdf2l },
wolfSSL 14:167253f4e170 37452 { 0x350a94aa5447ab80l,0xe5e5a325c75a3d61l,0x74ba507f68411a9el,
wolfSSL 14:167253f4e170 37453 0x10581fc1594f70c5l },
wolfSSL 14:167253f4e170 37454 0 },
wolfSSL 14:167253f4e170 37455 /* 9 << 112 */
wolfSSL 14:167253f4e170 37456 { { 0x5aaa98a7cb0c9c8cl,0x75105f3081c4375cl,0xceee50575ef1c90fl,
wolfSSL 14:167253f4e170 37457 0xb31e065fc23a17bfl },
wolfSSL 14:167253f4e170 37458 { 0x5364d275d4b6d45al,0xd363f3ad62ec8996l,0xb5d212394391c65bl,
wolfSSL 14:167253f4e170 37459 0x84564765ebb41b47l },
wolfSSL 14:167253f4e170 37460 0 },
wolfSSL 14:167253f4e170 37461 /* 10 << 112 */
wolfSSL 14:167253f4e170 37462 { { 0x20d18ecc37107c78l,0xacff3b6b570c2a66l,0x22f975d99bd0d845l,
wolfSSL 14:167253f4e170 37463 0xef0a0c46ba178fa0l },
wolfSSL 14:167253f4e170 37464 { 0x1a41965176b6028el,0xc49ec674248612d4l,0x5b6ac4f27338af55l,
wolfSSL 14:167253f4e170 37465 0x06145e627bee5a36l },
wolfSSL 14:167253f4e170 37466 0 },
wolfSSL 14:167253f4e170 37467 /* 11 << 112 */
wolfSSL 14:167253f4e170 37468 { { 0x33e95d07e75746b5l,0x1c1e1f6dc40c78bel,0x967833ef222ff8e2l,
wolfSSL 14:167253f4e170 37469 0x4bedcf6ab49180adl },
wolfSSL 14:167253f4e170 37470 { 0x6b37e9c13d7a4c8al,0x2748887c6ddfe760l,0xf7055123aa3a5bbcl,
wolfSSL 14:167253f4e170 37471 0x954ff2257bbb8e74l },
wolfSSL 14:167253f4e170 37472 0 },
wolfSSL 14:167253f4e170 37473 /* 13 << 112 */
wolfSSL 14:167253f4e170 37474 { { 0x4e23ca446d3fea55l,0xb4ae9c86f4810568l,0x47bfb91b2a62f27dl,
wolfSSL 14:167253f4e170 37475 0x60deb4c9d9bac28cl },
wolfSSL 14:167253f4e170 37476 { 0xa892d8947de6c34cl,0x4ee682594494587dl,0x914ee14e1a3f8a5bl,
wolfSSL 14:167253f4e170 37477 0xbb113eaa28700385l },
wolfSSL 14:167253f4e170 37478 0 },
wolfSSL 14:167253f4e170 37479 /* 15 << 112 */
wolfSSL 14:167253f4e170 37480 { { 0xef9dc899a7b56eafl,0x00c0e52c34ef7316l,0x5b1e4e24fe818a86l,
wolfSSL 14:167253f4e170 37481 0x9d31e20dc538be47l },
wolfSSL 14:167253f4e170 37482 { 0x22eb932d3ed68974l,0xe44bbc087c4e87c4l,0x4121086e0dde9aefl,
wolfSSL 14:167253f4e170 37483 0x8e6b9cff134f4345l },
wolfSSL 14:167253f4e170 37484 0 },
wolfSSL 14:167253f4e170 37485 /* 16 << 112 */
wolfSSL 14:167253f4e170 37486 { { 0x96892c1f711b0eb9l,0xb905f2c8780ab954l,0xace26309a20792dbl,
wolfSSL 14:167253f4e170 37487 0xec8ac9b30684e126l },
wolfSSL 14:167253f4e170 37488 { 0x486ad8b6b40a2447l,0x60121fc19fe3fb24l,0x5626fccf1a8e3b3fl,
wolfSSL 14:167253f4e170 37489 0x4e5686226ad1f394l },
wolfSSL 14:167253f4e170 37490 0 },
wolfSSL 14:167253f4e170 37491 /* 17 << 112 */
wolfSSL 14:167253f4e170 37492 { { 0xda7aae0d196aa5a1l,0xe0df8c771041b5fbl,0x451465d926b318b7l,
wolfSSL 14:167253f4e170 37493 0xc29b6e557ab136e9l },
wolfSSL 14:167253f4e170 37494 { 0x2c2ab48b71148463l,0xb5738de364454a76l,0x54ccf9a05a03abe4l,
wolfSSL 14:167253f4e170 37495 0x377c02960427d58el },
wolfSSL 14:167253f4e170 37496 0 },
wolfSSL 14:167253f4e170 37497 /* 19 << 112 */
wolfSSL 14:167253f4e170 37498 { { 0x90e4f7c92d7d1413l,0x67e2d6b59834f597l,0x4fd4f4f9a808c3e8l,
wolfSSL 14:167253f4e170 37499 0xaf8237e0d5281ec1l },
wolfSSL 14:167253f4e170 37500 { 0x25ab5fdc84687ceel,0xc5ded6b1a5b26c09l,0x8e4a5aecc8ea7650l,
wolfSSL 14:167253f4e170 37501 0x23b73e5c14cc417fl },
wolfSSL 14:167253f4e170 37502 0 },
wolfSSL 14:167253f4e170 37503 /* 21 << 112 */
wolfSSL 14:167253f4e170 37504 { { 0xb4293fdcf50225f9l,0xc52e175cb0e12b03l,0xf649c3bad0a8bf64l,
wolfSSL 14:167253f4e170 37505 0x745a8fefeb8ae3c6l },
wolfSSL 14:167253f4e170 37506 { 0x30d7e5a358321bc3l,0xb1732be70bc4df48l,0x1f217993e9ea5058l,
wolfSSL 14:167253f4e170 37507 0xf7a71cde3e4fd745l },
wolfSSL 14:167253f4e170 37508 0 },
wolfSSL 14:167253f4e170 37509 /* 23 << 112 */
wolfSSL 14:167253f4e170 37510 { { 0xa188b2502d0f39aal,0x622118bb15a85947l,0x2ebf520ffde0f4fal,
wolfSSL 14:167253f4e170 37511 0xa40e9f294860e539l },
wolfSSL 14:167253f4e170 37512 { 0x7b6a51eb22b57f0fl,0x849a33b97e80644al,0x50e5d16f1cf095fel,
wolfSSL 14:167253f4e170 37513 0xd754b54eec55f002l },
wolfSSL 14:167253f4e170 37514 0 },
wolfSSL 14:167253f4e170 37515 /* 25 << 112 */
wolfSSL 14:167253f4e170 37516 { { 0xcd821dfb988baf01l,0xe6331a7ddbb16647l,0x1eb8ad33094cb960l,
wolfSSL 14:167253f4e170 37517 0x593cca38c91bbca5l },
wolfSSL 14:167253f4e170 37518 { 0x384aac8d26567456l,0x40fa0309c04b6490l,0x97834cd6dab6c8f6l,
wolfSSL 14:167253f4e170 37519 0x68a7318d3f91e55fl },
wolfSSL 14:167253f4e170 37520 0 },
wolfSSL 14:167253f4e170 37521 /* 27 << 112 */
wolfSSL 14:167253f4e170 37522 { { 0xc7bfd486605daaa6l,0x46fd72b7bb9a6c9el,0xe4847fb1a124fb89l,
wolfSSL 14:167253f4e170 37523 0x75959cbda2d8ffbcl },
wolfSSL 14:167253f4e170 37524 { 0x42579f65c8a588eel,0x368c92e6b80b499dl,0xea4ef6cd999a5df1l,
wolfSSL 14:167253f4e170 37525 0xaa73bb7f936fe604l },
wolfSSL 14:167253f4e170 37526 0 },
wolfSSL 14:167253f4e170 37527 /* 28 << 112 */
wolfSSL 14:167253f4e170 37528 { { 0xf347a70d6457d188l,0x86eda86b8b7a388bl,0xb7cdff060ccd6013l,
wolfSSL 14:167253f4e170 37529 0xbeb1b6c7d0053fb2l },
wolfSSL 14:167253f4e170 37530 { 0x0b02238799240a9fl,0x1bbb384f776189b2l,0x8695e71e9066193al,
wolfSSL 14:167253f4e170 37531 0x2eb5009706ffac7el },
wolfSSL 14:167253f4e170 37532 0 },
wolfSSL 14:167253f4e170 37533 /* 29 << 112 */
wolfSSL 14:167253f4e170 37534 { { 0x0654a9c04a7d2caal,0x6f3fb3d1a5aaa290l,0x835db041ff476e8fl,
wolfSSL 14:167253f4e170 37535 0x540b8b0bc42295e4l },
wolfSSL 14:167253f4e170 37536 { 0xa5c73ac905e214f5l,0x9a74075a56a0b638l,0x2e4b1090ce9e680bl,
wolfSSL 14:167253f4e170 37537 0x57a5b4796b8d9afal },
wolfSSL 14:167253f4e170 37538 0 },
wolfSSL 14:167253f4e170 37539 /* 31 << 112 */
wolfSSL 14:167253f4e170 37540 { { 0x2a2bfa7f650006f0l,0xdfd7dad350c0fbb2l,0x92452495ccf9ad96l,
wolfSSL 14:167253f4e170 37541 0x183bf494d95635f9l },
wolfSSL 14:167253f4e170 37542 { 0x02d5df434a7bd989l,0x505385cca5431095l,0xdd98e67dfd43f53el,
wolfSSL 14:167253f4e170 37543 0xd61e1a6c500c34a9l },
wolfSSL 14:167253f4e170 37544 0 },
wolfSSL 14:167253f4e170 37545 /* 33 << 112 */
wolfSSL 14:167253f4e170 37546 { { 0x41d85ea1ef74c45bl,0x2cfbfa66ae328506l,0x98b078f53ada7da9l,
wolfSSL 14:167253f4e170 37547 0xd985fe37ec752fbbl },
wolfSSL 14:167253f4e170 37548 { 0xeece68fe5a0148b4l,0x6f9a55c72d78136dl,0x232dccc4d2b729cel,
wolfSSL 14:167253f4e170 37549 0xa27e0dfd90aafbc4l },
wolfSSL 14:167253f4e170 37550 0 },
wolfSSL 14:167253f4e170 37551 /* 34 << 112 */
wolfSSL 14:167253f4e170 37552 { { 0x9647445212b4603el,0xa876c5516b706d14l,0xdf145fcf69a9d412l,
wolfSSL 14:167253f4e170 37553 0xe2ab75b72d479c34l },
wolfSSL 14:167253f4e170 37554 { 0x12df9a761a23ff97l,0xc61389925d359d10l,0x6e51c7aefa835f22l,
wolfSSL 14:167253f4e170 37555 0x69a79cb1c0fcc4d9l },
wolfSSL 14:167253f4e170 37556 0 },
wolfSSL 14:167253f4e170 37557 /* 35 << 112 */
wolfSSL 14:167253f4e170 37558 { { 0xf57f350d594cc7e1l,0x3079ca633350ab79l,0x226fb6149aff594al,
wolfSSL 14:167253f4e170 37559 0x35afec026d59a62bl },
wolfSSL 14:167253f4e170 37560 { 0x9bee46f406ed2c6el,0x58da17357d939a57l,0x44c504028fd1797el,
wolfSSL 14:167253f4e170 37561 0xd8853e7c5ccea6cal },
wolfSSL 14:167253f4e170 37562 0 },
wolfSSL 14:167253f4e170 37563 /* 36 << 112 */
wolfSSL 14:167253f4e170 37564 { { 0x4065508da35fcd5fl,0x8965df8c495ccaebl,0x0f2da85012e1a962l,
wolfSSL 14:167253f4e170 37565 0xee471b94c1cf1cc4l },
wolfSSL 14:167253f4e170 37566 { 0xcef19bc80a08fb75l,0x704958f581de3591l,0x2867f8b23aef4f88l,
wolfSSL 14:167253f4e170 37567 0x8d749384ea9f9a5fl },
wolfSSL 14:167253f4e170 37568 0 },
wolfSSL 14:167253f4e170 37569 /* 37 << 112 */
wolfSSL 14:167253f4e170 37570 { { 0x1b3855378c9049f4l,0x5be948f37b92d8b6l,0xd96f725db6e2bd6bl,
wolfSSL 14:167253f4e170 37571 0x37a222bc958c454dl },
wolfSSL 14:167253f4e170 37572 { 0xe7c61abb8809bf61l,0x46f07fbc1346f18dl,0xfb567a7ae87c0d1cl,
wolfSSL 14:167253f4e170 37573 0x84a461c87ef3d07al },
wolfSSL 14:167253f4e170 37574 0 },
wolfSSL 14:167253f4e170 37575 /* 39 << 112 */
wolfSSL 14:167253f4e170 37576 { { 0x3ab3d5afbd76e195l,0x478dd1ad6938a810l,0x6ffab3936ee3d5cbl,
wolfSSL 14:167253f4e170 37577 0xdfb693db22b361e4l },
wolfSSL 14:167253f4e170 37578 { 0xf969449651dbf1a7l,0xcab4b4ef08a2e762l,0xe8c92f25d39bba9al,
wolfSSL 14:167253f4e170 37579 0x850e61bcf1464d96l },
wolfSSL 14:167253f4e170 37580 0 },
wolfSSL 14:167253f4e170 37581 /* 40 << 112 */
wolfSSL 14:167253f4e170 37582 { { 0xb7e830e3dc09508bl,0xfaf6d2cf74317655l,0x72606cebdf690355l,
wolfSSL 14:167253f4e170 37583 0x48bb92b3d0c3ded6l },
wolfSSL 14:167253f4e170 37584 { 0x65b754845c7cf892l,0xf6cd7ac9d5d5f01fl,0xc2c30a5996401d69l,
wolfSSL 14:167253f4e170 37585 0x91268650ed921878l },
wolfSSL 14:167253f4e170 37586 0 },
wolfSSL 14:167253f4e170 37587 /* 41 << 112 */
wolfSSL 14:167253f4e170 37588 { { 0x380bf913b78c558fl,0x43c0baebc8afdaa9l,0x377f61d554f169d3l,
wolfSSL 14:167253f4e170 37589 0xf8da07e3ae5ff20bl },
wolfSSL 14:167253f4e170 37590 { 0xb676c49da8a90ea8l,0x81c1ff2b83a29b21l,0x383297ac2ad8d276l,
wolfSSL 14:167253f4e170 37591 0x3001122fba89f982l },
wolfSSL 14:167253f4e170 37592 0 },
wolfSSL 14:167253f4e170 37593 /* 43 << 112 */
wolfSSL 14:167253f4e170 37594 { { 0xbbe1e6a6c93f72d6l,0xd5f75d12cad800eal,0xfa40a09fe7acf117l,
wolfSSL 14:167253f4e170 37595 0x32c8cdd57581a355l },
wolfSSL 14:167253f4e170 37596 { 0x742219927023c499l,0xa8afe5d738ec3901l,0x5691afcba90e83f0l,
wolfSSL 14:167253f4e170 37597 0x41bcaa030b8f8eacl },
wolfSSL 14:167253f4e170 37598 0 },
wolfSSL 14:167253f4e170 37599 /* 44 << 112 */
wolfSSL 14:167253f4e170 37600 { { 0xe38b5ff98d2668d5l,0x0715281a7ad81965l,0x1bc8fc7c03c6ce11l,
wolfSSL 14:167253f4e170 37601 0xcbbee6e28b650436l },
wolfSSL 14:167253f4e170 37602 { 0x06b00fe80cdb9808l,0x17d6e066fe3ed315l,0x2e9d38c64d0b5018l,
wolfSSL 14:167253f4e170 37603 0xab8bfd56844dcaefl },
wolfSSL 14:167253f4e170 37604 0 },
wolfSSL 14:167253f4e170 37605 /* 45 << 112 */
wolfSSL 14:167253f4e170 37606 { { 0x42894a59513aed8bl,0xf77f3b6d314bd07al,0xbbdecb8f8e42b582l,
wolfSSL 14:167253f4e170 37607 0xf10e2fa8d2390fe6l },
wolfSSL 14:167253f4e170 37608 { 0xefb9502262a2f201l,0x4d59ea5050ee32b0l,0xd87f77286da789a8l,
wolfSSL 14:167253f4e170 37609 0xcf98a2cff79492c4l },
wolfSSL 14:167253f4e170 37610 0 },
wolfSSL 14:167253f4e170 37611 /* 46 << 112 */
wolfSSL 14:167253f4e170 37612 { { 0xf9577239720943c2l,0xba044cf53990b9d0l,0x5aa8e82395f2884al,
wolfSSL 14:167253f4e170 37613 0x834de6ed0278a0afl },
wolfSSL 14:167253f4e170 37614 { 0xc8e1ee9a5f25bd12l,0x9259ceaa6f7ab271l,0x7e6d97a277d00b76l,
wolfSSL 14:167253f4e170 37615 0x5c0c6eeaa437832al },
wolfSSL 14:167253f4e170 37616 0 },
wolfSSL 14:167253f4e170 37617 /* 47 << 112 */
wolfSSL 14:167253f4e170 37618 { { 0x5232c20f5606b81dl,0xabd7b3750d991ee5l,0x4d2bfe358632d951l,
wolfSSL 14:167253f4e170 37619 0x78f8514698ed9364l },
wolfSSL 14:167253f4e170 37620 { 0x951873f0f30c3282l,0x0da8ac80a789230bl,0x3ac7789c5398967fl,
wolfSSL 14:167253f4e170 37621 0xa69b8f7fbdda0fb5l },
wolfSSL 14:167253f4e170 37622 0 },
wolfSSL 14:167253f4e170 37623 /* 48 << 112 */
wolfSSL 14:167253f4e170 37624 { { 0xe5db77176add8545l,0x1b71cb6672c49b66l,0xd856073968421d77l,
wolfSSL 14:167253f4e170 37625 0x03840fe883e3afeal },
wolfSSL 14:167253f4e170 37626 { 0xb391dad51ec69977l,0xae243fb9307f6726l,0xc88ac87be8ca160cl,
wolfSSL 14:167253f4e170 37627 0x5174cced4ce355f4l },
wolfSSL 14:167253f4e170 37628 0 },
wolfSSL 14:167253f4e170 37629 /* 49 << 112 */
wolfSSL 14:167253f4e170 37630 { { 0x98a35966e58ba37dl,0xfdcc8da27817335dl,0x5b75283083fbc7bfl,
wolfSSL 14:167253f4e170 37631 0x68e419d4d9c96984l },
wolfSSL 14:167253f4e170 37632 { 0x409a39f402a40380l,0x88940faf1fe977bcl,0xc640a94b8f8edea6l,
wolfSSL 14:167253f4e170 37633 0x1e22cd17ed11547dl },
wolfSSL 14:167253f4e170 37634 0 },
wolfSSL 14:167253f4e170 37635 /* 51 << 112 */
wolfSSL 14:167253f4e170 37636 { { 0x17ba93b1a20ef103l,0xad8591306ba6577bl,0x65c91cf66fa214a0l,
wolfSSL 14:167253f4e170 37637 0xd7d49c6c27990da5l },
wolfSSL 14:167253f4e170 37638 { 0xecd9ec8d20bb569dl,0xbd4b2502eeffbc33l,0x2056ca5a6bed0467l,
wolfSSL 14:167253f4e170 37639 0x7916a1f75b63728cl },
wolfSSL 14:167253f4e170 37640 0 },
wolfSSL 14:167253f4e170 37641 /* 52 << 112 */
wolfSSL 14:167253f4e170 37642 { { 0xd4f9497d53a4f566l,0x8973466497b56810l,0xf8e1da740494a621l,
wolfSSL 14:167253f4e170 37643 0x82546a938d011c68l },
wolfSSL 14:167253f4e170 37644 { 0x1f3acb19c61ac162l,0x52f8fa9cabad0d3el,0x15356523b4b7ea43l,
wolfSSL 14:167253f4e170 37645 0x5a16ad61ae608125l },
wolfSSL 14:167253f4e170 37646 0 },
wolfSSL 14:167253f4e170 37647 /* 53 << 112 */
wolfSSL 14:167253f4e170 37648 { { 0xb0bcb87f4faed184l,0x5f236b1d5029f45fl,0xd42c76070bc6b1fcl,
wolfSSL 14:167253f4e170 37649 0xc644324e68aefce3l },
wolfSSL 14:167253f4e170 37650 { 0x8e191d595c5d8446l,0xc020807713ae1979l,0xadcaee553ba59cc7l,
wolfSSL 14:167253f4e170 37651 0x20ed6d6ba2cb81bal },
wolfSSL 14:167253f4e170 37652 0 },
wolfSSL 14:167253f4e170 37653 /* 55 << 112 */
wolfSSL 14:167253f4e170 37654 { { 0x7392b41a530ccbbdl,0x87c82146ea823525l,0xa52f984c05d98d0cl,
wolfSSL 14:167253f4e170 37655 0x2ae57d735ef6974cl },
wolfSSL 14:167253f4e170 37656 { 0x9377f7bf3042a6ddl,0xb1a007c019647a64l,0xfaa9079a0cca9767l,
wolfSSL 14:167253f4e170 37657 0x3d81a25bf68f72d5l },
wolfSSL 14:167253f4e170 37658 0 },
wolfSSL 14:167253f4e170 37659 /* 57 << 112 */
wolfSSL 14:167253f4e170 37660 { { 0xc110d830b0f2ac95l,0x48d0995aab20e64el,0x0f3e00e17729cd9al,
wolfSSL 14:167253f4e170 37661 0x2a570c20dd556946l },
wolfSSL 14:167253f4e170 37662 { 0x912dbcfd4e86214dl,0x2d014ee2cf615498l,0x55e2b1e63530d76el,
wolfSSL 14:167253f4e170 37663 0xc5135ae4fd0fd6d1l },
wolfSSL 14:167253f4e170 37664 0 },
wolfSSL 14:167253f4e170 37665 /* 59 << 112 */
wolfSSL 14:167253f4e170 37666 { { 0x1854daa5061f1658l,0xc0016df1df0cd2b3l,0xc2a3f23e833d50del,
wolfSSL 14:167253f4e170 37667 0x73b681d2bbbd3017l },
wolfSSL 14:167253f4e170 37668 { 0x2f046dc43ac343c0l,0x9c847e7d85716421l,0xe1e13c910917eed4l,
wolfSSL 14:167253f4e170 37669 0x3fc9eebd63a1b9c6l },
wolfSSL 14:167253f4e170 37670 0 },
wolfSSL 14:167253f4e170 37671 /* 60 << 112 */
wolfSSL 14:167253f4e170 37672 { { 0x0f816a727fe02299l,0x6335ccc2294f3319l,0x3820179f4745c5bel,
wolfSSL 14:167253f4e170 37673 0xe647b782922f066el },
wolfSSL 14:167253f4e170 37674 { 0xc22e49de02cafb8al,0x299bc2fffcc2ecccl,0x9a8feea26e0e8282l,
wolfSSL 14:167253f4e170 37675 0xa627278bfe893205l },
wolfSSL 14:167253f4e170 37676 0 },
wolfSSL 14:167253f4e170 37677 /* 61 << 112 */
wolfSSL 14:167253f4e170 37678 { { 0xa7e197337933e47bl,0xf4ff6b132e766402l,0xa4d8be0a98440d9fl,
wolfSSL 14:167253f4e170 37679 0x658f5c2f38938808l },
wolfSSL 14:167253f4e170 37680 { 0x90b75677c95b3b3el,0xfa0442693137b6ffl,0x077b039b43c47c29l,
wolfSSL 14:167253f4e170 37681 0xcca95dd38a6445b2l },
wolfSSL 14:167253f4e170 37682 0 },
wolfSSL 14:167253f4e170 37683 /* 63 << 112 */
wolfSSL 14:167253f4e170 37684 { { 0x583f3703f9374ab6l,0x864f91956e564145l,0x33bc3f4822526d50l,
wolfSSL 14:167253f4e170 37685 0x9f323c801262a496l },
wolfSSL 14:167253f4e170 37686 { 0xaa97a7ae3f046a9al,0x70da183edf8a039al,0x5b68f71c52aa0ba6l,
wolfSSL 14:167253f4e170 37687 0x9be0fe5121459c2dl },
wolfSSL 14:167253f4e170 37688 0 },
wolfSSL 14:167253f4e170 37689 /* 64 << 112 */
wolfSSL 14:167253f4e170 37690 { { 0xc1e17eb6cbc613e5l,0x33131d55497ea61cl,0x2f69d39eaf7eded5l,
wolfSSL 14:167253f4e170 37691 0x73c2f434de6af11bl },
wolfSSL 14:167253f4e170 37692 { 0x4ca52493a4a375fal,0x5f06787cb833c5c2l,0x814e091f3e6e71cfl,
wolfSSL 14:167253f4e170 37693 0x76451f578b746666l },
wolfSSL 14:167253f4e170 37694 0 },
wolfSSL 14:167253f4e170 37695 /* 65 << 112 */
wolfSSL 14:167253f4e170 37696 { { 0xa700767eabd0cc76l,0xa14ae98015889273l,0x5acf2cc466ea6380l,
wolfSSL 14:167253f4e170 37697 0xb942cc40d08d18b9l },
wolfSSL 14:167253f4e170 37698 { 0x9b5daa763ae45782l,0x61a25e0fb72f0ce0l,0xf94c0e80435fefe3l,
wolfSSL 14:167253f4e170 37699 0x73d552cf1620e1c9l },
wolfSSL 14:167253f4e170 37700 0 },
wolfSSL 14:167253f4e170 37701 /* 71 << 112 */
wolfSSL 14:167253f4e170 37702 { { 0x57130582727185c1l,0x8f2b8ebc163897ecl,0x4a059cc7a04e4a6bl,
wolfSSL 14:167253f4e170 37703 0x4b1de9fe0908a366l },
wolfSSL 14:167253f4e170 37704 { 0xa4f7738688d0fef0l,0x55e3bb1d9ebfc138l,0x9022bbef005ae362l,
wolfSSL 14:167253f4e170 37705 0xf5669edc8741d349l },
wolfSSL 14:167253f4e170 37706 0 },
wolfSSL 14:167253f4e170 37707 /* 77 << 112 */
wolfSSL 14:167253f4e170 37708 { { 0xf192c0f7ede937a4l,0xd2e91d62810c1b1el,0xf2b40b64dcc39c69l,
wolfSSL 14:167253f4e170 37709 0xe125fbd028f03b0el },
wolfSSL 14:167253f4e170 37710 { 0x52966dd78da708f9l,0x92d400a3cc0e7f32l,0x4e35aae36b0842b8l,
wolfSSL 14:167253f4e170 37711 0x0b4fe66ded3ad3cfl },
wolfSSL 14:167253f4e170 37712 0 },
wolfSSL 14:167253f4e170 37713 /* 83 << 112 */
wolfSSL 14:167253f4e170 37714 { { 0x14b81d951f1ff6b5l,0x1d82f132ed9b03b8l,0x52f6f029b4fa4047l,
wolfSSL 14:167253f4e170 37715 0xea653682601e5913l },
wolfSSL 14:167253f4e170 37716 { 0x4e900375edeee046l,0xd22ed267f9428714l,0xb004fb3b1753e873l,
wolfSSL 14:167253f4e170 37717 0xfef061ba245b2c09l },
wolfSSL 14:167253f4e170 37718 0 },
wolfSSL 14:167253f4e170 37719 /* 89 << 112 */
wolfSSL 14:167253f4e170 37720 { { 0x5e2376eaf9deba2bl,0x1ed1e9e5269a18cfl,0x8dffd66dcb1cada8l,
wolfSSL 14:167253f4e170 37721 0xb13239f068369c77l },
wolfSSL 14:167253f4e170 37722 { 0x2fede3a67f25426fl,0xc885cf0c6f90a2a6l,0xd950162d4eeac543l,
wolfSSL 14:167253f4e170 37723 0x53011aa09abc201bl },
wolfSSL 14:167253f4e170 37724 0 },
wolfSSL 14:167253f4e170 37725 /* 95 << 112 */
wolfSSL 14:167253f4e170 37726 { { 0x7a63925d432b798al,0x92e762cfc9bd6da9l,0xf22fb9706a190382l,
wolfSSL 14:167253f4e170 37727 0x19919b847b18a9b3l },
wolfSSL 14:167253f4e170 37728 { 0x16793b803adfde86l,0xf9ce15ace8b1d44cl,0x4bf74144c0a140b8l,
wolfSSL 14:167253f4e170 37729 0x680468616f853f6cl },
wolfSSL 14:167253f4e170 37730 0 },
wolfSSL 14:167253f4e170 37731 /* 101 << 112 */
wolfSSL 14:167253f4e170 37732 { { 0xd4e0d8460db84ba2l,0x9a162a3a360b68bbl,0x7297f3939233146cl,
wolfSSL 14:167253f4e170 37733 0xbc93c2f4ec77412dl },
wolfSSL 14:167253f4e170 37734 { 0x13ddf0a7e07e1065l,0x000a8d45fb5e5131l,0xb4373078cf61d467l,
wolfSSL 14:167253f4e170 37735 0xa4a1fd67bf3bb6f9l },
wolfSSL 14:167253f4e170 37736 0 },
wolfSSL 14:167253f4e170 37737 /* 107 << 112 */
wolfSSL 14:167253f4e170 37738 { { 0x6f2473f9d7585098l,0x45a29448d4f23c1al,0x47fe40f1c22bdc25l,
wolfSSL 14:167253f4e170 37739 0x4e46ed1f31347673l },
wolfSSL 14:167253f4e170 37740 { 0x5e43a8624148898cl,0x4a02ededa993954el,0x83d830b52f8a1847l,
wolfSSL 14:167253f4e170 37741 0x007e3156a7f6a378l },
wolfSSL 14:167253f4e170 37742 0 },
wolfSSL 14:167253f4e170 37743 /* 113 << 112 */
wolfSSL 14:167253f4e170 37744 { { 0x01a39fe7e847ca18l,0xaf2722418fed2772l,0x3104ef891fbb1748l,
wolfSSL 14:167253f4e170 37745 0x5b55331b2b9dd5ffl },
wolfSSL 14:167253f4e170 37746 { 0xe7806e31cec6a787l,0x9f49ed881e9c0af2l,0xf5a66373a3905b36l,
wolfSSL 14:167253f4e170 37747 0x77b5bca9efab75f3l },
wolfSSL 14:167253f4e170 37748 0 },
wolfSSL 14:167253f4e170 37749 /* 116 << 112 */
wolfSSL 14:167253f4e170 37750 { { 0xd4d75f4bf0831932l,0x5e770ac477fe8cc9l,0x52b5e748862e72a2l,
wolfSSL 14:167253f4e170 37751 0xe9a45482501d35fel },
wolfSSL 14:167253f4e170 37752 { 0x8a93e7424a9ab187l,0x5a72506de88ca017l,0xe680dcb201eb2defl,
wolfSSL 14:167253f4e170 37753 0xdc5aa4e6ba68209dl },
wolfSSL 14:167253f4e170 37754 0 },
wolfSSL 14:167253f4e170 37755 /* 119 << 112 */
wolfSSL 14:167253f4e170 37756 { { 0x2defa3dc3d01a344l,0x11fd939b162e459al,0x928453b97313d720l,
wolfSSL 14:167253f4e170 37757 0x08696dc053184a65l },
wolfSSL 14:167253f4e170 37758 { 0xd9f8a69c721f7415l,0x304eb0e079539019l,0xc9b0ca6dbb0c6313l,
wolfSSL 14:167253f4e170 37759 0xa10133eba93dc74el },
wolfSSL 14:167253f4e170 37760 0 },
wolfSSL 14:167253f4e170 37761 /* 125 << 112 */
wolfSSL 14:167253f4e170 37762 { { 0xee0b164004393f1el,0x511547dfe1301979l,0xc00dfc3516d26d87l,
wolfSSL 14:167253f4e170 37763 0x06227c8aab847494l },
wolfSSL 14:167253f4e170 37764 { 0x178ca86748b2fdc7l,0xb51296f01a8ba1dcl,0xf252787731e1dd14l,
wolfSSL 14:167253f4e170 37765 0x7ecb5456c0ba2a1fl },
wolfSSL 14:167253f4e170 37766 0 },
wolfSSL 14:167253f4e170 37767 },
wolfSSL 14:167253f4e170 37768 {
wolfSSL 14:167253f4e170 37769 /* 0 << 120 */
wolfSSL 14:167253f4e170 37770 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 37771 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 37772 1 },
wolfSSL 14:167253f4e170 37773 /* 1 << 120 */
wolfSSL 14:167253f4e170 37774 { { 0x3e0e5c9dd111f8ecl,0xbcc33f8db7c4e760l,0x702f9a91bd392a51l,
wolfSSL 14:167253f4e170 37775 0x7da4a795c132e92dl },
wolfSSL 14:167253f4e170 37776 { 0x1a0b0ae30bb1151bl,0x54febac802e32251l,0xea3a5082694e9e78l,
wolfSSL 14:167253f4e170 37777 0xe58ffec1e4fe40b8l },
wolfSSL 14:167253f4e170 37778 0 },
wolfSSL 14:167253f4e170 37779 /* 3 << 120 */
wolfSSL 14:167253f4e170 37780 { { 0x7b23c513516e19e4l,0x56e2e847c5c4d593l,0x9f727d735ce71ef6l,
wolfSSL 14:167253f4e170 37781 0x5b6304a6f79a44c5l },
wolfSSL 14:167253f4e170 37782 { 0x6638a7363ab7e433l,0x1adea470fe742f83l,0xe054b8545b7fc19fl,
wolfSSL 14:167253f4e170 37783 0xf935381aba1d0698l },
wolfSSL 14:167253f4e170 37784 0 },
wolfSSL 14:167253f4e170 37785 /* 4 << 120 */
wolfSSL 14:167253f4e170 37786 { { 0xb5504f9d918e4936l,0x65035ef6b2513982l,0x0553a0c26f4d9cb9l,
wolfSSL 14:167253f4e170 37787 0x6cb10d56bea85509l },
wolfSSL 14:167253f4e170 37788 { 0x48d957b7a242da11l,0x16a4d3dd672b7268l,0x3d7e637c8502a96bl,
wolfSSL 14:167253f4e170 37789 0x27c7032b730d463bl },
wolfSSL 14:167253f4e170 37790 0 },
wolfSSL 14:167253f4e170 37791 /* 5 << 120 */
wolfSSL 14:167253f4e170 37792 { { 0x55366b7d5846426fl,0xe7d09e89247d441dl,0x510b404d736fbf48l,
wolfSSL 14:167253f4e170 37793 0x7fa003d0e784bd7dl },
wolfSSL 14:167253f4e170 37794 { 0x25f7614f17fd9596l,0x49e0e0a135cb98dbl,0x2c65957b2e83a76al,
wolfSSL 14:167253f4e170 37795 0x5d40da8dcddbe0f8l },
wolfSSL 14:167253f4e170 37796 0 },
wolfSSL 14:167253f4e170 37797 /* 7 << 120 */
wolfSSL 14:167253f4e170 37798 { { 0x9fb3bba354530bb2l,0xbde3ef77cb0869eal,0x89bc90460b431163l,
wolfSSL 14:167253f4e170 37799 0x4d03d7d2e4819a35l },
wolfSSL 14:167253f4e170 37800 { 0x33ae4f9e43b6a782l,0x216db3079c88a686l,0x91dd88e000ffedd9l,
wolfSSL 14:167253f4e170 37801 0xb280da9f12bd4840l },
wolfSSL 14:167253f4e170 37802 0 },
wolfSSL 14:167253f4e170 37803 /* 9 << 120 */
wolfSSL 14:167253f4e170 37804 { { 0xa37f3573f37f5937l,0xeb0f6c7dd1e4fca5l,0x2965a554ac8ab0fcl,
wolfSSL 14:167253f4e170 37805 0x17fbf56c274676acl },
wolfSSL 14:167253f4e170 37806 { 0x2e2f6bd9acf7d720l,0x41fc8f8810224766l,0x517a14b385d53befl,
wolfSSL 14:167253f4e170 37807 0xdae327a57d76a7d1l },
wolfSSL 14:167253f4e170 37808 0 },
wolfSSL 14:167253f4e170 37809 /* 10 << 120 */
wolfSSL 14:167253f4e170 37810 { { 0x515d5c891f5f82dcl,0x9a7f67d76361079el,0xa8da81e311a35330l,
wolfSSL 14:167253f4e170 37811 0xe44990c44b18be1bl },
wolfSSL 14:167253f4e170 37812 { 0xc7d5ed95af103e59l,0xece8aba78dac9261l,0xbe82b0999394b8d3l,
wolfSSL 14:167253f4e170 37813 0x6830f09a16adfe83l },
wolfSSL 14:167253f4e170 37814 0 },
wolfSSL 14:167253f4e170 37815 /* 11 << 120 */
wolfSSL 14:167253f4e170 37816 { { 0x43c41ac194d7d9b1l,0x5bafdd82c82e7f17l,0xdf0614c15fda0fcal,
wolfSSL 14:167253f4e170 37817 0x74b043a7a8ae37adl },
wolfSSL 14:167253f4e170 37818 { 0x3ba6afa19e71734cl,0x15d5437e9c450f2el,0x4a5883fe67e242b1l,
wolfSSL 14:167253f4e170 37819 0x5143bdc22c1953c2l },
wolfSSL 14:167253f4e170 37820 0 },
wolfSSL 14:167253f4e170 37821 /* 13 << 120 */
wolfSSL 14:167253f4e170 37822 { { 0xc676d7f2b1f3390bl,0x9f7a1b8ca5b61272l,0x4ebebfc9c2e127a9l,
wolfSSL 14:167253f4e170 37823 0x4602500c5dd997bfl },
wolfSSL 14:167253f4e170 37824 { 0x7f09771c4711230fl,0x058eb37c020f09c1l,0xab693d4bfee5e38bl,
wolfSSL 14:167253f4e170 37825 0x9289eb1f4653cbc0l },
wolfSSL 14:167253f4e170 37826 0 },
wolfSSL 14:167253f4e170 37827 /* 15 << 120 */
wolfSSL 14:167253f4e170 37828 { { 0x54da9dc7ab952578l,0xb5423df226e84d0bl,0xa8b64eeb9b872042l,
wolfSSL 14:167253f4e170 37829 0xac2057825990f6dfl },
wolfSSL 14:167253f4e170 37830 { 0x4ff696eb21f4c77al,0x1a79c3e4aab273afl,0x29bc922e9436b3f1l,
wolfSSL 14:167253f4e170 37831 0xff807ef8d6d9a27al },
wolfSSL 14:167253f4e170 37832 0 },
wolfSSL 14:167253f4e170 37833 /* 16 << 120 */
wolfSSL 14:167253f4e170 37834 { { 0xc7f3a8f833f6746cl,0x21e46f65fea990cal,0x915fd5c5caddb0a9l,
wolfSSL 14:167253f4e170 37835 0xbd41f01678614555l },
wolfSSL 14:167253f4e170 37836 { 0x346f4434426ffb58l,0x8055943614dbc204l,0xf3dd20fe5a969b7fl,
wolfSSL 14:167253f4e170 37837 0x9d59e956e899a39al },
wolfSSL 14:167253f4e170 37838 0 },
wolfSSL 14:167253f4e170 37839 /* 17 << 120 */
wolfSSL 14:167253f4e170 37840 { { 0xe4ca688fd06f56c0l,0xa48af70ddf027972l,0x691f0f045e9a609dl,
wolfSSL 14:167253f4e170 37841 0xa9dd82cdee61270el },
wolfSSL 14:167253f4e170 37842 { 0x8903ca63a0ef18d3l,0x9fb7ee353d6ca3bdl,0xa7b4a09cabf47d03l,
wolfSSL 14:167253f4e170 37843 0x4cdada011c67de8el },
wolfSSL 14:167253f4e170 37844 0 },
wolfSSL 14:167253f4e170 37845 /* 19 << 120 */
wolfSSL 14:167253f4e170 37846 { { 0xac127dc1e038a675l,0x729deff38c5c6320l,0xb7df8fd4a90d2c53l,
wolfSSL 14:167253f4e170 37847 0x9b74b0ec681e7cd3l },
wolfSSL 14:167253f4e170 37848 { 0x5cb5a623dab407e5l,0xcdbd361576b340c6l,0xa184415a7d28392cl,
wolfSSL 14:167253f4e170 37849 0xc184c1d8e96f7830l },
wolfSSL 14:167253f4e170 37850 0 },
wolfSSL 14:167253f4e170 37851 /* 21 << 120 */
wolfSSL 14:167253f4e170 37852 { { 0x86a9303b2f7e85c3l,0x5fce462171988f9bl,0x5b935bf6c138acb5l,
wolfSSL 14:167253f4e170 37853 0x30ea7d6725661212l },
wolfSSL 14:167253f4e170 37854 { 0xef1eb5f4e51ab9a2l,0x0587c98aae067c78l,0xb3ce1b3c77ca9ca6l,
wolfSSL 14:167253f4e170 37855 0x2a553d4d54b5f057l },
wolfSSL 14:167253f4e170 37856 0 },
wolfSSL 14:167253f4e170 37857 /* 23 << 120 */
wolfSSL 14:167253f4e170 37858 { { 0x2c7156e10b1894a0l,0x92034001d81c68c0l,0xed225d00c8b115b5l,
wolfSSL 14:167253f4e170 37859 0x237f9c2283b907f2l },
wolfSSL 14:167253f4e170 37860 { 0x0ea2f32f4470e2c0l,0xb725f7c158be4e95l,0x0f1dcafab1ae5463l,
wolfSSL 14:167253f4e170 37861 0x59ed51871ba2fc04l },
wolfSSL 14:167253f4e170 37862 0 },
wolfSSL 14:167253f4e170 37863 /* 25 << 120 */
wolfSSL 14:167253f4e170 37864 { { 0xd1b0ccdec9520711l,0x55a9e4ed3c8b84bfl,0x9426bd39a1fef314l,
wolfSSL 14:167253f4e170 37865 0x4f5f638e6eb93f2bl },
wolfSSL 14:167253f4e170 37866 { 0xba2a1ed32bf9341bl,0xd63c13214d42d5a9l,0xd2964a89316dc7c5l,
wolfSSL 14:167253f4e170 37867 0xd1759606ca511851l },
wolfSSL 14:167253f4e170 37868 0 },
wolfSSL 14:167253f4e170 37869 /* 27 << 120 */
wolfSSL 14:167253f4e170 37870 { { 0xedf69feaf8c51187l,0x05bb67ec741e4da7l,0x47df0f3208114345l,
wolfSSL 14:167253f4e170 37871 0x56facb07bb9792b1l },
wolfSSL 14:167253f4e170 37872 { 0xf3e007e98f6229e4l,0x62d103f4526fba0fl,0x4f33bef7b0339d79l,
wolfSSL 14:167253f4e170 37873 0x9841357bb59bfec1l },
wolfSSL 14:167253f4e170 37874 0 },
wolfSSL 14:167253f4e170 37875 /* 28 << 120 */
wolfSSL 14:167253f4e170 37876 { { 0xae1e0b67e28ef5bal,0x2c9a4699cb18e169l,0x0ecd0e331e6bbd20l,
wolfSSL 14:167253f4e170 37877 0x571b360eaf5e81d2l },
wolfSSL 14:167253f4e170 37878 { 0xcd9fea58101c1d45l,0x6651788e18880452l,0xa99726351f8dd446l,
wolfSSL 14:167253f4e170 37879 0x44bed022e37281d0l },
wolfSSL 14:167253f4e170 37880 0 },
wolfSSL 14:167253f4e170 37881 /* 29 << 120 */
wolfSSL 14:167253f4e170 37882 { { 0x830e6eea60dbac1fl,0x23d8c484da06a2f7l,0x896714b050ca535bl,
wolfSSL 14:167253f4e170 37883 0xdc8d3644ebd97a9bl },
wolfSSL 14:167253f4e170 37884 { 0x106ef9fab12177b4l,0xf79bf464534d5d9cl,0x2537a349a6ab360bl,
wolfSSL 14:167253f4e170 37885 0xc7c54253a00c744fl },
wolfSSL 14:167253f4e170 37886 0 },
wolfSSL 14:167253f4e170 37887 /* 31 << 120 */
wolfSSL 14:167253f4e170 37888 { { 0x24d661d168754ab0l,0x801fce1d6f429a76l,0xc068a85fa58ce769l,
wolfSSL 14:167253f4e170 37889 0xedc35c545d5eca2bl },
wolfSSL 14:167253f4e170 37890 { 0xea31276fa3f660d1l,0xa0184ebeb8fc7167l,0x0f20f21a1d8db0ael,
wolfSSL 14:167253f4e170 37891 0xd96d095f56c35e12l },
wolfSSL 14:167253f4e170 37892 0 },
wolfSSL 14:167253f4e170 37893 /* 33 << 120 */
wolfSSL 14:167253f4e170 37894 { { 0x57d2046b59da06ebl,0x3c076d5fa49f6d74l,0x6b4c96e616f82ea0l,
wolfSSL 14:167253f4e170 37895 0xaf7b0f1f90536c0bl },
wolfSSL 14:167253f4e170 37896 { 0x7999f86d204a9b2dl,0x7e420264126c9f87l,0x4c967a1f262ac4e5l,
wolfSSL 14:167253f4e170 37897 0xe8174a09900e79adl },
wolfSSL 14:167253f4e170 37898 0 },
wolfSSL 14:167253f4e170 37899 /* 34 << 120 */
wolfSSL 14:167253f4e170 37900 { { 0xd51687f2cb82516bl,0x8a440cfc040e4670l,0xeafd2bcfe7738d32l,
wolfSSL 14:167253f4e170 37901 0x7071e9162a1e911al },
wolfSSL 14:167253f4e170 37902 { 0xbd3abd44cfea57bbl,0x9c3add16085b19e2l,0xb194c01d6baa5aa6l,
wolfSSL 14:167253f4e170 37903 0x6f3d3faf92f85c64l },
wolfSSL 14:167253f4e170 37904 0 },
wolfSSL 14:167253f4e170 37905 /* 35 << 120 */
wolfSSL 14:167253f4e170 37906 { { 0xe23e0769488a280el,0x8e55a728e63a5904l,0x01690716ab84cccfl,
wolfSSL 14:167253f4e170 37907 0xfe796130b78b3c98l },
wolfSSL 14:167253f4e170 37908 { 0x15cc475b9117f211l,0xbdc178761d1b9d56l,0x8df5594a3e37b9b9l,
wolfSSL 14:167253f4e170 37909 0x97747e341e37e494l },
wolfSSL 14:167253f4e170 37910 0 },
wolfSSL 14:167253f4e170 37911 /* 36 << 120 */
wolfSSL 14:167253f4e170 37912 { { 0xf2a6370ed2f896e1l,0x27100e63802987afl,0xb4db1cff4678ebc7l,
wolfSSL 14:167253f4e170 37913 0x6e5f28d937b4b263l },
wolfSSL 14:167253f4e170 37914 { 0xd29030009711ebc4l,0xf14dcb9ff8712484l,0x7a46ec3eea449146l,
wolfSSL 14:167253f4e170 37915 0x200155e9c1c51179l },
wolfSSL 14:167253f4e170 37916 0 },
wolfSSL 14:167253f4e170 37917 /* 37 << 120 */
wolfSSL 14:167253f4e170 37918 { { 0x8130f007f1968d55l,0x18823e7097ed9803l,0xdc9fec559402762dl,
wolfSSL 14:167253f4e170 37919 0x9e0bd57e278f5abbl },
wolfSSL 14:167253f4e170 37920 { 0xaa41b913c9ebf303l,0x1105ec43a76b9353l,0xf8e4ee4cf4e6c6b5l,
wolfSSL 14:167253f4e170 37921 0x3a630972bd7be696l },
wolfSSL 14:167253f4e170 37922 0 },
wolfSSL 14:167253f4e170 37923 /* 39 << 120 */
wolfSSL 14:167253f4e170 37924 { { 0x5c7da7e16356b3eel,0x951bfe458ccf9b48l,0x6f2c6e91d0555d0cl,
wolfSSL 14:167253f4e170 37925 0x47d7f7b58efd38eel },
wolfSSL 14:167253f4e170 37926 { 0x957256c8af6fd630l,0xa690c65bdc01774cl,0xad52b27c7c8dafdal,
wolfSSL 14:167253f4e170 37927 0x81fbc16af44a145fl },
wolfSSL 14:167253f4e170 37928 0 },
wolfSSL 14:167253f4e170 37929 /* 40 << 120 */
wolfSSL 14:167253f4e170 37930 { { 0x497c3a3481b0493al,0x2b3ab20d71bc8408l,0x0c60226aa03769d1l,
wolfSSL 14:167253f4e170 37931 0x4ac89c7ad10708b0l },
wolfSSL 14:167253f4e170 37932 { 0x62398ea5092f7e6al,0x7f408f54de96d526l,0x025bde6f85bf102cl,
wolfSSL 14:167253f4e170 37933 0xcc2f85120a4aa72el },
wolfSSL 14:167253f4e170 37934 0 },
wolfSSL 14:167253f4e170 37935 /* 41 << 120 */
wolfSSL 14:167253f4e170 37936 { { 0x8a65e0386884a9c3l,0xd2e6ac047bf8c794l,0xc9c5d3d3f7bcdfb9l,
wolfSSL 14:167253f4e170 37937 0x0000ce42a33f2c12l },
wolfSSL 14:167253f4e170 37938 { 0xea1c0a9a7dd13b2bl,0xbfd97d7f0c35c3b1l,0x0ba75cf3347fcefel,
wolfSSL 14:167253f4e170 37939 0xc3c5f28f1333460dl },
wolfSSL 14:167253f4e170 37940 0 },
wolfSSL 14:167253f4e170 37941 /* 43 << 120 */
wolfSSL 14:167253f4e170 37942 { { 0x7810ebf575baa708l,0xe7fa7a0dd7440549l,0x25b813baf0667e4al,
wolfSSL 14:167253f4e170 37943 0x30a46740d15838a8l },
wolfSSL 14:167253f4e170 37944 { 0x13207b1ad04b22f7l,0x09e601ffd1419699l,0xb1038fc77f687b27l,
wolfSSL 14:167253f4e170 37945 0xa4547dc9a127f95bl },
wolfSSL 14:167253f4e170 37946 0 },
wolfSSL 14:167253f4e170 37947 /* 44 << 120 */
wolfSSL 14:167253f4e170 37948 { { 0x83b2e3b3056ecd2cl,0xd17dcdaaf03dfd36l,0xee24a5f81dcef956l,
wolfSSL 14:167253f4e170 37949 0xb6746cd0b7239f16l },
wolfSSL 14:167253f4e170 37950 { 0xed6cb311c8458c48l,0xe8c0fc9805d27da4l,0x4610e9a0a1bf0970l,
wolfSSL 14:167253f4e170 37951 0x1947f01d9906c19el },
wolfSSL 14:167253f4e170 37952 0 },
wolfSSL 14:167253f4e170 37953 /* 45 << 120 */
wolfSSL 14:167253f4e170 37954 { { 0x8b979126217c7cd7l,0x65c57a378050067el,0x6a50c6383f34838cl,
wolfSSL 14:167253f4e170 37955 0x3de617c29b7bc81fl },
wolfSSL 14:167253f4e170 37956 { 0x58488d24253a0ac7l,0x3fe53ec75520ba0bl,0x9156dca763f0607el,
wolfSSL 14:167253f4e170 37957 0xdd08c5705d1fe134l },
wolfSSL 14:167253f4e170 37958 0 },
wolfSSL 14:167253f4e170 37959 /* 46 << 120 */
wolfSSL 14:167253f4e170 37960 { { 0xbfb1d9e1e33ba77fl,0x0985311ccaef6c01l,0xc8b59e9accca8948l,
wolfSSL 14:167253f4e170 37961 0x1256280945416f25l },
wolfSSL 14:167253f4e170 37962 { 0xc90edbc257f53218l,0xcaa08c05125d8fb5l,0x33ea3fd49a1aad3bl,
wolfSSL 14:167253f4e170 37963 0x2aa8bd83d005e8bel },
wolfSSL 14:167253f4e170 37964 0 },
wolfSSL 14:167253f4e170 37965 /* 47 << 120 */
wolfSSL 14:167253f4e170 37966 { { 0xcbd2f1a3c2b22963l,0x0f7bd29c0c8ac2b3l,0xddb932432d405bfdl,
wolfSSL 14:167253f4e170 37967 0xeabd4805328413b5l },
wolfSSL 14:167253f4e170 37968 { 0xcc79d31748ebb6b9l,0x09604f831f521aael,0xd3487fdf4c7d188cl,
wolfSSL 14:167253f4e170 37969 0xd219c318d1552ea9l },
wolfSSL 14:167253f4e170 37970 0 },
wolfSSL 14:167253f4e170 37971 /* 48 << 120 */
wolfSSL 14:167253f4e170 37972 { { 0xef4f115c775d6ecel,0x69d2e3bbe8c0e78dl,0xb0264ef1145cfc81l,
wolfSSL 14:167253f4e170 37973 0x0a41e9fa1b69788bl },
wolfSSL 14:167253f4e170 37974 { 0x0d9233be909a1f0bl,0x150a84520ae76b30l,0xea3375370632bb69l,
wolfSSL 14:167253f4e170 37975 0x15f7b3cfaa25584al },
wolfSSL 14:167253f4e170 37976 0 },
wolfSSL 14:167253f4e170 37977 /* 49 << 120 */
wolfSSL 14:167253f4e170 37978 { { 0xfc4c623e321f7b11l,0xd36c1066f9cbc693l,0x8165235835dc0c0al,
wolfSSL 14:167253f4e170 37979 0xa3ce2e18c824e97el },
wolfSSL 14:167253f4e170 37980 { 0x59ea7cbcc6ff405el,0xced5a94a1e56a1e2l,0x88d744c53ab64b39l,
wolfSSL 14:167253f4e170 37981 0x8963d029073a36e7l },
wolfSSL 14:167253f4e170 37982 0 },
wolfSSL 14:167253f4e170 37983 /* 51 << 120 */
wolfSSL 14:167253f4e170 37984 { { 0x97aa902cb19f3edbl,0x8e605ff9bbf2975bl,0x0536fa8ba6eb299bl,
wolfSSL 14:167253f4e170 37985 0xfd96da4f7cd03ac0l },
wolfSSL 14:167253f4e170 37986 { 0x29c5b5b578f9a265l,0x1f025a6d5fd0bc1bl,0x440486ee58e0f8e1l,
wolfSSL 14:167253f4e170 37987 0x8f191f7d593e49e9l },
wolfSSL 14:167253f4e170 37988 0 },
wolfSSL 14:167253f4e170 37989 /* 52 << 120 */
wolfSSL 14:167253f4e170 37990 { { 0xbddf656baea9c13fl,0x083c5d514c678b37l,0x975431b630878ed4l,
wolfSSL 14:167253f4e170 37991 0x6de13d4608d9cf1cl },
wolfSSL 14:167253f4e170 37992 { 0xfbb639cc02427c45l,0x6190ca0c5a6cd989l,0x35a6aa26c53f11b7l,
wolfSSL 14:167253f4e170 37993 0x73f9e17dddfd86f6l },
wolfSSL 14:167253f4e170 37994 0 },
wolfSSL 14:167253f4e170 37995 /* 53 << 120 */
wolfSSL 14:167253f4e170 37996 { { 0xd30478a317be7689l,0x6fc3f634e358f7a7l,0x4057ece515688d9fl,
wolfSSL 14:167253f4e170 37997 0xb5397495d3d91eefl },
wolfSSL 14:167253f4e170 37998 { 0x62fac49e2f49bde4l,0xeb4a3e1860125c73l,0x15f38be8dabdac55l,
wolfSSL 14:167253f4e170 37999 0x18bf29f7d334d52al },
wolfSSL 14:167253f4e170 38000 0 },
wolfSSL 14:167253f4e170 38001 /* 55 << 120 */
wolfSSL 14:167253f4e170 38002 { { 0xf684162b68777538l,0x3e2a770bbb3381f4l,0x1b7562c1b374577cl,
wolfSSL 14:167253f4e170 38003 0x9eec22dc5cf21688l },
wolfSSL 14:167253f4e170 38004 { 0xc35014b1d472be2cl,0xafe2317035f086fbl,0xb9c9c4c9a1491ce1l,
wolfSSL 14:167253f4e170 38005 0x2df1e669b56792ddl },
wolfSSL 14:167253f4e170 38006 0 },
wolfSSL 14:167253f4e170 38007 /* 57 << 120 */
wolfSSL 14:167253f4e170 38008 { { 0xcf7d36fe1830f624l,0x176c3c12ed0474bdl,0x25b802c8f82b493dl,
wolfSSL 14:167253f4e170 38009 0x683c2a744c78147el },
wolfSSL 14:167253f4e170 38010 { 0x0db99444f8f3e446l,0x437bcac6800a56c7l,0xb4e592264d08b25fl,
wolfSSL 14:167253f4e170 38011 0xcaf1b4142e691ca7l },
wolfSSL 14:167253f4e170 38012 0 },
wolfSSL 14:167253f4e170 38013 /* 59 << 120 */
wolfSSL 14:167253f4e170 38014 { { 0x378bd47b9d231cafl,0xde3aa2f01f4db832l,0xf609d16ab29bd7d5l,
wolfSSL 14:167253f4e170 38015 0x13feab54bdfb54dfl },
wolfSSL 14:167253f4e170 38016 { 0x274abbbc22fc1a12l,0x267febb47d30ef1bl,0xeffa996d80717cd8l,
wolfSSL 14:167253f4e170 38017 0x065a86d1118d0812l },
wolfSSL 14:167253f4e170 38018 0 },
wolfSSL 14:167253f4e170 38019 /* 60 << 120 */
wolfSSL 14:167253f4e170 38020 { { 0xc681a8656a3cb3afl,0x528f25a981751414l,0x6669f07cc7eac946l,
wolfSSL 14:167253f4e170 38021 0x9fb3a53f3cc6cc6bl },
wolfSSL 14:167253f4e170 38022 { 0x2919d92a11ae224al,0xa59141110b170a19l,0xdc16c611e2042f16l,
wolfSSL 14:167253f4e170 38023 0x58ace12decd4180bl },
wolfSSL 14:167253f4e170 38024 0 },
wolfSSL 14:167253f4e170 38025 /* 61 << 120 */
wolfSSL 14:167253f4e170 38026 { { 0x689bb1ec107bb59fl,0x8129702adad2b385l,0x10bd3baeb1630603l,
wolfSSL 14:167253f4e170 38027 0xaadec5d15f23e7cfl },
wolfSSL 14:167253f4e170 38028 { 0x572f234f4586f7fbl,0x13abdec95ec11b32l,0xa462a7ec6191c26al,
wolfSSL 14:167253f4e170 38029 0x4a7d92a06685c8d3l },
wolfSSL 14:167253f4e170 38030 0 },
wolfSSL 14:167253f4e170 38031 /* 63 << 120 */
wolfSSL 14:167253f4e170 38032 { { 0xdd4e2b63b16628eal,0xdf0c8fc8eefa5e86l,0xb0ec710205662720l,
wolfSSL 14:167253f4e170 38033 0x3f4c6956fe81e9dal },
wolfSSL 14:167253f4e170 38034 { 0x5732ad8f52e356f7l,0x045a103968a658f0l,0x9c40b0b6506ba33al,
wolfSSL 14:167253f4e170 38035 0x0a426010cb54258dl },
wolfSSL 14:167253f4e170 38036 0 },
wolfSSL 14:167253f4e170 38037 /* 64 << 120 */
wolfSSL 14:167253f4e170 38038 { { 0x09891641d4c5105fl,0x1ae80f8e6d7fbd65l,0x9d67225fbee6bdb0l,
wolfSSL 14:167253f4e170 38039 0x3b433b597fc4d860l },
wolfSSL 14:167253f4e170 38040 { 0x44e66db693e85638l,0xf7b59252e3e9862fl,0xdb785157665c32ecl,
wolfSSL 14:167253f4e170 38041 0x702fefd7ae362f50l },
wolfSSL 14:167253f4e170 38042 0 },
wolfSSL 14:167253f4e170 38043 /* 65 << 120 */
wolfSSL 14:167253f4e170 38044 { { 0x3902ab14c3254641l,0xa63cfd9fd8c001c8l,0x597d155c52d0af3cl,
wolfSSL 14:167253f4e170 38045 0xc5a2cbc4a0dbe688l },
wolfSSL 14:167253f4e170 38046 { 0xac8a841b249195aal,0xc98f01aaed14426fl,0xeb4a8ce8353905f1l,
wolfSSL 14:167253f4e170 38047 0x4d6668171ecee1b7l },
wolfSSL 14:167253f4e170 38048 0 },
wolfSSL 14:167253f4e170 38049 /* 71 << 120 */
wolfSSL 14:167253f4e170 38050 { { 0xbd66e7d9a94da8cdl,0x7bc04735801ef314l,0x90f3eba1c5cc2904l,
wolfSSL 14:167253f4e170 38051 0x3c7dfed6f71bb36dl },
wolfSSL 14:167253f4e170 38052 { 0x89a50c8da75e3086l,0x88b8b4746f8e3418l,0x26fe17f4a44a5dbdl,
wolfSSL 14:167253f4e170 38053 0x98bf74c16a1e24fel },
wolfSSL 14:167253f4e170 38054 0 },
wolfSSL 14:167253f4e170 38055 /* 77 << 120 */
wolfSSL 14:167253f4e170 38056 { { 0xca7b470679e0db85l,0x7f46c7716fc897fdl,0x9537e7918edfc0f3l,
wolfSSL 14:167253f4e170 38057 0xa46d4b4405e91ddfl },
wolfSSL 14:167253f4e170 38058 { 0x97d21061ee5575e7l,0x1f4f32da59650429l,0x2d1d6af878995129l,
wolfSSL 14:167253f4e170 38059 0x41d6fc228a0e4260l },
wolfSSL 14:167253f4e170 38060 0 },
wolfSSL 14:167253f4e170 38061 /* 83 << 120 */
wolfSSL 14:167253f4e170 38062 { { 0xb30a1a89107d2282l,0x5433d7673a5e1323l,0xb9eeab822abdfeafl,
wolfSSL 14:167253f4e170 38063 0x9579cb46df3e0dbfl },
wolfSSL 14:167253f4e170 38064 { 0x6fc3ff2c7e088e79l,0x94b32360d7314326l,0xd2e82b59e5ad82e4l,
wolfSSL 14:167253f4e170 38065 0x7372dc4a55bc24e3l },
wolfSSL 14:167253f4e170 38066 0 },
wolfSSL 14:167253f4e170 38067 /* 89 << 120 */
wolfSSL 14:167253f4e170 38068 { { 0x355697215f3c03cbl,0x4150adf2a146edcdl,0x16ec1a421a252e1cl,
wolfSSL 14:167253f4e170 38069 0xdf4d0f94424984eal },
wolfSSL 14:167253f4e170 38070 { 0x15142b5f5fabe961l,0xe6a73c29567ec13al,0xe6d370795d12070al,
wolfSSL 14:167253f4e170 38071 0x437743d0206fd7c6l },
wolfSSL 14:167253f4e170 38072 0 },
wolfSSL 14:167253f4e170 38073 /* 95 << 120 */
wolfSSL 14:167253f4e170 38074 { { 0x483b7a95d66bc594l,0xf6a7064e8a6113bbl,0x373ce20f4ed34f72l,
wolfSSL 14:167253f4e170 38075 0x6aa876ab24f429b2l },
wolfSSL 14:167253f4e170 38076 { 0x378d5c25412c3102l,0xe4219a97b493199cl,0x01c7cafaa0b37332l,
wolfSSL 14:167253f4e170 38077 0x9305cc85f7633f7dl },
wolfSSL 14:167253f4e170 38078 0 },
wolfSSL 14:167253f4e170 38079 /* 101 << 120 */
wolfSSL 14:167253f4e170 38080 { { 0x0259b43aaadf2273l,0x869c5bd3cf9dc1c2l,0x4f18a6e4068d6628l,
wolfSSL 14:167253f4e170 38081 0xd110637fec2d4547l },
wolfSSL 14:167253f4e170 38082 { 0x1ae88a791e94aaddl,0xe8b4be39de64f5f9l,0x85cbd9b24dc6b2bbl,
wolfSSL 14:167253f4e170 38083 0xb65091fa1bc352b2l },
wolfSSL 14:167253f4e170 38084 0 },
wolfSSL 14:167253f4e170 38085 /* 107 << 120 */
wolfSSL 14:167253f4e170 38086 { { 0x7c5cea5d20f6a354l,0xe936ff1582f3ed39l,0x54e7a775b779368el,
wolfSSL 14:167253f4e170 38087 0x8ca8a46e3cb17c9el },
wolfSSL 14:167253f4e170 38088 { 0x753ca1fa0138974dl,0x9ce311eba72902ffl,0xcb727e56973f72b6l,
wolfSSL 14:167253f4e170 38089 0xde72538d91685710l },
wolfSSL 14:167253f4e170 38090 0 },
wolfSSL 14:167253f4e170 38091 /* 113 << 120 */
wolfSSL 14:167253f4e170 38092 { { 0xf423569f1bec8f85l,0x23376da5ca844ac4l,0xce7b407a111523f4l,
wolfSSL 14:167253f4e170 38093 0x736fb92dde7aa46dl },
wolfSSL 14:167253f4e170 38094 { 0xd9139edcc7662640l,0x520fbf0656a85e24l,0x14e3b5857e5284b5l,
wolfSSL 14:167253f4e170 38095 0xcbae4e8321d56ef3l },
wolfSSL 14:167253f4e170 38096 0 },
wolfSSL 14:167253f4e170 38097 /* 116 << 120 */
wolfSSL 14:167253f4e170 38098 { { 0x69830a05564470a1l,0x1a1e26cf5b702e8el,0xe5fdf7d9d8fae645l,
wolfSSL 14:167253f4e170 38099 0xe4774f74a9950c66l },
wolfSSL 14:167253f4e170 38100 { 0x18bdda7cd1466825l,0xe6ab4ce6d115218al,0xfcb8c50064528629l,
wolfSSL 14:167253f4e170 38101 0xd705f429e70deed9l },
wolfSSL 14:167253f4e170 38102 0 },
wolfSSL 14:167253f4e170 38103 /* 119 << 120 */
wolfSSL 14:167253f4e170 38104 { { 0x3f992d7ba99df096l,0x08993b4125e78725l,0x79eaad13117c4cafl,
wolfSSL 14:167253f4e170 38105 0x7230594c9fa87285l },
wolfSSL 14:167253f4e170 38106 { 0xac23d7edf2673e27l,0xc9d76fb53b9eb111l,0x7a0a036a9e9db78al,
wolfSSL 14:167253f4e170 38107 0x7c6ec39df9565cffl },
wolfSSL 14:167253f4e170 38108 0 },
wolfSSL 14:167253f4e170 38109 /* 125 << 120 */
wolfSSL 14:167253f4e170 38110 { { 0x956ad1441fd4f7a1l,0x6c511ffecb7546cal,0x11becdaef5ae6ddbl,
wolfSSL 14:167253f4e170 38111 0x67587741946168b2l },
wolfSSL 14:167253f4e170 38112 { 0x99cd45edf54379a7l,0x687f8462e2748decl,0x2b2be1e1837bd066l,
wolfSSL 14:167253f4e170 38113 0x3862659c0c45a5a9l },
wolfSSL 14:167253f4e170 38114 0 },
wolfSSL 14:167253f4e170 38115 },
wolfSSL 14:167253f4e170 38116 {
wolfSSL 14:167253f4e170 38117 /* 0 << 128 */
wolfSSL 14:167253f4e170 38118 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 38119 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 38120 1 },
wolfSSL 14:167253f4e170 38121 /* 1 << 128 */
wolfSSL 14:167253f4e170 38122 { { 0x62a8c244bfe20925l,0x91c19ac38fdce867l,0x5a96a5d5dd387063l,
wolfSSL 14:167253f4e170 38123 0x61d587d421d324f6l },
wolfSSL 14:167253f4e170 38124 { 0xe87673a2a37173eal,0x2384800853778b65l,0x10f8441e05bab43el,
wolfSSL 14:167253f4e170 38125 0xfa11fe124621efbel },
wolfSSL 14:167253f4e170 38126 0 },
wolfSSL 14:167253f4e170 38127 /* 3 << 128 */
wolfSSL 14:167253f4e170 38128 { { 0xc0f734a3b2335834l,0x9526205a90ef6860l,0xcb8be71704e2bb0dl,
wolfSSL 14:167253f4e170 38129 0x2418871e02f383fal },
wolfSSL 14:167253f4e170 38130 { 0xd71776814082c157l,0xcc914ad029c20073l,0xf186c1ebe587e728l,
wolfSSL 14:167253f4e170 38131 0x6fdb3c2261bcd5fdl },
wolfSSL 14:167253f4e170 38132 0 },
wolfSSL 14:167253f4e170 38133 /* 4 << 128 */
wolfSSL 14:167253f4e170 38134 { { 0xb4480f0441c23fa3l,0xb4712eb0c1989a2el,0x3ccbba0f93a29ca7l,
wolfSSL 14:167253f4e170 38135 0x6e205c14d619428cl },
wolfSSL 14:167253f4e170 38136 { 0x90db7957b3641686l,0x0432691d45ac8b4el,0x07a759acf64e0350l,
wolfSSL 14:167253f4e170 38137 0x0514d89c9c972517l },
wolfSSL 14:167253f4e170 38138 0 },
wolfSSL 14:167253f4e170 38139 /* 5 << 128 */
wolfSSL 14:167253f4e170 38140 { { 0xcc7c4c1c2cf9d7c1l,0x1320886aee95e5abl,0xbb7b9056beae170cl,
wolfSSL 14:167253f4e170 38141 0xc8a5b250dbc0d662l },
wolfSSL 14:167253f4e170 38142 { 0x4ed81432c11d2303l,0x7da669121f03769fl,0x3ac7a5fd84539828l,
wolfSSL 14:167253f4e170 38143 0x14dada943bccdd02l },
wolfSSL 14:167253f4e170 38144 0 },
wolfSSL 14:167253f4e170 38145 /* 7 << 128 */
wolfSSL 14:167253f4e170 38146 { { 0x51b90651cbae2f70l,0xefc4bc0593aaa8ebl,0x8ecd8689dd1df499l,
wolfSSL 14:167253f4e170 38147 0x1aee99a822f367a5l },
wolfSSL 14:167253f4e170 38148 { 0x95d485b9ae8274c5l,0x6c14d4457d30b39cl,0xbafea90bbcc1ef81l,
wolfSSL 14:167253f4e170 38149 0x7c5f317aa459a2edl },
wolfSSL 14:167253f4e170 38150 0 },
wolfSSL 14:167253f4e170 38151 /* 9 << 128 */
wolfSSL 14:167253f4e170 38152 { { 0x410dc6a90deeaf52l,0xb003fb024c641c15l,0x1384978c5bc504c4l,
wolfSSL 14:167253f4e170 38153 0x37640487864a6a77l },
wolfSSL 14:167253f4e170 38154 { 0x05991bc6222a77dal,0x62260a575e47eb11l,0xc7af6613f21b432cl,
wolfSSL 14:167253f4e170 38155 0x22f3acc9ab4953e9l },
wolfSSL 14:167253f4e170 38156 0 },
wolfSSL 14:167253f4e170 38157 /* 10 << 128 */
wolfSSL 14:167253f4e170 38158 { { 0x27c8919240be34e8l,0xc7162b3791907f35l,0x90188ec1a956702bl,
wolfSSL 14:167253f4e170 38159 0xca132f7ddf93769cl },
wolfSSL 14:167253f4e170 38160 { 0x3ece44f90e2025b4l,0x67aaec690c62f14cl,0xad74141822e3cc11l,
wolfSSL 14:167253f4e170 38161 0xcf9b75c37ff9a50el },
wolfSSL 14:167253f4e170 38162 0 },
wolfSSL 14:167253f4e170 38163 /* 11 << 128 */
wolfSSL 14:167253f4e170 38164 { { 0x0d0942770c24efc8l,0x0349fd04bef737a4l,0x6d1c9dd2514cdd28l,
wolfSSL 14:167253f4e170 38165 0x29c135ff30da9521l },
wolfSSL 14:167253f4e170 38166 { 0xea6e4508f78b0b6fl,0x176f5dd2678c143cl,0x081484184be21e65l,
wolfSSL 14:167253f4e170 38167 0x27f7525ce7df38c4l },
wolfSSL 14:167253f4e170 38168 0 },
wolfSSL 14:167253f4e170 38169 /* 13 << 128 */
wolfSSL 14:167253f4e170 38170 { { 0x9faaccf5e4652f1dl,0xbd6fdd2ad56157b2l,0xa4f4fb1f6261ec50l,
wolfSSL 14:167253f4e170 38171 0x244e55ad476bcd52l },
wolfSSL 14:167253f4e170 38172 { 0x881c9305047d320bl,0x1ca983d56181263fl,0x354e9a44278fb8eel,
wolfSSL 14:167253f4e170 38173 0xad2dbc0f396e4964l },
wolfSSL 14:167253f4e170 38174 0 },
wolfSSL 14:167253f4e170 38175 /* 15 << 128 */
wolfSSL 14:167253f4e170 38176 { { 0xfce0176788a2ffe4l,0xdc506a3528e169a5l,0x0ea108617af9c93al,
wolfSSL 14:167253f4e170 38177 0x1ed2436103fa0e08l },
wolfSSL 14:167253f4e170 38178 { 0x96eaaa92a3d694e7l,0xc0f43b4def50bc74l,0xce6aa58c64114db4l,
wolfSSL 14:167253f4e170 38179 0x8218e8ea7c000fd4l },
wolfSSL 14:167253f4e170 38180 0 },
wolfSSL 14:167253f4e170 38181 /* 16 << 128 */
wolfSSL 14:167253f4e170 38182 { { 0x6a7091c2e48fb889l,0x26882c137b8a9d06l,0xa24986631b82a0e2l,
wolfSSL 14:167253f4e170 38183 0x844ed7363518152dl },
wolfSSL 14:167253f4e170 38184 { 0x282f476fd86e27c7l,0xa04edaca04afefdcl,0x8b256ebc6119e34dl,
wolfSSL 14:167253f4e170 38185 0x56a413e90787d78bl },
wolfSSL 14:167253f4e170 38186 0 },
wolfSSL 14:167253f4e170 38187 /* 17 << 128 */
wolfSSL 14:167253f4e170 38188 { { 0xd1ffd160deb58b9bl,0x78492428c007273cl,0x47c908048ef06073l,
wolfSSL 14:167253f4e170 38189 0x746cd0dfe48c659el },
wolfSSL 14:167253f4e170 38190 { 0xbd7e8e109d47055bl,0xe070967e39711c04l,0x3d8869c99c9444f6l,
wolfSSL 14:167253f4e170 38191 0x6c67ccc834ac85fcl },
wolfSSL 14:167253f4e170 38192 0 },
wolfSSL 14:167253f4e170 38193 /* 19 << 128 */
wolfSSL 14:167253f4e170 38194 { { 0x8a42d8b087b05be1l,0xef00df8d3e4e1456l,0x148cc8e8fbfc8cd2l,
wolfSSL 14:167253f4e170 38195 0x0288ae4c4878804fl },
wolfSSL 14:167253f4e170 38196 { 0x44e669a73b4f6872l,0xa4a8dbd4aab53c5bl,0x843fa963c9660052l,
wolfSSL 14:167253f4e170 38197 0x128e2d2571c05dd2l },
wolfSSL 14:167253f4e170 38198 0 },
wolfSSL 14:167253f4e170 38199 /* 21 << 128 */
wolfSSL 14:167253f4e170 38200 { { 0x3ea86174a9f1b59bl,0xc747ea076a9a8845l,0x733710b5ab242123l,
wolfSSL 14:167253f4e170 38201 0x6381b546d386a60cl },
wolfSSL 14:167253f4e170 38202 { 0xba0e286366a44904l,0x770f618de9db556cl,0x39e567f828fb198dl,
wolfSSL 14:167253f4e170 38203 0xb5f1bef040147ee8l },
wolfSSL 14:167253f4e170 38204 0 },
wolfSSL 14:167253f4e170 38205 /* 23 << 128 */
wolfSSL 14:167253f4e170 38206 { { 0x1adee1d516391617l,0x962d9184a3315fd9l,0x91c229750c805d59l,
wolfSSL 14:167253f4e170 38207 0x4575eaf2cd9a1877l },
wolfSSL 14:167253f4e170 38208 { 0x83fef163451831b9l,0x829d6bdd6f09e30fl,0x9379272dcc6b4e6al,
wolfSSL 14:167253f4e170 38209 0xd7a049bd95fbee4al },
wolfSSL 14:167253f4e170 38210 0 },
wolfSSL 14:167253f4e170 38211 /* 25 << 128 */
wolfSSL 14:167253f4e170 38212 { { 0x695f70da44ae09c6l,0x79793892bb99de1dl,0xde269352f696b429l,
wolfSSL 14:167253f4e170 38213 0xe37ea97f8104c825l },
wolfSSL 14:167253f4e170 38214 { 0x3166cac6b0e72e63l,0xa82e633ca03ba670l,0x1106e3843e505667l,
wolfSSL 14:167253f4e170 38215 0xc2994f3dffb788b6l },
wolfSSL 14:167253f4e170 38216 0 },
wolfSSL 14:167253f4e170 38217 /* 27 << 128 */
wolfSSL 14:167253f4e170 38218 { { 0xd36a5ab37c53073bl,0xc44a9940ebdc7e35l,0x7dd86c8bf3ded136l,
wolfSSL 14:167253f4e170 38219 0x9fe9879fd5a0eb14l },
wolfSSL 14:167253f4e170 38220 { 0xa210726c9b99bf9cl,0x3faf4456861036afl,0x1661f1c9615d091al,
wolfSSL 14:167253f4e170 38221 0x2c63f630911551bcl },
wolfSSL 14:167253f4e170 38222 0 },
wolfSSL 14:167253f4e170 38223 /* 28 << 128 */
wolfSSL 14:167253f4e170 38224 { { 0x1554d46da670ff1dl,0x24833d88cb97a1ccl,0x8fa6ab3cded97493l,
wolfSSL 14:167253f4e170 38225 0x215e037189926498l },
wolfSSL 14:167253f4e170 38226 { 0x549bd592e56d74ffl,0x58a8caf543b5e1ecl,0x3c6087a323e93cb9l,
wolfSSL 14:167253f4e170 38227 0x8b0549875648b83cl },
wolfSSL 14:167253f4e170 38228 0 },
wolfSSL 14:167253f4e170 38229 /* 29 << 128 */
wolfSSL 14:167253f4e170 38230 { { 0x232974230554f94fl,0x4f445a380f3a7618l,0xb9fb40bee4abefd6l,
wolfSSL 14:167253f4e170 38231 0xfbf3eaf9c15eb07cl },
wolfSSL 14:167253f4e170 38232 { 0xed469c23aca0c8b3l,0xc5209f68846e3f8fl,0x33d51d13d75da468l,
wolfSSL 14:167253f4e170 38233 0x9406e10a3d5c6e29l },
wolfSSL 14:167253f4e170 38234 0 },
wolfSSL 14:167253f4e170 38235 /* 31 << 128 */
wolfSSL 14:167253f4e170 38236 { { 0xb9a44b1f5c6cad21l,0xaa9947751ee60a83l,0xc89af3858c390401l,
wolfSSL 14:167253f4e170 38237 0xef1e450b8dd51056l },
wolfSSL 14:167253f4e170 38238 { 0x5f5f069879ac84d1l,0x68d82982ef57b1afl,0x31f1d90f50849555l,
wolfSSL 14:167253f4e170 38239 0xff9577e57d9fc8f6l },
wolfSSL 14:167253f4e170 38240 0 },
wolfSSL 14:167253f4e170 38241 /* 33 << 128 */
wolfSSL 14:167253f4e170 38242 { { 0xaeebc5c0b430d6a1l,0x39b87a13dc3a9c04l,0xf0c445252db4a631l,
wolfSSL 14:167253f4e170 38243 0xe32d95482c66fcf6l },
wolfSSL 14:167253f4e170 38244 { 0x16f11bafb17849c4l,0xdd1c76615eca71f7l,0x4389ad2e32e6c944l,
wolfSSL 14:167253f4e170 38245 0x727c11a5889a06bbl },
wolfSSL 14:167253f4e170 38246 0 },
wolfSSL 14:167253f4e170 38247 /* 34 << 128 */
wolfSSL 14:167253f4e170 38248 { { 0x38dd1ac021e5781al,0x578318dbfd019ee2l,0x096b677d5f88e574l,
wolfSSL 14:167253f4e170 38249 0xdbec82b216ad9f4fl },
wolfSSL 14:167253f4e170 38250 { 0x348debe23260e8d9l,0x9334126064dfcda1l,0xdc5fb34cefc8faael,
wolfSSL 14:167253f4e170 38251 0x5fa048beb4a6fc25l },
wolfSSL 14:167253f4e170 38252 0 },
wolfSSL 14:167253f4e170 38253 /* 35 << 128 */
wolfSSL 14:167253f4e170 38254 { { 0xe18806fd60b3258cl,0xb7d2926b1364df47l,0xe208300fa107ce99l,
wolfSSL 14:167253f4e170 38255 0x8d2f29fe7918df0el },
wolfSSL 14:167253f4e170 38256 { 0x0b012d77a1244f4cl,0xf01076f4213a11cfl,0x8e623223181c559dl,
wolfSSL 14:167253f4e170 38257 0x9df196ee995a281dl },
wolfSSL 14:167253f4e170 38258 0 },
wolfSSL 14:167253f4e170 38259 /* 36 << 128 */
wolfSSL 14:167253f4e170 38260 { { 0xc431a238013ff83bl,0x7c0018b2fad69d08l,0x99aeb52a4c9589eal,
wolfSSL 14:167253f4e170 38261 0x121f41ab9b1cf19fl },
wolfSSL 14:167253f4e170 38262 { 0x0cfbbcbaef0f5958l,0x8deb3aeb7be8fbdcl,0x12b954081f15aa31l,
wolfSSL 14:167253f4e170 38263 0x5acc09b34c0c06fdl },
wolfSSL 14:167253f4e170 38264 0 },
wolfSSL 14:167253f4e170 38265 /* 37 << 128 */
wolfSSL 14:167253f4e170 38266 { { 0xfaa821383a721940l,0xdd70f54dd0008b83l,0x00decb507d32a52dl,
wolfSSL 14:167253f4e170 38267 0x04563529cdd87deal },
wolfSSL 14:167253f4e170 38268 { 0xb0e7e2a2db81643dl,0x445f4c383a6fef50l,0x5c0ef211df694ae1l,
wolfSSL 14:167253f4e170 38269 0xa5a8fead923d0f1cl },
wolfSSL 14:167253f4e170 38270 0 },
wolfSSL 14:167253f4e170 38271 /* 39 << 128 */
wolfSSL 14:167253f4e170 38272 { { 0xbc0e08b0325b2601l,0xae9e4c6105815b7al,0x07f664faf944a4a1l,
wolfSSL 14:167253f4e170 38273 0x0ad19d29288f83b3l },
wolfSSL 14:167253f4e170 38274 { 0x8615cd677232c458l,0x98edff6e9038e7d1l,0x082e0c4395a4dfccl,
wolfSSL 14:167253f4e170 38275 0x336267afeceee00el },
wolfSSL 14:167253f4e170 38276 0 },
wolfSSL 14:167253f4e170 38277 /* 40 << 128 */
wolfSSL 14:167253f4e170 38278 { { 0x775cbfa86d518ffbl,0xdecee1f6930f124bl,0x9a402804f5e81d0fl,
wolfSSL 14:167253f4e170 38279 0x0e8225c52a0eeb2fl },
wolfSSL 14:167253f4e170 38280 { 0x884a5d39fee9e867l,0x9540428ffb505454l,0xb2bf2e20107a70d1l,
wolfSSL 14:167253f4e170 38281 0xd9917c3ba010b2aal },
wolfSSL 14:167253f4e170 38282 0 },
wolfSSL 14:167253f4e170 38283 /* 41 << 128 */
wolfSSL 14:167253f4e170 38284 { { 0xc88ad4452a29bfdel,0x3072ebfa998368b7l,0xa754cbf7f5384692l,
wolfSSL 14:167253f4e170 38285 0x85f7e16906b13146l },
wolfSSL 14:167253f4e170 38286 { 0x42a7095f6a549fbel,0xef44edf91f7f1f42l,0xbea2989737b0c863l,
wolfSSL 14:167253f4e170 38287 0x13b096d87a1e7fc3l },
wolfSSL 14:167253f4e170 38288 0 },
wolfSSL 14:167253f4e170 38289 /* 43 << 128 */
wolfSSL 14:167253f4e170 38290 { { 0x51add77ce2a3a251l,0x840ca1384d8476adl,0x08d01d26f6096478l,
wolfSSL 14:167253f4e170 38291 0x10d501a532f1662bl },
wolfSSL 14:167253f4e170 38292 { 0xc8d63f811165a955l,0x587aa2e34095046al,0x759506c617af9000l,
wolfSSL 14:167253f4e170 38293 0xd6201fe4a32ab8d2l },
wolfSSL 14:167253f4e170 38294 0 },
wolfSSL 14:167253f4e170 38295 /* 44 << 128 */
wolfSSL 14:167253f4e170 38296 { { 0xa98f42fa3d843d53l,0x33777cc613ef927al,0xc440cdbecb84ca74l,
wolfSSL 14:167253f4e170 38297 0x8c22f9631dc7c5ddl },
wolfSSL 14:167253f4e170 38298 { 0x4bc82b70c8d94708l,0x7e0b43fcc814364fl,0x286d4e2486f59b7el,
wolfSSL 14:167253f4e170 38299 0x1abc895e4d6bf4c4l },
wolfSSL 14:167253f4e170 38300 0 },
wolfSSL 14:167253f4e170 38301 /* 45 << 128 */
wolfSSL 14:167253f4e170 38302 { { 0x7c52500cfc8c9bbdl,0x635563381534d9f7l,0xf55f38cbfd52c990l,
wolfSSL 14:167253f4e170 38303 0xc585ae85058f52e7l },
wolfSSL 14:167253f4e170 38304 { 0xb710a28bf9f19a01l,0x891861bdf0273ca4l,0x38a7aa2b034b0b7cl,
wolfSSL 14:167253f4e170 38305 0xa2ecead52a809fb1l },
wolfSSL 14:167253f4e170 38306 0 },
wolfSSL 14:167253f4e170 38307 /* 46 << 128 */
wolfSSL 14:167253f4e170 38308 { { 0x3df614f1ec3ca8eal,0x6bb24e9f9505bc08l,0x23ba1afbf37ace22l,
wolfSSL 14:167253f4e170 38309 0x2e51b03b3463c261l },
wolfSSL 14:167253f4e170 38310 { 0x59a0fca9c39e6558l,0x819f271ca342ccd9l,0x0c913d54df7ac033l,
wolfSSL 14:167253f4e170 38311 0xba0f83de573257d3l },
wolfSSL 14:167253f4e170 38312 0 },
wolfSSL 14:167253f4e170 38313 /* 47 << 128 */
wolfSSL 14:167253f4e170 38314 { { 0xdf62817ab3b32fbcl,0x616d74b0964670d4l,0xa37bc6270e26020bl,
wolfSSL 14:167253f4e170 38315 0xda46d655b7d40bdal },
wolfSSL 14:167253f4e170 38316 { 0x2840f155b5773f84l,0xbb633777897774b6l,0x59ff1df79a1ed3fal,
wolfSSL 14:167253f4e170 38317 0xf7011ee2bac571f9l },
wolfSSL 14:167253f4e170 38318 0 },
wolfSSL 14:167253f4e170 38319 /* 48 << 128 */
wolfSSL 14:167253f4e170 38320 { { 0x38151e274d559d96l,0x4f18c0d3b8db6c01l,0x49a3aa836f9921afl,
wolfSSL 14:167253f4e170 38321 0xdbeab27b8c046029l },
wolfSSL 14:167253f4e170 38322 { 0x242b9eaa7040bf3bl,0x39c479e51614b091l,0x338ede2b0e4baf5dl,
wolfSSL 14:167253f4e170 38323 0x5bb192b7f0a53945l },
wolfSSL 14:167253f4e170 38324 0 },
wolfSSL 14:167253f4e170 38325 /* 49 << 128 */
wolfSSL 14:167253f4e170 38326 { { 0xd612951861535bb0l,0xbf14364016f6a954l,0x3e0931eedde18024l,
wolfSSL 14:167253f4e170 38327 0x79d791c8139441c0l },
wolfSSL 14:167253f4e170 38328 { 0xba4fe7ecb67b8269l,0x7f30d848224b96c1l,0xa7e0a6abf0341068l,
wolfSSL 14:167253f4e170 38329 0x78db42c37198ea2dl },
wolfSSL 14:167253f4e170 38330 0 },
wolfSSL 14:167253f4e170 38331 /* 51 << 128 */
wolfSSL 14:167253f4e170 38332 { { 0x13354044185ce776l,0x109a6e059ff0100cl,0xafa3b61b03144cb1l,
wolfSSL 14:167253f4e170 38333 0x4e4c814585265586l },
wolfSSL 14:167253f4e170 38334 { 0xa8dafd33edb35364l,0x6691781bfd2606bel,0x2e06a9786182f5ccl,
wolfSSL 14:167253f4e170 38335 0x588784ebe77faeecl },
wolfSSL 14:167253f4e170 38336 0 },
wolfSSL 14:167253f4e170 38337 /* 52 << 128 */
wolfSSL 14:167253f4e170 38338 { { 0x896d572337e440d7l,0x685c5fd9ade23f68l,0xb5b1a26dc2c64918l,
wolfSSL 14:167253f4e170 38339 0xb9390e30dad6580cl },
wolfSSL 14:167253f4e170 38340 { 0x87911c4e7dee5b9bl,0xb90c5053deb04f6el,0x37b942a18f065aa6l,
wolfSSL 14:167253f4e170 38341 0x34acdf2a1ca0928dl },
wolfSSL 14:167253f4e170 38342 0 },
wolfSSL 14:167253f4e170 38343 /* 53 << 128 */
wolfSSL 14:167253f4e170 38344 { { 0xc773f525606f8f04l,0x75ae4a4b41b0a5bbl,0xb2aa058eaf7df93cl,
wolfSSL 14:167253f4e170 38345 0xf15bea4feafed676l },
wolfSSL 14:167253f4e170 38346 { 0xd2967b236a3c4fd7l,0xa698628090e30e7fl,0xf1b5166d316418bdl,
wolfSSL 14:167253f4e170 38347 0x5748682e1c13cb29l },
wolfSSL 14:167253f4e170 38348 0 },
wolfSSL 14:167253f4e170 38349 /* 55 << 128 */
wolfSSL 14:167253f4e170 38350 { { 0xe7b11babfff3605bl,0xdbce1b74cbac080fl,0xa0be39bd6535f082l,
wolfSSL 14:167253f4e170 38351 0x2b6501805f826684l },
wolfSSL 14:167253f4e170 38352 { 0xf90cea2400f5244fl,0xe279f2fadd244a1cl,0xd3fca77c9421c3ael,
wolfSSL 14:167253f4e170 38353 0xe66bc7ee81a5210al },
wolfSSL 14:167253f4e170 38354 0 },
wolfSSL 14:167253f4e170 38355 /* 57 << 128 */
wolfSSL 14:167253f4e170 38356 { { 0x114085dac40c6461l,0xaf78cb47f47d41b8l,0x7a9ae851755b0adbl,
wolfSSL 14:167253f4e170 38357 0x8d2e8c66a0600b6dl },
wolfSSL 14:167253f4e170 38358 { 0x5fb19045389758c0l,0xfa6e2cdabe7c91b2l,0x6472a432663983a2l,
wolfSSL 14:167253f4e170 38359 0xc9370829e0e19363l },
wolfSSL 14:167253f4e170 38360 0 },
wolfSSL 14:167253f4e170 38361 /* 59 << 128 */
wolfSSL 14:167253f4e170 38362 { { 0xd335856ec50bf2ffl,0x89b42295dfa708c2l,0x5dfb42241b201b4el,
wolfSSL 14:167253f4e170 38363 0x6c94d6b94eecbf9cl },
wolfSSL 14:167253f4e170 38364 { 0xabe5a47a7a634097l,0xf3d53b1643febecfl,0xff18619faca9846el,
wolfSSL 14:167253f4e170 38365 0x80ad8629a4066177l },
wolfSSL 14:167253f4e170 38366 0 },
wolfSSL 14:167253f4e170 38367 /* 60 << 128 */
wolfSSL 14:167253f4e170 38368 { { 0x7872e34b3390ff23l,0x968ce4abde7d18efl,0x9b4a745e627fe7b1l,
wolfSSL 14:167253f4e170 38369 0x9607b0a0caff3e2al },
wolfSSL 14:167253f4e170 38370 { 0x1b05818eeb40e3a5l,0x6ac62204c0fa8d7al,0xb5b9058571ed4809l,
wolfSSL 14:167253f4e170 38371 0xb2432ef0f7cb65f2l },
wolfSSL 14:167253f4e170 38372 0 },
wolfSSL 14:167253f4e170 38373 /* 61 << 128 */
wolfSSL 14:167253f4e170 38374 { { 0xc1203418f8a144b7l,0xb3413f808378f901l,0xf6badea161857095l,
wolfSSL 14:167253f4e170 38375 0xcd2816c2b2e93efel },
wolfSSL 14:167253f4e170 38376 { 0x6a8303ea174a0ee6l,0x98b62f29150b28b6l,0x68071bbc9c2a05b6l,
wolfSSL 14:167253f4e170 38377 0xcfcf41a39f00e36el },
wolfSSL 14:167253f4e170 38378 0 },
wolfSSL 14:167253f4e170 38379 /* 63 << 128 */
wolfSSL 14:167253f4e170 38380 { { 0xcaf564f234d6bc29l,0x9e9a6507f3c8edb0l,0x2fb889edd4e5502el,
wolfSSL 14:167253f4e170 38381 0xb70d4ceb6cc9d8edl },
wolfSSL 14:167253f4e170 38382 { 0x0de25356b020f740l,0xa68d9263d11fe5e6l,0xe86400679d85dd77l,
wolfSSL 14:167253f4e170 38383 0xa95dfa7dec2c8c8dl },
wolfSSL 14:167253f4e170 38384 0 },
wolfSSL 14:167253f4e170 38385 /* 64 << 128 */
wolfSSL 14:167253f4e170 38386 { { 0x715c9f973112795fl,0xe8244437984e6ee1l,0x55cb4858ecb66bcdl,
wolfSSL 14:167253f4e170 38387 0x7c136735abaffbeel },
wolfSSL 14:167253f4e170 38388 { 0x546615955dbec38el,0x51c0782c388ad153l,0x9ba4c53ac6e0952fl,
wolfSSL 14:167253f4e170 38389 0x27e6782a1b21dfa8l },
wolfSSL 14:167253f4e170 38390 0 },
wolfSSL 14:167253f4e170 38391 /* 65 << 128 */
wolfSSL 14:167253f4e170 38392 { { 0x3f9bc63ece59397dl,0x3f0f98a93eaa6104l,0x2f82c37c002d9271l,
wolfSSL 14:167253f4e170 38393 0x6ac0495d4985353cl },
wolfSSL 14:167253f4e170 38394 { 0xbde52f629191527bl,0xa3a13fce475aa640l,0x1d71ae17ce673f89l,
wolfSSL 14:167253f4e170 38395 0x2b5cc61529120ec1l },
wolfSSL 14:167253f4e170 38396 0 },
wolfSSL 14:167253f4e170 38397 /* 71 << 128 */
wolfSSL 14:167253f4e170 38398 { { 0xa0ab0f9924318c1cl,0x0cc5ca7da80ca60bl,0x24e27598abb965bal,
wolfSSL 14:167253f4e170 38399 0xc4863198b44d1351l },
wolfSSL 14:167253f4e170 38400 { 0x4d913783a28f04bel,0x404e78088cce8960l,0x2973b4e46286873el,
wolfSSL 14:167253f4e170 38401 0x7b6e0f3219f42b50l },
wolfSSL 14:167253f4e170 38402 0 },
wolfSSL 14:167253f4e170 38403 /* 77 << 128 */
wolfSSL 14:167253f4e170 38404 { { 0x0091a786306a6349l,0x4640ceab2098622dl,0x9928022be8182233l,
wolfSSL 14:167253f4e170 38405 0xf261bee4514d0bedl },
wolfSSL 14:167253f4e170 38406 { 0x70cdcc44c5f64fedl,0x4e19fec4f9eb2dfel,0xd05bdc09058b0b69l,
wolfSSL 14:167253f4e170 38407 0x16f3007ed3bc6190l },
wolfSSL 14:167253f4e170 38408 0 },
wolfSSL 14:167253f4e170 38409 /* 83 << 128 */
wolfSSL 14:167253f4e170 38410 { { 0x8f7f16957f136df1l,0x6d7547019b4f4215l,0xfb22d55eb4cc46a6l,
wolfSSL 14:167253f4e170 38411 0x0b53ef53a8563034l },
wolfSSL 14:167253f4e170 38412 { 0x8b105acc42bc9353l,0xe44c0a396079d59dl,0x78441fee35ee38ddl,
wolfSSL 14:167253f4e170 38413 0x87ad93e43dcc0119l },
wolfSSL 14:167253f4e170 38414 0 },
wolfSSL 14:167253f4e170 38415 /* 89 << 128 */
wolfSSL 14:167253f4e170 38416 { { 0x98a1c55358d9f73al,0xaa0843f0540e2b91l,0x701f8831d0647459l,
wolfSSL 14:167253f4e170 38417 0xc4ae9d0484673005l },
wolfSSL 14:167253f4e170 38418 { 0x9c37bc9f30b3ea20l,0x24cb4e2dbcbfb2b2l,0x8513e6f313cbf070l,
wolfSSL 14:167253f4e170 38419 0x0c4db4334e76c79el },
wolfSSL 14:167253f4e170 38420 0 },
wolfSSL 14:167253f4e170 38421 /* 95 << 128 */
wolfSSL 14:167253f4e170 38422 { { 0x882a2b9cbc8320b8l,0x16e9c11e3ad9e222l,0x24399ac19b23cb1dl,
wolfSSL 14:167253f4e170 38423 0x334c5496799a89c7l },
wolfSSL 14:167253f4e170 38424 { 0x72b6f9b8df3d774cl,0x42955bcbb11b6704l,0x3c4d6021ad2d4eafl,
wolfSSL 14:167253f4e170 38425 0x5416b309afe2b671l },
wolfSSL 14:167253f4e170 38426 0 },
wolfSSL 14:167253f4e170 38427 /* 101 << 128 */
wolfSSL 14:167253f4e170 38428 { { 0x1bbe9e662bf7c2a6l,0x22a3a10ca4acfddbl,0x2424eaab46bae581l,
wolfSSL 14:167253f4e170 38429 0xebec1bbf40d6bdadl },
wolfSSL 14:167253f4e170 38430 { 0xd7e3fa1a5b012aedl,0xc0f82c23f1dc6204l,0x42787c82e319477dl,
wolfSSL 14:167253f4e170 38431 0xca1ae7a14cf57573l },
wolfSSL 14:167253f4e170 38432 0 },
wolfSSL 14:167253f4e170 38433 /* 107 << 128 */
wolfSSL 14:167253f4e170 38434 { { 0x44b7d589d51bbde9l,0x15de755fd6a4cc98l,0x9b6ea8e582fb8e2el,
wolfSSL 14:167253f4e170 38435 0x9d9294f04332bc22l },
wolfSSL 14:167253f4e170 38436 { 0x53c6b2b7d1fa239al,0x286bf536693ca4f1l,0xc3fa754603c00f65l,
wolfSSL 14:167253f4e170 38437 0xc046713af49cdb48l },
wolfSSL 14:167253f4e170 38438 0 },
wolfSSL 14:167253f4e170 38439 /* 113 << 128 */
wolfSSL 14:167253f4e170 38440 { { 0xe356f5f11d82d5d6l,0xa0346a73d035ca0cl,0x14c76adee1884448l,
wolfSSL 14:167253f4e170 38441 0xd8369bdd1c23dde9l },
wolfSSL 14:167253f4e170 38442 { 0x13017862fe025eafl,0x6b5ac5e9a76be1d7l,0x52d621a94933bb6el,
wolfSSL 14:167253f4e170 38443 0xb045b53baa8c1d3fl },
wolfSSL 14:167253f4e170 38444 0 },
wolfSSL 14:167253f4e170 38445 /* 116 << 128 */
wolfSSL 14:167253f4e170 38446 { { 0x242da39e4e40466al,0xc03cb184ac322b07l,0x776b744f9aaa10bfl,
wolfSSL 14:167253f4e170 38447 0xb80d9f14fe7d4beal },
wolfSSL 14:167253f4e170 38448 { 0x75cd14308f9c4908l,0xa4e59ce9087b3d7al,0x3bbdce598cdca614l,
wolfSSL 14:167253f4e170 38449 0x58c57113bc1a5df1l },
wolfSSL 14:167253f4e170 38450 0 },
wolfSSL 14:167253f4e170 38451 /* 119 << 128 */
wolfSSL 14:167253f4e170 38452 { { 0x2a70af1abd79d467l,0x68dc4f23f63e2b73l,0x4345572f1f67b23dl,
wolfSSL 14:167253f4e170 38453 0xc012b08f3a340718l },
wolfSSL 14:167253f4e170 38454 { 0x9458585cc963dbe2l,0x21d84032223a495cl,0x0d54a4ea0dc28159l,
wolfSSL 14:167253f4e170 38455 0xd9549e2c9b927dafl },
wolfSSL 14:167253f4e170 38456 0 },
wolfSSL 14:167253f4e170 38457 /* 125 << 128 */
wolfSSL 14:167253f4e170 38458 { { 0xcd54ebd2d43c8cd2l,0x5ff4ded6a817b9f9l,0x6f59bc31245386d3l,
wolfSSL 14:167253f4e170 38459 0x65b67cb0a2077821l },
wolfSSL 14:167253f4e170 38460 { 0x36407956405ffa07l,0x723e0252d589f27al,0x052004b888e1239el,
wolfSSL 14:167253f4e170 38461 0x8e6d188d69fdf94dl },
wolfSSL 14:167253f4e170 38462 0 },
wolfSSL 14:167253f4e170 38463 },
wolfSSL 14:167253f4e170 38464 {
wolfSSL 14:167253f4e170 38465 /* 0 << 136 */
wolfSSL 14:167253f4e170 38466 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 38467 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 38468 1 },
wolfSSL 14:167253f4e170 38469 /* 1 << 136 */
wolfSSL 14:167253f4e170 38470 { { 0xc16c236e846e364fl,0x7f33527cdea50ca0l,0xc48107750926b86dl,
wolfSSL 14:167253f4e170 38471 0x6c2a36090598e70cl },
wolfSSL 14:167253f4e170 38472 { 0xa6755e52f024e924l,0xe0fa07a49db4afcal,0x15c3ce7d66831790l,
wolfSSL 14:167253f4e170 38473 0x5b4ef350a6cbb0d6l },
wolfSSL 14:167253f4e170 38474 0 },
wolfSSL 14:167253f4e170 38475 /* 3 << 136 */
wolfSSL 14:167253f4e170 38476 { { 0xe2a37598a9d82abfl,0x5f188ccbe6c170f5l,0x816822005066b087l,
wolfSSL 14:167253f4e170 38477 0xda22c212c7155adal },
wolfSSL 14:167253f4e170 38478 { 0x151e5d3afbddb479l,0x4b606b846d715b99l,0x4a73b54bf997cb2el,
wolfSSL 14:167253f4e170 38479 0x9a1bfe433ecd8b66l },
wolfSSL 14:167253f4e170 38480 0 },
wolfSSL 14:167253f4e170 38481 /* 4 << 136 */
wolfSSL 14:167253f4e170 38482 { { 0xe13122f3dbfb894el,0xbe9b79f6ce274b18l,0x85a49de5ca58aadfl,
wolfSSL 14:167253f4e170 38483 0x2495775811487351l },
wolfSSL 14:167253f4e170 38484 { 0x111def61bb939099l,0x1d6a974a26d13694l,0x4474b4ced3fc253bl,
wolfSSL 14:167253f4e170 38485 0x3a1485e64c5db15el },
wolfSSL 14:167253f4e170 38486 0 },
wolfSSL 14:167253f4e170 38487 /* 5 << 136 */
wolfSSL 14:167253f4e170 38488 { { 0x5afddab61430c9abl,0x0bdd41d32238e997l,0xf0947430418042ael,
wolfSSL 14:167253f4e170 38489 0x71f9addacdddc4cbl },
wolfSSL 14:167253f4e170 38490 { 0x7090c016c52dd907l,0xd9bdf44d29e2047fl,0xe6f1fe801b1011a6l,
wolfSSL 14:167253f4e170 38491 0xb63accbcd9acdc78l },
wolfSSL 14:167253f4e170 38492 0 },
wolfSSL 14:167253f4e170 38493 /* 7 << 136 */
wolfSSL 14:167253f4e170 38494 { { 0x0ad7337ac0b7eff3l,0x8552225ec5e48b3cl,0xe6f78b0c73f13a5fl,
wolfSSL 14:167253f4e170 38495 0x5e70062e82349cbel },
wolfSSL 14:167253f4e170 38496 { 0x6b8d5048e7073969l,0x392d2a29c33cb3d2l,0xee4f727c4ecaa20fl,
wolfSSL 14:167253f4e170 38497 0xa068c99e2ccde707l },
wolfSSL 14:167253f4e170 38498 0 },
wolfSSL 14:167253f4e170 38499 /* 9 << 136 */
wolfSSL 14:167253f4e170 38500 { { 0x5b826fcb1b3ec67bl,0xece1b4b041356616l,0x7d5ce77e56a3ab4fl,
wolfSSL 14:167253f4e170 38501 0xf6087f13aa212da0l },
wolfSSL 14:167253f4e170 38502 { 0xe63015054db92129l,0xb8ae4c9940407d11l,0x2b6de222dfab8385l,
wolfSSL 14:167253f4e170 38503 0x9b323022b7d6c3b4l },
wolfSSL 14:167253f4e170 38504 0 },
wolfSSL 14:167253f4e170 38505 /* 10 << 136 */
wolfSSL 14:167253f4e170 38506 { { 0x057ef17a5ae6ad84l,0x9feae00b293a6ae0l,0xd18bb6c154266408l,
wolfSSL 14:167253f4e170 38507 0xd3d3e1209c8e8e48l },
wolfSSL 14:167253f4e170 38508 { 0xba8d4ca80e94fc8fl,0x80262ffc8a8ea0fel,0xac5b2855f71655fdl,
wolfSSL 14:167253f4e170 38509 0xa348f8fae9aced89l },
wolfSSL 14:167253f4e170 38510 0 },
wolfSSL 14:167253f4e170 38511 /* 11 << 136 */
wolfSSL 14:167253f4e170 38512 { { 0x60684b69a5660af3l,0x69aad23b9066d14bl,0x4d9f9b49fa4d020al,
wolfSSL 14:167253f4e170 38513 0xafb54ec1b5cd6a4al },
wolfSSL 14:167253f4e170 38514 { 0x2b25fe1832fd864dl,0xee6945062b6b64d0l,0x954a2a515001d8aal,
wolfSSL 14:167253f4e170 38515 0x5e1008557082b5b3l },
wolfSSL 14:167253f4e170 38516 0 },
wolfSSL 14:167253f4e170 38517 /* 13 << 136 */
wolfSSL 14:167253f4e170 38518 { { 0x20ecf71cbc90eb1bl,0x4234facf651c1df4l,0xc720fce9e681f678l,
wolfSSL 14:167253f4e170 38519 0x680becdda7c007f4l },
wolfSSL 14:167253f4e170 38520 { 0x7c08dc063181afeal,0x75c1b050a34eca91l,0x7d3479d54b9e2333l,
wolfSSL 14:167253f4e170 38521 0xed16640af3951aa3l },
wolfSSL 14:167253f4e170 38522 0 },
wolfSSL 14:167253f4e170 38523 /* 15 << 136 */
wolfSSL 14:167253f4e170 38524 { { 0x911b596264723e54l,0x34384f8c004b327cl,0x06ca5c61b85435f2l,
wolfSSL 14:167253f4e170 38525 0x12e0cd25e2c1075cl },
wolfSSL 14:167253f4e170 38526 { 0xa4b84cb8ac727394l,0x50bd720492b352c1l,0xe85524a49cbd0fb4l,
wolfSSL 14:167253f4e170 38527 0x10b9274be7876024l },
wolfSSL 14:167253f4e170 38528 0 },
wolfSSL 14:167253f4e170 38529 /* 16 << 136 */
wolfSSL 14:167253f4e170 38530 { { 0xef0a3fecfa181e69l,0x9ea02f8130d69a98l,0xb2e9cf8e66eab95dl,
wolfSSL 14:167253f4e170 38531 0x520f2beb24720021l },
wolfSSL 14:167253f4e170 38532 { 0x621c540a1df84361l,0x1203772171fa6d5dl,0x6e3c7b510ff5f6ffl,
wolfSSL 14:167253f4e170 38533 0x817a069babb2bef3l },
wolfSSL 14:167253f4e170 38534 0 },
wolfSSL 14:167253f4e170 38535 /* 17 << 136 */
wolfSSL 14:167253f4e170 38536 { { 0xb7cf93c3aace2c6al,0x017a96e658ff1bbfl,0x3b401301624a8250l,
wolfSSL 14:167253f4e170 38537 0xf5ef158529266518l },
wolfSSL 14:167253f4e170 38538 { 0x3c968bef7585838dl,0x8e97d023853191abl,0x175022e4f6823389l,
wolfSSL 14:167253f4e170 38539 0xb6a3bfc2f6a9b4c1l },
wolfSSL 14:167253f4e170 38540 0 },
wolfSSL 14:167253f4e170 38541 /* 19 << 136 */
wolfSSL 14:167253f4e170 38542 { { 0x515acf174591d77el,0xb393c89e3c3b25b6l,0x291e068e9c95abd7l,
wolfSSL 14:167253f4e170 38543 0x256b72c046c02544l },
wolfSSL 14:167253f4e170 38544 { 0x8172af03915ea92fl,0xc1b324ae4fcd0f03l,0x8abc779215108993l,
wolfSSL 14:167253f4e170 38545 0xe05fe6867ab815ael },
wolfSSL 14:167253f4e170 38546 0 },
wolfSSL 14:167253f4e170 38547 /* 21 << 136 */
wolfSSL 14:167253f4e170 38548 { { 0xca08d4095bc42740l,0xdd2c19d3e26e2e60l,0x27afdeded7c091fal,
wolfSSL 14:167253f4e170 38549 0x3b943b0faf25cb22l },
wolfSSL 14:167253f4e170 38550 { 0x400af8be026047e9l,0x3149b35f772b8ff9l,0x3ddb2c06f17229d9l,
wolfSSL 14:167253f4e170 38551 0xcd604aeadac152fcl },
wolfSSL 14:167253f4e170 38552 0 },
wolfSSL 14:167253f4e170 38553 /* 23 << 136 */
wolfSSL 14:167253f4e170 38554 { { 0xea2275311c0f6803l,0x9ae82d5ea394cc08l,0xc107a2cfbe32080cl,
wolfSSL 14:167253f4e170 38555 0x550f35a76429f6d7l },
wolfSSL 14:167253f4e170 38556 { 0x483c94dacfb70c0cl,0xf26f8e5d90190c94l,0x8574b3cf86bf2620l,
wolfSSL 14:167253f4e170 38557 0xe7258e45df9f482fl },
wolfSSL 14:167253f4e170 38558 0 },
wolfSSL 14:167253f4e170 38559 /* 25 << 136 */
wolfSSL 14:167253f4e170 38560 { { 0x8f8dc582da46f1cfl,0x61d76cf91e1e7427l,0x8aceb48b306c84aal,
wolfSSL 14:167253f4e170 38561 0xecaa142f28ebff98l },
wolfSSL 14:167253f4e170 38562 { 0xac5bd940401d80fel,0x0caacb8fe800cf9el,0x99068da9b3359af5l,
wolfSSL 14:167253f4e170 38563 0x92fdd5795225b8c0l },
wolfSSL 14:167253f4e170 38564 0 },
wolfSSL 14:167253f4e170 38565 /* 27 << 136 */
wolfSSL 14:167253f4e170 38566 { { 0x5a29d1c5ab56a3fbl,0x4e46ffc0a9aab4afl,0xa210472624d83080l,
wolfSSL 14:167253f4e170 38567 0xb5820998007f08b6l },
wolfSSL 14:167253f4e170 38568 { 0x9ce1188e4bc07b3el,0xbf6d0dbe32a19898l,0x5d5c68ea5b2350bal,
wolfSSL 14:167253f4e170 38569 0xd6c794eb3aa20b45l },
wolfSSL 14:167253f4e170 38570 0 },
wolfSSL 14:167253f4e170 38571 /* 28 << 136 */
wolfSSL 14:167253f4e170 38572 { { 0x3de605ba9ec598cfl,0x1933d3ae4d3029ael,0x6bf2fabd9b140516l,
wolfSSL 14:167253f4e170 38573 0x712dfc5559a7d01cl },
wolfSSL 14:167253f4e170 38574 { 0xff3eaae0d2576366l,0x36e407f948701cf8l,0xede21d89b41f4bd4l,
wolfSSL 14:167253f4e170 38575 0xc5292f5c666eefa9l },
wolfSSL 14:167253f4e170 38576 0 },
wolfSSL 14:167253f4e170 38577 /* 29 << 136 */
wolfSSL 14:167253f4e170 38578 { { 0x30045782c3ebcd77l,0xaa0cf3c73fdbe72el,0x719ec58ef8f43b39l,
wolfSSL 14:167253f4e170 38579 0x9716fb9972574d3al },
wolfSSL 14:167253f4e170 38580 { 0x300afc2b0d03ccd6l,0xb60016a34f3fac41l,0x8898910ea3a439f6l,
wolfSSL 14:167253f4e170 38581 0xdc00a99707ca11f5l },
wolfSSL 14:167253f4e170 38582 0 },
wolfSSL 14:167253f4e170 38583 /* 31 << 136 */
wolfSSL 14:167253f4e170 38584 { { 0x291b15ee8ed34662l,0xb780d54b2ee422a7l,0x5b9e3788fcfe4ccbl,
wolfSSL 14:167253f4e170 38585 0x4554cb8cbe8b7c3al },
wolfSSL 14:167253f4e170 38586 { 0xfdaccc2209a85a7fl,0x51f4a8ec555497edl,0x07dc69037da33505l,
wolfSSL 14:167253f4e170 38587 0xa3bc8bfcbc1fc1dbl },
wolfSSL 14:167253f4e170 38588 0 },
wolfSSL 14:167253f4e170 38589 /* 33 << 136 */
wolfSSL 14:167253f4e170 38590 { { 0x661638c151e25257l,0x0a6fd99c53304974l,0x29d8ae165078eec6l,
wolfSSL 14:167253f4e170 38591 0xed7512ad447b73del },
wolfSSL 14:167253f4e170 38592 { 0x0e21de607a4d0e9bl,0x842abd422462be01l,0x3be82afa5cddc709l,
wolfSSL 14:167253f4e170 38593 0x25bb9da99b52797dl },
wolfSSL 14:167253f4e170 38594 0 },
wolfSSL 14:167253f4e170 38595 /* 34 << 136 */
wolfSSL 14:167253f4e170 38596 { { 0x80613af28adc986al,0x4602284935776a41l,0x17d33e0f4665d03cl,
wolfSSL 14:167253f4e170 38597 0xeb12eb6c0df12b50l },
wolfSSL 14:167253f4e170 38598 { 0x0f0effa0ee41527fl,0x8ca2edb680531563l,0x4c354679f28c52c3l,
wolfSSL 14:167253f4e170 38599 0x67f1ba5c2f6df66dl },
wolfSSL 14:167253f4e170 38600 0 },
wolfSSL 14:167253f4e170 38601 /* 35 << 136 */
wolfSSL 14:167253f4e170 38602 { { 0x9c27207a2479fb3fl,0xef6e0f13515fb902l,0x3f7ad9e9d0d9436el,
wolfSSL 14:167253f4e170 38603 0x36eb4ea5893bbcf5l },
wolfSSL 14:167253f4e170 38604 { 0x5c53a2ac02b316b7l,0x10c75ee1f54f7585l,0x29e5879c3c7a4c1bl,
wolfSSL 14:167253f4e170 38605 0x77da3c82f29c67d6l },
wolfSSL 14:167253f4e170 38606 0 },
wolfSSL 14:167253f4e170 38607 /* 36 << 136 */
wolfSSL 14:167253f4e170 38608 { { 0xf2b75d21ef78a852l,0xba38cd34dd31a900l,0x72b3a68658ffe18al,
wolfSSL 14:167253f4e170 38609 0x7464190cbfd95745l },
wolfSSL 14:167253f4e170 38610 { 0x406e532177ed6e81l,0x1af0975bde535eabl,0x66ba22c760c54c82l,
wolfSSL 14:167253f4e170 38611 0x88e3b1ceb00a2fe0l },
wolfSSL 14:167253f4e170 38612 0 },
wolfSSL 14:167253f4e170 38613 /* 37 << 136 */
wolfSSL 14:167253f4e170 38614 { { 0xb6099b7df7e5c69bl,0x84aa1e26ba34ee2fl,0x5952600405c338bbl,
wolfSSL 14:167253f4e170 38615 0xe9a134374951a539l },
wolfSSL 14:167253f4e170 38616 { 0xb12276526ec196bdl,0x26a7be264b6dce36l,0x052e10a4e2a68458l,
wolfSSL 14:167253f4e170 38617 0x475fc74c1f38898bl },
wolfSSL 14:167253f4e170 38618 0 },
wolfSSL 14:167253f4e170 38619 /* 39 << 136 */
wolfSSL 14:167253f4e170 38620 { { 0x120167fc0a3eb4e1l,0xaa94bc70c0c21204l,0x313cd835e1243b75l,
wolfSSL 14:167253f4e170 38621 0x3bb63fb20bfd6a4al },
wolfSSL 14:167253f4e170 38622 { 0xa615dcae21ef05cfl,0x63774c2ec23c3ee5l,0x39365b1fed0dfd65l,
wolfSSL 14:167253f4e170 38623 0xb610e6ff5d2a2d7dl },
wolfSSL 14:167253f4e170 38624 0 },
wolfSSL 14:167253f4e170 38625 /* 40 << 136 */
wolfSSL 14:167253f4e170 38626 { { 0x55b7f977f0337b15l,0x3bc872a30e94973al,0x624ad983770deea0l,
wolfSSL 14:167253f4e170 38627 0xcaab336413a5efdbl },
wolfSSL 14:167253f4e170 38628 { 0x391dd0027a0d4247l,0x39590d5df312aed5l,0x532802c9351365acl,
wolfSSL 14:167253f4e170 38629 0xdd2e824578a2e22al },
wolfSSL 14:167253f4e170 38630 0 },
wolfSSL 14:167253f4e170 38631 /* 41 << 136 */
wolfSSL 14:167253f4e170 38632 { { 0x81b0d7be7f774fb8l,0x62f32bb3aa412425l,0xbe7afe26bbcd2162l,
wolfSSL 14:167253f4e170 38633 0xa6ce167c53c7fa7dl },
wolfSSL 14:167253f4e170 38634 { 0x8deca64fc5c4fc5bl,0x70e546aba6efd2fel,0xf2d8495987ff672al,
wolfSSL 14:167253f4e170 38635 0x2ca551f249c3059el },
wolfSSL 14:167253f4e170 38636 0 },
wolfSSL 14:167253f4e170 38637 /* 43 << 136 */
wolfSSL 14:167253f4e170 38638 { { 0x40b62d528eb99155l,0xe6b048947420a7e0l,0x9ebecb2bc685e58al,
wolfSSL 14:167253f4e170 38639 0x3ea642d8d3c8d2cbl },
wolfSSL 14:167253f4e170 38640 { 0x5340ac6ed489d0dfl,0xf3846d08c2b7588el,0x4cecd8a0611c289bl,
wolfSSL 14:167253f4e170 38641 0xdddc39c50dd71421l },
wolfSSL 14:167253f4e170 38642 0 },
wolfSSL 14:167253f4e170 38643 /* 44 << 136 */
wolfSSL 14:167253f4e170 38644 { { 0x98c6a6a52ebee687l,0xcdf65bfa56c1c731l,0x48e8132772def210l,
wolfSSL 14:167253f4e170 38645 0x4ea119418083b5a5l },
wolfSSL 14:167253f4e170 38646 { 0x3fdcea4fffebb525l,0x55aaea19fb50bf72l,0x5fbedc0a2a85b40cl,
wolfSSL 14:167253f4e170 38647 0x0d6fd954bf44f29fl },
wolfSSL 14:167253f4e170 38648 0 },
wolfSSL 14:167253f4e170 38649 /* 45 << 136 */
wolfSSL 14:167253f4e170 38650 { { 0x83a8302a9db4071el,0x52f104436f8ae934l,0x96de829d175b800al,
wolfSSL 14:167253f4e170 38651 0x20ff5035373e97cel },
wolfSSL 14:167253f4e170 38652 { 0xf58660185f65356al,0x992c15054c8cd782l,0x0b962c8eb57d727fl,
wolfSSL 14:167253f4e170 38653 0xe8a9abc92bba8bc7l },
wolfSSL 14:167253f4e170 38654 0 },
wolfSSL 14:167253f4e170 38655 /* 46 << 136 */
wolfSSL 14:167253f4e170 38656 { { 0x81a85ddd7cf2b565l,0x5e51e6afc34a0305l,0xa8d94ccefbc89faal,
wolfSSL 14:167253f4e170 38657 0x2bfd97c1e68cd288l },
wolfSSL 14:167253f4e170 38658 { 0x16d79c21af2958b8l,0x5e5d989defda7df8l,0x6d2f0ca6ff734c8al,
wolfSSL 14:167253f4e170 38659 0xfa5b8dd32cc9bafel },
wolfSSL 14:167253f4e170 38660 0 },
wolfSSL 14:167253f4e170 38661 /* 47 << 136 */
wolfSSL 14:167253f4e170 38662 { { 0x5787a9934e6ed688l,0x6815f3b5aab42f46l,0x7960f45b093c6c66l,
wolfSSL 14:167253f4e170 38663 0xb2b9829728be10cfl },
wolfSSL 14:167253f4e170 38664 { 0x1d4c7790296568cdl,0xa279a877f048e194l,0xcf7c20f4c6a58b4el,
wolfSSL 14:167253f4e170 38665 0xf0c717afa1f9c00fl },
wolfSSL 14:167253f4e170 38666 0 },
wolfSSL 14:167253f4e170 38667 /* 48 << 136 */
wolfSSL 14:167253f4e170 38668 { { 0x8a10b53189e800cal,0x50fe0c17145208fdl,0x9e43c0d3b714ba37l,
wolfSSL 14:167253f4e170 38669 0x427d200e34189accl },
wolfSSL 14:167253f4e170 38670 { 0x05dee24fe616e2c0l,0x9c25f4c8ee1854c1l,0x4d3222a58f342a73l,
wolfSSL 14:167253f4e170 38671 0x0807804fa027c952l },
wolfSSL 14:167253f4e170 38672 0 },
wolfSSL 14:167253f4e170 38673 /* 49 << 136 */
wolfSSL 14:167253f4e170 38674 { { 0x79730084ba196afcl,0x17d38e98054bd539l,0xc5cfff3918583239l,
wolfSSL 14:167253f4e170 38675 0x4b0db5a2d9adbee6l },
wolfSSL 14:167253f4e170 38676 { 0x9bc9f1e3c2a304e8l,0xbaa61de7de406fa8l,0x8e921ca9e4bec498l,
wolfSSL 14:167253f4e170 38677 0xd9f4e5ae6604ab02l },
wolfSSL 14:167253f4e170 38678 0 },
wolfSSL 14:167253f4e170 38679 /* 51 << 136 */
wolfSSL 14:167253f4e170 38680 { { 0xdf6b97b5b37f2097l,0x7576c3f9b4a5d2b9l,0x6eb697ed3588cabbl,
wolfSSL 14:167253f4e170 38681 0x4d75b38622598d8fl },
wolfSSL 14:167253f4e170 38682 { 0x4e6d93b522ff55e8l,0x4620ec635b8f7edal,0xd5006209f97b7749l,
wolfSSL 14:167253f4e170 38683 0x9e22e3a84da8b464l },
wolfSSL 14:167253f4e170 38684 0 },
wolfSSL 14:167253f4e170 38685 /* 52 << 136 */
wolfSSL 14:167253f4e170 38686 { { 0xbabfb7f82e8f326fl,0xed9cac225625a519l,0xf1109c1a0edae0a9l,
wolfSSL 14:167253f4e170 38687 0x45f80a9858521259l },
wolfSSL 14:167253f4e170 38688 { 0x37a44b075ab71f44l,0x21699eb64a21161bl,0xb523fddf56fe67eel,
wolfSSL 14:167253f4e170 38689 0x9f5c3a2120b9f72el },
wolfSSL 14:167253f4e170 38690 0 },
wolfSSL 14:167253f4e170 38691 /* 53 << 136 */
wolfSSL 14:167253f4e170 38692 { { 0x12c1131508b75673l,0xfa20121823b096d6l,0x839f01aeeacd6537l,
wolfSSL 14:167253f4e170 38693 0x0e592be787df32cal },
wolfSSL 14:167253f4e170 38694 { 0xfe3f65ff8b7dd0fcl,0xed09b4875c1d9a80l,0x8c09dd97b79786d8l,
wolfSSL 14:167253f4e170 38695 0x74eba2806c5bc983l },
wolfSSL 14:167253f4e170 38696 0 },
wolfSSL 14:167253f4e170 38697 /* 55 << 136 */
wolfSSL 14:167253f4e170 38698 { { 0xf917704862987b50l,0xcc84cdc6bc4ac456l,0x8bd2c922ae08fe12l,
wolfSSL 14:167253f4e170 38699 0x09d5f661fc2d06c7l },
wolfSSL 14:167253f4e170 38700 { 0xd10ac6dd9457d47fl,0x65aa30a23668060cl,0x33cddac6745161fcl,
wolfSSL 14:167253f4e170 38701 0xf4c18b5ea51e540fl },
wolfSSL 14:167253f4e170 38702 0 },
wolfSSL 14:167253f4e170 38703 /* 57 << 136 */
wolfSSL 14:167253f4e170 38704 { { 0x591c064ede723c1fl,0x92e5d4e601a4adael,0x3d7ee8a3145716ecl,
wolfSSL 14:167253f4e170 38705 0x0ef4c62061727816l },
wolfSSL 14:167253f4e170 38706 { 0x0e17c576f1bf6d6el,0x173104015ae18045l,0xdad620aae9589b75l,
wolfSSL 14:167253f4e170 38707 0xb10c7e2d0eda4905l },
wolfSSL 14:167253f4e170 38708 0 },
wolfSSL 14:167253f4e170 38709 /* 59 << 136 */
wolfSSL 14:167253f4e170 38710 { { 0xb8020f16aa08df6fl,0x03cf58ffd67054e9l,0x302e003c11fe3d1al,
wolfSSL 14:167253f4e170 38711 0x9c194bc1c638a3ecl },
wolfSSL 14:167253f4e170 38712 { 0x8ed3cb3adefd3f1el,0xc4115e079bf39de4l,0x8dece48bdf46fdf6l,
wolfSSL 14:167253f4e170 38713 0xebd1dbcf30eafeafl },
wolfSSL 14:167253f4e170 38714 0 },
wolfSSL 14:167253f4e170 38715 /* 60 << 136 */
wolfSSL 14:167253f4e170 38716 { { 0x058eb276fba319c5l,0xd33a91127f7fa54al,0xf060c1b4932a2dabl,
wolfSSL 14:167253f4e170 38717 0xce3a224e79c7d9bfl },
wolfSSL 14:167253f4e170 38718 { 0x6fb0388c0ba92823l,0x8d31738a69787881l,0x2d86eb0203cd00b7l,
wolfSSL 14:167253f4e170 38719 0x4e6e44512b69911bl },
wolfSSL 14:167253f4e170 38720 0 },
wolfSSL 14:167253f4e170 38721 /* 61 << 136 */
wolfSSL 14:167253f4e170 38722 { { 0xff2efe1cfdcca1cfl,0x08f22c69b5bb71e3l,0xc63f4a9f7023076el,
wolfSSL 14:167253f4e170 38723 0x88fb2aa0ce0c490el },
wolfSSL 14:167253f4e170 38724 { 0xcc7c97f91f77783cl,0x360026d942ab36b7l,0x547c34ecefd68f70l,
wolfSSL 14:167253f4e170 38725 0xebe7f99efbabfdabl },
wolfSSL 14:167253f4e170 38726 0 },
wolfSSL 14:167253f4e170 38727 /* 63 << 136 */
wolfSSL 14:167253f4e170 38728 { { 0xe7c1c1788613e87al,0xb035d65e60b82654l,0x055a82d03583a254l,
wolfSSL 14:167253f4e170 38729 0x27ce1ffc9b3b22fal },
wolfSSL 14:167253f4e170 38730 { 0x0cf904917ec83cd5l,0xfc6c21805604aa40l,0x1330604099357428l,
wolfSSL 14:167253f4e170 38731 0x9b0982f9ad4818b7l },
wolfSSL 14:167253f4e170 38732 0 },
wolfSSL 14:167253f4e170 38733 /* 64 << 136 */
wolfSSL 14:167253f4e170 38734 { { 0xc222653a4f0d56f3l,0x961e4047ca28b805l,0x2c03f8b04a73434bl,
wolfSSL 14:167253f4e170 38735 0x4c966787ab712a19l },
wolfSSL 14:167253f4e170 38736 { 0xcc196c42864fee42l,0xc1be93da5b0ece5cl,0xa87d9f22c131c159l,
wolfSSL 14:167253f4e170 38737 0x2bb6d593dce45655l },
wolfSSL 14:167253f4e170 38738 0 },
wolfSSL 14:167253f4e170 38739 /* 65 << 136 */
wolfSSL 14:167253f4e170 38740 { { 0x3a6080d9fb56bc3al,0xf1552dcad6212d7el,0x977ac5b59420f4f6l,
wolfSSL 14:167253f4e170 38741 0xef914d370e3cd97fl },
wolfSSL 14:167253f4e170 38742 { 0x807bd6e69c04f768l,0x743a7b552bb803f6l,0x7f5c20804215f4b0l,
wolfSSL 14:167253f4e170 38743 0x41e331288fc6ce42l },
wolfSSL 14:167253f4e170 38744 0 },
wolfSSL 14:167253f4e170 38745 /* 71 << 136 */
wolfSSL 14:167253f4e170 38746 { { 0x5a31c9ac61e6a460l,0x55102e4093e7eeddl,0x969fe0612da6adcel,
wolfSSL 14:167253f4e170 38747 0xe8cddc2f3ffea1d9l },
wolfSSL 14:167253f4e170 38748 { 0xaa26c6b1f0f327c5l,0x9e5b63743544f5e1l,0x5159fa1ddbaa685bl,
wolfSSL 14:167253f4e170 38749 0x9892d03aa7f44b99l },
wolfSSL 14:167253f4e170 38750 0 },
wolfSSL 14:167253f4e170 38751 /* 77 << 136 */
wolfSSL 14:167253f4e170 38752 { { 0x4dfcbf12e2c6fc1fl,0x703f2f5b7535ac29l,0x78f8617e82f7dc0fl,
wolfSSL 14:167253f4e170 38753 0x54b835ff853e792dl },
wolfSSL 14:167253f4e170 38754 { 0x3cc7f000df9f7353l,0x0d7ffd68db5a157al,0x2c1c33691672b21cl,
wolfSSL 14:167253f4e170 38755 0x694b4904ac970ef8l },
wolfSSL 14:167253f4e170 38756 0 },
wolfSSL 14:167253f4e170 38757 /* 83 << 136 */
wolfSSL 14:167253f4e170 38758 { { 0xd655bc42c1d2c45cl,0x572f603cbd22b05fl,0xa7fbf09388e4531al,
wolfSSL 14:167253f4e170 38759 0x8d38bbd91fdde98dl },
wolfSSL 14:167253f4e170 38760 { 0x16cc2aaa73b0fa01l,0x515019a25e8ffb04l,0xb075990611e792ccl,
wolfSSL 14:167253f4e170 38761 0x89df06f399112c90l },
wolfSSL 14:167253f4e170 38762 0 },
wolfSSL 14:167253f4e170 38763 /* 89 << 136 */
wolfSSL 14:167253f4e170 38764 { { 0x26d435c2481b46dal,0x73ab7e96266e9b3al,0x22d5b1db3c613c40l,
wolfSSL 14:167253f4e170 38765 0x9de4021c6727e399l },
wolfSSL 14:167253f4e170 38766 { 0x451ebba56051f8c9l,0xa37f6ec52c281a58l,0x3d7a28fe0e9f4cc5l,
wolfSSL 14:167253f4e170 38767 0x0f45bcd655b64df7l },
wolfSSL 14:167253f4e170 38768 0 },
wolfSSL 14:167253f4e170 38769 /* 95 << 136 */
wolfSSL 14:167253f4e170 38770 { { 0xba2a718c66616fbel,0x4b27810b3369a9acl,0x50b8391a2b426d5fl,
wolfSSL 14:167253f4e170 38771 0x420c88efa626fa05l },
wolfSSL 14:167253f4e170 38772 { 0xe39cef97b9c39a30l,0xcae7cde85e67e5d0l,0x3821f8319a58e521l,
wolfSSL 14:167253f4e170 38773 0xbf474d1941479509l },
wolfSSL 14:167253f4e170 38774 0 },
wolfSSL 14:167253f4e170 38775 /* 101 << 136 */
wolfSSL 14:167253f4e170 38776 { { 0x401bbab58fb15118l,0xb0376892dbf38b39l,0x10e4b9dd3a3ca42al,
wolfSSL 14:167253f4e170 38777 0xa69c2693f8063ffel },
wolfSSL 14:167253f4e170 38778 { 0xe10facdde07cb761l,0x96f4dde831d7759al,0xd702fdecc2cc7f9fl,
wolfSSL 14:167253f4e170 38779 0x9e87e46e1ac0162cl },
wolfSSL 14:167253f4e170 38780 0 },
wolfSSL 14:167253f4e170 38781 /* 107 << 136 */
wolfSSL 14:167253f4e170 38782 { { 0xb6cd60518479ca8fl,0xcca345e60968f6c7l,0x7b57248a64a9afe7l,
wolfSSL 14:167253f4e170 38783 0x5552e3511d0d4db9l },
wolfSSL 14:167253f4e170 38784 { 0x8f749b199dc68aabl,0x0fb86f06db1f7819l,0x23b300963143ac09l,
wolfSSL 14:167253f4e170 38785 0x61c166d8abfbcb9bl },
wolfSSL 14:167253f4e170 38786 0 },
wolfSSL 14:167253f4e170 38787 /* 113 << 136 */
wolfSSL 14:167253f4e170 38788 { { 0x4c96e85a43101165l,0x393a882fcf39bd19l,0xef9e1d42c2df6f33l,
wolfSSL 14:167253f4e170 38789 0xe1775c990278f088l },
wolfSSL 14:167253f4e170 38790 { 0xb1581929a9250d4al,0x582b0608c4168873l,0x0b3ffba3a1e68cd8l,
wolfSSL 14:167253f4e170 38791 0x3f78147ef9490897l },
wolfSSL 14:167253f4e170 38792 0 },
wolfSSL 14:167253f4e170 38793 /* 116 << 136 */
wolfSSL 14:167253f4e170 38794 { { 0x277b5177eb18ff20l,0x48002e9828f06d62l,0xece8d6c30e506d8dl,
wolfSSL 14:167253f4e170 38795 0x5cde0a58cd9ff963l },
wolfSSL 14:167253f4e170 38796 { 0x3b97cdb74e3baa0el,0x50560c0b631238f9l,0xe1c31b35cf79793dl,
wolfSSL 14:167253f4e170 38797 0x95d12f14355e2178l },
wolfSSL 14:167253f4e170 38798 0 },
wolfSSL 14:167253f4e170 38799 /* 119 << 136 */
wolfSSL 14:167253f4e170 38800 { { 0x0143f695bcc31b77l,0x3627aed14c49b65al,0x6e4f7a9ce441c183l,
wolfSSL 14:167253f4e170 38801 0xb708c79de1bfa0a3l },
wolfSSL 14:167253f4e170 38802 { 0xdbf0fc313a0726b8l,0xe04d82a8852d78bbl,0xb859001e3be5d398l,
wolfSSL 14:167253f4e170 38803 0x92dcc20c8e89bd11l },
wolfSSL 14:167253f4e170 38804 0 },
wolfSSL 14:167253f4e170 38805 /* 125 << 136 */
wolfSSL 14:167253f4e170 38806 { { 0x5f2416a3df9026b4l,0xffc01f3afcb29a1bl,0x18d02c9f1d94b20fl,
wolfSSL 14:167253f4e170 38807 0xd93b0f2f81cfdef3l },
wolfSSL 14:167253f4e170 38808 { 0xe6b0fd4713adf5f2l,0xcc9067b7ba06dff3l,0xb48c0cbb2256f842l,
wolfSSL 14:167253f4e170 38809 0xc2ae741dfd34df2fl },
wolfSSL 14:167253f4e170 38810 0 },
wolfSSL 14:167253f4e170 38811 },
wolfSSL 14:167253f4e170 38812 {
wolfSSL 14:167253f4e170 38813 /* 0 << 144 */
wolfSSL 14:167253f4e170 38814 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 38815 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 38816 1 },
wolfSSL 14:167253f4e170 38817 /* 1 << 144 */
wolfSSL 14:167253f4e170 38818 { { 0x80531fe1c63c4962l,0x50541e89981fdb25l,0xdc1291a1fd4c2b6bl,
wolfSSL 14:167253f4e170 38819 0xc0693a17a6df4fcal },
wolfSSL 14:167253f4e170 38820 { 0xb2c4604e0117f203l,0x245f19630a99b8d0l,0xaedc20aac6212c44l,
wolfSSL 14:167253f4e170 38821 0xb1ed4e56520f52a8l },
wolfSSL 14:167253f4e170 38822 0 },
wolfSSL 14:167253f4e170 38823 /* 3 << 144 */
wolfSSL 14:167253f4e170 38824 { { 0x18f37a9c6bdf22dal,0xefbc432f90dc82dfl,0xc52cef8e5d703651l,
wolfSSL 14:167253f4e170 38825 0x82887ba0d99881a5l },
wolfSSL 14:167253f4e170 38826 { 0x7cec9ddab920ec1dl,0xd0d7e8c3ec3e8d3bl,0x445bc3954ca88747l,
wolfSSL 14:167253f4e170 38827 0xedeaa2e09fd53535l },
wolfSSL 14:167253f4e170 38828 0 },
wolfSSL 14:167253f4e170 38829 /* 4 << 144 */
wolfSSL 14:167253f4e170 38830 { { 0xa12b384ece53c2d0l,0x779d897d5e4606dal,0xa53e47b073ec12b0l,
wolfSSL 14:167253f4e170 38831 0x462dbbba5756f1adl },
wolfSSL 14:167253f4e170 38832 { 0x69fe09f2cafe37b6l,0x273d1ebfecce2e17l,0x8ac1d5383cf607fdl,
wolfSSL 14:167253f4e170 38833 0x8035f7ff12e10c25l },
wolfSSL 14:167253f4e170 38834 0 },
wolfSSL 14:167253f4e170 38835 /* 5 << 144 */
wolfSSL 14:167253f4e170 38836 { { 0xb7d4cc0f296c9005l,0x4b9094fa7b0aebdbl,0xe1bf10f1c00ec8d4l,
wolfSSL 14:167253f4e170 38837 0xd807b1c4d667c101l },
wolfSSL 14:167253f4e170 38838 { 0xa9412cdfbe713383l,0x435e063e81142ba1l,0x984c15ecaf0a6bdcl,
wolfSSL 14:167253f4e170 38839 0x592c246092a3dab9l },
wolfSSL 14:167253f4e170 38840 0 },
wolfSSL 14:167253f4e170 38841 /* 7 << 144 */
wolfSSL 14:167253f4e170 38842 { { 0x9365690016e23e9dl,0xcb220c6ba7cc41e1l,0xb36b20c369d6245cl,
wolfSSL 14:167253f4e170 38843 0x2d63c348b62e9a6al },
wolfSSL 14:167253f4e170 38844 { 0xa3473e19cdc0bcb5l,0x70f18b3f8f601b98l,0x8ad7a2c7cde346e4l,
wolfSSL 14:167253f4e170 38845 0xae9f6ec3bd3aaa64l },
wolfSSL 14:167253f4e170 38846 0 },
wolfSSL 14:167253f4e170 38847 /* 9 << 144 */
wolfSSL 14:167253f4e170 38848 { { 0x030223503274c7e1l,0x61ee8c934c4b6c26l,0x3c4397e3199389cel,
wolfSSL 14:167253f4e170 38849 0xe0082600488757cel },
wolfSSL 14:167253f4e170 38850 { 0xaac3a2df06b4dafbl,0x45af0700ddff5b6al,0x0a5974248c1d9fa0l,
wolfSSL 14:167253f4e170 38851 0x1640087d391fc68bl },
wolfSSL 14:167253f4e170 38852 0 },
wolfSSL 14:167253f4e170 38853 /* 10 << 144 */
wolfSSL 14:167253f4e170 38854 { { 0x26a43e41d07fa53dl,0x3154a78a74e35bc5l,0x7b768924e0da2f8cl,
wolfSSL 14:167253f4e170 38855 0xba964a2b23613f9al },
wolfSSL 14:167253f4e170 38856 { 0x5a548d35ba1d16c4l,0x2e1bfed1fb54d057l,0xff992136bc640205l,
wolfSSL 14:167253f4e170 38857 0xf39cb9148156df29l },
wolfSSL 14:167253f4e170 38858 0 },
wolfSSL 14:167253f4e170 38859 /* 11 << 144 */
wolfSSL 14:167253f4e170 38860 { { 0xf4873fcf4e5548bdl,0x8725da3f03ce57f0l,0xd82f5c95ca953258l,
wolfSSL 14:167253f4e170 38861 0xac647f127cf0747el },
wolfSSL 14:167253f4e170 38862 { 0xff2038b02d570bd5l,0xb0c2a767a13ae03fl,0xebaa27cde9932d16l,
wolfSSL 14:167253f4e170 38863 0xa686e3fc1234e901l },
wolfSSL 14:167253f4e170 38864 0 },
wolfSSL 14:167253f4e170 38865 /* 13 << 144 */
wolfSSL 14:167253f4e170 38866 { { 0x9f80435e63261eccl,0x6302a62e4337d6c9l,0x91916a49ca4958a0l,
wolfSSL 14:167253f4e170 38867 0x554958993149d5d3l },
wolfSSL 14:167253f4e170 38868 { 0x378d020b9f91de3cl,0x47b839a34dd25170l,0x2825854138b7f258l,
wolfSSL 14:167253f4e170 38869 0xea5b14f7437e7decl },
wolfSSL 14:167253f4e170 38870 0 },
wolfSSL 14:167253f4e170 38871 /* 15 << 144 */
wolfSSL 14:167253f4e170 38872 { { 0x74f08736b0018f44l,0xf4a03417b446d0f5l,0x66a4aa2fa40ca6b2l,
wolfSSL 14:167253f4e170 38873 0x215679f0badb60edl },
wolfSSL 14:167253f4e170 38874 { 0x3871195a323e4eefl,0x8f0940c320952b16l,0xfe8dac62879d5f7dl,
wolfSSL 14:167253f4e170 38875 0x649cb623c1a6e875l },
wolfSSL 14:167253f4e170 38876 0 },
wolfSSL 14:167253f4e170 38877 /* 16 << 144 */
wolfSSL 14:167253f4e170 38878 { { 0xecaff541338d6e43l,0x56f7dd734541d5ccl,0xb5d426de96bc88cal,
wolfSSL 14:167253f4e170 38879 0x48d94f6b9ed3a2c3l },
wolfSSL 14:167253f4e170 38880 { 0x6354a3bb2ef8279cl,0xd575465b0b1867f2l,0xef99b0ff95225151l,
wolfSSL 14:167253f4e170 38881 0xf3e19d88f94500d8l },
wolfSSL 14:167253f4e170 38882 0 },
wolfSSL 14:167253f4e170 38883 /* 17 << 144 */
wolfSSL 14:167253f4e170 38884 { { 0xa26a9087133ec108l,0x5dc5699f2712bdc0l,0x96903f4dd14224a9l,
wolfSSL 14:167253f4e170 38885 0x3da5992429e47b80l },
wolfSSL 14:167253f4e170 38886 { 0xb717712ff9dbba5al,0x9e52004b756391c9l,0xe669a11dcc9d219cl,
wolfSSL 14:167253f4e170 38887 0x3b6e6b84d1d6c07dl },
wolfSSL 14:167253f4e170 38888 0 },
wolfSSL 14:167253f4e170 38889 /* 19 << 144 */
wolfSSL 14:167253f4e170 38890 { { 0x5feec06a676feadbl,0xfc449bc59d69f322l,0x1d8d7b5e7cda8895l,
wolfSSL 14:167253f4e170 38891 0x5ed54dc11a3314a7l },
wolfSSL 14:167253f4e170 38892 { 0x1a11d2ae6de889c0l,0xb2a979724ced2bd9l,0x6ecf6989306a5ef6l,
wolfSSL 14:167253f4e170 38893 0x1611d57b8cc8a249l },
wolfSSL 14:167253f4e170 38894 0 },
wolfSSL 14:167253f4e170 38895 /* 21 << 144 */
wolfSSL 14:167253f4e170 38896 { { 0x2d9942ba007cbf87l,0x4e62bce6df3fc926l,0xe7eee5b0e4560affl,
wolfSSL 14:167253f4e170 38897 0xe51963bb7cb009b7l },
wolfSSL 14:167253f4e170 38898 { 0xaa5118cee29b37ddl,0x5cd84a4747263903l,0x3050caa6620055d8l,
wolfSSL 14:167253f4e170 38899 0x7ef576a76c4b1e3dl },
wolfSSL 14:167253f4e170 38900 0 },
wolfSSL 14:167253f4e170 38901 /* 23 << 144 */
wolfSSL 14:167253f4e170 38902 { { 0x9026a4dde6008ff1l,0x49e995ad1c8cd96cl,0x80722e73503e589bl,
wolfSSL 14:167253f4e170 38903 0x05bcbce184c2bc26l },
wolfSSL 14:167253f4e170 38904 { 0x255f9abbd4682c2cl,0xc42bcfc2f084d456l,0xa0eae9b0641c0767l,
wolfSSL 14:167253f4e170 38905 0x1b45632d864c9a2dl },
wolfSSL 14:167253f4e170 38906 0 },
wolfSSL 14:167253f4e170 38907 /* 25 << 144 */
wolfSSL 14:167253f4e170 38908 { { 0xcf25793b6ae024e0l,0x1b6607b484b5c4b0l,0x9579fa903f1624c8l,
wolfSSL 14:167253f4e170 38909 0x37fb65be68bd57e8l },
wolfSSL 14:167253f4e170 38910 { 0xd693a55efc39c203l,0x4e267ac4c87252e9l,0xb8d78bb09f899413l,
wolfSSL 14:167253f4e170 38911 0xe4c014070b3b8508l },
wolfSSL 14:167253f4e170 38912 0 },
wolfSSL 14:167253f4e170 38913 /* 27 << 144 */
wolfSSL 14:167253f4e170 38914 { { 0x662906e5bc3f3553l,0xde38d53531459684l,0x8f46a8c634f7280dl,
wolfSSL 14:167253f4e170 38915 0xaaf91b873d24198el },
wolfSSL 14:167253f4e170 38916 { 0xecd5ee115f9b117el,0xce00ffbe50ae8ddal,0x263a3d4e7710a9ael,
wolfSSL 14:167253f4e170 38917 0x0ff3f721f26ba74fl },
wolfSSL 14:167253f4e170 38918 0 },
wolfSSL 14:167253f4e170 38919 /* 28 << 144 */
wolfSSL 14:167253f4e170 38920 { { 0x4a8a4f47f0cefa69l,0xdc8e4cbaa4546866l,0x359ba69b23f603c1l,
wolfSSL 14:167253f4e170 38921 0xdab4d601187b7ac5l },
wolfSSL 14:167253f4e170 38922 { 0xa6ca4337c1ebc8d9l,0x9fa6585452b4074bl,0x1a4b4f81902fb733l,
wolfSSL 14:167253f4e170 38923 0xd2bb5d7aa525deaal },
wolfSSL 14:167253f4e170 38924 0 },
wolfSSL 14:167253f4e170 38925 /* 29 << 144 */
wolfSSL 14:167253f4e170 38926 { { 0xcc287ac2e6b3577al,0xd7528ca7f612003bl,0x8afdb6f12c1400b8l,
wolfSSL 14:167253f4e170 38927 0x103a2ed346a2dd8dl },
wolfSSL 14:167253f4e170 38928 { 0xc8f8c54d2ee21339l,0x8f011b92355a2d20l,0x81c6fc9f1346f2acl,
wolfSSL 14:167253f4e170 38929 0xdb6042f005a6d24bl },
wolfSSL 14:167253f4e170 38930 0 },
wolfSSL 14:167253f4e170 38931 /* 31 << 144 */
wolfSSL 14:167253f4e170 38932 { { 0xfc90e3630da4f996l,0x8ceca49daa6d6fe4l,0x1084affdbdfc619bl,
wolfSSL 14:167253f4e170 38933 0x2029f672c1140b04l },
wolfSSL 14:167253f4e170 38934 { 0x606ec25f136f3e5el,0x6d24149b02224c4al,0xabb0f142cfdfcf4cl,
wolfSSL 14:167253f4e170 38935 0xe40d0419fab1a0edl },
wolfSSL 14:167253f4e170 38936 0 },
wolfSSL 14:167253f4e170 38937 /* 33 << 144 */
wolfSSL 14:167253f4e170 38938 { { 0xcfdd08265cbccb84l,0x2258a16e88ad93c4l,0xb3ac365e728c5ad3l,
wolfSSL 14:167253f4e170 38939 0x0bbf97808560df1fl },
wolfSSL 14:167253f4e170 38940 { 0x42d08a39bad8c7b8l,0x1e3960106d3e8b91l,0xc332b39910274f58l,
wolfSSL 14:167253f4e170 38941 0xe0a84dacce2ea778l },
wolfSSL 14:167253f4e170 38942 0 },
wolfSSL 14:167253f4e170 38943 /* 34 << 144 */
wolfSSL 14:167253f4e170 38944 { { 0x113e1189ff432945l,0x4a0d2c3d04e1106cl,0xcde487744f3597b1l,
wolfSSL 14:167253f4e170 38945 0x853b029174fa26eal },
wolfSSL 14:167253f4e170 38946 { 0x2149e0ff02662e26l,0xb3181eaa5e6a030fl,0x086fc2159b006340l,
wolfSSL 14:167253f4e170 38947 0xa1df84a694a4e0bbl },
wolfSSL 14:167253f4e170 38948 0 },
wolfSSL 14:167253f4e170 38949 /* 35 << 144 */
wolfSSL 14:167253f4e170 38950 { { 0xc2cbd80ac99f8d3dl,0xe24b9d8f50ecf4f4l,0xf18d34728ecb126al,
wolfSSL 14:167253f4e170 38951 0x83966662e1670aael },
wolfSSL 14:167253f4e170 38952 { 0x1cece80fda5f594el,0x545e94ae65f391e0l,0xf3286dff93f98bb7l,
wolfSSL 14:167253f4e170 38953 0xf945e6cdf5abf176l },
wolfSSL 14:167253f4e170 38954 0 },
wolfSSL 14:167253f4e170 38955 /* 36 << 144 */
wolfSSL 14:167253f4e170 38956 { { 0x00ba5995dd95ac33l,0xa4957a40738f3bf4l,0x073539f599438a85l,
wolfSSL 14:167253f4e170 38957 0xcc9c43acc2eb1411l },
wolfSSL 14:167253f4e170 38958 { 0xe27501b5be2ec3d2l,0xa88d4ed057a85458l,0x870ae236755c8777l,
wolfSSL 14:167253f4e170 38959 0x0933c5af89216cbal },
wolfSSL 14:167253f4e170 38960 0 },
wolfSSL 14:167253f4e170 38961 /* 37 << 144 */
wolfSSL 14:167253f4e170 38962 { { 0xb5feea219e40e37fl,0x8c5ccb159e20fd60l,0xaeddc502ce8209a1l,
wolfSSL 14:167253f4e170 38963 0xbdf873cc11e793b3l },
wolfSSL 14:167253f4e170 38964 { 0xbc938103f0de8db5l,0x619fb72fb0e9d3d5l,0x800147cb588ed2adl,
wolfSSL 14:167253f4e170 38965 0x260f92bb7901ced8l },
wolfSSL 14:167253f4e170 38966 0 },
wolfSSL 14:167253f4e170 38967 /* 39 << 144 */
wolfSSL 14:167253f4e170 38968 { { 0x72dd9b089848c699l,0xc6086381185dacc1l,0x9489f11ff7d5a4c8l,
wolfSSL 14:167253f4e170 38969 0xedb41d5628dee90fl },
wolfSSL 14:167253f4e170 38970 { 0x1091db6b09af693cl,0xc7587551ae4b6413l,0x806aefb0768227adl,
wolfSSL 14:167253f4e170 38971 0x4214b83eafb3c88el },
wolfSSL 14:167253f4e170 38972 0 },
wolfSSL 14:167253f4e170 38973 /* 40 << 144 */
wolfSSL 14:167253f4e170 38974 { { 0xddfb02c4c753c45fl,0x18ca81b6f9c840fel,0x846fd09ab0f8a3e6l,
wolfSSL 14:167253f4e170 38975 0xb1162adde7733dbcl },
wolfSSL 14:167253f4e170 38976 { 0x7070ad20236e3ab6l,0xf88cdaf5b2a56326l,0x05fc8719997cbc7al,
wolfSSL 14:167253f4e170 38977 0x442cd4524b665272l },
wolfSSL 14:167253f4e170 38978 0 },
wolfSSL 14:167253f4e170 38979 /* 41 << 144 */
wolfSSL 14:167253f4e170 38980 { { 0x748819f9aa9c0ef5l,0xd7227d8ba458ad48l,0x8d67399f27aef626l,
wolfSSL 14:167253f4e170 38981 0xc6241a1859bf0a4cl },
wolfSSL 14:167253f4e170 38982 { 0xed9b0bfcc31cb9bbl,0x591254f896142555l,0x80e4bab461134151l,
wolfSSL 14:167253f4e170 38983 0x7c5e680243efbd83l },
wolfSSL 14:167253f4e170 38984 0 },
wolfSSL 14:167253f4e170 38985 /* 43 << 144 */
wolfSSL 14:167253f4e170 38986 { { 0x7f3f5a1706b9b7ddl,0x392132e75faeb417l,0x508ac4788fae38a2l,
wolfSSL 14:167253f4e170 38987 0x2b854ead0d3499c3l },
wolfSSL 14:167253f4e170 38988 { 0x26a687d8ef18bf0fl,0x62ff0c4a8ae00b61l,0x84111011f48578f2l,
wolfSSL 14:167253f4e170 38989 0xa879f383cd0fcd3al },
wolfSSL 14:167253f4e170 38990 0 },
wolfSSL 14:167253f4e170 38991 /* 44 << 144 */
wolfSSL 14:167253f4e170 38992 { { 0xeb7615aa202992f0l,0xde0562b38361d0b3l,0x789a302862027ee0l,
wolfSSL 14:167253f4e170 38993 0xe3e3e9921048f899l },
wolfSSL 14:167253f4e170 38994 { 0x07945c246deadab4l,0xeb06a15ec77d894el,0xb825af36bab1416bl,
wolfSSL 14:167253f4e170 38995 0x99083c4df4b4e04fl },
wolfSSL 14:167253f4e170 38996 0 },
wolfSSL 14:167253f4e170 38997 /* 45 << 144 */
wolfSSL 14:167253f4e170 38998 { { 0x4684a8f27b3ad6c3l,0x58238dbd928d9b6bl,0x31865b998da2c495l,
wolfSSL 14:167253f4e170 38999 0xc1ca784fb8e7cda1l },
wolfSSL 14:167253f4e170 39000 { 0xc9605dc71e081572l,0x8f560bcdef8ed104l,0x51f73981bd3feaedl,
wolfSSL 14:167253f4e170 39001 0xc778aa4e4251c88dl },
wolfSSL 14:167253f4e170 39002 0 },
wolfSSL 14:167253f4e170 39003 /* 46 << 144 */
wolfSSL 14:167253f4e170 39004 { { 0x9c0daa63aa502800l,0x73c7959a1e15b9bdl,0xd0447bcb7ab10f6cl,
wolfSSL 14:167253f4e170 39005 0x05b8fbc8b8311bdel },
wolfSSL 14:167253f4e170 39006 { 0xa8a74be1915d5c4el,0x38d41c1e0b7c0351l,0x5bb2d49ff52d6568l,
wolfSSL 14:167253f4e170 39007 0x6c48d8eed5e43593l },
wolfSSL 14:167253f4e170 39008 0 },
wolfSSL 14:167253f4e170 39009 /* 47 << 144 */
wolfSSL 14:167253f4e170 39010 { { 0x387b26d554159498l,0x92e92fad1ec34eb4l,0x0f88705e7a51b635l,
wolfSSL 14:167253f4e170 39011 0x66bcbf4dedca735fl },
wolfSSL 14:167253f4e170 39012 { 0x0a4c6112dcb896ccl,0x148e1dfe6fc72ad9l,0x3de977fd2b4c9585l,
wolfSSL 14:167253f4e170 39013 0x0cd6e65f741e62cal },
wolfSSL 14:167253f4e170 39014 0 },
wolfSSL 14:167253f4e170 39015 /* 48 << 144 */
wolfSSL 14:167253f4e170 39016 { { 0x7807f364b71698f5l,0x6ba418d29f7b605el,0xfd20b00fa03b2cbbl,
wolfSSL 14:167253f4e170 39017 0x883eca37da54386fl },
wolfSSL 14:167253f4e170 39018 { 0xff0be43ff3437f24l,0xe910b432a48bb33cl,0x4963a128329df765l,
wolfSSL 14:167253f4e170 39019 0xac1dd556be2fe6f7l },
wolfSSL 14:167253f4e170 39020 0 },
wolfSSL 14:167253f4e170 39021 /* 49 << 144 */
wolfSSL 14:167253f4e170 39022 { { 0x98ae40d53ce533bal,0x10342e1931fdd9c2l,0x54a255c8abf8b2bfl,
wolfSSL 14:167253f4e170 39023 0x8facc41b15f6fef7l },
wolfSSL 14:167253f4e170 39024 { 0x2e195565bc65b38bl,0xb9f3abaaeaea63cbl,0xede2ab9bf2b7518bl,
wolfSSL 14:167253f4e170 39025 0x5e84102ce9ea3d81l },
wolfSSL 14:167253f4e170 39026 0 },
wolfSSL 14:167253f4e170 39027 /* 51 << 144 */
wolfSSL 14:167253f4e170 39028 { { 0x162abc35113bc262l,0x8012f06829eb3fd4l,0x0e2727eb2c1ccf9cl,
wolfSSL 14:167253f4e170 39029 0x89561ff44b455b20l },
wolfSSL 14:167253f4e170 39030 { 0xc48db835ee3b1fd4l,0x4075ca86095bbfa7l,0x0c498d7d98745182l,
wolfSSL 14:167253f4e170 39031 0x828fb93c5dfb5205l },
wolfSSL 14:167253f4e170 39032 0 },
wolfSSL 14:167253f4e170 39033 /* 52 << 144 */
wolfSSL 14:167253f4e170 39034 { { 0xf95c7a5f0a76333bl,0x07603929cd607927l,0xabde328591028d3el,
wolfSSL 14:167253f4e170 39035 0x55765e8fa032a400l },
wolfSSL 14:167253f4e170 39036 { 0x3041f2cabed17cd7l,0x018a5b7b9a9e5923l,0xca4867975bb9bae3l,
wolfSSL 14:167253f4e170 39037 0x741c802ecc382cb5l },
wolfSSL 14:167253f4e170 39038 0 },
wolfSSL 14:167253f4e170 39039 /* 53 << 144 */
wolfSSL 14:167253f4e170 39040 { { 0x182a10311e5a3d8el,0xc352b8c8986c4d10l,0x7c50a172434c02ebl,
wolfSSL 14:167253f4e170 39041 0x121d728c4420c41cl },
wolfSSL 14:167253f4e170 39042 { 0x0f8eca2a8a51812fl,0xdb6c4a4ea5158430l,0x67944e0b8d8f4144l,
wolfSSL 14:167253f4e170 39043 0x387cc2052405c77al },
wolfSSL 14:167253f4e170 39044 0 },
wolfSSL 14:167253f4e170 39045 /* 55 << 144 */
wolfSSL 14:167253f4e170 39046 { { 0x98b36eb47e95ad76l,0x1973fa7d5f7e5ff7l,0xc4827abc6cc8a25cl,
wolfSSL 14:167253f4e170 39047 0x4263a0d3ec822ae4l },
wolfSSL 14:167253f4e170 39048 { 0x49f113f35217a6f4l,0xf27cc9bb81748aa6l,0x9cb81d97d822e08el,
wolfSSL 14:167253f4e170 39049 0x698d2826b5c360bcl },
wolfSSL 14:167253f4e170 39050 0 },
wolfSSL 14:167253f4e170 39051 /* 57 << 144 */
wolfSSL 14:167253f4e170 39052 { { 0x895f81514eb6d0b8l,0x32ef71df9f786536l,0x032a449430379a79l,
wolfSSL 14:167253f4e170 39053 0xa8c1076218bdb83fl },
wolfSSL 14:167253f4e170 39054 { 0x7a3b0b8fe53a4064l,0x0e724a54e2ce89b7l,0x565baeba7a31f6bcl,
wolfSSL 14:167253f4e170 39055 0x12b9fa6387d18a7bl },
wolfSSL 14:167253f4e170 39056 0 },
wolfSSL 14:167253f4e170 39057 /* 59 << 144 */
wolfSSL 14:167253f4e170 39058 { { 0x027231a3585bcfbdl,0x8690e977dca24269l,0x229c021afc6f1422l,
wolfSSL 14:167253f4e170 39059 0xd98050d044084cabl },
wolfSSL 14:167253f4e170 39060 { 0x6add95d79d4fd09al,0x12484c68c15b24ddl,0xa79a8f4facf4f551l,
wolfSSL 14:167253f4e170 39061 0xf53204e27a83cbecl },
wolfSSL 14:167253f4e170 39062 0 },
wolfSSL 14:167253f4e170 39063 /* 60 << 144 */
wolfSSL 14:167253f4e170 39064 { { 0xbc006413a906f7aal,0x9c8cd648bbeaf464l,0xaf5c7c64fb78cdf2l,
wolfSSL 14:167253f4e170 39065 0xe45839eafabc2375l },
wolfSSL 14:167253f4e170 39066 { 0x1eb89bd150012172l,0x9d0d76194488518cl,0xd55a7238bd534d32l,
wolfSSL 14:167253f4e170 39067 0x48f35d5e95b4fe55l },
wolfSSL 14:167253f4e170 39068 0 },
wolfSSL 14:167253f4e170 39069 /* 61 << 144 */
wolfSSL 14:167253f4e170 39070 { { 0xa6c5574f3e70a35al,0x35c11b5a8df97d97l,0x8f629f6cda85dd27l,
wolfSSL 14:167253f4e170 39071 0x94dab294c218452el },
wolfSSL 14:167253f4e170 39072 { 0xa2e1882e8916c731l,0xc02ce77c8929e350l,0xa7ed351fe4eff8afl,
wolfSSL 14:167253f4e170 39073 0xeb76ef0654c3e1c1l },
wolfSSL 14:167253f4e170 39074 0 },
wolfSSL 14:167253f4e170 39075 /* 63 << 144 */
wolfSSL 14:167253f4e170 39076 { { 0xc31d7cf87e3f5be5l,0x1472af0d3ce7f3a0l,0x226414f8f962e1afl,
wolfSSL 14:167253f4e170 39077 0xd318e3df16f54295l },
wolfSSL 14:167253f4e170 39078 { 0x9a3f6aaf41477cd3l,0x7034172f66ec6b2el,0xbea54eb537413a62l,
wolfSSL 14:167253f4e170 39079 0x79f81262dc515e73l },
wolfSSL 14:167253f4e170 39080 0 },
wolfSSL 14:167253f4e170 39081 /* 64 << 144 */
wolfSSL 14:167253f4e170 39082 { { 0x994f523a626332d5l,0x7bc388335561bb44l,0x005ed4b03d845ea2l,
wolfSSL 14:167253f4e170 39083 0xd39d3ee1c2a1f08al },
wolfSSL 14:167253f4e170 39084 { 0x6561fdd3e7676b0dl,0x620e35fffb706017l,0x36ce424ff264f9a8l,
wolfSSL 14:167253f4e170 39085 0xc4c3419fda2681f7l },
wolfSSL 14:167253f4e170 39086 0 },
wolfSSL 14:167253f4e170 39087 /* 65 << 144 */
wolfSSL 14:167253f4e170 39088 { { 0xb71a52b8b6bf8719l,0x0c7701f73196db36l,0xff1b936f53141cf4l,
wolfSSL 14:167253f4e170 39089 0x684d8a3c1b94a31cl },
wolfSSL 14:167253f4e170 39090 { 0xe555633ab52386e1l,0x9353a2af91450578l,0xc53db6fab99b14bcl,
wolfSSL 14:167253f4e170 39091 0x1f2d42adcf619d36l },
wolfSSL 14:167253f4e170 39092 0 },
wolfSSL 14:167253f4e170 39093 /* 71 << 144 */
wolfSSL 14:167253f4e170 39094 { { 0xbeb535ef3851c573l,0x3105fff585589843l,0xbe9f62a1d47aaf06l,
wolfSSL 14:167253f4e170 39095 0x6bb2ee5d107e1131l },
wolfSSL 14:167253f4e170 39096 { 0x82530247a4a7699fl,0x3fb475e144872afbl,0x8ad43fd73c4c49f2l,
wolfSSL 14:167253f4e170 39097 0x3f7632882e045fc4l },
wolfSSL 14:167253f4e170 39098 0 },
wolfSSL 14:167253f4e170 39099 /* 77 << 144 */
wolfSSL 14:167253f4e170 39100 { { 0x48440beb2924d7b2l,0x234163809c88fc57l,0xdc1d23d54ab08c2bl,
wolfSSL 14:167253f4e170 39101 0x576400b6e70feab0l },
wolfSSL 14:167253f4e170 39102 { 0x3b8afb8ba66da779l,0x7a7e3bf445468f16l,0x1976ddf3231f79dfl,
wolfSSL 14:167253f4e170 39103 0xbe61c170b8531a9el },
wolfSSL 14:167253f4e170 39104 0 },
wolfSSL 14:167253f4e170 39105 /* 83 << 144 */
wolfSSL 14:167253f4e170 39106 { { 0xf8d2dc768bf191b2l,0x3269e68813a39eb9l,0x104bb84be755eccfl,
wolfSSL 14:167253f4e170 39107 0xb8d1330f2868f807l },
wolfSSL 14:167253f4e170 39108 { 0x2b29c74cb06c6059l,0x3648baa1a6440a26l,0x5dfae323f1e6b2c9l,
wolfSSL 14:167253f4e170 39109 0x9d0319b79330ac0al },
wolfSSL 14:167253f4e170 39110 0 },
wolfSSL 14:167253f4e170 39111 /* 89 << 144 */
wolfSSL 14:167253f4e170 39112 { { 0x526ba3770e708bb2l,0x95c21ba327565dd9l,0x7071f46d48a0a873l,
wolfSSL 14:167253f4e170 39113 0xe4b9959efed6cc74l },
wolfSSL 14:167253f4e170 39114 { 0x1b16bfd1e08a5afal,0xc87fec98d1789782l,0x200186e946cfd068l,
wolfSSL 14:167253f4e170 39115 0x88ea35a7280bf3ebl },
wolfSSL 14:167253f4e170 39116 0 },
wolfSSL 14:167253f4e170 39117 /* 95 << 144 */
wolfSSL 14:167253f4e170 39118 { { 0x9e31943d42ac0e6cl,0xe61374cf1db8e40fl,0xbe27ea35a27db609l,
wolfSSL 14:167253f4e170 39119 0x7c5b91d67bf192e9l },
wolfSSL 14:167253f4e170 39120 { 0xc2af846defd0a24bl,0x1b2efc37669b647al,0xbfc3c38e5e58ef8al,
wolfSSL 14:167253f4e170 39121 0xb6afb167e13ab5a2l },
wolfSSL 14:167253f4e170 39122 0 },
wolfSSL 14:167253f4e170 39123 /* 101 << 144 */
wolfSSL 14:167253f4e170 39124 { { 0x08612d29b9f2aad4l,0x43c41330ad09dd17l,0xa45cb84a9f740519l,
wolfSSL 14:167253f4e170 39125 0x0a9ea9a7512ec031l },
wolfSSL 14:167253f4e170 39126 { 0x6e90dccaee747f35l,0xe4388bd1f0a1479bl,0x966140c4e20a9029l,
wolfSSL 14:167253f4e170 39127 0x1bb1f65d7dd956abl },
wolfSSL 14:167253f4e170 39128 0 },
wolfSSL 14:167253f4e170 39129 /* 107 << 144 */
wolfSSL 14:167253f4e170 39130 { { 0x066d206ea8f12bb3l,0xc9023b1b4325ec13l,0x1f56c72c96ead8ddl,
wolfSSL 14:167253f4e170 39131 0x454050fd8003e4c2l },
wolfSSL 14:167253f4e170 39132 { 0x9ca258a58917aa9dl,0xfe24b282d94593cfl,0xea66c203752741cfl,
wolfSSL 14:167253f4e170 39133 0x5714268c295a895el },
wolfSSL 14:167253f4e170 39134 0 },
wolfSSL 14:167253f4e170 39135 /* 113 << 144 */
wolfSSL 14:167253f4e170 39136 { { 0x72a9fbecc177d694l,0x38bb9387d68454d3l,0xa3d347bf590bc7d2l,
wolfSSL 14:167253f4e170 39137 0xcb6e292605ccc234l },
wolfSSL 14:167253f4e170 39138 { 0x588abfcf0d393c01l,0xf053dadf539e5568l,0xad7480fef2a8b157l,
wolfSSL 14:167253f4e170 39139 0xff28c8bb018cac8fl },
wolfSSL 14:167253f4e170 39140 0 },
wolfSSL 14:167253f4e170 39141 /* 116 << 144 */
wolfSSL 14:167253f4e170 39142 { { 0x12f1a00e7f5b8821l,0x0afa44e489b4b0cel,0x2dcaad8f6006338el,
wolfSSL 14:167253f4e170 39143 0x79c022cdba41242bl },
wolfSSL 14:167253f4e170 39144 { 0x7f6ef7e17871d350l,0x946c2a91674253adl,0xf686d137a9cbbdd9l,
wolfSSL 14:167253f4e170 39145 0xa47ce2eaf7d4f9f2l },
wolfSSL 14:167253f4e170 39146 0 },
wolfSSL 14:167253f4e170 39147 /* 119 << 144 */
wolfSSL 14:167253f4e170 39148 { { 0x1824991b205d40d6l,0x49cca1c085046a90l,0x7e23c1acd005e3c2l,
wolfSSL 14:167253f4e170 39149 0x093a9ae6d102c8ffl },
wolfSSL 14:167253f4e170 39150 { 0xf4791082d2f40843l,0xe456021811645483l,0x8a59c3b0fd3a6b39l,
wolfSSL 14:167253f4e170 39151 0x39130e7f820de158l },
wolfSSL 14:167253f4e170 39152 0 },
wolfSSL 14:167253f4e170 39153 /* 125 << 144 */
wolfSSL 14:167253f4e170 39154 { { 0xf7eef88d83b90783l,0xff60762af336d581l,0xf64f2d5dd801f5a0l,
wolfSSL 14:167253f4e170 39155 0x672b6ee7d6b3b8b9l },
wolfSSL 14:167253f4e170 39156 { 0xa2a2dceb08034d69l,0x3eca27f635638218l,0xe7065986fa17fefdl,
wolfSSL 14:167253f4e170 39157 0xf1b74445f5803af1l },
wolfSSL 14:167253f4e170 39158 0 },
wolfSSL 14:167253f4e170 39159 },
wolfSSL 14:167253f4e170 39160 {
wolfSSL 14:167253f4e170 39161 /* 0 << 152 */
wolfSSL 14:167253f4e170 39162 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 39163 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 39164 1 },
wolfSSL 14:167253f4e170 39165 /* 1 << 152 */
wolfSSL 14:167253f4e170 39166 { { 0x32670d2f7189e71fl,0xc64387485ecf91e7l,0x15758e57db757a21l,
wolfSSL 14:167253f4e170 39167 0x427d09f8290a9ce5l },
wolfSSL 14:167253f4e170 39168 { 0x846a308f38384a7al,0xaac3acb4b0732b99l,0x9e94100917845819l,
wolfSSL 14:167253f4e170 39169 0x95cba111a7ce5e03l },
wolfSSL 14:167253f4e170 39170 0 },
wolfSSL 14:167253f4e170 39171 /* 3 << 152 */
wolfSSL 14:167253f4e170 39172 { { 0x37a01e48a105fc8el,0x769d754a289ba48cl,0xc08c6fe1d51c2180l,
wolfSSL 14:167253f4e170 39173 0xb032dd33b7bd1387l },
wolfSSL 14:167253f4e170 39174 { 0x953826db020b0aa6l,0x05137e800664c73cl,0xc66302c4660cf95dl,
wolfSSL 14:167253f4e170 39175 0x99004e11b2cef28al },
wolfSSL 14:167253f4e170 39176 0 },
wolfSSL 14:167253f4e170 39177 /* 4 << 152 */
wolfSSL 14:167253f4e170 39178 { { 0x214bc9a7d298c241l,0xe3b697ba56807cfdl,0xef1c78024564eadbl,
wolfSSL 14:167253f4e170 39179 0xdde8cdcfb48149c5l },
wolfSSL 14:167253f4e170 39180 { 0x946bf0a75a4d2604l,0x27154d7f6c1538afl,0x95cc9230de5b1fccl,
wolfSSL 14:167253f4e170 39181 0xd88519e966864f82l },
wolfSSL 14:167253f4e170 39182 0 },
wolfSSL 14:167253f4e170 39183 /* 5 << 152 */
wolfSSL 14:167253f4e170 39184 { { 0x1013e4f796ea6ca1l,0x567cdc2a1f792871l,0xadb728705c658d45l,
wolfSSL 14:167253f4e170 39185 0xf7c1ff4ace600e98l },
wolfSSL 14:167253f4e170 39186 { 0xa1ba86574b6cad39l,0x3d58d634ba20b428l,0xc0011cdea2e6fdfbl,
wolfSSL 14:167253f4e170 39187 0xa832367a7b18960dl },
wolfSSL 14:167253f4e170 39188 0 },
wolfSSL 14:167253f4e170 39189 /* 7 << 152 */
wolfSSL 14:167253f4e170 39190 { { 0x1ecc032af416448dl,0x4a7e8c10ec76d971l,0x854f9805b90b6eael,
wolfSSL 14:167253f4e170 39191 0xfd0b15324bed0594l },
wolfSSL 14:167253f4e170 39192 { 0x89f71848d98b5ca3l,0xd01fe5fcf039b3efl,0x4481332e627bda2el,
wolfSSL 14:167253f4e170 39193 0xe67cecd7a5073e41l },
wolfSSL 14:167253f4e170 39194 0 },
wolfSSL 14:167253f4e170 39195 /* 9 << 152 */
wolfSSL 14:167253f4e170 39196 { { 0x2ab0bce94595a859l,0x4d8c2da082084ee7l,0x21ff8be5acca3d3cl,
wolfSSL 14:167253f4e170 39197 0xd8b805337827f633l },
wolfSSL 14:167253f4e170 39198 { 0xf74e8c026becabbfl,0x9fae4dbefede4828l,0xd3885a5b3cc46bcfl,
wolfSSL 14:167253f4e170 39199 0x2d535e2b6e6ad144l },
wolfSSL 14:167253f4e170 39200 0 },
wolfSSL 14:167253f4e170 39201 /* 10 << 152 */
wolfSSL 14:167253f4e170 39202 { { 0x63d3444507d9e240l,0x6fbadf4338cff7e6l,0x8717624a959c9461l,
wolfSSL 14:167253f4e170 39203 0xd7d951c411fb775bl },
wolfSSL 14:167253f4e170 39204 { 0x4049161af6fc3a2bl,0x0dfa2547a1a8e98dl,0xeca780d439c2139cl,
wolfSSL 14:167253f4e170 39205 0xd8c2d8cbd73ea8efl },
wolfSSL 14:167253f4e170 39206 0 },
wolfSSL 14:167253f4e170 39207 /* 11 << 152 */
wolfSSL 14:167253f4e170 39208 { { 0x3aa1974f07605b28l,0x4f3d82a71e296255l,0xbbe5ea03b4e23f16l,
wolfSSL 14:167253f4e170 39209 0x8f5c6c6b4e654193l },
wolfSSL 14:167253f4e170 39210 { 0x27181182d3e8ab01l,0xc68bb231f3ba6bc2l,0x90a244d820af1fd7l,
wolfSSL 14:167253f4e170 39211 0x605abc055b713f4fl },
wolfSSL 14:167253f4e170 39212 0 },
wolfSSL 14:167253f4e170 39213 /* 13 << 152 */
wolfSSL 14:167253f4e170 39214 { { 0xca5fe19bd221991al,0x271ff066f05f400el,0x9d46ec4c9cf09896l,
wolfSSL 14:167253f4e170 39215 0xdcaa8dfdec4febc3l },
wolfSSL 14:167253f4e170 39216 { 0xaa3995a0adf19d04l,0xc98634239da573a6l,0x378058b2f2465b2bl,
wolfSSL 14:167253f4e170 39217 0x20d389f9b4c31612l },
wolfSSL 14:167253f4e170 39218 0 },
wolfSSL 14:167253f4e170 39219 /* 15 << 152 */
wolfSSL 14:167253f4e170 39220 { { 0xd7d199c7b7631c9dl,0x1322c2b8bb123942l,0xe662b68fbe8b6848l,
wolfSSL 14:167253f4e170 39221 0xc970faf2cde99b14l },
wolfSSL 14:167253f4e170 39222 { 0x61b27134b06655e5l,0xadcef8f781365d89l,0x917b5ab521b851aal,
wolfSSL 14:167253f4e170 39223 0x4f4472121cf694a7l },
wolfSSL 14:167253f4e170 39224 0 },
wolfSSL 14:167253f4e170 39225 /* 16 << 152 */
wolfSSL 14:167253f4e170 39226 { { 0x488f1185ca8d9d1al,0xadf2c77dd987ded2l,0x5f3039f060c46124l,
wolfSSL 14:167253f4e170 39227 0xe5d70b7571e095f4l },
wolfSSL 14:167253f4e170 39228 { 0x82d586506260e70fl,0x39d75ea7f750d105l,0x8cf3d0b175bac364l,
wolfSSL 14:167253f4e170 39229 0xf3a7564d21d01329l },
wolfSSL 14:167253f4e170 39230 0 },
wolfSSL 14:167253f4e170 39231 /* 17 << 152 */
wolfSSL 14:167253f4e170 39232 { { 0x241e3907fe44e547l,0x42d464c36b992187l,0xeaa8fa989ba72f28l,
wolfSSL 14:167253f4e170 39233 0x965a8b8f6afbb81fl },
wolfSSL 14:167253f4e170 39234 { 0x69356a7a8b375ea5l,0x22501ec741bdcc83l,0xf80f4e1445fb180cl,
wolfSSL 14:167253f4e170 39235 0xc0b12e95f5e1b822l },
wolfSSL 14:167253f4e170 39236 0 },
wolfSSL 14:167253f4e170 39237 /* 19 << 152 */
wolfSSL 14:167253f4e170 39238 { { 0x977234e05483dc02l,0x0167430c13d8dcb2l,0xa9971278049912edl,
wolfSSL 14:167253f4e170 39239 0xab044b18ca40fa39l },
wolfSSL 14:167253f4e170 39240 { 0xac9587449ff3896cl,0x75bb32eb860d1240l,0xf807071f6b958654l,
wolfSSL 14:167253f4e170 39241 0x67d2d3dc7121b4b6l },
wolfSSL 14:167253f4e170 39242 0 },
wolfSSL 14:167253f4e170 39243 /* 21 << 152 */
wolfSSL 14:167253f4e170 39244 { { 0x3b61e67722f9f017l,0x9c593eb1a8541696l,0xbeba950050eda653l,
wolfSSL 14:167253f4e170 39245 0x07b5a48f5e673f6al },
wolfSSL 14:167253f4e170 39246 { 0x748dca0013257aa3l,0x6bbddf9a7372e942l,0xc012f4badde83977l,
wolfSSL 14:167253f4e170 39247 0x6e59b327392ddb53l },
wolfSSL 14:167253f4e170 39248 0 },
wolfSSL 14:167253f4e170 39249 /* 23 << 152 */
wolfSSL 14:167253f4e170 39250 { { 0xb2f3fff641356603l,0x50e63537545f042bl,0x55e5149770eb530dl,
wolfSSL 14:167253f4e170 39251 0x5a7383c310860c3bl },
wolfSSL 14:167253f4e170 39252 { 0x7be30382ea669a09l,0xfdf735d289cc1c7fl,0x6e51ed844e0607cfl,
wolfSSL 14:167253f4e170 39253 0xdab566df4893795el },
wolfSSL 14:167253f4e170 39254 0 },
wolfSSL 14:167253f4e170 39255 /* 25 << 152 */
wolfSSL 14:167253f4e170 39256 { { 0x20e3be0f8920690dl,0x98db80eaac279c05l,0x4cd5c60a44b8a4f8l,
wolfSSL 14:167253f4e170 39257 0xeda7e91c7b0335f4l },
wolfSSL 14:167253f4e170 39258 { 0x45c1302a41ee5713l,0x1f6455fe588508d0l,0x82cb7311163d2fc3l,
wolfSSL 14:167253f4e170 39259 0xe866b90322f10b71l },
wolfSSL 14:167253f4e170 39260 0 },
wolfSSL 14:167253f4e170 39261 /* 27 << 152 */
wolfSSL 14:167253f4e170 39262 { { 0xc217a2e259b4041el,0x85b96ce274526cbfl,0xcbfc4f5473f12687l,
wolfSSL 14:167253f4e170 39263 0x097caa5fd40225e7l },
wolfSSL 14:167253f4e170 39264 { 0x0871ad406e91293fl,0x5f2ea207033b98ecl,0x0b3b8fac1f27d37al,
wolfSSL 14:167253f4e170 39265 0x7d72dd4c7f03876cl },
wolfSSL 14:167253f4e170 39266 0 },
wolfSSL 14:167253f4e170 39267 /* 28 << 152 */
wolfSSL 14:167253f4e170 39268 { { 0xb51a40a51e6a75c1l,0x24327c760ea7d817l,0x0663018207774597l,
wolfSSL 14:167253f4e170 39269 0xd6fdbec397fa7164l },
wolfSSL 14:167253f4e170 39270 { 0x20c99dfb13c90f48l,0xd6ac5273686ef263l,0xc6a50bdcfef64eebl,
wolfSSL 14:167253f4e170 39271 0xcd87b28186fdfc32l },
wolfSSL 14:167253f4e170 39272 0 },
wolfSSL 14:167253f4e170 39273 /* 29 << 152 */
wolfSSL 14:167253f4e170 39274 { { 0x2f0c49ac95861439l,0xcdcb051b2e36e38al,0x459474080ae20c0cl,
wolfSSL 14:167253f4e170 39275 0x374baad2dddf0aabl },
wolfSSL 14:167253f4e170 39276 { 0x291abc85d5d104a4l,0x0758001958a0657cl,0xd0f428e1a905ea13l,
wolfSSL 14:167253f4e170 39277 0x12599ddcf7241dbfl },
wolfSSL 14:167253f4e170 39278 0 },
wolfSSL 14:167253f4e170 39279 /* 31 << 152 */
wolfSSL 14:167253f4e170 39280 { { 0x16222ce81bc3c403l,0xbacc1508fc13ca02l,0xfa98db4d920ee8e9l,
wolfSSL 14:167253f4e170 39281 0xe5fc39c4df12a359l },
wolfSSL 14:167253f4e170 39282 { 0x4e8c9b90188733e8l,0x04283dd81394936cl,0x93b3db51cd130432l,
wolfSSL 14:167253f4e170 39283 0x33bfe3163c93ce31l },
wolfSSL 14:167253f4e170 39284 0 },
wolfSSL 14:167253f4e170 39285 /* 33 << 152 */
wolfSSL 14:167253f4e170 39286 { { 0xb48591e9840b1724l,0x1009559f5885ec6fl,0x45ee51121b077620l,
wolfSSL 14:167253f4e170 39287 0x848f9800f1f4cc8al },
wolfSSL 14:167253f4e170 39288 { 0x6ec1e0f74e97bceal,0x953bc23a98e80642l,0x9f0d1e8194ce7181l,
wolfSSL 14:167253f4e170 39289 0xeb3e6b9700eec596l },
wolfSSL 14:167253f4e170 39290 0 },
wolfSSL 14:167253f4e170 39291 /* 34 << 152 */
wolfSSL 14:167253f4e170 39292 { { 0x6d34b39bff7514dal,0x29ffe49825be3634l,0x63e56598f28c8b82l,
wolfSSL 14:167253f4e170 39293 0x78b99133aab41bcel },
wolfSSL 14:167253f4e170 39294 { 0x11febd5a52563180l,0xa3be94c5c356a8c0l,0x5e9b422e0d61f864l,
wolfSSL 14:167253f4e170 39295 0x2bf4ca1278fd259el },
wolfSSL 14:167253f4e170 39296 0 },
wolfSSL 14:167253f4e170 39297 /* 35 << 152 */
wolfSSL 14:167253f4e170 39298 { { 0x8f60e40266914514l,0x6d9e280fef178167l,0x2ff7aec9e2949a48l,
wolfSSL 14:167253f4e170 39299 0x422389ce72d37511l },
wolfSSL 14:167253f4e170 39300 { 0xe9b156f3307ac1d2l,0x1cb581a78518e79fl,0x56d43f302185cf82l,
wolfSSL 14:167253f4e170 39301 0x8d46c5aade59562cl },
wolfSSL 14:167253f4e170 39302 0 },
wolfSSL 14:167253f4e170 39303 /* 36 << 152 */
wolfSSL 14:167253f4e170 39304 { { 0x50fc0711745edc11l,0x9dd9ad7d3dc87558l,0xce6931fbb49d1e64l,
wolfSSL 14:167253f4e170 39305 0x6c77a0a2c98bd0f9l },
wolfSSL 14:167253f4e170 39306 { 0x62b9a6296baf7cb1l,0xcf065f91ccf72d22l,0x7203cce979639071l,
wolfSSL 14:167253f4e170 39307 0x09ae4885f9cb732fl },
wolfSSL 14:167253f4e170 39308 0 },
wolfSSL 14:167253f4e170 39309 /* 37 << 152 */
wolfSSL 14:167253f4e170 39310 { { 0xd007d682e4b35428l,0x80c162315bcdc0d6l,0xe55a86bd36fce9b2l,
wolfSSL 14:167253f4e170 39311 0x16772edb969a87cfl },
wolfSSL 14:167253f4e170 39312 { 0xff323a2d3f370c94l,0x8d3c8028bf3c1afcl,0x4e1591e73b0c3fafl,
wolfSSL 14:167253f4e170 39313 0xfbd6475cb981ce83l },
wolfSSL 14:167253f4e170 39314 0 },
wolfSSL 14:167253f4e170 39315 /* 39 << 152 */
wolfSSL 14:167253f4e170 39316 { { 0xcf414ae3315b2471l,0xf54abf8033168de6l,0x6883efc5df5cdb24l,
wolfSSL 14:167253f4e170 39317 0x3eca788c8efe81acl },
wolfSSL 14:167253f4e170 39318 { 0xdb58c6c778eeccadl,0x3c77939082fecfb7l,0x5736cdd9c9b513f3l,
wolfSSL 14:167253f4e170 39319 0xab7e6ea57b02aaf2l },
wolfSSL 14:167253f4e170 39320 0 },
wolfSSL 14:167253f4e170 39321 /* 40 << 152 */
wolfSSL 14:167253f4e170 39322 { { 0x5e7c3becee8314f3l,0x1c068aeddbea298fl,0x08d381f17c80acecl,
wolfSSL 14:167253f4e170 39323 0x03b56be8e330495bl },
wolfSSL 14:167253f4e170 39324 { 0xaeffb8f29222882dl,0x95ff38f6c4af8bf7l,0x50e32d351fc57d8cl,
wolfSSL 14:167253f4e170 39325 0x6635be5217b444f0l },
wolfSSL 14:167253f4e170 39326 0 },
wolfSSL 14:167253f4e170 39327 /* 41 << 152 */
wolfSSL 14:167253f4e170 39328 { { 0x2cec7ba64805d895l,0x4c8399870ac78e7cl,0x031ad6c7f79416c5l,
wolfSSL 14:167253f4e170 39329 0x1b2f2621f1838d2fl },
wolfSSL 14:167253f4e170 39330 { 0x60835eac91447f90l,0x59147af1f9bab5d9l,0x7a3005d6f393f175l,
wolfSSL 14:167253f4e170 39331 0x8cf3c468c4120ba2l },
wolfSSL 14:167253f4e170 39332 0 },
wolfSSL 14:167253f4e170 39333 /* 43 << 152 */
wolfSSL 14:167253f4e170 39334 { { 0xeccffc7d8a2c1f08l,0x308916d37e384bd4l,0x6b8c2ff55e366384l,
wolfSSL 14:167253f4e170 39335 0xf4b2850d03e4747cl },
wolfSSL 14:167253f4e170 39336 { 0xe839c569e96c1488l,0xa46ff7f956c9cb10l,0xd968c74c362fd172l,
wolfSSL 14:167253f4e170 39337 0x2aa7fe4cad6bb601l },
wolfSSL 14:167253f4e170 39338 0 },
wolfSSL 14:167253f4e170 39339 /* 44 << 152 */
wolfSSL 14:167253f4e170 39340 { { 0x04d15276a5177900l,0x4e1dbb47f6858752l,0x5b475622c615796cl,
wolfSSL 14:167253f4e170 39341 0xa6fa0387691867bfl },
wolfSSL 14:167253f4e170 39342 { 0xed7f5d562844c6d0l,0xc633cf9b03a2477dl,0xf6be5c402d3721d6l,
wolfSSL 14:167253f4e170 39343 0xaf312eb7e9fd68e6l },
wolfSSL 14:167253f4e170 39344 0 },
wolfSSL 14:167253f4e170 39345 /* 45 << 152 */
wolfSSL 14:167253f4e170 39346 { { 0xf3b8164eec04c847l,0xa305ca93fe65816cl,0xa65f9963c7e2ce52l,
wolfSSL 14:167253f4e170 39347 0xc448005198882cfcl },
wolfSSL 14:167253f4e170 39348 { 0x46a998df05c165bbl,0xc38f4edf9dfe1e98l,0xb96ec43f8739f77al,
wolfSSL 14:167253f4e170 39349 0x10a23af9313b40bfl },
wolfSSL 14:167253f4e170 39350 0 },
wolfSSL 14:167253f4e170 39351 /* 46 << 152 */
wolfSSL 14:167253f4e170 39352 { { 0xe476c3e3ee668e0cl,0xcec6a984478197c2l,0xc9fa1d68897147c1l,
wolfSSL 14:167253f4e170 39353 0x4e6aec0ea6465793l },
wolfSSL 14:167253f4e170 39354 { 0xedca9db76b219c3bl,0xa2cd57942e508d3bl,0x38b384663936e02al,
wolfSSL 14:167253f4e170 39355 0x0b8d3b4ca54ce90fl },
wolfSSL 14:167253f4e170 39356 0 },
wolfSSL 14:167253f4e170 39357 /* 47 << 152 */
wolfSSL 14:167253f4e170 39358 { { 0x66e06537af08e0fcl,0x70fe0f2a907f1a93l,0x8c25245285ec1647l,
wolfSSL 14:167253f4e170 39359 0x0b8b2964d5560eddl },
wolfSSL 14:167253f4e170 39360 { 0xda45a326f3ef8e14l,0xf3adf9a6abc3494bl,0xbbdd93c11eda0d92l,
wolfSSL 14:167253f4e170 39361 0x1b5e12c609912773l },
wolfSSL 14:167253f4e170 39362 0 },
wolfSSL 14:167253f4e170 39363 /* 48 << 152 */
wolfSSL 14:167253f4e170 39364 { { 0x242792d2e7417ce1l,0xff42bc71970ee7f5l,0x1ff4dc6d5c67a41el,
wolfSSL 14:167253f4e170 39365 0x77709b7b20882a58l },
wolfSSL 14:167253f4e170 39366 { 0x3554731dbe217f2cl,0x2af2a8cd5bb72177l,0x58eee769591dd059l,
wolfSSL 14:167253f4e170 39367 0xbb2930c94bba6477l },
wolfSSL 14:167253f4e170 39368 0 },
wolfSSL 14:167253f4e170 39369 /* 49 << 152 */
wolfSSL 14:167253f4e170 39370 { { 0x5d9d507551d01848l,0x53dadb405b600d1el,0x7ba5b4dc5cb0a9a3l,
wolfSSL 14:167253f4e170 39371 0xdb85b04c6795e547l },
wolfSSL 14:167253f4e170 39372 { 0x480e7443f0354843l,0xc7efe6e813012322l,0x479b674a2aeee1e6l,
wolfSSL 14:167253f4e170 39373 0xf5481f19704f4ea3l },
wolfSSL 14:167253f4e170 39374 0 },
wolfSSL 14:167253f4e170 39375 /* 51 << 152 */
wolfSSL 14:167253f4e170 39376 { { 0x76a38d6978c7816el,0xe020c87df84ec554l,0x99af2f78f9818010l,
wolfSSL 14:167253f4e170 39377 0x31cf103d988136eal },
wolfSSL 14:167253f4e170 39378 { 0x6b095a114816a5aal,0x5a4cd2a4eff0a4afl,0x543041a5892e5e04l,
wolfSSL 14:167253f4e170 39379 0x460f94c30aab9ee1l },
wolfSSL 14:167253f4e170 39380 0 },
wolfSSL 14:167253f4e170 39381 /* 52 << 152 */
wolfSSL 14:167253f4e170 39382 { { 0x863ee0477d930cfcl,0x4c262ad1396fd1f4l,0xf4765bc8039af7e1l,
wolfSSL 14:167253f4e170 39383 0x2519834b5ba104f6l },
wolfSSL 14:167253f4e170 39384 { 0x7cd61b4cd105f961l,0xa5415da5d63bca54l,0x778280a088a1f17cl,
wolfSSL 14:167253f4e170 39385 0xc49689492329512cl },
wolfSSL 14:167253f4e170 39386 0 },
wolfSSL 14:167253f4e170 39387 /* 53 << 152 */
wolfSSL 14:167253f4e170 39388 { { 0x282d92b48cd3948al,0x95d219dfe168205bl,0xf6111a6f87bf3abcl,
wolfSSL 14:167253f4e170 39389 0x910f8ce655fee9f2l },
wolfSSL 14:167253f4e170 39390 { 0xb6c806f74f71ac89l,0xd0cc300fb7235f73l,0xfe37ccb47d0d45bbl,
wolfSSL 14:167253f4e170 39391 0x5b2445f6952f0eaal },
wolfSSL 14:167253f4e170 39392 0 },
wolfSSL 14:167253f4e170 39393 /* 55 << 152 */
wolfSSL 14:167253f4e170 39394 { { 0x03870be447141962l,0x8b79033f4a2b3f7fl,0xb6983b5ed2e5e274l,
wolfSSL 14:167253f4e170 39395 0x2a2f8018501ed99cl },
wolfSSL 14:167253f4e170 39396 { 0x07a92eb9feb49656l,0x063f0a9e482e2972l,0x413be27a57435832l,
wolfSSL 14:167253f4e170 39397 0x56363c5f6f9d3de1l },
wolfSSL 14:167253f4e170 39398 0 },
wolfSSL 14:167253f4e170 39399 /* 57 << 152 */
wolfSSL 14:167253f4e170 39400 { { 0xd247153163b50214l,0x32b435eeb2b897del,0xc49f0b01b05df4del,
wolfSSL 14:167253f4e170 39401 0x97b6aa40b7df9b91l },
wolfSSL 14:167253f4e170 39402 { 0x58ff34ec8ec39d78l,0xab0889005e0114a3l,0x6872b4de4822b7b8l,
wolfSSL 14:167253f4e170 39403 0x7614c0d0ab239073l },
wolfSSL 14:167253f4e170 39404 0 },
wolfSSL 14:167253f4e170 39405 /* 59 << 152 */
wolfSSL 14:167253f4e170 39406 { { 0x81891d378aa5d80al,0xf48ca24292e45f2cl,0xba711b6c0d04904cl,
wolfSSL 14:167253f4e170 39407 0x5992cda349f16ed6l },
wolfSSL 14:167253f4e170 39408 { 0x18b9a739790593eel,0x8b98e84dc4ba16d1l,0xac55701cb7b81615l,
wolfSSL 14:167253f4e170 39409 0xadb4533b15822291l },
wolfSSL 14:167253f4e170 39410 0 },
wolfSSL 14:167253f4e170 39411 /* 60 << 152 */
wolfSSL 14:167253f4e170 39412 { { 0x6210db7181236c97l,0x74f7685b3ee0781fl,0x4df7da7ba3e41372l,
wolfSSL 14:167253f4e170 39413 0x2aae38b1b1a1553el },
wolfSSL 14:167253f4e170 39414 { 0x1688e222f6dd9d1bl,0x576954485b8b6487l,0x478d21274b2edeaal,
wolfSSL 14:167253f4e170 39415 0xb2818fa51e85956al },
wolfSSL 14:167253f4e170 39416 0 },
wolfSSL 14:167253f4e170 39417 /* 61 << 152 */
wolfSSL 14:167253f4e170 39418 { { 0xc0677533f255ba8el,0x2bdae2a1efa2aabel,0xf7aebbd4b086c8a6l,
wolfSSL 14:167253f4e170 39419 0x148455d992cb1147l },
wolfSSL 14:167253f4e170 39420 { 0xa084e8d715402565l,0x33f111a8fa41bf23l,0x4bc990d627ac189bl,
wolfSSL 14:167253f4e170 39421 0x48dbe6569d505f76l },
wolfSSL 14:167253f4e170 39422 0 },
wolfSSL 14:167253f4e170 39423 /* 63 << 152 */
wolfSSL 14:167253f4e170 39424 { { 0x59df7fab596766f3l,0x4cadcbfe604f26e4l,0x0cf199338a6af592l,
wolfSSL 14:167253f4e170 39425 0x3af1ace287b826c1l },
wolfSSL 14:167253f4e170 39426 { 0xf09a5b38ee60684el,0xa04cbeda4ed7c711l,0xdb28c42eb1731040l,
wolfSSL 14:167253f4e170 39427 0x75fcc0ec2e6e6523l },
wolfSSL 14:167253f4e170 39428 0 },
wolfSSL 14:167253f4e170 39429 /* 64 << 152 */
wolfSSL 14:167253f4e170 39430 { { 0x1e6adddaf176f2c0l,0x01ca4604e2572658l,0x0a404ded85342ffbl,
wolfSSL 14:167253f4e170 39431 0x8cf60f96441838d6l },
wolfSSL 14:167253f4e170 39432 { 0x9bbc691cc9071c4al,0xfd58874434442803l,0x97101c85809c0d81l,
wolfSSL 14:167253f4e170 39433 0xa7fb754c8c456f7fl },
wolfSSL 14:167253f4e170 39434 0 },
wolfSSL 14:167253f4e170 39435 /* 65 << 152 */
wolfSSL 14:167253f4e170 39436 { { 0x4374020072196f30l,0x59ed0dc0dcd6c935l,0x17d4ed8e5034161bl,
wolfSSL 14:167253f4e170 39437 0x8abe3e13009e7170l },
wolfSSL 14:167253f4e170 39438 { 0xe51c41c96c791456l,0xc671807704d72bb6l,0xd4309cf56bba424al,
wolfSSL 14:167253f4e170 39439 0x6122b951d0ca4ceal },
wolfSSL 14:167253f4e170 39440 0 },
wolfSSL 14:167253f4e170 39441 /* 71 << 152 */
wolfSSL 14:167253f4e170 39442 { { 0xdfdb2e9c4278982bl,0xf3a282b32d6a2a61l,0x5611650cd2f2b03cl,
wolfSSL 14:167253f4e170 39443 0xa62c177f43f7f83al },
wolfSSL 14:167253f4e170 39444 { 0x372310ab4c593d32l,0x2bb6903a2b570f9cl,0x2930da3df43af904l,
wolfSSL 14:167253f4e170 39445 0x2bbd04aa2c8a5a7dl },
wolfSSL 14:167253f4e170 39446 0 },
wolfSSL 14:167253f4e170 39447 /* 77 << 152 */
wolfSSL 14:167253f4e170 39448 { { 0x10c324c007e536del,0xc456836d377be1b4l,0x9a627d75d785af3fl,
wolfSSL 14:167253f4e170 39449 0xde74559118b58b31l },
wolfSSL 14:167253f4e170 39450 { 0xeac83ea60c47239al,0x35da24abbc02f670l,0x2d4abde0c3af6e63l,
wolfSSL 14:167253f4e170 39451 0xac53acba5a7ebf1bl },
wolfSSL 14:167253f4e170 39452 0 },
wolfSSL 14:167253f4e170 39453 /* 83 << 152 */
wolfSSL 14:167253f4e170 39454 { { 0x2b03ec2efd9a9f3el,0xc967cd2b9d898a09l,0xb24bcba8039dc4f6l,
wolfSSL 14:167253f4e170 39455 0x0ea1d297061ada1el },
wolfSSL 14:167253f4e170 39456 { 0x3a7a25fbc134b8bcl,0x846282d6f61cd312l,0xfa1de0d2e0d778d9l,
wolfSSL 14:167253f4e170 39457 0xf75fad4ef09be264l },
wolfSSL 14:167253f4e170 39458 0 },
wolfSSL 14:167253f4e170 39459 /* 89 << 152 */
wolfSSL 14:167253f4e170 39460 { { 0x7d35695bcf74afb3l,0x34d43d9f15bb36fbl,0x15f0b43960b45fbel,
wolfSSL 14:167253f4e170 39461 0xb15db8d84f38ec06l },
wolfSSL 14:167253f4e170 39462 { 0x93ce7d50f7da1406l,0x2db97edd9f076aaal,0x27ebb9aa354429dcl,
wolfSSL 14:167253f4e170 39463 0xf97eb5c446ace469l },
wolfSSL 14:167253f4e170 39464 0 },
wolfSSL 14:167253f4e170 39465 /* 95 << 152 */
wolfSSL 14:167253f4e170 39466 { { 0x758fa2312dcf498fl,0xaa8c14d15cf3853al,0x416f5dab097d786al,
wolfSSL 14:167253f4e170 39467 0xceec00ef38f242a0l },
wolfSSL 14:167253f4e170 39468 { 0x2f8b10b9d8b75ef2l,0xee64912b2281be6al,0xa883481aa382a51el,
wolfSSL 14:167253f4e170 39469 0x9442300f61b16b8al },
wolfSSL 14:167253f4e170 39470 0 },
wolfSSL 14:167253f4e170 39471 /* 101 << 152 */
wolfSSL 14:167253f4e170 39472 { { 0x80e7fbc4f4b171e1l,0xdd2246f5661564a4l,0xcf08d73cd00d4e54l,
wolfSSL 14:167253f4e170 39473 0xf725f5389fca9a30l },
wolfSSL 14:167253f4e170 39474 { 0xd9607358af20debel,0xa97c81e16f7d1cf2l,0x72794ae70dedfb2al,
wolfSSL 14:167253f4e170 39475 0xc328cb93159ff29dl },
wolfSSL 14:167253f4e170 39476 0 },
wolfSSL 14:167253f4e170 39477 /* 107 << 152 */
wolfSSL 14:167253f4e170 39478 { { 0xaf9491d6252f6d59l,0x6744d7518feda60dl,0xa485f8aa34c5c048l,
wolfSSL 14:167253f4e170 39479 0x2ed794b4b50ea53bl },
wolfSSL 14:167253f4e170 39480 { 0x0da82650db26c289l,0xed3ab4c50904af55l,0x425eda1176544463l,
wolfSSL 14:167253f4e170 39481 0x917be5f48939b29bl },
wolfSSL 14:167253f4e170 39482 0 },
wolfSSL 14:167253f4e170 39483 /* 113 << 152 */
wolfSSL 14:167253f4e170 39484 { { 0xa2e72d0f8e208e5dl,0x5a5e4344234a5fedl,0x6dcc56535005bee8l,
wolfSSL 14:167253f4e170 39485 0x09d0c254854e2e04l },
wolfSSL 14:167253f4e170 39486 { 0xade4bcdba82f0789l,0x5a3e3cd4ec460a91l,0x6b1a867be76695b2l,
wolfSSL 14:167253f4e170 39487 0xd1eb9df0a28b9331l },
wolfSSL 14:167253f4e170 39488 0 },
wolfSSL 14:167253f4e170 39489 /* 116 << 152 */
wolfSSL 14:167253f4e170 39490 { { 0x3f5cf5f678e62ddcl,0x2267c45407fd752bl,0x5e361b6b5e437bbel,
wolfSSL 14:167253f4e170 39491 0x95c595018354e075l },
wolfSSL 14:167253f4e170 39492 { 0xec725f85f2b254d9l,0x844b617d2cb52b4el,0xed8554f5cf425fb5l,
wolfSSL 14:167253f4e170 39493 0xab67703e2af9f312l },
wolfSSL 14:167253f4e170 39494 0 },
wolfSSL 14:167253f4e170 39495 /* 119 << 152 */
wolfSSL 14:167253f4e170 39496 { { 0x8dcc920005fb96bbl,0x29d2442470f84705l,0x540bb6e63f09628fl,
wolfSSL 14:167253f4e170 39497 0x07f8b4de2a9c2359l },
wolfSSL 14:167253f4e170 39498 { 0xb8e002d1957e41dcl,0x9a0fe82b9e683a3fl,0x996b1a5250e633fdl,
wolfSSL 14:167253f4e170 39499 0x748a11e500c669cal },
wolfSSL 14:167253f4e170 39500 0 },
wolfSSL 14:167253f4e170 39501 /* 125 << 152 */
wolfSSL 14:167253f4e170 39502 { { 0x0593a788581dfd6el,0x99f1164f64e1b329l,0x1142c44b1defddbbl,
wolfSSL 14:167253f4e170 39503 0xbc95c9c7660b9036l },
wolfSSL 14:167253f4e170 39504 { 0xf24b5a47079179ccl,0x6175b52c21f7033bl,0x8b5d84183bc2eec0l,
wolfSSL 14:167253f4e170 39505 0xc1332c8272d12670l },
wolfSSL 14:167253f4e170 39506 0 },
wolfSSL 14:167253f4e170 39507 },
wolfSSL 14:167253f4e170 39508 {
wolfSSL 14:167253f4e170 39509 /* 0 << 160 */
wolfSSL 14:167253f4e170 39510 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 39511 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 39512 1 },
wolfSSL 14:167253f4e170 39513 /* 1 << 160 */
wolfSSL 14:167253f4e170 39514 { { 0xd433e50f6d3549cfl,0x6f33696ffacd665el,0x695bfdacce11fcb4l,
wolfSSL 14:167253f4e170 39515 0x810ee252af7c9860l },
wolfSSL 14:167253f4e170 39516 { 0x65450fe17159bb2cl,0xf7dfbebe758b357bl,0x2b057e74d69fea72l,
wolfSSL 14:167253f4e170 39517 0xd485717a92731745l },
wolfSSL 14:167253f4e170 39518 0 },
wolfSSL 14:167253f4e170 39519 /* 3 << 160 */
wolfSSL 14:167253f4e170 39520 { { 0x6c8d0aa9b898fd52l,0x2fb38a57be9af1a7l,0xe1f2b9a93b4f03f8l,
wolfSSL 14:167253f4e170 39521 0x2b1aad44c3f0cc6fl },
wolfSSL 14:167253f4e170 39522 { 0x58b5332e7cf2c084l,0x1c57d96f0367d26dl,0x2297eabdfa6e4a8dl,
wolfSSL 14:167253f4e170 39523 0x65a947ee4a0e2b6al },
wolfSSL 14:167253f4e170 39524 0 },
wolfSSL 14:167253f4e170 39525 /* 4 << 160 */
wolfSSL 14:167253f4e170 39526 { { 0xaaafafb0285b9491l,0x01a0be881e4c705el,0xff1d4f5d2ad9caabl,
wolfSSL 14:167253f4e170 39527 0x6e349a4ac37a233fl },
wolfSSL 14:167253f4e170 39528 { 0xcf1c12464a1c6a16l,0xd99e6b6629383260l,0xea3d43665f6d5471l,
wolfSSL 14:167253f4e170 39529 0x36974d04ff8cc89bl },
wolfSSL 14:167253f4e170 39530 0 },
wolfSSL 14:167253f4e170 39531 /* 5 << 160 */
wolfSSL 14:167253f4e170 39532 { { 0xf535b616fdd5b854l,0x592549c85728719fl,0xe231468606921cadl,
wolfSSL 14:167253f4e170 39533 0x98c8ce34311b1ef8l },
wolfSSL 14:167253f4e170 39534 { 0x28b937e7e9090b36l,0x67fc3ab90bf7bbb7l,0x12337097a9d87974l,
wolfSSL 14:167253f4e170 39535 0x3e5adca1f970e3fel },
wolfSSL 14:167253f4e170 39536 0 },
wolfSSL 14:167253f4e170 39537 /* 7 << 160 */
wolfSSL 14:167253f4e170 39538 { { 0xcdcc68a7b3f85ff0l,0xacd21cdd1a888044l,0xb6719b2e05dbe894l,
wolfSSL 14:167253f4e170 39539 0xfae1d3d88b8260d4l },
wolfSSL 14:167253f4e170 39540 { 0xedfedece8a1c5d92l,0xbca01a94dc52077el,0xc085549c16dd13edl,
wolfSSL 14:167253f4e170 39541 0xdc5c3bae495ebaadl },
wolfSSL 14:167253f4e170 39542 0 },
wolfSSL 14:167253f4e170 39543 /* 9 << 160 */
wolfSSL 14:167253f4e170 39544 { { 0xcc17063fbe7b643al,0x7872e1c846085760l,0x86b0fffbb4214c9el,
wolfSSL 14:167253f4e170 39545 0xb18bbc0e72bf3638l },
wolfSSL 14:167253f4e170 39546 { 0x8b17de0c722591c9l,0x1edeab1948c29e0cl,0x9fbfd98ef4304f20l,
wolfSSL 14:167253f4e170 39547 0x2d1dbb6b9c77ffb6l },
wolfSSL 14:167253f4e170 39548 0 },
wolfSSL 14:167253f4e170 39549 /* 10 << 160 */
wolfSSL 14:167253f4e170 39550 { { 0xf53f2c658ead09f7l,0x1335e1d59780d14dl,0x69cc20e0cd1b66bcl,
wolfSSL 14:167253f4e170 39551 0x9b670a37bbe0bfc8l },
wolfSSL 14:167253f4e170 39552 { 0xce53dc8128efbeedl,0x0c74e77c8326a6e5l,0x3604e0d2b88e9a63l,
wolfSSL 14:167253f4e170 39553 0xbab38fca13dc2248l },
wolfSSL 14:167253f4e170 39554 0 },
wolfSSL 14:167253f4e170 39555 /* 11 << 160 */
wolfSSL 14:167253f4e170 39556 { { 0x255616d3c7141771l,0xa86691ab2f226b66l,0xda19fea4b3ca63a9l,
wolfSSL 14:167253f4e170 39557 0xfc05dc42ae672f2bl },
wolfSSL 14:167253f4e170 39558 { 0xa9c6e786718ba28fl,0x07b7995b9c66b984l,0x0f434f551b3702f2l,
wolfSSL 14:167253f4e170 39559 0xd6f6212fda84eeffl },
wolfSSL 14:167253f4e170 39560 0 },
wolfSSL 14:167253f4e170 39561 /* 13 << 160 */
wolfSSL 14:167253f4e170 39562 { { 0x4b0e7987b5b41d78l,0xea7df9074bf0c4f8l,0xb4d03560fab80ecdl,
wolfSSL 14:167253f4e170 39563 0x6cf306f6fb1db7e5l },
wolfSSL 14:167253f4e170 39564 { 0x0d59fb5689fd4773l,0xab254f4000f9be33l,0x18a09a9277352da4l,
wolfSSL 14:167253f4e170 39565 0xf81862f5641ea3efl },
wolfSSL 14:167253f4e170 39566 0 },
wolfSSL 14:167253f4e170 39567 /* 15 << 160 */
wolfSSL 14:167253f4e170 39568 { { 0xb59b01579f759d01l,0xa2923d2f7eae4fdel,0x18327757690ba8c0l,
wolfSSL 14:167253f4e170 39569 0x4bf7e38b44f51443l },
wolfSSL 14:167253f4e170 39570 { 0xb6812563b413fc26l,0xedb7d36379e53b36l,0x4fa585c4c389f66dl,
wolfSSL 14:167253f4e170 39571 0x8e1adc3154bd3416l },
wolfSSL 14:167253f4e170 39572 0 },
wolfSSL 14:167253f4e170 39573 /* 16 << 160 */
wolfSSL 14:167253f4e170 39574 { { 0xd3b3a13f1402b9d0l,0x573441c32c7bc863l,0x4b301ec4578c3e6el,
wolfSSL 14:167253f4e170 39575 0xc26fc9c40adaf57el },
wolfSSL 14:167253f4e170 39576 { 0x96e71bfd7493cea3l,0xd05d4b3f1af81456l,0xdaca2a8a6a8c608fl,
wolfSSL 14:167253f4e170 39577 0x53ef07f60725b276l },
wolfSSL 14:167253f4e170 39578 0 },
wolfSSL 14:167253f4e170 39579 /* 17 << 160 */
wolfSSL 14:167253f4e170 39580 { { 0x971e9eedd5098497l,0x97692be63077d8a7l,0xb57e02ad79625a8al,
wolfSSL 14:167253f4e170 39581 0x5e3d20f6a688ecd5l },
wolfSSL 14:167253f4e170 39582 { 0xa4431a28188f964dl,0xd4eb23bd5a11c1dbl,0xfcda853eadc7446fl,
wolfSSL 14:167253f4e170 39583 0x9e2e98b593c94046l },
wolfSSL 14:167253f4e170 39584 0 },
wolfSSL 14:167253f4e170 39585 /* 19 << 160 */
wolfSSL 14:167253f4e170 39586 { { 0x4a649b66eddaa4f1l,0x35a04f185e690c50l,0x1639bdcff908bc53l,
wolfSSL 14:167253f4e170 39587 0xce6d525c121726e8l },
wolfSSL 14:167253f4e170 39588 { 0x70f34948902b402cl,0x3a40c6950e290579l,0x7b0ed90f469a0085l,
wolfSSL 14:167253f4e170 39589 0xecb979c60189c501l },
wolfSSL 14:167253f4e170 39590 0 },
wolfSSL 14:167253f4e170 39591 /* 21 << 160 */
wolfSSL 14:167253f4e170 39592 { { 0x847e2bde5cee8d07l,0x1bed198cd3340037l,0x439ffb3ce41586e3l,
wolfSSL 14:167253f4e170 39593 0x594980f1856f15b0l },
wolfSSL 14:167253f4e170 39594 { 0x22c3b86c6e9307c6l,0xf8b3ee08876382dbl,0x850c628e628f3f30l,
wolfSSL 14:167253f4e170 39595 0x22ec0acb51ee3659l },
wolfSSL 14:167253f4e170 39596 0 },
wolfSSL 14:167253f4e170 39597 /* 23 << 160 */
wolfSSL 14:167253f4e170 39598 { { 0xa4052591efcef5a0l,0x82692a47106d55afl,0xdac3ea88e6ead453l,
wolfSSL 14:167253f4e170 39599 0xaa1368fcf3dfd875l },
wolfSSL 14:167253f4e170 39600 { 0x87bc688aa0c539eal,0x905e206040b1de3el,0x072240b8f1d52452l,
wolfSSL 14:167253f4e170 39601 0x3ebf0644d57b6580l },
wolfSSL 14:167253f4e170 39602 0 },
wolfSSL 14:167253f4e170 39603 /* 25 << 160 */
wolfSSL 14:167253f4e170 39604 { { 0x12109bcc07a0b2f8l,0x336f87d2ca23f14cl,0xb39ae282452a2ea2l,
wolfSSL 14:167253f4e170 39605 0x8e085f5bab59a500l },
wolfSSL 14:167253f4e170 39606 { 0xf7daeb69b63f015cl,0x44c555bcacb47b38l,0x96190454b623910al,
wolfSSL 14:167253f4e170 39607 0x4b666e2255b41b70l },
wolfSSL 14:167253f4e170 39608 0 },
wolfSSL 14:167253f4e170 39609 /* 27 << 160 */
wolfSSL 14:167253f4e170 39610 { { 0xf146914eb53419fdl,0xd2109b07493e88bfl,0x30bf9cbccc54bcd5l,
wolfSSL 14:167253f4e170 39611 0xcf9ea59750e34a1fl },
wolfSSL 14:167253f4e170 39612 { 0x70ade8a59588591dl,0xf668be676b41c269l,0x3497c58f78df2e6bl,
wolfSSL 14:167253f4e170 39613 0x0fad05cc71042b56l },
wolfSSL 14:167253f4e170 39614 0 },
wolfSSL 14:167253f4e170 39615 /* 28 << 160 */
wolfSSL 14:167253f4e170 39616 { { 0x27f536e049ce89e7l,0x18908539cc890cb5l,0x308909abd83c2aa1l,
wolfSSL 14:167253f4e170 39617 0xecd3142b1ab73bd3l },
wolfSSL 14:167253f4e170 39618 { 0x6a85bf59b3f5ab84l,0x3c320a68f2bea4c6l,0xad8dc5386da4541fl,
wolfSSL 14:167253f4e170 39619 0xeaf34eb0b7c41186l },
wolfSSL 14:167253f4e170 39620 0 },
wolfSSL 14:167253f4e170 39621 /* 29 << 160 */
wolfSSL 14:167253f4e170 39622 { { 0x709da836093aa5f6l,0x567a9becb4644edel,0xae02a46044466b0cl,
wolfSSL 14:167253f4e170 39623 0xc80b237a407f1b3bl },
wolfSSL 14:167253f4e170 39624 { 0x451df45ab4168a98l,0xdc9b40ef24a3f7c9l,0x23593ef32671341dl,
wolfSSL 14:167253f4e170 39625 0x40f4533190b90faal },
wolfSSL 14:167253f4e170 39626 0 },
wolfSSL 14:167253f4e170 39627 /* 31 << 160 */
wolfSSL 14:167253f4e170 39628 { { 0x7f97768e922f36e3l,0x936943f8491034a2l,0x72f6c17f21483753l,
wolfSSL 14:167253f4e170 39629 0x5489fa0cb2918619l },
wolfSSL 14:167253f4e170 39630 { 0x55b31aa59cc21a46l,0xde4cc71a8e54ab14l,0x942cb8be9eaff8b0l,
wolfSSL 14:167253f4e170 39631 0xe38f6116d1755231l },
wolfSSL 14:167253f4e170 39632 0 },
wolfSSL 14:167253f4e170 39633 /* 33 << 160 */
wolfSSL 14:167253f4e170 39634 { { 0xf0c0606a395b39abl,0x0efcbc699b5166a5l,0x85995e6895453d85l,
wolfSSL 14:167253f4e170 39635 0xadc9a2920806ee5cl },
wolfSSL 14:167253f4e170 39636 { 0xc3662e804928fe09l,0x2a2ddcc6969c87e7l,0xa02d7947111d319dl,
wolfSSL 14:167253f4e170 39637 0xde23bcf12d20f66dl },
wolfSSL 14:167253f4e170 39638 0 },
wolfSSL 14:167253f4e170 39639 /* 34 << 160 */
wolfSSL 14:167253f4e170 39640 { { 0xc47cb3395f6d4a09l,0x6b4f355cee52b826l,0x3d100f5df51b930al,
wolfSSL 14:167253f4e170 39641 0xf4512fac9f668f69l },
wolfSSL 14:167253f4e170 39642 { 0x546781d5206c4c74l,0xd021d4d4cb4d2e48l,0x494a54c2ca085c2dl,
wolfSSL 14:167253f4e170 39643 0xf1dbaca4520850a8l },
wolfSSL 14:167253f4e170 39644 0 },
wolfSSL 14:167253f4e170 39645 /* 35 << 160 */
wolfSSL 14:167253f4e170 39646 { { 0xb2d15b14a911cc2bl,0xab2dfaf7643e28eal,0xfccc9ed1f52c4c2dl,
wolfSSL 14:167253f4e170 39647 0xfb4b1d4a09d8faa3l },
wolfSSL 14:167253f4e170 39648 { 0x6fd72a9b7f5ce767l,0x0233c856a287e2b5l,0xd42135e05775ebb9l,
wolfSSL 14:167253f4e170 39649 0xb3c9dada7376568bl },
wolfSSL 14:167253f4e170 39650 0 },
wolfSSL 14:167253f4e170 39651 /* 36 << 160 */
wolfSSL 14:167253f4e170 39652 { { 0x63c79326490a1acal,0xcb64dd9c41526b02l,0xbb772591a2979258l,
wolfSSL 14:167253f4e170 39653 0x3f58297048d97846l },
wolfSSL 14:167253f4e170 39654 { 0xd66b70d17c213ba7l,0xc28febb5e8a0ced4l,0x6b911831c10338c1l,
wolfSSL 14:167253f4e170 39655 0x0d54e389bf0126f3l },
wolfSSL 14:167253f4e170 39656 0 },
wolfSSL 14:167253f4e170 39657 /* 37 << 160 */
wolfSSL 14:167253f4e170 39658 { { 0x5952996b5306af1bl,0x99f444f4354b67bel,0x6f670181633a2928l,
wolfSSL 14:167253f4e170 39659 0x289023f0e9bdc4a6l },
wolfSSL 14:167253f4e170 39660 { 0xcbed12148f7455a2l,0x501ace2f659a4858l,0x83ee678d5f8e1784l,
wolfSSL 14:167253f4e170 39661 0x95c984587335c5bdl },
wolfSSL 14:167253f4e170 39662 0 },
wolfSSL 14:167253f4e170 39663 /* 39 << 160 */
wolfSSL 14:167253f4e170 39664 { { 0x2e25a1f3e0233000l,0xed0028cd44fe8ba9l,0x447501a6021d43b3l,
wolfSSL 14:167253f4e170 39665 0x4ec203906b4dffccl },
wolfSSL 14:167253f4e170 39666 { 0x50642f9ad0169740l,0x9360003373cc58adl,0x825f1a82fe9cf9acl,
wolfSSL 14:167253f4e170 39667 0x456194c653242bd6l },
wolfSSL 14:167253f4e170 39668 0 },
wolfSSL 14:167253f4e170 39669 /* 40 << 160 */
wolfSSL 14:167253f4e170 39670 { { 0x40242efeb483689bl,0x2575d3f6513ac262l,0xf30037c80ca6db72l,
wolfSSL 14:167253f4e170 39671 0xc9fcce8298864be2l },
wolfSSL 14:167253f4e170 39672 { 0x84a112ff0149362dl,0x95e575821c4ae971l,0x1fa4b1a8945cf86cl,
wolfSSL 14:167253f4e170 39673 0x4525a7340b024a2fl },
wolfSSL 14:167253f4e170 39674 0 },
wolfSSL 14:167253f4e170 39675 /* 41 << 160 */
wolfSSL 14:167253f4e170 39676 { { 0x83205e8f5db5e2b1l,0x94e7a2621e311c12l,0xe1cac7333e37068fl,
wolfSSL 14:167253f4e170 39677 0xe3f43f6d39965acfl },
wolfSSL 14:167253f4e170 39678 { 0xd28db9e854d905bal,0x686f372a101f2162l,0x409cfe5d3d1b46d4l,
wolfSSL 14:167253f4e170 39679 0x17648f1cbd0bb63al },
wolfSSL 14:167253f4e170 39680 0 },
wolfSSL 14:167253f4e170 39681 /* 43 << 160 */
wolfSSL 14:167253f4e170 39682 { { 0xef83315b821f4ee4l,0xb90766998ba78b4dl,0xee6a15880fce5260l,
wolfSSL 14:167253f4e170 39683 0x828f4a72d754affbl },
wolfSSL 14:167253f4e170 39684 { 0x4650ec7daaae54d2l,0x3174301f1057efe9l,0x174e0683eb7704cel,
wolfSSL 14:167253f4e170 39685 0xb7e6aeb357eb0b14l },
wolfSSL 14:167253f4e170 39686 0 },
wolfSSL 14:167253f4e170 39687 /* 44 << 160 */
wolfSSL 14:167253f4e170 39688 { { 0xcaead1c2c905d85fl,0xe9d7f7900733ae57l,0x24c9a65cf07cdd94l,
wolfSSL 14:167253f4e170 39689 0x7389359ca4b55931l },
wolfSSL 14:167253f4e170 39690 { 0xf58709b7367e45f7l,0x1f203067cb7e7adcl,0x82444bffc7b72818l,
wolfSSL 14:167253f4e170 39691 0x07303b35baac8033l },
wolfSSL 14:167253f4e170 39692 0 },
wolfSSL 14:167253f4e170 39693 /* 45 << 160 */
wolfSSL 14:167253f4e170 39694 { { 0xd59528fb38a0dc96l,0x8179dc9088d0e857l,0x55e9ba039ed4b1afl,
wolfSSL 14:167253f4e170 39695 0x8a2c0dc787b74cacl },
wolfSSL 14:167253f4e170 39696 { 0xe8ca91aeef1c0006l,0x67f59ab2de0e15d4l,0xba0cddf86e6634d2l,
wolfSSL 14:167253f4e170 39697 0x352803657b7ba591l },
wolfSSL 14:167253f4e170 39698 0 },
wolfSSL 14:167253f4e170 39699 /* 46 << 160 */
wolfSSL 14:167253f4e170 39700 { { 0x1e1ee4e4d13b7ea1l,0xe6489b24e0e74180l,0xa5f2c6107e70ef70l,
wolfSSL 14:167253f4e170 39701 0xa1655412bdd10894l },
wolfSSL 14:167253f4e170 39702 { 0x555ebefb7af4194el,0x533c1c3c8e89bd9cl,0x735b9b5789895856l,
wolfSSL 14:167253f4e170 39703 0x15fb3cd2567f5c15l },
wolfSSL 14:167253f4e170 39704 0 },
wolfSSL 14:167253f4e170 39705 /* 47 << 160 */
wolfSSL 14:167253f4e170 39706 { { 0xef07bfedfb0986c7l,0xde138afe47c1659al,0x8b79c159a555e907l,
wolfSSL 14:167253f4e170 39707 0x21d572f1125518bbl },
wolfSSL 14:167253f4e170 39708 { 0x2005999ad320410cl,0x4167dc469484414bl,0x0cd965c34c6aaefdl,
wolfSSL 14:167253f4e170 39709 0x2a1abc9a0e1d5e9dl },
wolfSSL 14:167253f4e170 39710 0 },
wolfSSL 14:167253f4e170 39711 /* 48 << 160 */
wolfSSL 14:167253f4e170 39712 { { 0x057fed45526f09fdl,0xe8a4f10c8128240al,0x9332efc4ff2bfd8dl,
wolfSSL 14:167253f4e170 39713 0x214e77a0bd35aa31l },
wolfSSL 14:167253f4e170 39714 { 0x32896d7314faa40el,0x767867ec01e5f186l,0xc9adf8f117a1813el,
wolfSSL 14:167253f4e170 39715 0xcb6cda7854741795l },
wolfSSL 14:167253f4e170 39716 0 },
wolfSSL 14:167253f4e170 39717 /* 49 << 160 */
wolfSSL 14:167253f4e170 39718 { { 0xadfaf39b888dedf1l,0x4f8b178aab1750b9l,0x26418617ffe6b0eal,
wolfSSL 14:167253f4e170 39719 0x01d1be82af04a59fl },
wolfSSL 14:167253f4e170 39720 { 0x41584147e652db64l,0xf7775ac5727f9ea7l,0x58052a20e72ad8bbl,
wolfSSL 14:167253f4e170 39721 0x5badf0dc6021160el },
wolfSSL 14:167253f4e170 39722 0 },
wolfSSL 14:167253f4e170 39723 /* 51 << 160 */
wolfSSL 14:167253f4e170 39724 { { 0x8490ea99183de59dl,0xc95f72146f5c6f8cl,0x89b55d15df00c334l,
wolfSSL 14:167253f4e170 39725 0x84386ad8a0ec36f7l },
wolfSSL 14:167253f4e170 39726 { 0x24dadaefe4dc1ed1l,0xc606ba4c1e717227l,0x7e4756c0bbfa62eal,
wolfSSL 14:167253f4e170 39727 0x3916cf14afc29cf3l },
wolfSSL 14:167253f4e170 39728 0 },
wolfSSL 14:167253f4e170 39729 /* 52 << 160 */
wolfSSL 14:167253f4e170 39730 { { 0xb7b4d00101dae185l,0x45434e0b9b7a94bcl,0xf54339affbd8cb0bl,
wolfSSL 14:167253f4e170 39731 0xdcc4569ee98ef49el },
wolfSSL 14:167253f4e170 39732 { 0x7789318a09a51299l,0x81b4d206b2b025d8l,0xf64aa418fae85792l,
wolfSSL 14:167253f4e170 39733 0x3e50258facd7baf7l },
wolfSSL 14:167253f4e170 39734 0 },
wolfSSL 14:167253f4e170 39735 /* 53 << 160 */
wolfSSL 14:167253f4e170 39736 { { 0x4152c508492d91f3l,0x59d6cf9c678f9db4l,0xb0a8c966404608d1l,
wolfSSL 14:167253f4e170 39737 0xdced55d0e3fed558l },
wolfSSL 14:167253f4e170 39738 { 0x0914a3cb33a76188l,0x79df212423d35d46l,0x2322507fca13b364l,
wolfSSL 14:167253f4e170 39739 0x0aed41d60078ab93l },
wolfSSL 14:167253f4e170 39740 0 },
wolfSSL 14:167253f4e170 39741 /* 55 << 160 */
wolfSSL 14:167253f4e170 39742 { { 0x7acdaa7f6b2ebfc2l,0xb5ab1a9a80d9f67fl,0x53ba8173ff8aa8b0l,
wolfSSL 14:167253f4e170 39743 0x9cd85cf874ca56a6l },
wolfSSL 14:167253f4e170 39744 { 0xabac57f49c4fad81l,0x2325bb8521078995l,0xbac5e3a1b928a054l,
wolfSSL 14:167253f4e170 39745 0x7219047a2394cc2al },
wolfSSL 14:167253f4e170 39746 0 },
wolfSSL 14:167253f4e170 39747 /* 57 << 160 */
wolfSSL 14:167253f4e170 39748 { { 0xa33410d2aa75fd37l,0x821093affc0f1192l,0xe45e85ed155e39a9l,
wolfSSL 14:167253f4e170 39749 0xd0e87cd12de67188l },
wolfSSL 14:167253f4e170 39750 { 0xdeca97d965d43d87l,0x8c73826f9d2c99ecl,0x1bfe111e33237ddbl,
wolfSSL 14:167253f4e170 39751 0xda32e865587bfb28l },
wolfSSL 14:167253f4e170 39752 0 },
wolfSSL 14:167253f4e170 39753 /* 59 << 160 */
wolfSSL 14:167253f4e170 39754 { { 0xde456d92c89e9e4el,0xe45688a98e47f3cdl,0x3deacfca3bacbde0l,
wolfSSL 14:167253f4e170 39755 0xdf9b32efc9683a70l },
wolfSSL 14:167253f4e170 39756 { 0x749bc007e1691106l,0x788a05342a5154d7l,0x1a06baecf7c7b70dl,
wolfSSL 14:167253f4e170 39757 0xb5b608eeae6ffc4cl },
wolfSSL 14:167253f4e170 39758 0 },
wolfSSL 14:167253f4e170 39759 /* 60 << 160 */
wolfSSL 14:167253f4e170 39760 { { 0x4cd296df5579bea4l,0x10e35ac85ceedaf1l,0x04c4c5fde3bcc5b1l,
wolfSSL 14:167253f4e170 39761 0x95f9ee8a89412cf9l },
wolfSSL 14:167253f4e170 39762 { 0x2c9459ee82b6eb0fl,0x2e84576595c2aaddl,0x774a84aed327fcfel,
wolfSSL 14:167253f4e170 39763 0xd8c937220368d476l },
wolfSSL 14:167253f4e170 39764 0 },
wolfSSL 14:167253f4e170 39765 /* 61 << 160 */
wolfSSL 14:167253f4e170 39766 { { 0x39ebf947ccd25abbl,0x74e7a868cb49ebael,0x576ea108332e6147l,
wolfSSL 14:167253f4e170 39767 0xcf3ba166150c1e5dl },
wolfSSL 14:167253f4e170 39768 { 0xb5411fc3515c0e93l,0x51b15761f15c8a34l,0x362a4a3a0d213f38l,
wolfSSL 14:167253f4e170 39769 0xf6f63c2e24e93aeal },
wolfSSL 14:167253f4e170 39770 0 },
wolfSSL 14:167253f4e170 39771 /* 63 << 160 */
wolfSSL 14:167253f4e170 39772 { { 0x0cb3a2dcb78528d5l,0xa1888c18d585bb41l,0x210cca40de402a6el,
wolfSSL 14:167253f4e170 39773 0x10c6339d9ed7c381l },
wolfSSL 14:167253f4e170 39774 { 0xcd3558d561fe2a0cl,0xc97db05dad5140b1l,0x3366b028b21f8d11l,
wolfSSL 14:167253f4e170 39775 0x878b09033e38be13l },
wolfSSL 14:167253f4e170 39776 0 },
wolfSSL 14:167253f4e170 39777 /* 64 << 160 */
wolfSSL 14:167253f4e170 39778 { { 0x211cde10296c36efl,0x7ee8967282c4da77l,0xb617d270a57836dal,
wolfSSL 14:167253f4e170 39779 0xf0cd9c319cb7560bl },
wolfSSL 14:167253f4e170 39780 { 0x01fdcbf7e455fe90l,0x3fb53cbb7e7334f3l,0x781e2ea44e7de4ecl,
wolfSSL 14:167253f4e170 39781 0x8adab3ad0b384fd0l },
wolfSSL 14:167253f4e170 39782 0 },
wolfSSL 14:167253f4e170 39783 /* 65 << 160 */
wolfSSL 14:167253f4e170 39784 { { 0x081e505aa353ba05l,0x244ab34a288b86b1l,0x1155f06214e3a829l,
wolfSSL 14:167253f4e170 39785 0x383300daf2118a6bl },
wolfSSL 14:167253f4e170 39786 { 0xe8fc17cef27032b9l,0xed7f05c9c7bd2389l,0x78f70d14202f8a88l,
wolfSSL 14:167253f4e170 39787 0x8a8310c0647b3f20l },
wolfSSL 14:167253f4e170 39788 0 },
wolfSSL 14:167253f4e170 39789 /* 71 << 160 */
wolfSSL 14:167253f4e170 39790 { { 0xc80786e1a3633369l,0x496d55de9073f5b9l,0x10deeb6a89ae93cel,
wolfSSL 14:167253f4e170 39791 0x6a2dd5c8b12e00c6l },
wolfSSL 14:167253f4e170 39792 { 0xc25cd2f90c68e26dl,0x29d7ad8b53f0bb64l,0x2dd0d027d7fc9b00l,
wolfSSL 14:167253f4e170 39793 0xad21e1f7ca9c4d5dl },
wolfSSL 14:167253f4e170 39794 0 },
wolfSSL 14:167253f4e170 39795 /* 77 << 160 */
wolfSSL 14:167253f4e170 39796 { { 0xd45cb932d83465f3l,0x95830c0faf22fdbdl,0x41d830e007cd2a0al,
wolfSSL 14:167253f4e170 39797 0x4a08500e3616e716l },
wolfSSL 14:167253f4e170 39798 { 0x5931fc9f277755a5l,0x7d11680731006764l,0xa409a0ad1b3999aal,
wolfSSL 14:167253f4e170 39799 0xec70368c9939d566l },
wolfSSL 14:167253f4e170 39800 0 },
wolfSSL 14:167253f4e170 39801 /* 83 << 160 */
wolfSSL 14:167253f4e170 39802 { { 0x3905cb59f2030370l,0x7e9bdee56dcc8fd7l,0xb1b7b04e9806e06fl,
wolfSSL 14:167253f4e170 39803 0xfbdadce22c73eb57l },
wolfSSL 14:167253f4e170 39804 { 0xfb1ab2e98d5b2eb3l,0x58fbf2df7699338bl,0x81b1c54a63b5a032l,
wolfSSL 14:167253f4e170 39805 0xefd1a1896a5d7ff4l },
wolfSSL 14:167253f4e170 39806 0 },
wolfSSL 14:167253f4e170 39807 /* 89 << 160 */
wolfSSL 14:167253f4e170 39808 { { 0x0265189da1f769eal,0x22fa0bbbfdb5a502l,0xf69f0d1b21027534l,
wolfSSL 14:167253f4e170 39809 0x64302b81f6066b99l },
wolfSSL 14:167253f4e170 39810 { 0xdef85fc98a717e80l,0xe066166386879a3bl,0xe5489b347f95b22cl,
wolfSSL 14:167253f4e170 39811 0x106dca9aa054a563l },
wolfSSL 14:167253f4e170 39812 0 },
wolfSSL 14:167253f4e170 39813 /* 95 << 160 */
wolfSSL 14:167253f4e170 39814 { { 0xd624b4f4b4be9a77l,0x21a11ed77d50acb1l,0x707181f43d406e11l,
wolfSSL 14:167253f4e170 39815 0x3f324d203ef158bcl },
wolfSSL 14:167253f4e170 39816 { 0xb29a2a34aa8cc8del,0x482f4a15315db969l,0x42ce4fc7d9af272el,
wolfSSL 14:167253f4e170 39817 0x784665b1f8f4cdc4l },
wolfSSL 14:167253f4e170 39818 0 },
wolfSSL 14:167253f4e170 39819 /* 101 << 160 */
wolfSSL 14:167253f4e170 39820 { { 0x66ff7f73ab43a863l,0xa90be2cba77fd07el,0x84843997f76e5288l,
wolfSSL 14:167253f4e170 39821 0x288c197f3cee129bl },
wolfSSL 14:167253f4e170 39822 { 0x39acc080c0a060a6l,0x4c8e574bd24e27cal,0x1dd6170ffcd3d5e9l,
wolfSSL 14:167253f4e170 39823 0x9736bb51f75e5150l },
wolfSSL 14:167253f4e170 39824 0 },
wolfSSL 14:167253f4e170 39825 /* 107 << 160 */
wolfSSL 14:167253f4e170 39826 { { 0x2133810e6ba75716l,0x4debf728712886a8l,0x351e46a1f527d1f3l,
wolfSSL 14:167253f4e170 39827 0x29709ae8e9591564l },
wolfSSL 14:167253f4e170 39828 { 0x696163d3a3dc1780l,0xd5b7825ae02aadf3l,0x23579d7cd565ae68l,
wolfSSL 14:167253f4e170 39829 0x105380124fa42cecl },
wolfSSL 14:167253f4e170 39830 0 },
wolfSSL 14:167253f4e170 39831 /* 113 << 160 */
wolfSSL 14:167253f4e170 39832 { { 0x04eb554d13ffa704l,0x7441a62f2ed33d20l,0xaa926fa0b5b81324l,
wolfSSL 14:167253f4e170 39833 0xb981bcb829836f61l },
wolfSSL 14:167253f4e170 39834 { 0x313a78d4cc9a7a15l,0xff1242d11b3921d2l,0xc0053fd36a209d4dl,
wolfSSL 14:167253f4e170 39835 0x95ac85caf7e92ca9l },
wolfSSL 14:167253f4e170 39836 0 },
wolfSSL 14:167253f4e170 39837 /* 116 << 160 */
wolfSSL 14:167253f4e170 39838 { { 0x6d2a483d6f73c51el,0xa4cb2412ea0dc2ddl,0x50663c411eb917ffl,
wolfSSL 14:167253f4e170 39839 0x3d3a74cfeade299el },
wolfSSL 14:167253f4e170 39840 { 0x29b3990f4a7a9202l,0xa9bccf59a7b15c3dl,0x66a3ccdca5df9208l,
wolfSSL 14:167253f4e170 39841 0x48027c1443f2f929l },
wolfSSL 14:167253f4e170 39842 0 },
wolfSSL 14:167253f4e170 39843 /* 119 << 160 */
wolfSSL 14:167253f4e170 39844 { { 0xdf8a6f9673c3f6fbl,0xe4b1f0d98cc03220l,0x5ddacd618350480cl,
wolfSSL 14:167253f4e170 39845 0x485c4fababdfb016l },
wolfSSL 14:167253f4e170 39846 { 0xdc840628b4d424b7l,0x07d3a99c215b2359l,0xad3dc5af56dff52el,
wolfSSL 14:167253f4e170 39847 0x5a3a6754973b6825l },
wolfSSL 14:167253f4e170 39848 0 },
wolfSSL 14:167253f4e170 39849 /* 125 << 160 */
wolfSSL 14:167253f4e170 39850 { { 0xcfe231b83539a06dl,0xb36d1f72f46770ddl,0x126049747bb900d6l,
wolfSSL 14:167253f4e170 39851 0x8d0990973fc31661l },
wolfSSL 14:167253f4e170 39852 { 0x03b2749c920bc39el,0xf933d510b0486e23l,0x09cc958f0e9b0bb5l,
wolfSSL 14:167253f4e170 39853 0x0b254dd1aa1e23abl },
wolfSSL 14:167253f4e170 39854 0 },
wolfSSL 14:167253f4e170 39855 },
wolfSSL 14:167253f4e170 39856 {
wolfSSL 14:167253f4e170 39857 /* 0 << 168 */
wolfSSL 14:167253f4e170 39858 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 39859 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 39860 1 },
wolfSSL 14:167253f4e170 39861 /* 1 << 168 */
wolfSSL 14:167253f4e170 39862 { { 0x263a2cfb9db3b381l,0x9c3a2deed4df0a4bl,0x728d06e97d04e61fl,
wolfSSL 14:167253f4e170 39863 0x8b1adfbc42449325l },
wolfSSL 14:167253f4e170 39864 { 0x6ec1d9397e053a1bl,0xee2be5c766daf707l,0x80ba1e14810ac7abl,
wolfSSL 14:167253f4e170 39865 0xdd2ae778f530f174l },
wolfSSL 14:167253f4e170 39866 0 },
wolfSSL 14:167253f4e170 39867 /* 3 << 168 */
wolfSSL 14:167253f4e170 39868 { { 0xadbaeb79b6828f36l,0x9d7a025801bd5b9el,0xeda01e0d1e844b0cl,
wolfSSL 14:167253f4e170 39869 0x4b625175887edfc9l },
wolfSSL 14:167253f4e170 39870 { 0x14109fdd9669b621l,0x88a2ca56f6f87b98l,0xfe2eb788170df6bcl,
wolfSSL 14:167253f4e170 39871 0x0cea06f4ffa473f9l },
wolfSSL 14:167253f4e170 39872 0 },
wolfSSL 14:167253f4e170 39873 /* 4 << 168 */
wolfSSL 14:167253f4e170 39874 { { 0x43ed81b5c4e83d33l,0xd9f358795efd488bl,0x164a620f9deb4d0fl,
wolfSSL 14:167253f4e170 39875 0xc6927bdbac6a7394l },
wolfSSL 14:167253f4e170 39876 { 0x45c28df79f9e0f03l,0x2868661efcd7e1a9l,0x7cf4e8d0ffa348f1l,
wolfSSL 14:167253f4e170 39877 0x6bd4c284398538e0l },
wolfSSL 14:167253f4e170 39878 0 },
wolfSSL 14:167253f4e170 39879 /* 5 << 168 */
wolfSSL 14:167253f4e170 39880 { { 0x2618a091289a8619l,0xef796e606671b173l,0x664e46e59090c632l,
wolfSSL 14:167253f4e170 39881 0xa38062d41e66f8fbl },
wolfSSL 14:167253f4e170 39882 { 0x6c744a200573274el,0xd07b67e4a9271394l,0x391223b26bdc0e20l,
wolfSSL 14:167253f4e170 39883 0xbe2d93f1eb0a05a7l },
wolfSSL 14:167253f4e170 39884 0 },
wolfSSL 14:167253f4e170 39885 /* 7 << 168 */
wolfSSL 14:167253f4e170 39886 { { 0x7efa14b84444896bl,0x64974d2ff94027fbl,0xefdcd0e8de84487dl,
wolfSSL 14:167253f4e170 39887 0x8c45b2602b48989bl },
wolfSSL 14:167253f4e170 39888 { 0xa8fcbbc2d8463487l,0xd1b2b3f73fbc476cl,0x21d005b7c8f443c0l,
wolfSSL 14:167253f4e170 39889 0x518f2e6740c0139cl },
wolfSSL 14:167253f4e170 39890 0 },
wolfSSL 14:167253f4e170 39891 /* 9 << 168 */
wolfSSL 14:167253f4e170 39892 { { 0xae51dca2a91f6791l,0x2abe41909baa9efcl,0xd9d2e2f4559c7ac1l,
wolfSSL 14:167253f4e170 39893 0xe82f4b51fc9f773al },
wolfSSL 14:167253f4e170 39894 { 0xa77130274073e81cl,0xc0276facfbb596fcl,0x1d819fc9a684f70cl,
wolfSSL 14:167253f4e170 39895 0x29b47fddc9f7b1e0l },
wolfSSL 14:167253f4e170 39896 0 },
wolfSSL 14:167253f4e170 39897 /* 10 << 168 */
wolfSSL 14:167253f4e170 39898 { { 0x358de103459b1940l,0xec881c595b013e93l,0x51574c9349532ad3l,
wolfSSL 14:167253f4e170 39899 0x2db1d445b37b46del },
wolfSSL 14:167253f4e170 39900 { 0xc6445b87df239fd8l,0xc718af75151d24eel,0xaea1c4a4f43c6259l,
wolfSSL 14:167253f4e170 39901 0x40c0e5d770be02f7l },
wolfSSL 14:167253f4e170 39902 0 },
wolfSSL 14:167253f4e170 39903 /* 11 << 168 */
wolfSSL 14:167253f4e170 39904 { { 0x6a4590f4721b33f2l,0x2124f1fbfedf04eal,0xf8e53cde9745efe7l,
wolfSSL 14:167253f4e170 39905 0xe7e1043265f046d9l },
wolfSSL 14:167253f4e170 39906 { 0xc3fca28ee4d0c7e6l,0x847e339a87253b1bl,0x9b5953483743e643l,
wolfSSL 14:167253f4e170 39907 0xcb6a0a0b4fd12fc5l },
wolfSSL 14:167253f4e170 39908 0 },
wolfSSL 14:167253f4e170 39909 /* 13 << 168 */
wolfSSL 14:167253f4e170 39910 { { 0xec1214eda714181dl,0x609ac13b6067b341l,0xff4b4c97a545df1fl,
wolfSSL 14:167253f4e170 39911 0xa124050134d2076bl },
wolfSSL 14:167253f4e170 39912 { 0x6efa0c231409ca97l,0x254cc1a820638c43l,0xd4e363afdcfb46cdl,
wolfSSL 14:167253f4e170 39913 0x62c2adc303942a27l },
wolfSSL 14:167253f4e170 39914 0 },
wolfSSL 14:167253f4e170 39915 /* 15 << 168 */
wolfSSL 14:167253f4e170 39916 { { 0x27b6a8ab3fd40e09l,0xe455842e77313ea9l,0x8b51d1e21f55988bl,
wolfSSL 14:167253f4e170 39917 0x5716dd73062bbbfcl },
wolfSSL 14:167253f4e170 39918 { 0x633c11e54e8bf3del,0x9a0e77b61b85be3bl,0x565107290911cca6l,
wolfSSL 14:167253f4e170 39919 0x27e76495efa6590fl },
wolfSSL 14:167253f4e170 39920 0 },
wolfSSL 14:167253f4e170 39921 /* 16 << 168 */
wolfSSL 14:167253f4e170 39922 { { 0xe4ac8b33070d3aabl,0x2643672b9a2cd5e5l,0x52eff79b1cfc9173l,
wolfSSL 14:167253f4e170 39923 0x665ca49b90a7c13fl },
wolfSSL 14:167253f4e170 39924 { 0x5a8dda59b3efb998l,0x8a5b922d052f1341l,0xae9ebbab3cf9a530l,
wolfSSL 14:167253f4e170 39925 0x35986e7bf56da4d7l },
wolfSSL 14:167253f4e170 39926 0 },
wolfSSL 14:167253f4e170 39927 /* 17 << 168 */
wolfSSL 14:167253f4e170 39928 { { 0x3a636b5cff3513ccl,0xbb0cf8ba3198f7ddl,0xb8d4052241f16f86l,
wolfSSL 14:167253f4e170 39929 0x760575d8de13a7bfl },
wolfSSL 14:167253f4e170 39930 { 0x36f74e169f7aa181l,0x163a3ecff509ed1cl,0x6aead61f3c40a491l,
wolfSSL 14:167253f4e170 39931 0x158c95fcdfe8fcaal },
wolfSSL 14:167253f4e170 39932 0 },
wolfSSL 14:167253f4e170 39933 /* 19 << 168 */
wolfSSL 14:167253f4e170 39934 { { 0x6b47accdd9eee96cl,0x0ca277fbe58cec37l,0x113fe413e702c42al,
wolfSSL 14:167253f4e170 39935 0xdd1764eec47cbe51l },
wolfSSL 14:167253f4e170 39936 { 0x041e7cde7b3ed739l,0x50cb74595ce9e1c0l,0x355685132925b212l,
wolfSSL 14:167253f4e170 39937 0x7cff95c4001b081cl },
wolfSSL 14:167253f4e170 39938 0 },
wolfSSL 14:167253f4e170 39939 /* 21 << 168 */
wolfSSL 14:167253f4e170 39940 { { 0x726f0973da50c991l,0x48afcd5b822d6ee2l,0xe5fc718b20fd7771l,
wolfSSL 14:167253f4e170 39941 0xb9e8e77dfd0807a1l },
wolfSSL 14:167253f4e170 39942 { 0x7f5e0f4499a7703dl,0x6972930e618e36f3l,0x2b7c77b823807bbel,
wolfSSL 14:167253f4e170 39943 0xe5b82405cb27ff50l },
wolfSSL 14:167253f4e170 39944 0 },
wolfSSL 14:167253f4e170 39945 /* 23 << 168 */
wolfSSL 14:167253f4e170 39946 { { 0x98cb1ae9255c0980l,0x4bd863812b4a739fl,0x5a5c31e11e4a45a1l,
wolfSSL 14:167253f4e170 39947 0x1e5d55fe9cb0db2fl },
wolfSSL 14:167253f4e170 39948 { 0x74661b068ff5cc29l,0x026b389f0eb8a4f4l,0x536b21a458848c24l,
wolfSSL 14:167253f4e170 39949 0x2e5bf8ec81dc72b0l },
wolfSSL 14:167253f4e170 39950 0 },
wolfSSL 14:167253f4e170 39951 /* 25 << 168 */
wolfSSL 14:167253f4e170 39952 { { 0x9f0af483d309cbe6l,0x5b020d8ae0bced4fl,0x606e986db38023e3l,
wolfSSL 14:167253f4e170 39953 0xad8f2c9d1abc6933l },
wolfSSL 14:167253f4e170 39954 { 0x19292e1de7400e93l,0xfe3e18a952be5e4dl,0xe8e9771d2e0680bfl,
wolfSSL 14:167253f4e170 39955 0x8c5bec98c54db063l },
wolfSSL 14:167253f4e170 39956 0 },
wolfSSL 14:167253f4e170 39957 /* 27 << 168 */
wolfSSL 14:167253f4e170 39958 { { 0x4c23f62a2c160dcdl,0x34e6c5e38f90eaefl,0x35865519a9a65d5al,
wolfSSL 14:167253f4e170 39959 0x07c48aae8fd38a3dl },
wolfSSL 14:167253f4e170 39960 { 0xb7e7aeda50068527l,0x2c09ef231c90936al,0x31ecfeb6e879324cl,
wolfSSL 14:167253f4e170 39961 0xa0871f6bfb0ec938l },
wolfSSL 14:167253f4e170 39962 0 },
wolfSSL 14:167253f4e170 39963 /* 28 << 168 */
wolfSSL 14:167253f4e170 39964 { { 0xb1f0fb68d84d835dl,0xc90caf39861dc1e6l,0x12e5b0467594f8d7l,
wolfSSL 14:167253f4e170 39965 0x26897ae265012b92l },
wolfSSL 14:167253f4e170 39966 { 0xbcf68a08a4d6755dl,0x403ee41c0991fbdal,0x733e343e3bbf17e8l,
wolfSSL 14:167253f4e170 39967 0xd2c7980d679b3d65l },
wolfSSL 14:167253f4e170 39968 0 },
wolfSSL 14:167253f4e170 39969 /* 29 << 168 */
wolfSSL 14:167253f4e170 39970 { { 0x33056232d2e11305l,0x966be492f3c07a6fl,0x6a8878ffbb15509dl,
wolfSSL 14:167253f4e170 39971 0xff2211010a9b59a4l },
wolfSSL 14:167253f4e170 39972 { 0x6c9f564aabe30129l,0xc6f2c940336e64cfl,0x0fe752628b0c8022l,
wolfSSL 14:167253f4e170 39973 0xbe0267e96ae8db87l },
wolfSSL 14:167253f4e170 39974 0 },
wolfSSL 14:167253f4e170 39975 /* 31 << 168 */
wolfSSL 14:167253f4e170 39976 { { 0x9d031369a5e829e5l,0xcbb4c6fc1607aa41l,0x75ac59a6241d84c1l,
wolfSSL 14:167253f4e170 39977 0xc043f2bf8829e0eel },
wolfSSL 14:167253f4e170 39978 { 0x82a38f758ea5e185l,0x8bda40b9d87cbd9fl,0x9e65e75e2d8fc601l,
wolfSSL 14:167253f4e170 39979 0x3d515f74a35690b3l },
wolfSSL 14:167253f4e170 39980 0 },
wolfSSL 14:167253f4e170 39981 /* 33 << 168 */
wolfSSL 14:167253f4e170 39982 { { 0xf6b5b2d0bc8fa5bcl,0x8a5ead67500c277bl,0x214625e6dfa08a5dl,
wolfSSL 14:167253f4e170 39983 0x51fdfedc959cf047l },
wolfSSL 14:167253f4e170 39984 { 0x6bc9430b289fca32l,0xe36ff0cf9d9bdc3fl,0x2fe187cb58ea0edel,
wolfSSL 14:167253f4e170 39985 0xed66af205a900b3fl },
wolfSSL 14:167253f4e170 39986 0 },
wolfSSL 14:167253f4e170 39987 /* 34 << 168 */
wolfSSL 14:167253f4e170 39988 { { 0x00e0968b5fa9f4d6l,0x2d4066ce37a362e7l,0xa99a9748bd07e772l,
wolfSSL 14:167253f4e170 39989 0x710989c006a4f1d0l },
wolfSSL 14:167253f4e170 39990 { 0xd5dedf35ce40cbd8l,0xab55c5f01743293dl,0x766f11448aa24e2cl,
wolfSSL 14:167253f4e170 39991 0x94d874f8605fbcb4l },
wolfSSL 14:167253f4e170 39992 0 },
wolfSSL 14:167253f4e170 39993 /* 35 << 168 */
wolfSSL 14:167253f4e170 39994 { { 0xa365f0e8a518001bl,0xee605eb69d04ef0fl,0x5a3915cdba8d4d25l,
wolfSSL 14:167253f4e170 39995 0x44c0e1b8b5113472l },
wolfSSL 14:167253f4e170 39996 { 0xcbb024e88b6740dcl,0x89087a53ee1d4f0cl,0xa88fa05c1fc4e372l,
wolfSSL 14:167253f4e170 39997 0x8bf395cbaf8b3af2l },
wolfSSL 14:167253f4e170 39998 0 },
wolfSSL 14:167253f4e170 39999 /* 36 << 168 */
wolfSSL 14:167253f4e170 40000 { { 0x1e71c9a1deb8568bl,0xa35daea080fb3d32l,0xe8b6f2662cf8fb81l,
wolfSSL 14:167253f4e170 40001 0x6d51afe89490696al },
wolfSSL 14:167253f4e170 40002 { 0x81beac6e51803a19l,0xe3d24b7f86219080l,0x727cfd9ddf6f463cl,
wolfSSL 14:167253f4e170 40003 0x8c6865ca72284ee8l },
wolfSSL 14:167253f4e170 40004 0 },
wolfSSL 14:167253f4e170 40005 /* 37 << 168 */
wolfSSL 14:167253f4e170 40006 { { 0x32c88b7db743f4efl,0x3793909be7d11dcel,0xd398f9222ff2ebe8l,
wolfSSL 14:167253f4e170 40007 0x2c70ca44e5e49796l },
wolfSSL 14:167253f4e170 40008 { 0xdf4d9929cb1131b1l,0x7826f29825888e79l,0x4d3a112cf1d8740al,
wolfSSL 14:167253f4e170 40009 0x00384cb6270afa8bl },
wolfSSL 14:167253f4e170 40010 0 },
wolfSSL 14:167253f4e170 40011 /* 39 << 168 */
wolfSSL 14:167253f4e170 40012 { { 0xbe7e990ff0d796a0l,0x5fc62478df0e8b02l,0x8aae8bf4030c00adl,
wolfSSL 14:167253f4e170 40013 0x3d2db93b9004ba0fl },
wolfSSL 14:167253f4e170 40014 { 0xe48c8a79d85d5ddcl,0xe907caa76bb07f34l,0x58db343aa39eaed5l,
wolfSSL 14:167253f4e170 40015 0x0ea6e007adaf5724l },
wolfSSL 14:167253f4e170 40016 0 },
wolfSSL 14:167253f4e170 40017 /* 40 << 168 */
wolfSSL 14:167253f4e170 40018 { { 0xe00df169d23233f3l,0x3e32279677cb637fl,0x1f897c0e1da0cf6cl,
wolfSSL 14:167253f4e170 40019 0xa651f5d831d6bbddl },
wolfSSL 14:167253f4e170 40020 { 0xdd61af191a230c76l,0xbd527272cdaa5e4al,0xca753636d0abcd7el,
wolfSSL 14:167253f4e170 40021 0x78bdd37c370bd8dcl },
wolfSSL 14:167253f4e170 40022 0 },
wolfSSL 14:167253f4e170 40023 /* 41 << 168 */
wolfSSL 14:167253f4e170 40024 { { 0xc23916c217cd93fel,0x65b97a4ddadce6e2l,0xe04ed4eb174e42f8l,
wolfSSL 14:167253f4e170 40025 0x1491ccaabb21480al },
wolfSSL 14:167253f4e170 40026 { 0x145a828023196332l,0x3c3862d7587b479al,0x9f4a88a301dcd0edl,
wolfSSL 14:167253f4e170 40027 0x4da2b7ef3ea12f1fl },
wolfSSL 14:167253f4e170 40028 0 },
wolfSSL 14:167253f4e170 40029 /* 43 << 168 */
wolfSSL 14:167253f4e170 40030 { { 0x71965cbfc3dd9b4dl,0xce23edbffc068a87l,0xb78d4725745b029bl,
wolfSSL 14:167253f4e170 40031 0x74610713cefdd9bdl },
wolfSSL 14:167253f4e170 40032 { 0x7116f75f1266bf52l,0x0204672218e49bb6l,0xdf43df9f3d6f19e3l,
wolfSSL 14:167253f4e170 40033 0xef1bc7d0e685cb2fl },
wolfSSL 14:167253f4e170 40034 0 },
wolfSSL 14:167253f4e170 40035 /* 44 << 168 */
wolfSSL 14:167253f4e170 40036 { { 0xcddb27c17078c432l,0xe1961b9cb77fedb7l,0x1edc2f5cc2290570l,
wolfSSL 14:167253f4e170 40037 0x2c3fefca19cbd886l },
wolfSSL 14:167253f4e170 40038 { 0xcf880a36c2af389al,0x96c610fdbda71ceal,0xf03977a932aa8463l,
wolfSSL 14:167253f4e170 40039 0x8eb7763f8586d90al },
wolfSSL 14:167253f4e170 40040 0 },
wolfSSL 14:167253f4e170 40041 /* 45 << 168 */
wolfSSL 14:167253f4e170 40042 { { 0x3f3424542a296e77l,0xc871868342837a35l,0x7dc710906a09c731l,
wolfSSL 14:167253f4e170 40043 0x54778ffb51b816dbl },
wolfSSL 14:167253f4e170 40044 { 0x6b33bfecaf06defdl,0xfe3c105f8592b70bl,0xf937fda461da6114l,
wolfSSL 14:167253f4e170 40045 0x3c13e6514c266ad7l },
wolfSSL 14:167253f4e170 40046 0 },
wolfSSL 14:167253f4e170 40047 /* 46 << 168 */
wolfSSL 14:167253f4e170 40048 { { 0xe363a829855938e8l,0x2eeb5d9e9de54b72l,0xbeb93b0e20ccfab9l,
wolfSSL 14:167253f4e170 40049 0x3dffbb5f25e61a25l },
wolfSSL 14:167253f4e170 40050 { 0x7f655e431acc093dl,0x0cb6cc3d3964ce61l,0x6ab283a1e5e9b460l,
wolfSSL 14:167253f4e170 40051 0x55d787c5a1c7e72dl },
wolfSSL 14:167253f4e170 40052 0 },
wolfSSL 14:167253f4e170 40053 /* 47 << 168 */
wolfSSL 14:167253f4e170 40054 { { 0x4d2efd47deadbf02l,0x11e80219ac459068l,0x810c762671f311f0l,
wolfSSL 14:167253f4e170 40055 0xfa17ef8d4ab6ef53l },
wolfSSL 14:167253f4e170 40056 { 0xaf47fd2593e43bffl,0x5cb5ff3f0be40632l,0x546871068ee61da3l,
wolfSSL 14:167253f4e170 40057 0x7764196eb08afd0fl },
wolfSSL 14:167253f4e170 40058 0 },
wolfSSL 14:167253f4e170 40059 /* 48 << 168 */
wolfSSL 14:167253f4e170 40060 { { 0x831ab3edf0290a8fl,0xcae81966cb47c387l,0xaad7dece184efb4fl,
wolfSSL 14:167253f4e170 40061 0xdcfc53b34749110el },
wolfSSL 14:167253f4e170 40062 { 0x6698f23c4cb632f9l,0xc42a1ad6b91f8067l,0xb116a81d6284180al,
wolfSSL 14:167253f4e170 40063 0xebedf5f8e901326fl },
wolfSSL 14:167253f4e170 40064 0 },
wolfSSL 14:167253f4e170 40065 /* 49 << 168 */
wolfSSL 14:167253f4e170 40066 { { 0xf2274c9f97e3e044l,0x4201852011d09fc9l,0x56a65f17d18e6e23l,
wolfSSL 14:167253f4e170 40067 0x2ea61e2a352b683cl },
wolfSSL 14:167253f4e170 40068 { 0x27d291bc575eaa94l,0x9e7bc721b8ff522dl,0x5f7268bfa7f04d6fl,
wolfSSL 14:167253f4e170 40069 0x5868c73faba41748l },
wolfSSL 14:167253f4e170 40070 0 },
wolfSSL 14:167253f4e170 40071 /* 51 << 168 */
wolfSSL 14:167253f4e170 40072 { { 0x1c52e63596e78cc4l,0x5385c8b20c06b4a8l,0xd84ddfdbb0e87d03l,
wolfSSL 14:167253f4e170 40073 0xc49dfb66934bafadl },
wolfSSL 14:167253f4e170 40074 { 0x7071e17059f70772l,0x3a073a843a1db56bl,0x034949033b8af190l,
wolfSSL 14:167253f4e170 40075 0x7d882de3d32920f0l },
wolfSSL 14:167253f4e170 40076 0 },
wolfSSL 14:167253f4e170 40077 /* 52 << 168 */
wolfSSL 14:167253f4e170 40078 { { 0x91633f0ab2cf8940l,0x72b0b1786f948f51l,0x2d28dc30782653c8l,
wolfSSL 14:167253f4e170 40079 0x88829849db903a05l },
wolfSSL 14:167253f4e170 40080 { 0xb8095d0c6a19d2bbl,0x4b9e7f0c86f782cbl,0x7af739882d907064l,
wolfSSL 14:167253f4e170 40081 0xd12be0fe8b32643cl },
wolfSSL 14:167253f4e170 40082 0 },
wolfSSL 14:167253f4e170 40083 /* 53 << 168 */
wolfSSL 14:167253f4e170 40084 { { 0x358ed23d0e165dc3l,0x3d47ce624e2378cel,0x7e2bb0b9feb8a087l,
wolfSSL 14:167253f4e170 40085 0x3246e8aee29e10b9l },
wolfSSL 14:167253f4e170 40086 { 0x459f4ec703ce2b4dl,0xe9b4ca1bbbc077cfl,0x2613b4f20e9940c1l,
wolfSSL 14:167253f4e170 40087 0xfc598bb9047d1eb1l },
wolfSSL 14:167253f4e170 40088 0 },
wolfSSL 14:167253f4e170 40089 /* 55 << 168 */
wolfSSL 14:167253f4e170 40090 { { 0x52fb0c9d7fc63668l,0x6886c9dd0c039cdel,0x602bd59955b22351l,
wolfSSL 14:167253f4e170 40091 0xb00cab02360c7c13l },
wolfSSL 14:167253f4e170 40092 { 0x8cb616bc81b69442l,0x41486700b55c3ceel,0x71093281f49ba278l,
wolfSSL 14:167253f4e170 40093 0xad956d9c64a50710l },
wolfSSL 14:167253f4e170 40094 0 },
wolfSSL 14:167253f4e170 40095 /* 57 << 168 */
wolfSSL 14:167253f4e170 40096 { { 0xbaca6591d4b66947l,0xb452ce9804460a8cl,0x6830d24643768f55l,
wolfSSL 14:167253f4e170 40097 0xf4197ed87dff12dfl },
wolfSSL 14:167253f4e170 40098 { 0x6521b472400dd0f7l,0x59f5ca8f4b1e7093l,0x6feff11b080338ael,
wolfSSL 14:167253f4e170 40099 0x0ada31f6a29ca3c6l },
wolfSSL 14:167253f4e170 40100 0 },
wolfSSL 14:167253f4e170 40101 /* 59 << 168 */
wolfSSL 14:167253f4e170 40102 { { 0x04e5dfe0d809c7bdl,0xd7b2580c8f1050abl,0x6d91ad78d8a4176fl,
wolfSSL 14:167253f4e170 40103 0x0af556ee4e2e897cl },
wolfSSL 14:167253f4e170 40104 { 0x162a8b73921de0acl,0x52ac9c227ea78400l,0xee2a4eeaefce2174l,
wolfSSL 14:167253f4e170 40105 0xbe61844e6d637f79l },
wolfSSL 14:167253f4e170 40106 0 },
wolfSSL 14:167253f4e170 40107 /* 60 << 168 */
wolfSSL 14:167253f4e170 40108 { { 0x0491f1bc789a283bl,0x72d3ac3d880836f4l,0xaa1c5ea388e5402dl,
wolfSSL 14:167253f4e170 40109 0x1b192421d5cc473dl },
wolfSSL 14:167253f4e170 40110 { 0x5c0b99989dc84cacl,0xb0a8482d9c6e75b8l,0x639961d03a191ce2l,
wolfSSL 14:167253f4e170 40111 0xda3bc8656d837930l },
wolfSSL 14:167253f4e170 40112 0 },
wolfSSL 14:167253f4e170 40113 /* 61 << 168 */
wolfSSL 14:167253f4e170 40114 { { 0xca990653056e6f8fl,0x84861c4164d133a7l,0x8b403276746abe40l,
wolfSSL 14:167253f4e170 40115 0xb7b4d51aebf8e303l },
wolfSSL 14:167253f4e170 40116 { 0x05b43211220a255dl,0xc997152c02419e6el,0x76ff47b6630c2feal,
wolfSSL 14:167253f4e170 40117 0x50518677281fdadel },
wolfSSL 14:167253f4e170 40118 0 },
wolfSSL 14:167253f4e170 40119 /* 63 << 168 */
wolfSSL 14:167253f4e170 40120 { { 0x6d2d99b7ea7b979bl,0xcd78cd74e6fb3bcdl,0x11e45a9e86cffbfel,
wolfSSL 14:167253f4e170 40121 0x78a61cf4637024f6l },
wolfSSL 14:167253f4e170 40122 { 0xd06bc8723d502295l,0xf1376854458cb288l,0xb9db26a1342f8586l,
wolfSSL 14:167253f4e170 40123 0xf33effcf4beee09el },
wolfSSL 14:167253f4e170 40124 0 },
wolfSSL 14:167253f4e170 40125 /* 64 << 168 */
wolfSSL 14:167253f4e170 40126 { { 0xd7e0c4cdb30cfb3al,0x6d09b8c16c9db4c8l,0x40ba1a4207c8d9dfl,
wolfSSL 14:167253f4e170 40127 0x6fd495f71c52c66dl },
wolfSSL 14:167253f4e170 40128 { 0xfb0e169f275264dal,0x80c2b746e57d8362l,0xedd987f749ad7222l,
wolfSSL 14:167253f4e170 40129 0xfdc229af4398ec7bl },
wolfSSL 14:167253f4e170 40130 0 },
wolfSSL 14:167253f4e170 40131 /* 65 << 168 */
wolfSSL 14:167253f4e170 40132 { { 0xfe81af4609418a51l,0xdbb60b836f18e3a5l,0x5e7a86ea4566ec9cl,
wolfSSL 14:167253f4e170 40133 0xb76ff40f25093925l },
wolfSSL 14:167253f4e170 40134 { 0x5fe6662c429c5554l,0xfc9ec35384e478cfl,0x73dbb5f3e8cfa761l,
wolfSSL 14:167253f4e170 40135 0x031e506592f82709l },
wolfSSL 14:167253f4e170 40136 0 },
wolfSSL 14:167253f4e170 40137 /* 71 << 168 */
wolfSSL 14:167253f4e170 40138 { { 0x108c736abd49f2e0l,0xe230f2417487dcc8l,0x073fc4f8f74d939cl,
wolfSSL 14:167253f4e170 40139 0x98532487e9745bbel },
wolfSSL 14:167253f4e170 40140 { 0x5208eb981714b10bl,0xec35d0510458725dl,0x35dbb60bf203f4b6l,
wolfSSL 14:167253f4e170 40141 0x064299b27781ab38l },
wolfSSL 14:167253f4e170 40142 0 },
wolfSSL 14:167253f4e170 40143 /* 77 << 168 */
wolfSSL 14:167253f4e170 40144 { { 0x43cc7bbc02d26929l,0xeb00a683162d9607l,0x2af152b8ed9fa224l,
wolfSSL 14:167253f4e170 40145 0xf24e8bee12257f0cl },
wolfSSL 14:167253f4e170 40146 { 0xdf065dd5d004b1cbl,0x6aa20bcf9f9908c6l,0x8e5e86b6941c593dl,
wolfSSL 14:167253f4e170 40147 0x0e0034b398969717l },
wolfSSL 14:167253f4e170 40148 0 },
wolfSSL 14:167253f4e170 40149 /* 83 << 168 */
wolfSSL 14:167253f4e170 40150 { { 0x5be62e155c43b8fcl,0xd9e0adfc3c445636l,0xc5141df0e0d78f48l,
wolfSSL 14:167253f4e170 40151 0xd134bbed2c277716l },
wolfSSL 14:167253f4e170 40152 { 0x79033a84598fe069l,0x6c704367b081614cl,0x55c45d66bf5bf772l,
wolfSSL 14:167253f4e170 40153 0xf08744c57a444730l },
wolfSSL 14:167253f4e170 40154 0 },
wolfSSL 14:167253f4e170 40155 /* 89 << 168 */
wolfSSL 14:167253f4e170 40156 { { 0x866752091422b528l,0xdb297411c3e028eel,0x1f5575b040e1c3ccl,
wolfSSL 14:167253f4e170 40157 0x85367b84d333b04fl },
wolfSSL 14:167253f4e170 40158 { 0x57864c86e9804aa9l,0xf13fa8e3439156dfl,0xa3b337e0464e0aecl,
wolfSSL 14:167253f4e170 40159 0x0018dfd7f2ae382bl },
wolfSSL 14:167253f4e170 40160 0 },
wolfSSL 14:167253f4e170 40161 /* 95 << 168 */
wolfSSL 14:167253f4e170 40162 { { 0xe93cece9cea132fcl,0x985542d8f74e867al,0x2a3d18a5cc8fcf87l,
wolfSSL 14:167253f4e170 40163 0xa0561055479d0039l },
wolfSSL 14:167253f4e170 40164 { 0x3513c7eaac4b3f9dl,0xc095967256477606l,0xa63960f330df8ad6l,
wolfSSL 14:167253f4e170 40165 0x59ca8d53cc9ddcb3l },
wolfSSL 14:167253f4e170 40166 0 },
wolfSSL 14:167253f4e170 40167 /* 101 << 168 */
wolfSSL 14:167253f4e170 40168 { { 0x6d8e942b2f208191l,0xd49a6d9453fe5457l,0x2b55e391003010bal,
wolfSSL 14:167253f4e170 40169 0x3dd1fd9fdf4605ebl },
wolfSSL 14:167253f4e170 40170 { 0xdc006a3358682886l,0x60a5e86c1bd9ac88l,0xc4bd320ed0cab8f2l,
wolfSSL 14:167253f4e170 40171 0x7281e7cb7751855bl },
wolfSSL 14:167253f4e170 40172 0 },
wolfSSL 14:167253f4e170 40173 /* 107 << 168 */
wolfSSL 14:167253f4e170 40174 { { 0x7d564222e1881e7al,0x59061a89db0673c2l,0x1f9d607213f27313l,
wolfSSL 14:167253f4e170 40175 0x5b3b29368ff3aeb7l },
wolfSSL 14:167253f4e170 40176 { 0x6cf2304ccf969f43l,0x8eff4a25e7f69ae5l,0xbaeb6411d17da4ffl,
wolfSSL 14:167253f4e170 40177 0x666af0af9eea17ecl },
wolfSSL 14:167253f4e170 40178 0 },
wolfSSL 14:167253f4e170 40179 /* 113 << 168 */
wolfSSL 14:167253f4e170 40180 { { 0x6c0b811697f4cd0bl,0xcd7825d40e4ea852l,0x80158fb0677fef3dl,
wolfSSL 14:167253f4e170 40181 0x5bb1a3aaa10ee693l },
wolfSSL 14:167253f4e170 40182 { 0xc5df66678066fc9bl,0x3200dc11f404d4a6l,0x58868950a8686d8el,
wolfSSL 14:167253f4e170 40183 0xbdaaffb53770fabal },
wolfSSL 14:167253f4e170 40184 0 },
wolfSSL 14:167253f4e170 40185 /* 116 << 168 */
wolfSSL 14:167253f4e170 40186 { { 0xba6a9f84660326f5l,0x61c1e44161bc3e88l,0xfbf992a0bde85cf8l,
wolfSSL 14:167253f4e170 40187 0xe704dd1e6f8c8f5fl },
wolfSSL 14:167253f4e170 40188 { 0x231caa0ab1d7d486l,0xd10616d8891cd571l,0x2ddada75c008833cl,
wolfSSL 14:167253f4e170 40189 0x44337d6dad514c94l },
wolfSSL 14:167253f4e170 40190 0 },
wolfSSL 14:167253f4e170 40191 /* 119 << 168 */
wolfSSL 14:167253f4e170 40192 { { 0xd48678b8f6933cf0l,0x7b4d623e0b739471l,0x4ad620287b216238l,
wolfSSL 14:167253f4e170 40193 0xb4d4918959c4fabel },
wolfSSL 14:167253f4e170 40194 { 0x8c2a1bdc296d42d5l,0x9235d0ec2fd3eb96l,0xfe271972f81c135bl,
wolfSSL 14:167253f4e170 40195 0x82b5181741471e16l },
wolfSSL 14:167253f4e170 40196 0 },
wolfSSL 14:167253f4e170 40197 /* 125 << 168 */
wolfSSL 14:167253f4e170 40198 { { 0xe9aa8ce4051f8e81l,0x14484af67cd1391fl,0x53a361dcafb1656el,
wolfSSL 14:167253f4e170 40199 0x6ad8ba02f4d9d0cbl },
wolfSSL 14:167253f4e170 40200 { 0xfb4385466c50a722l,0x2f1c5bbc7edb37f4l,0x8dc90ccb16e4b795l,
wolfSSL 14:167253f4e170 40201 0xbcb32e1508127094l },
wolfSSL 14:167253f4e170 40202 0 },
wolfSSL 14:167253f4e170 40203 },
wolfSSL 14:167253f4e170 40204 {
wolfSSL 14:167253f4e170 40205 /* 0 << 176 */
wolfSSL 14:167253f4e170 40206 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 40207 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 40208 1 },
wolfSSL 14:167253f4e170 40209 /* 1 << 176 */
wolfSSL 14:167253f4e170 40210 { { 0xb81d783e979f3925l,0x1efd130aaf4c89a7l,0x525c2144fd1bf7fal,
wolfSSL 14:167253f4e170 40211 0x4b2969041b265a9el },
wolfSSL 14:167253f4e170 40212 { 0xed8e9634b9db65b6l,0x35c82e3203599d8al,0xdaa7a54f403563f3l,
wolfSSL 14:167253f4e170 40213 0x9df088ad022c38abl },
wolfSSL 14:167253f4e170 40214 0 },
wolfSSL 14:167253f4e170 40215 /* 3 << 176 */
wolfSSL 14:167253f4e170 40216 { { 0x9e93ba24f111661el,0xedced484b105eb04l,0x96dc9ba1f424b578l,
wolfSSL 14:167253f4e170 40217 0xbf8f66b7e83e9069l },
wolfSSL 14:167253f4e170 40218 { 0x872d4df4d7ed8216l,0xbf07f3778e2cbecfl,0x4281d89998e73754l,
wolfSSL 14:167253f4e170 40219 0xfec85fbb8aab8708l },
wolfSSL 14:167253f4e170 40220 0 },
wolfSSL 14:167253f4e170 40221 /* 4 << 176 */
wolfSSL 14:167253f4e170 40222 { { 0x13b5bf22765fa7d0l,0x59805bf01d6a5370l,0x67a5e29d4280db98l,
wolfSSL 14:167253f4e170 40223 0x4f53916f776b1ce3l },
wolfSSL 14:167253f4e170 40224 { 0x714ff61f33ddf626l,0x4206238ea085d103l,0x1c50d4b7e5809ee3l,
wolfSSL 14:167253f4e170 40225 0x999f450d85f8eb1dl },
wolfSSL 14:167253f4e170 40226 0 },
wolfSSL 14:167253f4e170 40227 /* 5 << 176 */
wolfSSL 14:167253f4e170 40228 { { 0x82eebe731a3a93bcl,0x42bbf465a21adc1al,0xc10b6fa4ef030efdl,
wolfSSL 14:167253f4e170 40229 0x247aa4c787b097bbl },
wolfSSL 14:167253f4e170 40230 { 0x8b8dc632f60c77dal,0x6ffbc26ac223523el,0xa4f6ff11344579cfl,
wolfSSL 14:167253f4e170 40231 0x5825653c980250f6l },
wolfSSL 14:167253f4e170 40232 0 },
wolfSSL 14:167253f4e170 40233 /* 7 << 176 */
wolfSSL 14:167253f4e170 40234 { { 0xeda6c595d314e7bcl,0x2ee7464b467899edl,0x1cef423c0a1ed5d3l,
wolfSSL 14:167253f4e170 40235 0x217e76ea69cc7613l },
wolfSSL 14:167253f4e170 40236 { 0x27ccce1fe7cda917l,0x12d8016b8a893f16l,0xbcd6de849fc74f6bl,
wolfSSL 14:167253f4e170 40237 0xfa5817e2f3144e61l },
wolfSSL 14:167253f4e170 40238 0 },
wolfSSL 14:167253f4e170 40239 /* 9 << 176 */
wolfSSL 14:167253f4e170 40240 { { 0xc0b48d4e49ccd6d7l,0xff8fb02c88bd5580l,0xc75235e907d473b2l,
wolfSSL 14:167253f4e170 40241 0x4fab1ac5a2188af3l },
wolfSSL 14:167253f4e170 40242 { 0x030fa3bc97576ec0l,0xe8c946e80b7e7d2fl,0x40a5c9cc70305600l,
wolfSSL 14:167253f4e170 40243 0x6d8260a9c8b013b4l },
wolfSSL 14:167253f4e170 40244 0 },
wolfSSL 14:167253f4e170 40245 /* 10 << 176 */
wolfSSL 14:167253f4e170 40246 { { 0xe6c51073615cd9e4l,0x498ec047f1243c06l,0x3e5a8809b17b3d8cl,
wolfSSL 14:167253f4e170 40247 0x5cd99e610cc565f1l },
wolfSSL 14:167253f4e170 40248 { 0x81e312df7851dafel,0xf156f5baa79061e2l,0x80d62b71880c590el,
wolfSSL 14:167253f4e170 40249 0xbec9746f0a39faa1l },
wolfSSL 14:167253f4e170 40250 0 },
wolfSSL 14:167253f4e170 40251 /* 11 << 176 */
wolfSSL 14:167253f4e170 40252 { { 0x2b09d2c3cfdcf7ddl,0x41a9fce3723fcab4l,0x73d905f707f57ca3l,
wolfSSL 14:167253f4e170 40253 0x080f9fb1ac8e1555l },
wolfSSL 14:167253f4e170 40254 { 0x7c088e849ba7a531l,0x07d35586ed9a147fl,0x602846abaf48c336l,
wolfSSL 14:167253f4e170 40255 0x7320fd320ccf0e79l },
wolfSSL 14:167253f4e170 40256 0 },
wolfSSL 14:167253f4e170 40257 /* 13 << 176 */
wolfSSL 14:167253f4e170 40258 { { 0x92eb40907f8f875dl,0x9c9d754e56c26bbfl,0x158cea618110bbe7l,
wolfSSL 14:167253f4e170 40259 0x62a6b802745f91eal },
wolfSSL 14:167253f4e170 40260 { 0xa79c41aac6e7394bl,0x445b6a83ad57ef10l,0x0c5277eb6ea6f40cl,
wolfSSL 14:167253f4e170 40261 0x319fe96b88633365l },
wolfSSL 14:167253f4e170 40262 0 },
wolfSSL 14:167253f4e170 40263 /* 15 << 176 */
wolfSSL 14:167253f4e170 40264 { { 0x77f84203d39b8c34l,0xed8b1be63125eddbl,0x5bbf2441f6e39dc5l,
wolfSSL 14:167253f4e170 40265 0xb00f6ee66a5d678al },
wolfSSL 14:167253f4e170 40266 { 0xba456ecf57d0ea99l,0xdcae0f5817e06c43l,0x01643de40f5b4baal,
wolfSSL 14:167253f4e170 40267 0x2c324341d161b9bel },
wolfSSL 14:167253f4e170 40268 0 },
wolfSSL 14:167253f4e170 40269 /* 16 << 176 */
wolfSSL 14:167253f4e170 40270 { { 0x949c9976e1337c26l,0x6faadebdd73d68e5l,0x9e158614f1b768d9l,
wolfSSL 14:167253f4e170 40271 0x22dfa5579cc4f069l },
wolfSSL 14:167253f4e170 40272 { 0xccd6da17be93c6d6l,0x24866c61a504f5b9l,0x2121353c8d694da1l,
wolfSSL 14:167253f4e170 40273 0x1c6ca5800140b8c6l },
wolfSSL 14:167253f4e170 40274 0 },
wolfSSL 14:167253f4e170 40275 /* 17 << 176 */
wolfSSL 14:167253f4e170 40276 { { 0x4e77c5575b45afb4l,0xe9ded649efb8912dl,0x7ec9bbf542f6e557l,
wolfSSL 14:167253f4e170 40277 0x2570dfff62671f00l },
wolfSSL 14:167253f4e170 40278 { 0x2b3bfb7888e084bdl,0xa024b238f37fe5b4l,0x44e7dc0495649aeel,
wolfSSL 14:167253f4e170 40279 0x498ca2555e7ec1d8l },
wolfSSL 14:167253f4e170 40280 0 },
wolfSSL 14:167253f4e170 40281 /* 19 << 176 */
wolfSSL 14:167253f4e170 40282 { { 0x2e44d22526a1fc90l,0x0d6d10d24d70705dl,0xd94b6b10d70c45f4l,
wolfSSL 14:167253f4e170 40283 0x0f201022b216c079l },
wolfSSL 14:167253f4e170 40284 { 0xcec966c5658fde41l,0xa8d2bc7d7e27601dl,0xbfcce3e1ff230be7l,
wolfSSL 14:167253f4e170 40285 0x3394ff6b0033ffb5l },
wolfSSL 14:167253f4e170 40286 0 },
wolfSSL 14:167253f4e170 40287 /* 21 << 176 */
wolfSSL 14:167253f4e170 40288 { { 0x05d99be8b9c20cdal,0x89f7aad5d5cd0c98l,0x7ef936fe5bb94183l,
wolfSSL 14:167253f4e170 40289 0x92ca0753b05cd7f2l },
wolfSSL 14:167253f4e170 40290 { 0x9d65db1174a1e035l,0x02628cc813eaea92l,0xf2d9e24249e4fbf2l,
wolfSSL 14:167253f4e170 40291 0x94fdfd9be384f8b7l },
wolfSSL 14:167253f4e170 40292 0 },
wolfSSL 14:167253f4e170 40293 /* 23 << 176 */
wolfSSL 14:167253f4e170 40294 { { 0x29882d7c98379d44l,0xd000bdfb509edc8al,0xc6f95979e66fe464l,
wolfSSL 14:167253f4e170 40295 0x504a6115fa61bde0l },
wolfSSL 14:167253f4e170 40296 { 0x56b3b871effea31al,0x2d3de26df0c21a54l,0x21dbff31834753bfl,
wolfSSL 14:167253f4e170 40297 0xe67ecf4969269d86l },
wolfSSL 14:167253f4e170 40298 0 },
wolfSSL 14:167253f4e170 40299 /* 25 << 176 */
wolfSSL 14:167253f4e170 40300 { { 0xed29a56da16d4b34l,0x7fba9d09dca21c4fl,0x66d7ac006d8de486l,
wolfSSL 14:167253f4e170 40301 0x6006198773a2a5e1l },
wolfSSL 14:167253f4e170 40302 { 0x8b400f869da28ff0l,0x3133f70843c4599cl,0x9911c9b8ee28cb0dl,
wolfSSL 14:167253f4e170 40303 0xcd7e28748e0af61dl },
wolfSSL 14:167253f4e170 40304 0 },
wolfSSL 14:167253f4e170 40305 /* 27 << 176 */
wolfSSL 14:167253f4e170 40306 { { 0x6a7bb6a93b5bdb83l,0x08da65c0a4a72318l,0xc58d22aa63eb065fl,
wolfSSL 14:167253f4e170 40307 0x1717596c1b15d685l },
wolfSSL 14:167253f4e170 40308 { 0x112df0d0b266d88bl,0xf688ae975941945al,0x487386e37c292cacl,
wolfSSL 14:167253f4e170 40309 0x42f3b50d57d6985cl },
wolfSSL 14:167253f4e170 40310 0 },
wolfSSL 14:167253f4e170 40311 /* 28 << 176 */
wolfSSL 14:167253f4e170 40312 { { 0x69e3be0427596893l,0xb6bb02a645bf452bl,0x0875c11af4c698c8l,
wolfSSL 14:167253f4e170 40313 0x6652b5c7bece3794l },
wolfSSL 14:167253f4e170 40314 { 0x7b3755fd4f5c0499l,0x6ea16558b5532b38l,0xd1c69889a2e96ef7l,
wolfSSL 14:167253f4e170 40315 0x9c773c3a61ed8f48l },
wolfSSL 14:167253f4e170 40316 0 },
wolfSSL 14:167253f4e170 40317 /* 29 << 176 */
wolfSSL 14:167253f4e170 40318 { { 0x5a304ada8545d185l,0x82ae44ea738bb8cbl,0x628a35e3df87e10el,
wolfSSL 14:167253f4e170 40319 0xd3624f3da15b9fe3l },
wolfSSL 14:167253f4e170 40320 { 0xcc44209b14be4254l,0x7d0efcbcbdbc2ea5l,0x1f60336204c37bbel,
wolfSSL 14:167253f4e170 40321 0x21f363f556a5852cl },
wolfSSL 14:167253f4e170 40322 0 },
wolfSSL 14:167253f4e170 40323 /* 31 << 176 */
wolfSSL 14:167253f4e170 40324 { { 0x81262e4225346689l,0x716da290b07c7004l,0x35f911eab7950ee3l,
wolfSSL 14:167253f4e170 40325 0x6fd72969261d21b5l },
wolfSSL 14:167253f4e170 40326 { 0x5238980308b640d3l,0x5b0026ee887f12a1l,0x20e21660742e9311l,
wolfSSL 14:167253f4e170 40327 0x0ef6d5415ff77ff7l },
wolfSSL 14:167253f4e170 40328 0 },
wolfSSL 14:167253f4e170 40329 /* 33 << 176 */
wolfSSL 14:167253f4e170 40330 { { 0x64aa0874925dd0b0l,0x5ffd503851c474c6l,0x4478c72c8ebd4157l,
wolfSSL 14:167253f4e170 40331 0xb98694cb8c8375e2l },
wolfSSL 14:167253f4e170 40332 { 0xeda4edeecd8e208cl,0xf98a053d2c0670a6l,0x564bd3057f346b9dl,
wolfSSL 14:167253f4e170 40333 0xafbbf3e94c318fddl },
wolfSSL 14:167253f4e170 40334 0 },
wolfSSL 14:167253f4e170 40335 /* 34 << 176 */
wolfSSL 14:167253f4e170 40336 { { 0x8a03410aa96c4685l,0xef1b6b16a978a31bl,0x44738a3b629df6cfl,
wolfSSL 14:167253f4e170 40337 0xa1dc65da807713e9l },
wolfSSL 14:167253f4e170 40338 { 0x569cc7884c373442l,0x1f30a2464965fb52l,0x56822f1677ff5e2el,
wolfSSL 14:167253f4e170 40339 0x63f18812e303748bl },
wolfSSL 14:167253f4e170 40340 0 },
wolfSSL 14:167253f4e170 40341 /* 35 << 176 */
wolfSSL 14:167253f4e170 40342 { { 0x2abdc403dd0983ecl,0xec0c08c7f365c6f5l,0xe555083fbdb66b8bl,
wolfSSL 14:167253f4e170 40343 0x593685bc4e8973ffl },
wolfSSL 14:167253f4e170 40344 { 0x737df3f920e9c705l,0x00c7bcc309c31a5al,0x5f1d23e2efdcb34dl,
wolfSSL 14:167253f4e170 40345 0x79d9b382470f7949l },
wolfSSL 14:167253f4e170 40346 0 },
wolfSSL 14:167253f4e170 40347 /* 36 << 176 */
wolfSSL 14:167253f4e170 40348 { { 0x44a315645fd2eb1dl,0x4e7397263fdd1356l,0x9b96735463200efel,
wolfSSL 14:167253f4e170 40349 0xcb70402e520bbb6al },
wolfSSL 14:167253f4e170 40350 { 0xcbc90d7e693d2642l,0x6fb00064bc9b4002l,0x95f2eab3d96f7150l,
wolfSSL 14:167253f4e170 40351 0xb1619e3fe035f47al },
wolfSSL 14:167253f4e170 40352 0 },
wolfSSL 14:167253f4e170 40353 /* 37 << 176 */
wolfSSL 14:167253f4e170 40354 { { 0xd22d6073d1561bb7l,0x40666e4ba9928683l,0x90654dab8ab3f9b1l,
wolfSSL 14:167253f4e170 40355 0x7625c507b8773421l },
wolfSSL 14:167253f4e170 40356 { 0x288f28220ca88cd2l,0xbb88114ed8d005c1l,0xbeec2b0af603a11bl,
wolfSSL 14:167253f4e170 40357 0x8fdda60325f7949el },
wolfSSL 14:167253f4e170 40358 0 },
wolfSSL 14:167253f4e170 40359 /* 39 << 176 */
wolfSSL 14:167253f4e170 40360 { { 0x6503632d6ee4f1d0l,0xd5449747ea394840l,0xd696167a8abe13a1l,
wolfSSL 14:167253f4e170 40361 0xc080f76e609ebaa9l },
wolfSSL 14:167253f4e170 40362 { 0x181acf0c10aa70d6l,0x70614461291e5e50l,0x7ade8e84b9f0c0a3l,
wolfSSL 14:167253f4e170 40363 0xef1de9f2cb11b41el },
wolfSSL 14:167253f4e170 40364 0 },
wolfSSL 14:167253f4e170 40365 /* 40 << 176 */
wolfSSL 14:167253f4e170 40366 { { 0x2d5c3c848e592413l,0x727022961832ba2cl,0x22979b51596c6321l,
wolfSSL 14:167253f4e170 40367 0x738f31cb5a04db64l },
wolfSSL 14:167253f4e170 40368 { 0x0bdaa6ca98f84ee5l,0x4e9e827c15e21eeel,0x4c59dbcc3ea632e0l,
wolfSSL 14:167253f4e170 40369 0xed3404db5bc6f027l },
wolfSSL 14:167253f4e170 40370 0 },
wolfSSL 14:167253f4e170 40371 /* 41 << 176 */
wolfSSL 14:167253f4e170 40372 { { 0x2841f05cfbaf8b26l,0xac9830db5b243770l,0xde3ab1707787f324l,
wolfSSL 14:167253f4e170 40373 0x1ee12efe079209bcl },
wolfSSL 14:167253f4e170 40374 { 0x2d3fd62d5bcf6e3cl,0x8a680655d60b0582l,0xdafc5061bc2b64a1l,
wolfSSL 14:167253f4e170 40375 0xe0d91e7526a88788l },
wolfSSL 14:167253f4e170 40376 0 },
wolfSSL 14:167253f4e170 40377 /* 43 << 176 */
wolfSSL 14:167253f4e170 40378 { { 0x2d49c685426b1b1el,0x6c2149caeabb02f7l,0xa4697d7fde11984fl,
wolfSSL 14:167253f4e170 40379 0xa0e32fb3ed3c8707l },
wolfSSL 14:167253f4e170 40380 { 0xb783e825f4ca12dal,0xb2666e2448770a50l,0x82d47f478660e923l,
wolfSSL 14:167253f4e170 40381 0x6e36cd71fb4a984fl },
wolfSSL 14:167253f4e170 40382 0 },
wolfSSL 14:167253f4e170 40383 /* 44 << 176 */
wolfSSL 14:167253f4e170 40384 { { 0x3295a8ea43c66b92l,0x99387af6ac5d19d4l,0x545f9b1b8e9d2090l,
wolfSSL 14:167253f4e170 40385 0x138b1c4c2660f530l },
wolfSSL 14:167253f4e170 40386 { 0xbfb05fd2ff872627l,0xb6614b0f4c3bc45cl,0x13defece62ca0fb0l,
wolfSSL 14:167253f4e170 40387 0x82ddae134fededd8l },
wolfSSL 14:167253f4e170 40388 0 },
wolfSSL 14:167253f4e170 40389 /* 45 << 176 */
wolfSSL 14:167253f4e170 40390 { { 0x5a34499b871c4cbbl,0x3ab0e69a2eb6084bl,0xa8d0160025ef7755l,
wolfSSL 14:167253f4e170 40391 0x5db8f611d9e70f5dl },
wolfSSL 14:167253f4e170 40392 { 0x63f9eb9a7afa95d7l,0x328b97f9706d7964l,0x8bcf9a0f4b71dfcal,
wolfSSL 14:167253f4e170 40393 0x53d4c3042a5c7934l },
wolfSSL 14:167253f4e170 40394 0 },
wolfSSL 14:167253f4e170 40395 /* 46 << 176 */
wolfSSL 14:167253f4e170 40396 { { 0x0c87dd3a8768d9aal,0x201ce5a082f6a55fl,0xa3de6f3049ca4602l,
wolfSSL 14:167253f4e170 40397 0x36f421422aeb5f17l },
wolfSSL 14:167253f4e170 40398 { 0x5c9962399817b77al,0x2584a10ae8d165acl,0x80f683d0c726f4aal,
wolfSSL 14:167253f4e170 40399 0x524307502dcdfa48l },
wolfSSL 14:167253f4e170 40400 0 },
wolfSSL 14:167253f4e170 40401 /* 47 << 176 */
wolfSSL 14:167253f4e170 40402 { { 0x0c04399f94683df2l,0x0978e9d4e954838dl,0x01faa5e8cf4a7a7bl,
wolfSSL 14:167253f4e170 40403 0x92f6e6a90dae61cfl },
wolfSSL 14:167253f4e170 40404 { 0x0c0f1293373dc957l,0x8320178fd8cc6b67l,0x4af977ed4b6444f2l,
wolfSSL 14:167253f4e170 40405 0xd8c9a401ad8e5f84l },
wolfSSL 14:167253f4e170 40406 0 },
wolfSSL 14:167253f4e170 40407 /* 48 << 176 */
wolfSSL 14:167253f4e170 40408 { { 0xbd5660ed9aed9f40l,0x70ca6ad1532a8c99l,0xc4978bfb95c371eal,
wolfSSL 14:167253f4e170 40409 0xe5464d0d7003109dl },
wolfSSL 14:167253f4e170 40410 { 0x1af32fdfd9e535efl,0xabf57ea798c9185bl,0xed7a741712b42488l,
wolfSSL 14:167253f4e170 40411 0x8e0296a7e97286fal },
wolfSSL 14:167253f4e170 40412 0 },
wolfSSL 14:167253f4e170 40413 /* 49 << 176 */
wolfSSL 14:167253f4e170 40414 { { 0x79ee35ac16fca804l,0x8f16e6165f59782el,0x8fbef1011737694el,
wolfSSL 14:167253f4e170 40415 0xb34b7625462be08bl },
wolfSSL 14:167253f4e170 40416 { 0x7e63e1b016e75c91l,0xb6a18edd2d23728dl,0xcf761a1e7f299ab6l,
wolfSSL 14:167253f4e170 40417 0x796dcdebf16c770el },
wolfSSL 14:167253f4e170 40418 0 },
wolfSSL 14:167253f4e170 40419 /* 51 << 176 */
wolfSSL 14:167253f4e170 40420 { { 0x47354f22308ee4afl,0x96959a538ecd6f4bl,0xf60b5f104055cbd2l,
wolfSSL 14:167253f4e170 40421 0x04b1c9599bd86095l },
wolfSSL 14:167253f4e170 40422 { 0x26accd8486008564l,0x46b2fe0478f31ea7l,0x5500dbf72dd76f23l,
wolfSSL 14:167253f4e170 40423 0x36bcdf584c496c6fl },
wolfSSL 14:167253f4e170 40424 0 },
wolfSSL 14:167253f4e170 40425 /* 52 << 176 */
wolfSSL 14:167253f4e170 40426 { { 0x8836cd431527d7cel,0x1f236623187a50eal,0x6470c0ae847221f0l,
wolfSSL 14:167253f4e170 40427 0xc61f86b47e449110l },
wolfSSL 14:167253f4e170 40428 { 0x7cc9cc20fa9fcec1l,0xa394903019134349l,0xafe5a08ff53ab467l,
wolfSSL 14:167253f4e170 40429 0x9caba02301ed2919l },
wolfSSL 14:167253f4e170 40430 0 },
wolfSSL 14:167253f4e170 40431 /* 53 << 176 */
wolfSSL 14:167253f4e170 40432 { { 0xffecbdce406abf1el,0x0ef4bcd73ae340d4l,0x7e37bae0e19d5613l,
wolfSSL 14:167253f4e170 40433 0xe191669be4c6e97al },
wolfSSL 14:167253f4e170 40434 { 0x9fafe59797292db7l,0xab7ef3713172d716l,0x9f0fff330ce3b533l,
wolfSSL 14:167253f4e170 40435 0xca94ff8f932dd8cfl },
wolfSSL 14:167253f4e170 40436 0 },
wolfSSL 14:167253f4e170 40437 /* 55 << 176 */
wolfSSL 14:167253f4e170 40438 { { 0x659c8b5d78aea69el,0xdde7ab46476a8fb9l,0x26bfe303bd01b5e6l,
wolfSSL 14:167253f4e170 40439 0xf3dfb08a726a937cl },
wolfSSL 14:167253f4e170 40440 { 0xe7a591fa0a263670l,0xe872c3f8f97434a0l,0x4881a82e2e0f2c21l,
wolfSSL 14:167253f4e170 40441 0x17624e48788ef958l },
wolfSSL 14:167253f4e170 40442 0 },
wolfSSL 14:167253f4e170 40443 /* 57 << 176 */
wolfSSL 14:167253f4e170 40444 { { 0xd526d66da7222e5bl,0xd33bb78efeb00e25l,0x9a7d670b932c8d08l,
wolfSSL 14:167253f4e170 40445 0xea31e5273cee093fl },
wolfSSL 14:167253f4e170 40446 { 0x55cc091bd04b7a43l,0x12b08d6dd01a123dl,0x1d98a6467fb0e7bal,
wolfSSL 14:167253f4e170 40447 0xdabb09483535fd0dl },
wolfSSL 14:167253f4e170 40448 0 },
wolfSSL 14:167253f4e170 40449 /* 59 << 176 */
wolfSSL 14:167253f4e170 40450 { { 0x2862314d08b69b19l,0x9cf302e191effcfal,0x43bdc8462ead917al,
wolfSSL 14:167253f4e170 40451 0x21b238bbf94b3d8fl },
wolfSSL 14:167253f4e170 40452 { 0xa3736160e2f465d3l,0x4d7fb6818541e255l,0x46fa089a23551edcl,
wolfSSL 14:167253f4e170 40453 0xf7c41d17c1fefa8cl },
wolfSSL 14:167253f4e170 40454 0 },
wolfSSL 14:167253f4e170 40455 /* 60 << 176 */
wolfSSL 14:167253f4e170 40456 { { 0x8ed0807fed113000l,0x8e1672d04c691484l,0x33a13ab31ee86ca0l,
wolfSSL 14:167253f4e170 40457 0x9df0d9573bcaee4fl },
wolfSSL 14:167253f4e170 40458 { 0x0cf0c638ef0dfb71l,0x1e0fe22ac2c9510al,0x43f506716fcc6a21l,
wolfSSL 14:167253f4e170 40459 0xccb58404cec03a94l },
wolfSSL 14:167253f4e170 40460 0 },
wolfSSL 14:167253f4e170 40461 /* 61 << 176 */
wolfSSL 14:167253f4e170 40462 { { 0x59547e37fd0936c1l,0x81e0517df45140b1l,0xcc6ccd89ed49e3fcl,
wolfSSL 14:167253f4e170 40463 0xc2fa23eff3b897del },
wolfSSL 14:167253f4e170 40464 { 0x149511ef2050c80al,0xf66bea6b3140b833l,0xbbe1401e2786d723l,
wolfSSL 14:167253f4e170 40465 0x0aeb549c887509bcl },
wolfSSL 14:167253f4e170 40466 0 },
wolfSSL 14:167253f4e170 40467 /* 63 << 176 */
wolfSSL 14:167253f4e170 40468 { { 0xf938e85060f5867al,0x806e1fff72429adcl,0x5ff7962a45f43b52l,
wolfSSL 14:167253f4e170 40469 0xd8375ab6b2bbb403l },
wolfSSL 14:167253f4e170 40470 { 0x00d5819b21b287fcl,0x15c7190ebae37d58l,0x075ce5ce05fcfb07l,
wolfSSL 14:167253f4e170 40471 0x76368d06dbc003cbl },
wolfSSL 14:167253f4e170 40472 0 },
wolfSSL 14:167253f4e170 40473 /* 64 << 176 */
wolfSSL 14:167253f4e170 40474 { { 0x01079383171b445fl,0x9bcf21e38131ad4cl,0x8cdfe205c93987e8l,
wolfSSL 14:167253f4e170 40475 0xe63f4152c92e8c8fl },
wolfSSL 14:167253f4e170 40476 { 0x729462a930add43dl,0x62ebb143c980f05al,0x4f3954e53b06e968l,
wolfSSL 14:167253f4e170 40477 0xfe1d75ad242cf6b1l },
wolfSSL 14:167253f4e170 40478 0 },
wolfSSL 14:167253f4e170 40479 /* 65 << 176 */
wolfSSL 14:167253f4e170 40480 { { 0x1cf508197630655el,0x9b4685c408d417f5l,0x6ea942619b049259l,
wolfSSL 14:167253f4e170 40481 0x31c29b54fe73b755l },
wolfSSL 14:167253f4e170 40482 { 0x3d2872a1f1f2af17l,0xbcd1139956bcbc4bl,0x4d14f59890d7a85cl,
wolfSSL 14:167253f4e170 40483 0xd2c46040dbcbe998l },
wolfSSL 14:167253f4e170 40484 0 },
wolfSSL 14:167253f4e170 40485 /* 71 << 176 */
wolfSSL 14:167253f4e170 40486 { { 0x3c8a06ca9792c42al,0x92535628602460ddl,0xa95e13f2ddd4c676l,
wolfSSL 14:167253f4e170 40487 0xe823841d3b20d463l },
wolfSSL 14:167253f4e170 40488 { 0x0248605bbfad6051l,0x82985dd61af51233l,0x3d243a5cdef7d742l,
wolfSSL 14:167253f4e170 40489 0x0a88ce55ff6aa911l },
wolfSSL 14:167253f4e170 40490 0 },
wolfSSL 14:167253f4e170 40491 /* 77 << 176 */
wolfSSL 14:167253f4e170 40492 { { 0xcf5b5962449aec98l,0x40322a6531a41389l,0xcd15606fd72c0527l,
wolfSSL 14:167253f4e170 40493 0xfe91eac7b90d65a0l },
wolfSSL 14:167253f4e170 40494 { 0xcd32415487636360l,0x82f2c7bdfc653a6fl,0xd04d138ae315ce7cl,
wolfSSL 14:167253f4e170 40495 0x40ebfd5e78118dbcl },
wolfSSL 14:167253f4e170 40496 0 },
wolfSSL 14:167253f4e170 40497 /* 83 << 176 */
wolfSSL 14:167253f4e170 40498 { { 0x0f9ea6ae4144660fl,0x02345c6513279b25l,0x139497b65c7671cbl,
wolfSSL 14:167253f4e170 40499 0x7259f14b2ebed1d5l },
wolfSSL 14:167253f4e170 40500 { 0xa1e5d98ce9b29988l,0xaed0efcd8df73ac8l,0x88339f073b81a77cl,
wolfSSL 14:167253f4e170 40501 0x28f2bbca7109c8a6l },
wolfSSL 14:167253f4e170 40502 0 },
wolfSSL 14:167253f4e170 40503 /* 89 << 176 */
wolfSSL 14:167253f4e170 40504 { { 0xa264f99d811472ddl,0x0e7eae0afc07a80cl,0x77f264d4a683cdc6l,
wolfSSL 14:167253f4e170 40505 0x0512df49d053c668l },
wolfSSL 14:167253f4e170 40506 { 0x2b4dfbade61dea15l,0x83de61acfd74890al,0xd2552bab32d41182l,
wolfSSL 14:167253f4e170 40507 0x1fb9411435924e6al },
wolfSSL 14:167253f4e170 40508 0 },
wolfSSL 14:167253f4e170 40509 /* 95 << 176 */
wolfSSL 14:167253f4e170 40510 { { 0x85efe53ade23c988l,0x89d41dbbf897f91bl,0x1357f91e7873fa8dl,
wolfSSL 14:167253f4e170 40511 0x7a6ec2e3718d911cl },
wolfSSL 14:167253f4e170 40512 { 0xf9e4f92e8f209a01l,0x4ffb96a70fdd67f3l,0x4c81a787f83dde1cl,
wolfSSL 14:167253f4e170 40513 0x0d68fce15e163b60l },
wolfSSL 14:167253f4e170 40514 0 },
wolfSSL 14:167253f4e170 40515 /* 101 << 176 */
wolfSSL 14:167253f4e170 40516 { { 0xbc79b4b26ab6da9dl,0xb4be5c278bb005f1l,0x63624530cd3b280bl,
wolfSSL 14:167253f4e170 40517 0x543142f04e880026l },
wolfSSL 14:167253f4e170 40518 { 0xbf7fb14cad90ddbfl,0xfe456e8a3966732dl,0x85499fb987ce35e9l,
wolfSSL 14:167253f4e170 40519 0x8af09e6b24f1305dl },
wolfSSL 14:167253f4e170 40520 0 },
wolfSSL 14:167253f4e170 40521 /* 107 << 176 */
wolfSSL 14:167253f4e170 40522 { { 0x5fc563ec16dc2b4bl,0xfe5631b25d0e535fl,0xbf4c489f9a93e36cl,
wolfSSL 14:167253f4e170 40523 0x56badff1da2a07c4l },
wolfSSL 14:167253f4e170 40524 { 0x72ac6b77fb7c5595l,0x4b25b9428e6645d9l,0xeeae127251f0657el,
wolfSSL 14:167253f4e170 40525 0x30779ca51abeb76bl },
wolfSSL 14:167253f4e170 40526 0 },
wolfSSL 14:167253f4e170 40527 /* 113 << 176 */
wolfSSL 14:167253f4e170 40528 { { 0x3d602ef5d909f43dl,0x2b2951a6bb347c79l,0x44903bfaa0d88896l,
wolfSSL 14:167253f4e170 40529 0xd4ab20e8684c104fl },
wolfSSL 14:167253f4e170 40530 { 0x55f70b4dd9b7e626l,0x084b3ee646a5f9ecl,0x1799cbe3da4ae81al,
wolfSSL 14:167253f4e170 40531 0xc7cfac937fd6b80fl },
wolfSSL 14:167253f4e170 40532 0 },
wolfSSL 14:167253f4e170 40533 /* 116 << 176 */
wolfSSL 14:167253f4e170 40534 { { 0x45647911ca20c525l,0x78f83186004706abl,0x5596377d97510538l,
wolfSSL 14:167253f4e170 40535 0x047863defe041f8cl },
wolfSSL 14:167253f4e170 40536 { 0xaea784896ec82367l,0x9d4eac2601eee8fcl,0xb32728f19b57d9dbl,
wolfSSL 14:167253f4e170 40537 0x60a158f5313c0f65l },
wolfSSL 14:167253f4e170 40538 0 },
wolfSSL 14:167253f4e170 40539 /* 119 << 176 */
wolfSSL 14:167253f4e170 40540 { { 0xf78caf129754377bl,0xa7fce16b6966f0c4l,0xfea937555a54a2b7l,
wolfSSL 14:167253f4e170 40541 0x52d7f79b7cdfe951l },
wolfSSL 14:167253f4e170 40542 { 0x3e14b92e94b1dac0l,0x363f2e5af168b73bl,0xcc0e9dcb6436a8c2l,
wolfSSL 14:167253f4e170 40543 0x2dbece4bb52cbd27l },
wolfSSL 14:167253f4e170 40544 0 },
wolfSSL 14:167253f4e170 40545 /* 125 << 176 */
wolfSSL 14:167253f4e170 40546 { { 0x7e7907ed8df38ffel,0xa68ec827e24e8a24l,0x5093a97e5f168732l,
wolfSSL 14:167253f4e170 40547 0xa9ffea2f39ebb6dbl },
wolfSSL 14:167253f4e170 40548 { 0x89e02c12284276d4l,0xc1179e3b3f9502d6l,0x01becb51d8f69eb6l,
wolfSSL 14:167253f4e170 40549 0x86eee2935eb1c73cl },
wolfSSL 14:167253f4e170 40550 0 },
wolfSSL 14:167253f4e170 40551 },
wolfSSL 14:167253f4e170 40552 {
wolfSSL 14:167253f4e170 40553 /* 0 << 184 */
wolfSSL 14:167253f4e170 40554 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 40555 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 40556 1 },
wolfSSL 14:167253f4e170 40557 /* 1 << 184 */
wolfSSL 14:167253f4e170 40558 { { 0xf3b7963f4c830320l,0x842c7aa0903203e3l,0xaf22ca0ae7327afbl,
wolfSSL 14:167253f4e170 40559 0x38e13092967609b6l },
wolfSSL 14:167253f4e170 40560 { 0x73b8fb62757558f1l,0x3cc3e831f7eca8c1l,0xe4174474f6331627l,
wolfSSL 14:167253f4e170 40561 0xa77989cac3c40234l },
wolfSSL 14:167253f4e170 40562 0 },
wolfSSL 14:167253f4e170 40563 /* 3 << 184 */
wolfSSL 14:167253f4e170 40564 { { 0xb32cb8b0b796d219l,0xc3e95f4f34741dd9l,0x8721212568edf6f5l,
wolfSSL 14:167253f4e170 40565 0x7a03aee4a2b9cb8el },
wolfSSL 14:167253f4e170 40566 { 0x0cd3c376f53a89aal,0x0d8af9b1948a28dcl,0xcf86a3f4902ab04fl,
wolfSSL 14:167253f4e170 40567 0x8aacb62a7f42002dl },
wolfSSL 14:167253f4e170 40568 0 },
wolfSSL 14:167253f4e170 40569 /* 4 << 184 */
wolfSSL 14:167253f4e170 40570 { { 0xfd8e139f8f5fcda8l,0xf3e558c4bdee5bfdl,0xd76cbaf4e33f9f77l,
wolfSSL 14:167253f4e170 40571 0x3a4c97a471771969l },
wolfSSL 14:167253f4e170 40572 { 0xda27e84bf6dce6a7l,0xff373d9613e6c2d1l,0xf115193cd759a6e9l,
wolfSSL 14:167253f4e170 40573 0x3f9b702563d2262cl },
wolfSSL 14:167253f4e170 40574 0 },
wolfSSL 14:167253f4e170 40575 /* 5 << 184 */
wolfSSL 14:167253f4e170 40576 { { 0x9cb0ae6c252bd479l,0x05e0f88a12b5848fl,0x78f6d2b2a5c97663l,
wolfSSL 14:167253f4e170 40577 0x6f6e149bc162225cl },
wolfSSL 14:167253f4e170 40578 { 0xe602235cde601a89l,0xd17bbe98f373be1fl,0xcaf49a5ba8471827l,
wolfSSL 14:167253f4e170 40579 0x7e1a0a8518aaa116l },
wolfSSL 14:167253f4e170 40580 0 },
wolfSSL 14:167253f4e170 40581 /* 7 << 184 */
wolfSSL 14:167253f4e170 40582 { { 0x8b1e572235e6fc06l,0x3477728f0b3e13d5l,0x150c294daa8a7372l,
wolfSSL 14:167253f4e170 40583 0xc0291d433bfa528al },
wolfSSL 14:167253f4e170 40584 { 0xc6c8bc67cec5a196l,0xdeeb31e45c2e8a7cl,0xba93e244fb6e1c51l,
wolfSSL 14:167253f4e170 40585 0xb9f8b71b2e28e156l },
wolfSSL 14:167253f4e170 40586 0 },
wolfSSL 14:167253f4e170 40587 /* 9 << 184 */
wolfSSL 14:167253f4e170 40588 { { 0x343ac0a3ee9523f0l,0xbb75eab2975ea978l,0x1bccf332107387f4l,
wolfSSL 14:167253f4e170 40589 0x790f92599ab0062el },
wolfSSL 14:167253f4e170 40590 { 0xf1a363ad1e4f6a5fl,0x06e08b8462519a50l,0x609151877265f1eel,
wolfSSL 14:167253f4e170 40591 0x6a80ca3493ae985el },
wolfSSL 14:167253f4e170 40592 0 },
wolfSSL 14:167253f4e170 40593 /* 10 << 184 */
wolfSSL 14:167253f4e170 40594 { { 0xa3f4f521e447f2c4l,0x81b8da7a604291f0l,0xd680bc467d5926del,
wolfSSL 14:167253f4e170 40595 0x84f21fd534a1202fl },
wolfSSL 14:167253f4e170 40596 { 0x1d1e31814e9df3d8l,0x1ca4861a39ab8d34l,0x809ddeec5b19aa4al,
wolfSSL 14:167253f4e170 40597 0x59f72f7e4d329366l },
wolfSSL 14:167253f4e170 40598 0 },
wolfSSL 14:167253f4e170 40599 /* 11 << 184 */
wolfSSL 14:167253f4e170 40600 { { 0x2dfb9e08be0f4492l,0x3ff0da03e9d5e517l,0x03dbe9a1f79466a8l,
wolfSSL 14:167253f4e170 40601 0x0b87bcd015ea9932l },
wolfSSL 14:167253f4e170 40602 { 0xeb64fc83ab1f58abl,0x6d9598da817edc8al,0x699cff661d3b67e5l,
wolfSSL 14:167253f4e170 40603 0x645c0f2992635853l },
wolfSSL 14:167253f4e170 40604 0 },
wolfSSL 14:167253f4e170 40605 /* 13 << 184 */
wolfSSL 14:167253f4e170 40606 { { 0xd50e57c7d7fe71f3l,0x15342190bc97ce38l,0x51bda2de4df07b63l,
wolfSSL 14:167253f4e170 40607 0xba12aeae200eb87dl },
wolfSSL 14:167253f4e170 40608 { 0xabe135d2a9b4f8f6l,0x04619d65fad6d99cl,0x4a6683a77994937cl,
wolfSSL 14:167253f4e170 40609 0x7a778c8b6f94f09al },
wolfSSL 14:167253f4e170 40610 0 },
wolfSSL 14:167253f4e170 40611 /* 15 << 184 */
wolfSSL 14:167253f4e170 40612 { { 0x8dd1fb83425c6559l,0x7fc00ee60af06fdal,0xe98c922533d956dfl,
wolfSSL 14:167253f4e170 40613 0x0f1ef3354fbdc8a2l },
wolfSSL 14:167253f4e170 40614 { 0x2abb5145b79b8ea2l,0x40fd2945bdbff288l,0x6a814ac4d7185db7l,
wolfSSL 14:167253f4e170 40615 0xc4329d6fc084609al },
wolfSSL 14:167253f4e170 40616 0 },
wolfSSL 14:167253f4e170 40617 /* 16 << 184 */
wolfSSL 14:167253f4e170 40618 { { 0x511053e453544774l,0x834d0ecc3adba2bcl,0x4215d7f7bae371f5l,
wolfSSL 14:167253f4e170 40619 0xfcfd57bf6c8663bcl },
wolfSSL 14:167253f4e170 40620 { 0xded2383dd6901b1dl,0x3b49fbb4b5587dc3l,0xfd44a08d07625f62l,
wolfSSL 14:167253f4e170 40621 0x3ee4d65b9de9b762l },
wolfSSL 14:167253f4e170 40622 0 },
wolfSSL 14:167253f4e170 40623 /* 17 << 184 */
wolfSSL 14:167253f4e170 40624 { { 0x55ef9d3dcc26e8b0l,0xf869c827729b707al,0xdbbf450d8c47e00cl,
wolfSSL 14:167253f4e170 40625 0x73d546ea60972ed7l },
wolfSSL 14:167253f4e170 40626 { 0x9563e11f0dcd6821l,0xe48e1af57d80de7fl,0xbe7139b49057838dl,
wolfSSL 14:167253f4e170 40627 0xf3f0ad4d7e5ca535l },
wolfSSL 14:167253f4e170 40628 0 },
wolfSSL 14:167253f4e170 40629 /* 19 << 184 */
wolfSSL 14:167253f4e170 40630 { { 0xac66d1d49f8f8cc2l,0x43fe5c154ef18941l,0xbae77b6ddc30fcbfl,
wolfSSL 14:167253f4e170 40631 0xdb95ea7d945723b7l },
wolfSSL 14:167253f4e170 40632 { 0x43298e2bda8097e2l,0x8004167baf22ea9bl,0x9cf5974196a83d57l,
wolfSSL 14:167253f4e170 40633 0xb35c9aba3cf67d5el },
wolfSSL 14:167253f4e170 40634 0 },
wolfSSL 14:167253f4e170 40635 /* 21 << 184 */
wolfSSL 14:167253f4e170 40636 { { 0x0569a48df766f793l,0x6b4c7b16706b3442l,0xcc97754416ff41e0l,
wolfSSL 14:167253f4e170 40637 0x800c56e31fee2e86l },
wolfSSL 14:167253f4e170 40638 { 0xce0c3d0fcdf93450l,0x6ec3703582f35916l,0x902520d5bbc11e68l,
wolfSSL 14:167253f4e170 40639 0x7e2b988505078223l },
wolfSSL 14:167253f4e170 40640 0 },
wolfSSL 14:167253f4e170 40641 /* 23 << 184 */
wolfSSL 14:167253f4e170 40642 { { 0xb30d1769101da00bl,0xb26872d5113cfdb6l,0x7b0491da44e48db5l,
wolfSSL 14:167253f4e170 40643 0x810e73bb2013f8c9l },
wolfSSL 14:167253f4e170 40644 { 0xc86e579a570f0b59l,0xf34107e37a918f34l,0x49286d00277473f1l,
wolfSSL 14:167253f4e170 40645 0x74423f5abc85905dl },
wolfSSL 14:167253f4e170 40646 0 },
wolfSSL 14:167253f4e170 40647 /* 25 << 184 */
wolfSSL 14:167253f4e170 40648 { { 0x90d7417879de6b48l,0xe762caf0d14fa75bl,0xa309dcf3bd91ec5dl,
wolfSSL 14:167253f4e170 40649 0x7aafe1ddf526d04fl },
wolfSSL 14:167253f4e170 40650 { 0x76911342d39e36ffl,0xe28994d2fabb34b8l,0xac23a92c863110cbl,
wolfSSL 14:167253f4e170 40651 0x9f0f69673aabd166l },
wolfSSL 14:167253f4e170 40652 0 },
wolfSSL 14:167253f4e170 40653 /* 27 << 184 */
wolfSSL 14:167253f4e170 40654 { { 0x7436bdf47e333f98l,0x879cf31f2455af64l,0x07933a9cf6cfde92l,
wolfSSL 14:167253f4e170 40655 0xfcac38a5b6e3203fl },
wolfSSL 14:167253f4e170 40656 { 0xa39b6a8098e5a6e0l,0x1d600b5da4837528l,0x54718de7c32d412bl,
wolfSSL 14:167253f4e170 40657 0x02870f46317937ccl },
wolfSSL 14:167253f4e170 40658 0 },
wolfSSL 14:167253f4e170 40659 /* 28 << 184 */
wolfSSL 14:167253f4e170 40660 { { 0x1f13756db1761ec8l,0xe53c8b98a4b97e55l,0xb2aee3f84096cc28l,
wolfSSL 14:167253f4e170 40661 0x48c361a0920f1a8dl },
wolfSSL 14:167253f4e170 40662 { 0xa98b672d8c31190al,0x7bc1e7d1001855d4l,0x242cfb07bf3f4b2al,
wolfSSL 14:167253f4e170 40663 0x9bf44a3f32a28bc4l },
wolfSSL 14:167253f4e170 40664 0 },
wolfSSL 14:167253f4e170 40665 /* 29 << 184 */
wolfSSL 14:167253f4e170 40666 { { 0x96d4b271e36eeccdl,0x2d8c01b859237e23l,0x24f7a6eb8adf2653l,
wolfSSL 14:167253f4e170 40667 0xc08ac4ab41183d80l },
wolfSSL 14:167253f4e170 40668 { 0xc35e5bb7036367c3l,0xd8c97cbc0ba59f61l,0x296b1f4c5aafe986l,
wolfSSL 14:167253f4e170 40669 0xa519c7a17d179c37l },
wolfSSL 14:167253f4e170 40670 0 },
wolfSSL 14:167253f4e170 40671 /* 31 << 184 */
wolfSSL 14:167253f4e170 40672 { { 0x4043490790ae5f49l,0x8ac8f73649556b81l,0xb57a89b0f4e77a16l,
wolfSSL 14:167253f4e170 40673 0xe1a1565d071020eal },
wolfSSL 14:167253f4e170 40674 { 0x4a27f34d3dda8450l,0x65af18b9bc395814l,0xaf21939f9ff49991l,
wolfSSL 14:167253f4e170 40675 0x47e00639b4af7691l },
wolfSSL 14:167253f4e170 40676 0 },
wolfSSL 14:167253f4e170 40677 /* 33 << 184 */
wolfSSL 14:167253f4e170 40678 { { 0x4b3e263246b1f9b2l,0x6457d838efde99d3l,0x77d5142325e56171l,
wolfSSL 14:167253f4e170 40679 0xb45de3df7d54996cl },
wolfSSL 14:167253f4e170 40680 { 0x1ee2dd3194098d98l,0x986896141f3ebdc5l,0x2704a107997efb47l,
wolfSSL 14:167253f4e170 40681 0x96b502eecb11e520l },
wolfSSL 14:167253f4e170 40682 0 },
wolfSSL 14:167253f4e170 40683 /* 34 << 184 */
wolfSSL 14:167253f4e170 40684 { { 0x58c8039ec19f866el,0xc84c053e386c2644l,0xb3708ab049435704l,
wolfSSL 14:167253f4e170 40685 0x1b70c3c86fc47b24l },
wolfSSL 14:167253f4e170 40686 { 0x235582a27f095649l,0x0d344b66673c9a9el,0x777c9e71e2b00efdl,
wolfSSL 14:167253f4e170 40687 0x91691d6e5b877856l },
wolfSSL 14:167253f4e170 40688 0 },
wolfSSL 14:167253f4e170 40689 /* 35 << 184 */
wolfSSL 14:167253f4e170 40690 { { 0x11c663c49cd31e22l,0x46ae0bd95fb943d7l,0x6e36bca6a392fc01l,
wolfSSL 14:167253f4e170 40691 0x4f8cc3a77948716fl },
wolfSSL 14:167253f4e170 40692 { 0x10ae9d6b3aa4bbb0l,0xcc9b6cb5d8001a86l,0x012c8e3aa0a4ceedl,
wolfSSL 14:167253f4e170 40693 0xe462971e52274942l },
wolfSSL 14:167253f4e170 40694 0 },
wolfSSL 14:167253f4e170 40695 /* 36 << 184 */
wolfSSL 14:167253f4e170 40696 { { 0x9982e2ac42e176a5l,0x324eba46e2782b64l,0x3d8caaafe18350f5l,
wolfSSL 14:167253f4e170 40697 0xf3d82af2f5d674cal },
wolfSSL 14:167253f4e170 40698 { 0xc2090fed56600d1el,0x4548e0ef5950de07l,0xb2f0023f765a4febl,
wolfSSL 14:167253f4e170 40699 0xb303103339f16790l },
wolfSSL 14:167253f4e170 40700 0 },
wolfSSL 14:167253f4e170 40701 /* 37 << 184 */
wolfSSL 14:167253f4e170 40702 { { 0xb94095dc7bdacf7al,0x0e73db39509b310al,0x76e99a6b41b5f772l,
wolfSSL 14:167253f4e170 40703 0xef40e9c596f3dbd7l },
wolfSSL 14:167253f4e170 40704 { 0xd0d644f980f2179el,0xe0db831d5a89807el,0xa0188493c2a2d6c6l,
wolfSSL 14:167253f4e170 40705 0xf2d9a85e5ba9faa9l },
wolfSSL 14:167253f4e170 40706 0 },
wolfSSL 14:167253f4e170 40707 /* 39 << 184 */
wolfSSL 14:167253f4e170 40708 { { 0x598b7876cdd95b93l,0x5f7cc827336966e8l,0x01887109e797f102l,
wolfSSL 14:167253f4e170 40709 0x665671c446c7c296l },
wolfSSL 14:167253f4e170 40710 { 0xb314793c6e019c72l,0x5a6c81580e0329acl,0x4faf2f1b44281b98l,
wolfSSL 14:167253f4e170 40711 0x825884072e1fc97el },
wolfSSL 14:167253f4e170 40712 0 },
wolfSSL 14:167253f4e170 40713 /* 40 << 184 */
wolfSSL 14:167253f4e170 40714 { { 0xa692781d61a3c8b3l,0x08bc385432876d0el,0xbecf05fb28027b03l,
wolfSSL 14:167253f4e170 40715 0x636c687da4b1e12fl },
wolfSSL 14:167253f4e170 40716 { 0x00e3003d07217c58l,0x613ba9375e01b2a3l,0xa58c8405881de16el,
wolfSSL 14:167253f4e170 40717 0xc653c43014f8f48bl },
wolfSSL 14:167253f4e170 40718 0 },
wolfSSL 14:167253f4e170 40719 /* 41 << 184 */
wolfSSL 14:167253f4e170 40720 { { 0x68e53c7c89c0c7c2l,0xf2e680b23c423272l,0xacd47fae60f50133l,
wolfSSL 14:167253f4e170 40721 0x4c484c6534f05605l },
wolfSSL 14:167253f4e170 40722 { 0x663bdcf9ebffbb7dl,0xb49cff3be42421c6l,0x0549f7b13f53f261l,
wolfSSL 14:167253f4e170 40723 0xc516aeda7c374766l },
wolfSSL 14:167253f4e170 40724 0 },
wolfSSL 14:167253f4e170 40725 /* 43 << 184 */
wolfSSL 14:167253f4e170 40726 { { 0xa515fe0f76a0ec26l,0xf727c0797b0b8b21l,0xaeed4c671993651el,
wolfSSL 14:167253f4e170 40727 0x1465a7f828ac7c87l },
wolfSSL 14:167253f4e170 40728 { 0x776bd5131f0ef90bl,0x57515d2cd9773e61l,0x235455e95564c50bl,
wolfSSL 14:167253f4e170 40729 0xf44daef80bf06a24l },
wolfSSL 14:167253f4e170 40730 0 },
wolfSSL 14:167253f4e170 40731 /* 44 << 184 */
wolfSSL 14:167253f4e170 40732 { { 0xbc1c6897d6a0d0f9l,0xd8e0ea0e3b0d7f55l,0xb35baa92b85b7aadl,
wolfSSL 14:167253f4e170 40733 0x2becd1b7674e48f4l },
wolfSSL 14:167253f4e170 40734 { 0xe2d7f78d6d7a9ac2l,0xf5074262f99c95d0l,0x4852470a89f611e9l,
wolfSSL 14:167253f4e170 40735 0xf7aa911992869decl },
wolfSSL 14:167253f4e170 40736 0 },
wolfSSL 14:167253f4e170 40737 /* 45 << 184 */
wolfSSL 14:167253f4e170 40738 { { 0x0bd1755b0ac4840fl,0x0f4c6c2aa22eef10l,0x3f72fe2d78d16dd9l,
wolfSSL 14:167253f4e170 40739 0xb2d49200ff7096a4l },
wolfSSL 14:167253f4e170 40740 { 0xa5dead555ffca031l,0x1d013c320b65f4cfl,0x67e498582a23f441l,
wolfSSL 14:167253f4e170 40741 0x55bae166d02412c0l },
wolfSSL 14:167253f4e170 40742 0 },
wolfSSL 14:167253f4e170 40743 /* 46 << 184 */
wolfSSL 14:167253f4e170 40744 { { 0x546dd4545739a62al,0x353dc1422a30b836l,0x1462449d99cbd704l,
wolfSSL 14:167253f4e170 40745 0xda02d0772da69411l },
wolfSSL 14:167253f4e170 40746 { 0xcb115fe565b1a1adl,0x395235f501230a22l,0x8ae630eed164d970l,
wolfSSL 14:167253f4e170 40747 0x60b679f0074e3a7el },
wolfSSL 14:167253f4e170 40748 0 },
wolfSSL 14:167253f4e170 40749 /* 47 << 184 */
wolfSSL 14:167253f4e170 40750 { { 0x2e64695245d231e1l,0xc96663ac00d8a0fbl,0xc1fbaa0cd07e1f41l,
wolfSSL 14:167253f4e170 40751 0x4b31484488758781l },
wolfSSL 14:167253f4e170 40752 { 0xd6971a835183e72el,0xd1d01f174cbe99b7l,0xe90b438c5a2f7512l,
wolfSSL 14:167253f4e170 40753 0xf858fa452957c620l },
wolfSSL 14:167253f4e170 40754 0 },
wolfSSL 14:167253f4e170 40755 /* 48 << 184 */
wolfSSL 14:167253f4e170 40756 { { 0xed7f2e774e6daae2l,0x7b3ae0e39e0a19bcl,0xd3293f8a91ae677el,
wolfSSL 14:167253f4e170 40757 0xd363b0cb45c8611fl },
wolfSSL 14:167253f4e170 40758 { 0xbe1d1ccf309ae93bl,0xa3f80be73920cae1l,0xaaacba74498edf01l,
wolfSSL 14:167253f4e170 40759 0x1e6d2a4ab2f5ac90l },
wolfSSL 14:167253f4e170 40760 0 },
wolfSSL 14:167253f4e170 40761 /* 49 << 184 */
wolfSSL 14:167253f4e170 40762 { { 0xb5c5bb67b972a778l,0xc2423a4a190f9b5al,0x4e693cf365247948l,
wolfSSL 14:167253f4e170 40763 0xc37d129ea94a65a3l },
wolfSSL 14:167253f4e170 40764 { 0xbea4736b6e9cd47bl,0xf3d1bd212338f524l,0xa2a0278e067a45dal,
wolfSSL 14:167253f4e170 40765 0xc86d631b5b5dce9bl },
wolfSSL 14:167253f4e170 40766 0 },
wolfSSL 14:167253f4e170 40767 /* 51 << 184 */
wolfSSL 14:167253f4e170 40768 { { 0xc2d75f46116952cel,0xd2b66269b75e40dal,0x024f670f921c4111l,
wolfSSL 14:167253f4e170 40769 0x37ffd854c91fd490l },
wolfSSL 14:167253f4e170 40770 { 0x6be44d0385b2f613l,0x040cd7d9ba11c4f9l,0x04c1cb762c0efb1fl,
wolfSSL 14:167253f4e170 40771 0xd905ff4f505e4698l },
wolfSSL 14:167253f4e170 40772 0 },
wolfSSL 14:167253f4e170 40773 /* 52 << 184 */
wolfSSL 14:167253f4e170 40774 { { 0x60c5f03f233550f1l,0xd4d09411925afd2el,0xa95b65c3d258e5a6l,
wolfSSL 14:167253f4e170 40775 0x1a19cfb59f902c6al },
wolfSSL 14:167253f4e170 40776 { 0xb486013af5ad5c68l,0xa2506776979638f3l,0x1232b4d0a38e0b28l,
wolfSSL 14:167253f4e170 40777 0xa64784b8d36a7b4fl },
wolfSSL 14:167253f4e170 40778 0 },
wolfSSL 14:167253f4e170 40779 /* 53 << 184 */
wolfSSL 14:167253f4e170 40780 { { 0x22c75830a13dcb47l,0xd6e81258efd7a08fl,0x6db703b6e4fc49b8l,
wolfSSL 14:167253f4e170 40781 0x8a5ac636f01817e9l },
wolfSSL 14:167253f4e170 40782 { 0x8d27b6e1b3f24514l,0x40edc3bc708c51d7l,0x9a1eec7765bb086dl,
wolfSSL 14:167253f4e170 40783 0x812ccb42b10800f8l },
wolfSSL 14:167253f4e170 40784 0 },
wolfSSL 14:167253f4e170 40785 /* 55 << 184 */
wolfSSL 14:167253f4e170 40786 { { 0x1a39c6acd4338453l,0x3d93822954b1295dl,0x7bf0bf45e0d81165l,
wolfSSL 14:167253f4e170 40787 0x83d58ca5972804d2l },
wolfSSL 14:167253f4e170 40788 { 0x105d3ddb00524b94l,0x65d516e7920378ecl,0x1d28f5f1aea33926l,
wolfSSL 14:167253f4e170 40789 0xa0b354313901c906l },
wolfSSL 14:167253f4e170 40790 0 },
wolfSSL 14:167253f4e170 40791 /* 57 << 184 */
wolfSSL 14:167253f4e170 40792 { { 0x000442a1e4f354del,0x165b44d9d1d112f5l,0x67fd9ced0d05c0a9l,
wolfSSL 14:167253f4e170 40793 0xd6ce074360bd5d60l },
wolfSSL 14:167253f4e170 40794 { 0x9ac80c931522af2al,0x8232d522fa07d449l,0x287b5534c3fdb652l,
wolfSSL 14:167253f4e170 40795 0x9f0548b3abd2ab98l },
wolfSSL 14:167253f4e170 40796 0 },
wolfSSL 14:167253f4e170 40797 /* 59 << 184 */
wolfSSL 14:167253f4e170 40798 { { 0xde8d7086b9aea1d4l,0x692180d98a7dc3fcl,0xd64ffb53bad3e6f3l,
wolfSSL 14:167253f4e170 40799 0x84628acf36ce3f91l },
wolfSSL 14:167253f4e170 40800 { 0xf76e470b6d498ac5l,0xa16945547abad602l,0x5b8fd6a5a255c1f6l,
wolfSSL 14:167253f4e170 40801 0xffe24e4a8576ae2al },
wolfSSL 14:167253f4e170 40802 0 },
wolfSSL 14:167253f4e170 40803 /* 60 << 184 */
wolfSSL 14:167253f4e170 40804 { { 0x5655179de7d70e03l,0x3e780c5c72a84570l,0xc102b4cb1d50029cl,
wolfSSL 14:167253f4e170 40805 0x3e71bdd5f075e839l },
wolfSSL 14:167253f4e170 40806 { 0x6460f4f0b498b822l,0x2682e06c6d4b8da5l,0x4eae53c996a740d4l,
wolfSSL 14:167253f4e170 40807 0xc19d8bef6389702cl },
wolfSSL 14:167253f4e170 40808 0 },
wolfSSL 14:167253f4e170 40809 /* 61 << 184 */
wolfSSL 14:167253f4e170 40810 { { 0x711be2081025fe1dl,0x2e562c89f0bc6a99l,0xcfd2be3a28bf4150l,
wolfSSL 14:167253f4e170 40811 0x33037b4a38e5bc91l },
wolfSSL 14:167253f4e170 40812 { 0x10c6da9df52fea02l,0x511f62444f0ea410l,0x19d37ca81a294c3fl,
wolfSSL 14:167253f4e170 40813 0x7e40f444618e6fd3l },
wolfSSL 14:167253f4e170 40814 0 },
wolfSSL 14:167253f4e170 40815 /* 63 << 184 */
wolfSSL 14:167253f4e170 40816 { { 0x4095f5ddbedb8734l,0x9c16027c4432f51al,0xced8179d873d0f11l,
wolfSSL 14:167253f4e170 40817 0x70c2bc9f6ebe6e61l },
wolfSSL 14:167253f4e170 40818 { 0x5c31035d616cf2f4l,0xf92e0fbd00a4af3dl,0xe6048a03511893c4l,
wolfSSL 14:167253f4e170 40819 0x639a804b52e2f462l },
wolfSSL 14:167253f4e170 40820 0 },
wolfSSL 14:167253f4e170 40821 /* 64 << 184 */
wolfSSL 14:167253f4e170 40822 { { 0x8735728dc2c6ff70l,0x79d6122fc5dc2235l,0x23f5d00319e277f9l,
wolfSSL 14:167253f4e170 40823 0x7ee84e25dded8cc7l },
wolfSSL 14:167253f4e170 40824 { 0x91a8afb063cd880al,0x3f3ea7c63574af60l,0x0cfcdc8402de7f42l,
wolfSSL 14:167253f4e170 40825 0x62d0792fb31aa152l },
wolfSSL 14:167253f4e170 40826 0 },
wolfSSL 14:167253f4e170 40827 /* 65 << 184 */
wolfSSL 14:167253f4e170 40828 { { 0x0f4bcefd9da373e4l,0x7278f44d119271a3l,0xb2dff94449e111c0l,
wolfSSL 14:167253f4e170 40829 0xb0a3abf8e5d2b2d4l },
wolfSSL 14:167253f4e170 40830 { 0x01baabb48ea80631l,0x27517ed3da305f85l,0x0a1ca6fc3f56aa86l,
wolfSSL 14:167253f4e170 40831 0x183d9c7694c22839l },
wolfSSL 14:167253f4e170 40832 0 },
wolfSSL 14:167253f4e170 40833 /* 71 << 184 */
wolfSSL 14:167253f4e170 40834 { { 0xe9a0dfbf22e238d7l,0x8690dfd97e8d8d31l,0xb3cb2a0d4006c59cl,
wolfSSL 14:167253f4e170 40835 0xe4d297caa1850d74l },
wolfSSL 14:167253f4e170 40836 { 0x066f10517842d14cl,0x68dd32737d43602bl,0x1f9f5cf931345f39l,
wolfSSL 14:167253f4e170 40837 0x44f18c2b10593890l },
wolfSSL 14:167253f4e170 40838 0 },
wolfSSL 14:167253f4e170 40839 /* 77 << 184 */
wolfSSL 14:167253f4e170 40840 { { 0x8d8c0233a7c3f60bl,0xfb59fe2d2bcbbd4cl,0xfa311680dc3e5b44l,
wolfSSL 14:167253f4e170 40841 0xb3cba9f3fbea5eedl },
wolfSSL 14:167253f4e170 40842 { 0xcb353b2f61e0e690l,0x06edf0c1b6e0efe0l,0xa29578cb1d0c02a2l,
wolfSSL 14:167253f4e170 40843 0xaeb2d677937fec07l },
wolfSSL 14:167253f4e170 40844 0 },
wolfSSL 14:167253f4e170 40845 /* 83 << 184 */
wolfSSL 14:167253f4e170 40846 { { 0xa19a81c5cdd0cac9l,0x5c10b942ec9cf85bl,0x0843ef4639e8c298l,
wolfSSL 14:167253f4e170 40847 0xcfd45d0e6c043258l },
wolfSSL 14:167253f4e170 40848 { 0x1011bcb9fb7e4b58l,0xae6362a544402bbdl,0x9ecc8c68ec15d751l,
wolfSSL 14:167253f4e170 40849 0xbc05998869d1a00bl },
wolfSSL 14:167253f4e170 40850 0 },
wolfSSL 14:167253f4e170 40851 /* 89 << 184 */
wolfSSL 14:167253f4e170 40852 { { 0xe9a43619460147e3l,0x881a6af423067448l,0x94f93ae6cee17a6bl,
wolfSSL 14:167253f4e170 40853 0x469e692f10782558l },
wolfSSL 14:167253f4e170 40854 { 0x01e244a1289bdb32l,0x240645779dddf970l,0x664cbd92d8f521ecl,
wolfSSL 14:167253f4e170 40855 0xadaf8ffb600222d0l },
wolfSSL 14:167253f4e170 40856 0 },
wolfSSL 14:167253f4e170 40857 /* 95 << 184 */
wolfSSL 14:167253f4e170 40858 { { 0x68314c740dbec437l,0x2095e1295ec75e2cl,0x8e88a3ddf0e6c606l,
wolfSSL 14:167253f4e170 40859 0x40ac647d1230f6b2l },
wolfSSL 14:167253f4e170 40860 { 0x09d124aaa2e6b991l,0xa22f9e2bcc81037cl,0xc842b64d15c3a1c2l,
wolfSSL 14:167253f4e170 40861 0x4d822becce808c65l },
wolfSSL 14:167253f4e170 40862 0 },
wolfSSL 14:167253f4e170 40863 /* 101 << 184 */
wolfSSL 14:167253f4e170 40864 { { 0xb02204d06ffb396bl,0x82eb6ecc881bead6l,0xf58432cebd6896c8l,
wolfSSL 14:167253f4e170 40865 0xc243468da38f4b9dl },
wolfSSL 14:167253f4e170 40866 { 0x8486402df8e628bdl,0x5dd338a1a4df2401l,0x748a41ab0daac953l,
wolfSSL 14:167253f4e170 40867 0xaa121d13e51e6235l },
wolfSSL 14:167253f4e170 40868 0 },
wolfSSL 14:167253f4e170 40869 /* 107 << 184 */
wolfSSL 14:167253f4e170 40870 { { 0x6daa0a4e50abc6aal,0x99fcc5bdeafb7cf2l,0xc705f64c4b8dbd2al,
wolfSSL 14:167253f4e170 40871 0x7deff836e7b51e90l },
wolfSSL 14:167253f4e170 40872 { 0xd92f42b859a8180fl,0x3bb298f8618d24acl,0x2433aa7357a56438l,
wolfSSL 14:167253f4e170 40873 0xcf29895b48a6a238l },
wolfSSL 14:167253f4e170 40874 0 },
wolfSSL 14:167253f4e170 40875 /* 113 << 184 */
wolfSSL 14:167253f4e170 40876 { { 0x74079dc59ed25aafl,0x7988245c023d5143l,0x7edfc6a6feb79c24l,
wolfSSL 14:167253f4e170 40877 0x7ed03c50a6baa70fl },
wolfSSL 14:167253f4e170 40878 { 0x71d3413596a753b4l,0x59efbafcef976246l,0xed050260a4a6947fl,
wolfSSL 14:167253f4e170 40879 0xabbc1f8066254247l },
wolfSSL 14:167253f4e170 40880 0 },
wolfSSL 14:167253f4e170 40881 /* 116 << 184 */
wolfSSL 14:167253f4e170 40882 { { 0x1f804e00caa4646fl,0x8643dc8870944924l,0xa37f1ca273f86de9l,
wolfSSL 14:167253f4e170 40883 0xa3199f9228889898l },
wolfSSL 14:167253f4e170 40884 { 0xc273ba580c1e4adfl,0x0f0d38af65bc82f0l,0xd8b28ab5f8a6cd3bl,
wolfSSL 14:167253f4e170 40885 0xeea6e08575894d8el },
wolfSSL 14:167253f4e170 40886 0 },
wolfSSL 14:167253f4e170 40887 /* 119 << 184 */
wolfSSL 14:167253f4e170 40888 { { 0x398f39132c1620f7l,0x9046d2dea921f3a3l,0x40a25a2785b50bb0l,
wolfSSL 14:167253f4e170 40889 0xb9adeca0d32e95f3l },
wolfSSL 14:167253f4e170 40890 { 0xa4199b1bdede5cbfl,0x9068aee084f5410bl,0x6665e4f5730f0397l,
wolfSSL 14:167253f4e170 40891 0x2e9ba18c8ae20659l },
wolfSSL 14:167253f4e170 40892 0 },
wolfSSL 14:167253f4e170 40893 /* 125 << 184 */
wolfSSL 14:167253f4e170 40894 { { 0xd76e9b2351835897l,0x72a0e000012deda6l,0x5bf08922bfec23e4l,
wolfSSL 14:167253f4e170 40895 0x8c2fcf1385cf2b7bl },
wolfSSL 14:167253f4e170 40896 { 0x6c42f935c63332c6l,0x8736c58395eccce9l,0x2d2abbb10721afc8l,
wolfSSL 14:167253f4e170 40897 0x1f7a76cc42d4e029l },
wolfSSL 14:167253f4e170 40898 0 },
wolfSSL 14:167253f4e170 40899 },
wolfSSL 14:167253f4e170 40900 {
wolfSSL 14:167253f4e170 40901 /* 0 << 192 */
wolfSSL 14:167253f4e170 40902 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 40903 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 40904 1 },
wolfSSL 14:167253f4e170 40905 /* 1 << 192 */
wolfSSL 14:167253f4e170 40906 { { 0x56f8410ef4f8b16al,0x97241afec47b266al,0x0a406b8e6d9c87c1l,
wolfSSL 14:167253f4e170 40907 0x803f3e02cd42ab1bl },
wolfSSL 14:167253f4e170 40908 { 0x7f0309a804dbec69l,0xa83b85f73bbad05fl,0xc6097273ad8e197fl,
wolfSSL 14:167253f4e170 40909 0xc097440e5067adc1l },
wolfSSL 14:167253f4e170 40910 0 },
wolfSSL 14:167253f4e170 40911 /* 3 << 192 */
wolfSSL 14:167253f4e170 40912 { { 0x266344a43794f8dcl,0xdcca923a483c5c36l,0x2d6b6bbf3f9d10a0l,
wolfSSL 14:167253f4e170 40913 0xb320c5ca81d9bdf3l },
wolfSSL 14:167253f4e170 40914 { 0x620e28ff47b50a95l,0x933e3b01cef03371l,0xf081bf8599100153l,
wolfSSL 14:167253f4e170 40915 0x183be9a0c3a8c8d6l },
wolfSSL 14:167253f4e170 40916 0 },
wolfSSL 14:167253f4e170 40917 /* 4 << 192 */
wolfSSL 14:167253f4e170 40918 { { 0xb6c185c341dca566l,0x7de7fedad8622aa3l,0x99e84d92901b6dfbl,
wolfSSL 14:167253f4e170 40919 0x30a02b0e7c4ad288l },
wolfSSL 14:167253f4e170 40920 { 0xc7c81daa2fd3cf36l,0xd1319547df89e59fl,0xb2be8184cd496733l,
wolfSSL 14:167253f4e170 40921 0xd5f449eb93d3412bl },
wolfSSL 14:167253f4e170 40922 0 },
wolfSSL 14:167253f4e170 40923 /* 5 << 192 */
wolfSSL 14:167253f4e170 40924 { { 0x25470fabe085116bl,0x04a4337587285310l,0x4e39187ee2bfd52fl,
wolfSSL 14:167253f4e170 40925 0x36166b447d9ebc74l },
wolfSSL 14:167253f4e170 40926 { 0x92ad433cfd4b322cl,0x726aa817ba79ab51l,0xf96eacd8c1db15ebl,
wolfSSL 14:167253f4e170 40927 0xfaf71e910476be63l },
wolfSSL 14:167253f4e170 40928 0 },
wolfSSL 14:167253f4e170 40929 /* 7 << 192 */
wolfSSL 14:167253f4e170 40930 { { 0x72cfd2e949dee168l,0x1ae052233e2af239l,0x009e75be1d94066al,
wolfSSL 14:167253f4e170 40931 0x6cca31c738abf413l },
wolfSSL 14:167253f4e170 40932 { 0xb50bd61d9bc49908l,0x4a9b4a8cf5e2bc1el,0xeb6cc5f7946f83acl,
wolfSSL 14:167253f4e170 40933 0x27da93fcebffab28l },
wolfSSL 14:167253f4e170 40934 0 },
wolfSSL 14:167253f4e170 40935 /* 9 << 192 */
wolfSSL 14:167253f4e170 40936 { { 0x3ce519ef76257c51l,0x6f5818d318d477e7l,0xab022e037963edc0l,
wolfSSL 14:167253f4e170 40937 0xf0403a898bd1f5f3l },
wolfSSL 14:167253f4e170 40938 { 0xe43b8da0496033cal,0x0994e10ea1cfdd72l,0xb1ec6d20ba73c0e2l,
wolfSSL 14:167253f4e170 40939 0x0329c9ecb6bcfad1l },
wolfSSL 14:167253f4e170 40940 0 },
wolfSSL 14:167253f4e170 40941 /* 10 << 192 */
wolfSSL 14:167253f4e170 40942 { { 0xf1ff42a12c84bd9dl,0x751f3ec4390c674al,0x27bb36f701e5e0cal,
wolfSSL 14:167253f4e170 40943 0x65dfff515caf6692l },
wolfSSL 14:167253f4e170 40944 { 0x5df579c4cd7bbd3fl,0xef8fb29785591205l,0x1ded7203e47ac732l,
wolfSSL 14:167253f4e170 40945 0xa93dc45ccd1c331al },
wolfSSL 14:167253f4e170 40946 0 },
wolfSSL 14:167253f4e170 40947 /* 11 << 192 */
wolfSSL 14:167253f4e170 40948 { { 0xbdec338e3318d2d4l,0x733dd7bbbe8de963l,0x61bcc3baa2c47ebdl,
wolfSSL 14:167253f4e170 40949 0xa821ad1935efcbdel },
wolfSSL 14:167253f4e170 40950 { 0x91ac668c024cdd5cl,0x7ba558e4c1cdfa49l,0x491d4ce0908fb4dal,
wolfSSL 14:167253f4e170 40951 0x7ba869f9f685bde8l },
wolfSSL 14:167253f4e170 40952 0 },
wolfSSL 14:167253f4e170 40953 /* 13 << 192 */
wolfSSL 14:167253f4e170 40954 { { 0xed1b5ec279f464bal,0x2d65e42c47d72e26l,0x8198e5749e67f926l,
wolfSSL 14:167253f4e170 40955 0x4106673834747e44l },
wolfSSL 14:167253f4e170 40956 { 0x4637acc1e37e5447l,0x02cbc9ecf3e15822l,0x58a8e98e805aa83cl,
wolfSSL 14:167253f4e170 40957 0x73facd6e5595e800l },
wolfSSL 14:167253f4e170 40958 0 },
wolfSSL 14:167253f4e170 40959 /* 15 << 192 */
wolfSSL 14:167253f4e170 40960 { { 0x468ff80338330507l,0x06f34ddf4037a53el,0x70cd1a408d6993a4l,
wolfSSL 14:167253f4e170 40961 0xf85a159743e5c022l },
wolfSSL 14:167253f4e170 40962 { 0x396fc9c2c125a67dl,0x03b7bebf1064bfcbl,0x7c444592a9806dcbl,
wolfSSL 14:167253f4e170 40963 0x1b02614b4487cd54l },
wolfSSL 14:167253f4e170 40964 0 },
wolfSSL 14:167253f4e170 40965 /* 16 << 192 */
wolfSSL 14:167253f4e170 40966 { { 0x8303604f692ac542l,0xf079ffe1227b91d3l,0x19f63e6315aaf9bdl,
wolfSSL 14:167253f4e170 40967 0xf99ee565f1f344fbl },
wolfSSL 14:167253f4e170 40968 { 0x8a1d661fd6219199l,0x8c883bc6d48ce41cl,0x1065118f3c74d904l,
wolfSSL 14:167253f4e170 40969 0x713889ee0faf8b1bl },
wolfSSL 14:167253f4e170 40970 0 },
wolfSSL 14:167253f4e170 40971 /* 17 << 192 */
wolfSSL 14:167253f4e170 40972 { { 0xb47b60f70de21bb6l,0x64acae4fdcd836cal,0x3375ea6dc744ce63l,
wolfSSL 14:167253f4e170 40973 0xb764265fb047955bl },
wolfSSL 14:167253f4e170 40974 { 0xc68a5d4c9841c2c3l,0x60e98fd7cf454f60l,0xc701fbe2756aea0cl,
wolfSSL 14:167253f4e170 40975 0x09c8885eaab21c79l },
wolfSSL 14:167253f4e170 40976 0 },
wolfSSL 14:167253f4e170 40977 /* 19 << 192 */
wolfSSL 14:167253f4e170 40978 { { 0x45bb810869d2d46cl,0xe47c8b3968c8365al,0xf3b87663267551bdl,
wolfSSL 14:167253f4e170 40979 0x1590768f5b67547al },
wolfSSL 14:167253f4e170 40980 { 0x371c1db2fb2ed3ffl,0xe316691917a59440l,0x03c0d178df242c14l,
wolfSSL 14:167253f4e170 40981 0x40c93fceed862ac1l },
wolfSSL 14:167253f4e170 40982 0 },
wolfSSL 14:167253f4e170 40983 /* 21 << 192 */
wolfSSL 14:167253f4e170 40984 { { 0x1286da692bc982d6l,0x5f6d80f27bdae7e3l,0x3d9c5647a6f064fbl,
wolfSSL 14:167253f4e170 40985 0xfdc8e6a1d74c1540l },
wolfSSL 14:167253f4e170 40986 { 0x97da48c6d68b135al,0xc2097979d66dbfffl,0x0296adb9ea20531dl,
wolfSSL 14:167253f4e170 40987 0xa333730d4ab2c8f0l },
wolfSSL 14:167253f4e170 40988 0 },
wolfSSL 14:167253f4e170 40989 /* 23 << 192 */
wolfSSL 14:167253f4e170 40990 { { 0x0eb3565429847fedl,0xfdc142860a673dd0l,0x721b36278b62dd0bl,
wolfSSL 14:167253f4e170 40991 0x105a293e711a5771l },
wolfSSL 14:167253f4e170 40992 { 0xdf001cce7f761927l,0xf7b681b011d04c7dl,0x16dff792a3ac1996l,
wolfSSL 14:167253f4e170 40993 0x580c120b0fc4ae30l },
wolfSSL 14:167253f4e170 40994 0 },
wolfSSL 14:167253f4e170 40995 /* 25 << 192 */
wolfSSL 14:167253f4e170 40996 { { 0x31ea3d4f7ee8d0bcl,0x3832f22a0f42c3dcl,0xc661061a1a87a2f4l,
wolfSSL 14:167253f4e170 40997 0x0978c9f64b45576bl },
wolfSSL 14:167253f4e170 40998 { 0xb7abac3c6dfb5fd2l,0x27f36a00b7e01b90l,0x68f733cde9429e36l,
wolfSSL 14:167253f4e170 40999 0x953a4681dcbfe8cbl },
wolfSSL 14:167253f4e170 41000 0 },
wolfSSL 14:167253f4e170 41001 /* 27 << 192 */
wolfSSL 14:167253f4e170 41002 { { 0xbfb7c41067fe1eafl,0xa2073c6a6929a785l,0x6f2536f4a75fdb79l,
wolfSSL 14:167253f4e170 41003 0x859ad26d809bca69l },
wolfSSL 14:167253f4e170 41004 { 0x06f2c0693b197e7bl,0x656ad9f48ec0a573l,0xe7c7901f9a4d0262l,
wolfSSL 14:167253f4e170 41005 0xbec29443b938602bl },
wolfSSL 14:167253f4e170 41006 0 },
wolfSSL 14:167253f4e170 41007 /* 28 << 192 */
wolfSSL 14:167253f4e170 41008 { { 0xd00397fc0f0073a4l,0x5b668fa46f8d675fl,0x14374ac91522108cl,
wolfSSL 14:167253f4e170 41009 0x92efa7d10283e42el },
wolfSSL 14:167253f4e170 41010 { 0x673e6df90b6d024al,0x05f914d457581f26l,0xf5c8516267df8c12l,
wolfSSL 14:167253f4e170 41011 0x1197f1b4e06c2462l },
wolfSSL 14:167253f4e170 41012 0 },
wolfSSL 14:167253f4e170 41013 /* 29 << 192 */
wolfSSL 14:167253f4e170 41014 { { 0x6e2d1cb3dd9c90c1l,0x28f82d5a7990579el,0x90e189cd06226195l,
wolfSSL 14:167253f4e170 41015 0xbd2939df19b0dc74l },
wolfSSL 14:167253f4e170 41016 { 0x18b18505c0917177l,0xeed5470d3117d9c4l,0x39ef92eb6c893ca0l,
wolfSSL 14:167253f4e170 41017 0x4533ef8244a41940l },
wolfSSL 14:167253f4e170 41018 0 },
wolfSSL 14:167253f4e170 41019 /* 31 << 192 */
wolfSSL 14:167253f4e170 41020 { { 0xcaee9dec34943ddal,0x8e50e98e8b4b6782l,0x24358ea591ea3a1fl,
wolfSSL 14:167253f4e170 41021 0x71c4c827a9e1c194l },
wolfSSL 14:167253f4e170 41022 { 0xa38baa5d09bb7a94l,0xfb4ab4c057b58f9cl,0x4a01065e24e0ee19l,
wolfSSL 14:167253f4e170 41023 0xb9cf805107b877bfl },
wolfSSL 14:167253f4e170 41024 0 },
wolfSSL 14:167253f4e170 41025 /* 33 << 192 */
wolfSSL 14:167253f4e170 41026 { { 0xd38c1ce0a2980d5el,0x8b84cca4541face7l,0x93298136dbd8d05dl,
wolfSSL 14:167253f4e170 41027 0x582708d03f85c85al },
wolfSSL 14:167253f4e170 41028 { 0x6545eec7282960e4l,0x92e184aebaadec07l,0x05452564fd27a20fl,
wolfSSL 14:167253f4e170 41029 0x79d4668abddce6ebl },
wolfSSL 14:167253f4e170 41030 0 },
wolfSSL 14:167253f4e170 41031 /* 34 << 192 */
wolfSSL 14:167253f4e170 41032 { { 0xf5cc5cccf5191707l,0xe800328bd5d01f67l,0x0572012ebd9b1599l,
wolfSSL 14:167253f4e170 41033 0xf5be11a6863d0125l },
wolfSSL 14:167253f4e170 41034 { 0x4da7ca876ea441e0l,0x47dbf83b321b134al,0x5cbadcdac1acfb4al,
wolfSSL 14:167253f4e170 41035 0x19ac798a734f8e25l },
wolfSSL 14:167253f4e170 41036 0 },
wolfSSL 14:167253f4e170 41037 /* 35 << 192 */
wolfSSL 14:167253f4e170 41038 { { 0xe312623a7002114fl,0xb888b637e047686bl,0x23b2c270cbac91bdl,
wolfSSL 14:167253f4e170 41039 0xb50b31884dbfe02dl },
wolfSSL 14:167253f4e170 41040 { 0x8335ce43de97eef6l,0x6a4e65502bac193al,0xf2b35aac3101f720l,
wolfSSL 14:167253f4e170 41041 0x5b2c88d5379a2015l },
wolfSSL 14:167253f4e170 41042 0 },
wolfSSL 14:167253f4e170 41043 /* 36 << 192 */
wolfSSL 14:167253f4e170 41044 { { 0xf445e77131547128l,0x22761665e27811cal,0x9b944e91a37c6681l,
wolfSSL 14:167253f4e170 41045 0xc0aa06a536899860l },
wolfSSL 14:167253f4e170 41046 { 0x8c2b5816cfcd557el,0xf2734a19945aa357l,0x536ca07ca55a0049l,
wolfSSL 14:167253f4e170 41047 0x8328fdccc636d967l },
wolfSSL 14:167253f4e170 41048 0 },
wolfSSL 14:167253f4e170 41049 /* 37 << 192 */
wolfSSL 14:167253f4e170 41050 { { 0x52b513616aca06bdl,0x8d19b893cdf16560l,0x06b28179c3b438cdl,
wolfSSL 14:167253f4e170 41051 0xde1ef747cd1819e4l },
wolfSSL 14:167253f4e170 41052 { 0xbc6cc43b5f557985l,0xa277e11f61e0142al,0x58890f1e429cc392l,
wolfSSL 14:167253f4e170 41053 0x28d17dbfe5fc8f5el },
wolfSSL 14:167253f4e170 41054 0 },
wolfSSL 14:167253f4e170 41055 /* 39 << 192 */
wolfSSL 14:167253f4e170 41056 { { 0x556df61a29a8f7cbl,0x5cf554dfd14ab27al,0x243f933ba755b886l,
wolfSSL 14:167253f4e170 41057 0xa4d0b06ff2d4ce87l },
wolfSSL 14:167253f4e170 41058 { 0xa745eb8d2c0f1d39l,0xc228747aea3047a5l,0xced774c41d2cecc0l,
wolfSSL 14:167253f4e170 41059 0x54a55c3a774fb01al },
wolfSSL 14:167253f4e170 41060 0 },
wolfSSL 14:167253f4e170 41061 /* 40 << 192 */
wolfSSL 14:167253f4e170 41062 { { 0xa691398a4a9eb3f0l,0x56c1dbff3b99a48fl,0x9a87e1b91b4b5b32l,
wolfSSL 14:167253f4e170 41063 0xad6396145378b5fel },
wolfSSL 14:167253f4e170 41064 { 0x437a243ec26b5302l,0x0275878c3ccb4c10l,0x0e81e4a21de07015l,
wolfSSL 14:167253f4e170 41065 0x0c6265c9850df3c0l },
wolfSSL 14:167253f4e170 41066 0 },
wolfSSL 14:167253f4e170 41067 /* 41 << 192 */
wolfSSL 14:167253f4e170 41068 { { 0x182c3f0e6be95db0l,0x8c5ab38cae065c62l,0xcce8294ebe23abacl,
wolfSSL 14:167253f4e170 41069 0xed5b65c47d0add6dl },
wolfSSL 14:167253f4e170 41070 { 0xbce57d78cc9494cal,0x76f75c717f435877l,0xb3084b2eb06560a9l,
wolfSSL 14:167253f4e170 41071 0x67216bc850b55981l },
wolfSSL 14:167253f4e170 41072 0 },
wolfSSL 14:167253f4e170 41073 /* 43 << 192 */
wolfSSL 14:167253f4e170 41074 { { 0x49c9fd92557de68bl,0x357aa44fc3151b7al,0xd36286d11e4aebd0l,
wolfSSL 14:167253f4e170 41075 0x84562cd736a51203l },
wolfSSL 14:167253f4e170 41076 { 0x42a57e7c3cacc002l,0x794a47751b1e25a3l,0x2c2ab68cac0d4356l,
wolfSSL 14:167253f4e170 41077 0xececb6addb31afdcl },
wolfSSL 14:167253f4e170 41078 0 },
wolfSSL 14:167253f4e170 41079 /* 44 << 192 */
wolfSSL 14:167253f4e170 41080 { { 0x47a5f010b4c21bfel,0x45c5610f0ac3dc20l,0x20e689fcea3bf4dcl,
wolfSSL 14:167253f4e170 41081 0xf244ea49fb5f46e4l },
wolfSSL 14:167253f4e170 41082 { 0xd918e59e8ca38e45l,0x7d6c601d96189a6fl,0x1a40f03854138471l,
wolfSSL 14:167253f4e170 41083 0xfe867d7308a9d034l },
wolfSSL 14:167253f4e170 41084 0 },
wolfSSL 14:167253f4e170 41085 /* 45 << 192 */
wolfSSL 14:167253f4e170 41086 { { 0x3b49e489100c0410l,0x8831d3992adc2b29l,0xb6726cd1247a8116l,
wolfSSL 14:167253f4e170 41087 0x83a71a59d1d56d8el },
wolfSSL 14:167253f4e170 41088 { 0x82ade2fe5cd333e9l,0x3b087ef83ea11f1al,0x17b96ca66ce879cel,
wolfSSL 14:167253f4e170 41089 0xc2f74a971871dc43l },
wolfSSL 14:167253f4e170 41090 0 },
wolfSSL 14:167253f4e170 41091 /* 46 << 192 */
wolfSSL 14:167253f4e170 41092 { { 0xa11a1e3680b576cel,0xf91278bbce2683e8l,0xc3bab95fbae8bc5bl,
wolfSSL 14:167253f4e170 41093 0x642ca26397351715l },
wolfSSL 14:167253f4e170 41094 { 0x5ffc14726fecbbc1l,0x2465e996a23f36d4l,0x06fc53bf5187d428l,
wolfSSL 14:167253f4e170 41095 0x54b4014351fbce91l },
wolfSSL 14:167253f4e170 41096 0 },
wolfSSL 14:167253f4e170 41097 /* 47 << 192 */
wolfSSL 14:167253f4e170 41098 { { 0x081ca6f0eafc7b2cl,0x1ba047a38c48703fl,0xe84865046663accfl,
wolfSSL 14:167253f4e170 41099 0xde1f97568d43689cl },
wolfSSL 14:167253f4e170 41100 { 0xf5373e1d5bc19f75l,0x4e48c493d64b0a54l,0x0c43f4e25807dbf6l,
wolfSSL 14:167253f4e170 41101 0x73bef15167778c36l },
wolfSSL 14:167253f4e170 41102 0 },
wolfSSL 14:167253f4e170 41103 /* 48 << 192 */
wolfSSL 14:167253f4e170 41104 { { 0xca6c0937b1b76ba6l,0x1a2eab854d2026dcl,0xb1715e1519d9ae0al,
wolfSSL 14:167253f4e170 41105 0xf1ad9199bac4a026l },
wolfSSL 14:167253f4e170 41106 { 0x35b3dfb807ea7b0el,0xedf5496f3ed9eb89l,0x8932e5ff2d6d08abl,
wolfSSL 14:167253f4e170 41107 0xf314874e25bd2731l },
wolfSSL 14:167253f4e170 41108 0 },
wolfSSL 14:167253f4e170 41109 /* 49 << 192 */
wolfSSL 14:167253f4e170 41110 { { 0x9d5322e89e9bba53l,0xdd7c9ceb989ff350l,0xd76147eadab0d7b3l,
wolfSSL 14:167253f4e170 41111 0x8e45b1c6d7a9a9a1l },
wolfSSL 14:167253f4e170 41112 { 0x8f896a91d4f10c10l,0x999a73c54068de06l,0x84a9d0839cf0a779l,
wolfSSL 14:167253f4e170 41113 0x4d7cc7689f608ab2l },
wolfSSL 14:167253f4e170 41114 0 },
wolfSSL 14:167253f4e170 41115 /* 51 << 192 */
wolfSSL 14:167253f4e170 41116 { { 0x1833ccddaee93c82l,0x6a05ef7b9f35f20fl,0xc538dac9ae413bc2l,
wolfSSL 14:167253f4e170 41117 0x1e74f4658b4784bdl },
wolfSSL 14:167253f4e170 41118 { 0xccb2bc4a49ffd544l,0x9b88183d2b17ae88l,0x96037a136e43824fl,
wolfSSL 14:167253f4e170 41119 0xbbb61441480bf3dfl },
wolfSSL 14:167253f4e170 41120 0 },
wolfSSL 14:167253f4e170 41121 /* 52 << 192 */
wolfSSL 14:167253f4e170 41122 { { 0x13319d20e090ad42l,0x4ff3186e12cbb719l,0xf38e504913fc0a46l,
wolfSSL 14:167253f4e170 41123 0x83185a1254e60378l },
wolfSSL 14:167253f4e170 41124 { 0x08c4057797ea8935l,0x7b2212a946b614f9l,0xedcdfa520634cfb3l,
wolfSSL 14:167253f4e170 41125 0xdbc60eed9e7d5726l },
wolfSSL 14:167253f4e170 41126 0 },
wolfSSL 14:167253f4e170 41127 /* 53 << 192 */
wolfSSL 14:167253f4e170 41128 { { 0x9b0785c6c7e1070fl,0xec112f53cbf561e5l,0xc93511e37fab3464l,
wolfSSL 14:167253f4e170 41129 0x9e6dc4da9de8e0c2l },
wolfSSL 14:167253f4e170 41130 { 0x7733c425e206b4eel,0xb8b254ef50cedf29l,0xfaee4bbbd50ad285l,
wolfSSL 14:167253f4e170 41131 0x216e76d58c4eb6cfl },
wolfSSL 14:167253f4e170 41132 0 },
wolfSSL 14:167253f4e170 41133 /* 55 << 192 */
wolfSSL 14:167253f4e170 41134 { { 0x9d6a28641d51f254l,0x26c5062a0c2822c3l,0xd74ebba8334bf4eel,
wolfSSL 14:167253f4e170 41135 0x6e5446eb0b8f7305l },
wolfSSL 14:167253f4e170 41136 { 0x5988ae8eb629beccl,0x71e576d0a1de7d1dl,0x15e39592a8873970l,
wolfSSL 14:167253f4e170 41137 0x2b1f9a9342ecc74el },
wolfSSL 14:167253f4e170 41138 0 },
wolfSSL 14:167253f4e170 41139 /* 57 << 192 */
wolfSSL 14:167253f4e170 41140 { { 0xcbdb70727c519bf9l,0x112986bbcaaf48e6l,0x64d4c6d1a13baf3cl,
wolfSSL 14:167253f4e170 41141 0x85ccf6f7a065e77el },
wolfSSL 14:167253f4e170 41142 { 0x183be337749beaedl,0xb3703096cba6c9b1l,0x1edf81f0e42b8afel,
wolfSSL 14:167253f4e170 41143 0xf04ed594ccb73ad7l },
wolfSSL 14:167253f4e170 41144 0 },
wolfSSL 14:167253f4e170 41145 /* 59 << 192 */
wolfSSL 14:167253f4e170 41146 { { 0xfa954ebc38491e9fl,0xf75a5808d32f0b03l,0x196d4a828083b9d3l,
wolfSSL 14:167253f4e170 41147 0x92d5a0be5e8dc9fel },
wolfSSL 14:167253f4e170 41148 { 0x4a507ae9aea628bal,0xeea5861e11a02fb5l,0xa033b84fd23ec8f7l,
wolfSSL 14:167253f4e170 41149 0x1a68c36ec60f11d5l },
wolfSSL 14:167253f4e170 41150 0 },
wolfSSL 14:167253f4e170 41151 /* 60 << 192 */
wolfSSL 14:167253f4e170 41152 { { 0x3dfb55bdab920ef2l,0xe0090971e6244484l,0xdc39fd08f7c6e1a3l,
wolfSSL 14:167253f4e170 41153 0x1ca765356ee79e72l },
wolfSSL 14:167253f4e170 41154 { 0x472c8985287d590cl,0x67635e35ad6daeb4l,0x06ec4e7980f9fee3l,
wolfSSL 14:167253f4e170 41155 0x0aceb39921dc5fdbl },
wolfSSL 14:167253f4e170 41156 0 },
wolfSSL 14:167253f4e170 41157 /* 61 << 192 */
wolfSSL 14:167253f4e170 41158 { { 0xdb2478fd9410a756l,0xd106aefe3a53a1e6l,0x1f4c940d14286333l,
wolfSSL 14:167253f4e170 41159 0x6a98659d04950958l },
wolfSSL 14:167253f4e170 41160 { 0x3232a1c6a6bbe060l,0x19ad132ca5e7ca9bl,0x3c9c13ef800fae29l,
wolfSSL 14:167253f4e170 41161 0x9b0d9068b8660f49l },
wolfSSL 14:167253f4e170 41162 0 },
wolfSSL 14:167253f4e170 41163 /* 63 << 192 */
wolfSSL 14:167253f4e170 41164 { { 0x1e7f043795c53027l,0x5221e5c0da9a3806l,0xf297d8e379d9385fl,
wolfSSL 14:167253f4e170 41165 0x4d69e95f78ba697el },
wolfSSL 14:167253f4e170 41166 { 0xdda936cee76d13c1l,0xd9a5790a485b12f5l,0xeab84add51efbfd0l,
wolfSSL 14:167253f4e170 41167 0xc9a3ee9ca9f44aa4l },
wolfSSL 14:167253f4e170 41168 0 },
wolfSSL 14:167253f4e170 41169 /* 64 << 192 */
wolfSSL 14:167253f4e170 41170 { { 0xefb26a753f73f449l,0x1d1c94f88d44fc79l,0x49f0fbc53bc0dc4dl,
wolfSSL 14:167253f4e170 41171 0xb747ea0b3698a0d0l },
wolfSSL 14:167253f4e170 41172 { 0x5218c3fe228d291el,0x35b804b543c129d6l,0xfac859b8d1acc516l,
wolfSSL 14:167253f4e170 41173 0x6c10697d95d6e668l },
wolfSSL 14:167253f4e170 41174 0 },
wolfSSL 14:167253f4e170 41175 /* 65 << 192 */
wolfSSL 14:167253f4e170 41176 { { 0x8c12e87a15454db4l,0xbc1fc546908e8fbcl,0xc35d83c7e4cf1636l,
wolfSSL 14:167253f4e170 41177 0xcb2f5ac820641524l },
wolfSSL 14:167253f4e170 41178 { 0x2400aae2e644ecd0l,0x9b01e2d14be37119l,0x6cffd52831b54857l,
wolfSSL 14:167253f4e170 41179 0xb3fd5d864b5cbf81l },
wolfSSL 14:167253f4e170 41180 0 },
wolfSSL 14:167253f4e170 41181 /* 71 << 192 */
wolfSSL 14:167253f4e170 41182 { { 0x2e999a4739709fb9l,0x4cb4bbdb62c2b30fl,0x4c7259ac09de0c92l,
wolfSSL 14:167253f4e170 41183 0x73c1e34f8c59a0ffl },
wolfSSL 14:167253f4e170 41184 { 0x0a9e5f2e48cb0a12l,0x5e07449fcf499bb0l,0x0527a8b4b02c4a54l,
wolfSSL 14:167253f4e170 41185 0x7381287159da01e4l },
wolfSSL 14:167253f4e170 41186 0 },
wolfSSL 14:167253f4e170 41187 /* 77 << 192 */
wolfSSL 14:167253f4e170 41188 { { 0xe0b876ca0548ff87l,0x74b5a9b25e03bae3l,0xd5564cc5dd0642d2l,
wolfSSL 14:167253f4e170 41189 0x29ed211b668c4977l },
wolfSSL 14:167253f4e170 41190 { 0xf29d3b7aa7422b11l,0x17f2d3586d29b8bal,0x2e35cdda2bb887del,
wolfSSL 14:167253f4e170 41191 0x650f148078e4444bl },
wolfSSL 14:167253f4e170 41192 0 },
wolfSSL 14:167253f4e170 41193 /* 83 << 192 */
wolfSSL 14:167253f4e170 41194 { { 0x8c75532fb47435ebl,0x2234e2c5a113f905l,0x27b75fea31508ae9l,
wolfSSL 14:167253f4e170 41195 0x09733e40d489ad0bl },
wolfSSL 14:167253f4e170 41196 { 0x73b38464a1b06da1l,0x0aed522dc5b7ccf2l,0xcc04783e78d7e5afl,
wolfSSL 14:167253f4e170 41197 0xa81c8a8ff23eaab7l },
wolfSSL 14:167253f4e170 41198 0 },
wolfSSL 14:167253f4e170 41199 /* 89 << 192 */
wolfSSL 14:167253f4e170 41200 { { 0x6bb5eca73c149ffal,0x4593d851c536487al,0x3675daaad85eb9edl,
wolfSSL 14:167253f4e170 41201 0xbf65d0f9b8a58ffbl },
wolfSSL 14:167253f4e170 41202 { 0x1dc6ddddc22e83eel,0xb673397ee10d3c17l,0x6bdc20600ca62c93l,
wolfSSL 14:167253f4e170 41203 0x260389c30b821f6dl },
wolfSSL 14:167253f4e170 41204 0 },
wolfSSL 14:167253f4e170 41205 /* 95 << 192 */
wolfSSL 14:167253f4e170 41206 { { 0x45f5cf07b417be10l,0x0acb1a44e5d561d8l,0x54b7baeafb1dfbe9l,
wolfSSL 14:167253f4e170 41207 0x0e6e66219044672el },
wolfSSL 14:167253f4e170 41208 { 0xa9b6db6d9a793601l,0xd70eadb8a4a0ba4al,0xaedace846098b89el,
wolfSSL 14:167253f4e170 41209 0x970f2c23ac39d40fl },
wolfSSL 14:167253f4e170 41210 0 },
wolfSSL 14:167253f4e170 41211 /* 101 << 192 */
wolfSSL 14:167253f4e170 41212 { { 0x9dff8d289c7eaaa8l,0x38bcd076db0cc361l,0x25760147cdea9db8l,
wolfSSL 14:167253f4e170 41213 0x44c89dd40163f343l },
wolfSSL 14:167253f4e170 41214 { 0x18815d7544db8365l,0xa186d57b37f3e4b3l,0xa71de7806e84a7fal,
wolfSSL 14:167253f4e170 41215 0xf1c08989e56646b3l },
wolfSSL 14:167253f4e170 41216 0 },
wolfSSL 14:167253f4e170 41217 /* 107 << 192 */
wolfSSL 14:167253f4e170 41218 { { 0xad73e1448fb56a43l,0x078c14fb715543c9l,0xa57770fd64b92d54l,
wolfSSL 14:167253f4e170 41219 0xf0420a9277e9b919l },
wolfSSL 14:167253f4e170 41220 { 0xc660d0cb588ccc1dl,0x069baa1471415c2el,0x747438dc32982740l,
wolfSSL 14:167253f4e170 41221 0x4782ce08767381eel },
wolfSSL 14:167253f4e170 41222 0 },
wolfSSL 14:167253f4e170 41223 /* 113 << 192 */
wolfSSL 14:167253f4e170 41224 { { 0xc2a1ee5fdb3b6b5dl,0x08ce544820e1339fl,0x3cb954b77073955fl,
wolfSSL 14:167253f4e170 41225 0xb9ed2ee7f32d0832l },
wolfSSL 14:167253f4e170 41226 { 0xc0a998b1b4aac98el,0x4912273dbca4bac7l,0xac0f5014c3f92c4al,
wolfSSL 14:167253f4e170 41227 0xbf3dc27f9e916e78l },
wolfSSL 14:167253f4e170 41228 0 },
wolfSSL 14:167253f4e170 41229 /* 116 << 192 */
wolfSSL 14:167253f4e170 41230 { { 0x222c7bae28833944l,0xbb78a867f5e3cf67l,0x590cbd96faf6cfd6l,
wolfSSL 14:167253f4e170 41231 0x1c50aecb3b0d842el },
wolfSSL 14:167253f4e170 41232 { 0x8f2c5df1dbade9a5l,0x60923fb7e3840cecl,0xe8f2db6b03a67512l,
wolfSSL 14:167253f4e170 41233 0x90af187be0d7c628l },
wolfSSL 14:167253f4e170 41234 0 },
wolfSSL 14:167253f4e170 41235 /* 119 << 192 */
wolfSSL 14:167253f4e170 41236 { { 0xb4162b615fee3ccbl,0xe9786e7d7327e651l,0x6c85bd938812d9c1l,
wolfSSL 14:167253f4e170 41237 0xfe4905083dc9e838l },
wolfSSL 14:167253f4e170 41238 { 0xe66f25178a6765dfl,0x72fd294edeee184cl,0x07608bd27b6ec227l,
wolfSSL 14:167253f4e170 41239 0x9df7b664dfdaa5e6l },
wolfSSL 14:167253f4e170 41240 0 },
wolfSSL 14:167253f4e170 41241 /* 125 << 192 */
wolfSSL 14:167253f4e170 41242 { { 0x4aea16602d53a155l,0x7285069a32ab07fdl,0xf6f3000d8b6fcd19l,
wolfSSL 14:167253f4e170 41243 0x010b1f246e98953fl },
wolfSSL 14:167253f4e170 41244 { 0xe180bc559f9aa221l,0x7717ee383cba4534l,0x5997f3aa36cbda06l,
wolfSSL 14:167253f4e170 41245 0x54c6090064a04b05l },
wolfSSL 14:167253f4e170 41246 0 },
wolfSSL 14:167253f4e170 41247 },
wolfSSL 14:167253f4e170 41248 {
wolfSSL 14:167253f4e170 41249 /* 0 << 200 */
wolfSSL 14:167253f4e170 41250 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 41251 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 41252 1 },
wolfSSL 14:167253f4e170 41253 /* 1 << 200 */
wolfSSL 14:167253f4e170 41254 { { 0x25914f7881fdad90l,0xcf638f560d2cf6abl,0xb90bc03fcc054de5l,
wolfSSL 14:167253f4e170 41255 0x932811a718b06350l },
wolfSSL 14:167253f4e170 41256 { 0x2f00b3309bbd11ffl,0x76108a6fb4044974l,0x801bb9e0a851d266l,
wolfSSL 14:167253f4e170 41257 0x0dd099bebf8990c1l },
wolfSSL 14:167253f4e170 41258 0 },
wolfSSL 14:167253f4e170 41259 /* 3 << 200 */
wolfSSL 14:167253f4e170 41260 { { 0xebd6a6777b0ac93dl,0xa6e37b0d78f5e0d7l,0x2516c09676f5492bl,
wolfSSL 14:167253f4e170 41261 0x1e4bf8889ac05f3al },
wolfSSL 14:167253f4e170 41262 { 0xcdb42ce04df0ba2bl,0x935d5cfd5062341bl,0x8a30333382acac20l,
wolfSSL 14:167253f4e170 41263 0x429438c45198b00el },
wolfSSL 14:167253f4e170 41264 0 },
wolfSSL 14:167253f4e170 41265 /* 4 << 200 */
wolfSSL 14:167253f4e170 41266 { { 0xfb2838be67e573e0l,0x05891db94084c44bl,0x9131137396c1c2c5l,
wolfSSL 14:167253f4e170 41267 0x6aebfa3fd958444bl },
wolfSSL 14:167253f4e170 41268 { 0xac9cdce9e56e55c1l,0x7148ced32caa46d0l,0x2e10c7efb61fe8ebl,
wolfSSL 14:167253f4e170 41269 0x9fd835daff97cf4dl },
wolfSSL 14:167253f4e170 41270 0 },
wolfSSL 14:167253f4e170 41271 /* 5 << 200 */
wolfSSL 14:167253f4e170 41272 { { 0x6c626f56c1770616l,0x5351909e09da9a2dl,0xe58e6825a3730e45l,
wolfSSL 14:167253f4e170 41273 0x9d8c8bc003ef0a79l },
wolfSSL 14:167253f4e170 41274 { 0x543f78b6056becfdl,0x33f13253a090b36dl,0x82ad4997794432f9l,
wolfSSL 14:167253f4e170 41275 0x1386493c4721f502l },
wolfSSL 14:167253f4e170 41276 0 },
wolfSSL 14:167253f4e170 41277 /* 7 << 200 */
wolfSSL 14:167253f4e170 41278 { { 0xe566f400b008733al,0xcba0697d512e1f57l,0x9537c2b240509cd0l,
wolfSSL 14:167253f4e170 41279 0x5f989c6957353d8cl },
wolfSSL 14:167253f4e170 41280 { 0x7dbec9724c3c2b2fl,0x90e02fa8ff031fa8l,0xf4d15c53cfd5d11fl,
wolfSSL 14:167253f4e170 41281 0xb3404fae48314dfcl },
wolfSSL 14:167253f4e170 41282 0 },
wolfSSL 14:167253f4e170 41283 /* 9 << 200 */
wolfSSL 14:167253f4e170 41284 { { 0xf02cc3a9f327a07fl,0xefb27a9b4490937dl,0x81451e96b1b3afa5l,
wolfSSL 14:167253f4e170 41285 0x67e24de891883be4l },
wolfSSL 14:167253f4e170 41286 { 0x1ad65d4770869e54l,0xd36291a464a3856al,0x070a1abf7132e880l,
wolfSSL 14:167253f4e170 41287 0x9511d0a30e28dfdfl },
wolfSSL 14:167253f4e170 41288 0 },
wolfSSL 14:167253f4e170 41289 /* 10 << 200 */
wolfSSL 14:167253f4e170 41290 { { 0xfdeed650f8d1cac4l,0xeb99194b6d16bda5l,0xb53b19f71cabbe46l,
wolfSSL 14:167253f4e170 41291 0x5f45af5039b9276cl },
wolfSSL 14:167253f4e170 41292 { 0xd0784c6126ee9d77l,0xf7a1558b0c02ca5dl,0xb61d6c59f032e720l,
wolfSSL 14:167253f4e170 41293 0xae3ffb95470cf3f7l },
wolfSSL 14:167253f4e170 41294 0 },
wolfSSL 14:167253f4e170 41295 /* 11 << 200 */
wolfSSL 14:167253f4e170 41296 { { 0x9b185facc72a4be5l,0xf66de2364d848089l,0xba14d07c717afea9l,
wolfSSL 14:167253f4e170 41297 0x25bfbfc02d551c1cl },
wolfSSL 14:167253f4e170 41298 { 0x2cef0ecd4cdf3d88l,0x8cee2aa3647f73c4l,0xc10a7d3d722d67f7l,
wolfSSL 14:167253f4e170 41299 0x090037a294564a21l },
wolfSSL 14:167253f4e170 41300 0 },
wolfSSL 14:167253f4e170 41301 /* 13 << 200 */
wolfSSL 14:167253f4e170 41302 { { 0x6ac07bb84f3815c4l,0xddb9f6241aa9017el,0x31e30228ca85720al,
wolfSSL 14:167253f4e170 41303 0xe59d63f57cb75838l },
wolfSSL 14:167253f4e170 41304 { 0x69e18e777baad2d0l,0x2cfdb784d42f5d73l,0x025dd53df5774983l,
wolfSSL 14:167253f4e170 41305 0x2f80e7cee042cd52l },
wolfSSL 14:167253f4e170 41306 0 },
wolfSSL 14:167253f4e170 41307 /* 15 << 200 */
wolfSSL 14:167253f4e170 41308 { { 0x43f18d7f4d6ee4abl,0xd3ac8cde9570c3dcl,0x527e49070b8c9b2al,
wolfSSL 14:167253f4e170 41309 0x716709a7c5a4c0f1l },
wolfSSL 14:167253f4e170 41310 { 0x930852b0916a26b1l,0x3cc17fcf4e071177l,0x34f5e3d459694868l,
wolfSSL 14:167253f4e170 41311 0xee0341aba28f655dl },
wolfSSL 14:167253f4e170 41312 0 },
wolfSSL 14:167253f4e170 41313 /* 16 << 200 */
wolfSSL 14:167253f4e170 41314 { { 0xf431f462060b5f61l,0xa56f46b47bd057c2l,0x348dca6c47e1bf65l,
wolfSSL 14:167253f4e170 41315 0x9a38783e41bcf1ffl },
wolfSSL 14:167253f4e170 41316 { 0x7a5d33a9da710718l,0x5a7799872e0aeaf6l,0xca87314d2d29d187l,
wolfSSL 14:167253f4e170 41317 0xfa0edc3ec687d733l },
wolfSSL 14:167253f4e170 41318 0 },
wolfSSL 14:167253f4e170 41319 /* 17 << 200 */
wolfSSL 14:167253f4e170 41320 { { 0x4b764317aa365220l,0x7a24affe68cc0355l,0x76732ed0ceb3df5el,
wolfSSL 14:167253f4e170 41321 0x2ce1332aae096ed0l },
wolfSSL 14:167253f4e170 41322 { 0x89ce70a7b8adac9dl,0xfdddcf05b3fc85c8l,0xbd7b29c6f2ee8bfel,
wolfSSL 14:167253f4e170 41323 0xa1effcb9457d50f3l },
wolfSSL 14:167253f4e170 41324 0 },
wolfSSL 14:167253f4e170 41325 /* 19 << 200 */
wolfSSL 14:167253f4e170 41326 { { 0x6053972dac953207l,0xc2ca9a8408ad12f6l,0x9ed6cd386ba36190l,
wolfSSL 14:167253f4e170 41327 0xa5b50a48539d18a4l },
wolfSSL 14:167253f4e170 41328 { 0xd9491347dbf18c2al,0x2cdce4662e9697cfl,0x4e97db5ca9e31819l,
wolfSSL 14:167253f4e170 41329 0x0fb02e2d4c044b74l },
wolfSSL 14:167253f4e170 41330 0 },
wolfSSL 14:167253f4e170 41331 /* 21 << 200 */
wolfSSL 14:167253f4e170 41332 { { 0x66a4dd414aa5e9ddl,0x6ec7576e64f6aeb9l,0x3f08ce06c7e980b5l,
wolfSSL 14:167253f4e170 41333 0x52fe9fd6c1a2aa7el },
wolfSSL 14:167253f4e170 41334 { 0xfe46e6d95074326al,0xd570ed734c126c1dl,0x86c7ec257217d55al,
wolfSSL 14:167253f4e170 41335 0x3cb434057c3de2b2l },
wolfSSL 14:167253f4e170 41336 0 },
wolfSSL 14:167253f4e170 41337 /* 23 << 200 */
wolfSSL 14:167253f4e170 41338 { { 0x48e0295dcc9e79bfl,0x2419485693eb403dl,0x9386fb7709dd8194l,
wolfSSL 14:167253f4e170 41339 0xb6e89bb101a242f6l },
wolfSSL 14:167253f4e170 41340 { 0xc7994f3924d308d7l,0xf0fbc392de673d88l,0x43eed52ea11abb62l,
wolfSSL 14:167253f4e170 41341 0xc900f9d0c83e7fbel },
wolfSSL 14:167253f4e170 41342 0 },
wolfSSL 14:167253f4e170 41343 /* 25 << 200 */
wolfSSL 14:167253f4e170 41344 { { 0x214a10dca8152891l,0xe6787b4c64f1abb2l,0x276333d9fa1a10edl,
wolfSSL 14:167253f4e170 41345 0xc0e1c88e47dbccbcl },
wolfSSL 14:167253f4e170 41346 { 0x8a3c37c4849dd12el,0x2144a8c8d86e109fl,0xbb6891f7286c140cl,
wolfSSL 14:167253f4e170 41347 0xb0b8c5e29cce5e6fl },
wolfSSL 14:167253f4e170 41348 0 },
wolfSSL 14:167253f4e170 41349 /* 27 << 200 */
wolfSSL 14:167253f4e170 41350 { { 0x3f9e0e3499753288l,0x6b26f1ebe559d93al,0x647fe21d9841faf1l,
wolfSSL 14:167253f4e170 41351 0x48a4b6efa786ea02l },
wolfSSL 14:167253f4e170 41352 { 0x6e09cd22665a882dl,0x95390d81b63ccda6l,0x5b014db4b026a44al,
wolfSSL 14:167253f4e170 41353 0x5b96efb22ad30ff1l },
wolfSSL 14:167253f4e170 41354 0 },
wolfSSL 14:167253f4e170 41355 /* 28 << 200 */
wolfSSL 14:167253f4e170 41356 { { 0x64c50c8b4a3b99e9l,0x2489a675d0a26f4fl,0xe2aacaeed85bc6fdl,
wolfSSL 14:167253f4e170 41357 0x556882038a6019bal },
wolfSSL 14:167253f4e170 41358 { 0x7ceb9da645cfac07l,0xe1ad3d25652dbd09l,0x086adf348d3b5d2bl,
wolfSSL 14:167253f4e170 41359 0xf9256d8aec3654a0l },
wolfSSL 14:167253f4e170 41360 0 },
wolfSSL 14:167253f4e170 41361 /* 29 << 200 */
wolfSSL 14:167253f4e170 41362 { { 0x571c246bf009a690l,0x8fe54231ccd90d3al,0x8adde6adfe173b79l,
wolfSSL 14:167253f4e170 41363 0x75d9a392b05a5e3bl },
wolfSSL 14:167253f4e170 41364 { 0x607f47b0d1bb3a84l,0xe4e3b472058e691al,0xfc0f793bf3d956e3l,
wolfSSL 14:167253f4e170 41365 0x6a6730b605de54dal },
wolfSSL 14:167253f4e170 41366 0 },
wolfSSL 14:167253f4e170 41367 /* 31 << 200 */
wolfSSL 14:167253f4e170 41368 { { 0x4daf7f540d80aaa1l,0xc571d04c229c4574l,0x469e2da5fffca53dl,
wolfSSL 14:167253f4e170 41369 0x9fffe29513ff7f59l },
wolfSSL 14:167253f4e170 41370 { 0x2075da5a33a254f7l,0x769f33acd35e575dl,0x7b940d2c3d35001al,
wolfSSL 14:167253f4e170 41371 0x2d606b57e34c95b7l },
wolfSSL 14:167253f4e170 41372 0 },
wolfSSL 14:167253f4e170 41373 /* 33 << 200 */
wolfSSL 14:167253f4e170 41374 { { 0xc7e4f8b899365f86l,0x8f6f959faae69527l,0x749ffedffdfaeeeal,
wolfSSL 14:167253f4e170 41375 0x2b91f0221b54c2a0l },
wolfSSL 14:167253f4e170 41376 { 0xe75c2352addbdf83l,0xe7329922fff2694cl,0xbb65ae06badadeacl,
wolfSSL 14:167253f4e170 41377 0x16cbb9d1f56be3b5l },
wolfSSL 14:167253f4e170 41378 0 },
wolfSSL 14:167253f4e170 41379 /* 34 << 200 */
wolfSSL 14:167253f4e170 41380 { { 0xb100a4c67a07bd70l,0x222fee7634787efel,0xa4dafc14f1e79d1bl,
wolfSSL 14:167253f4e170 41381 0x0d3a82dad18b8be4l },
wolfSSL 14:167253f4e170 41382 { 0xe0181445fc06922fl,0x0873d99b714a90b6l,0xdf43082fa5087a0el,
wolfSSL 14:167253f4e170 41383 0x195e49367399e0dbl },
wolfSSL 14:167253f4e170 41384 0 },
wolfSSL 14:167253f4e170 41385 /* 35 << 200 */
wolfSSL 14:167253f4e170 41386 { { 0x7e83545aae6fcc9cl,0x1a24fce819e15ce2l,0x4a3465c536d8c6a8l,
wolfSSL 14:167253f4e170 41387 0xd1e5f24109436ae0l },
wolfSSL 14:167253f4e170 41388 { 0xed334bfc6be463d5l,0xc46a600b934fbdcfl,0xbd2fd65b920321ffl,
wolfSSL 14:167253f4e170 41389 0x953fa91767fa154el },
wolfSSL 14:167253f4e170 41390 0 },
wolfSSL 14:167253f4e170 41391 /* 36 << 200 */
wolfSSL 14:167253f4e170 41392 { { 0x5dca4995f93ddad1l,0x061efcabf72470c2l,0xad78d54d5e7e0741l,
wolfSSL 14:167253f4e170 41393 0xa91f4e839c4e0ab4l },
wolfSSL 14:167253f4e170 41394 { 0xdd4403af5c75aa0dl,0x4308c8ee13c69113l,0x3a3b66f51ebc36adl,
wolfSSL 14:167253f4e170 41395 0xc07cc3f0f4bf777al },
wolfSSL 14:167253f4e170 41396 0 },
wolfSSL 14:167253f4e170 41397 /* 37 << 200 */
wolfSSL 14:167253f4e170 41398 { { 0x3fd1963e37a86b32l,0x22e236d60bd0880el,0xb87467cf89f0fa5cl,
wolfSSL 14:167253f4e170 41399 0x85b9c6c0310e0265l },
wolfSSL 14:167253f4e170 41400 { 0x82979a96783459ael,0xd19b0919bd529ed3l,0xa21f771808434f94l,
wolfSSL 14:167253f4e170 41401 0x3dd130a9195369c6l },
wolfSSL 14:167253f4e170 41402 0 },
wolfSSL 14:167253f4e170 41403 /* 39 << 200 */
wolfSSL 14:167253f4e170 41404 { { 0xc61e62767915d157l,0xc48244279e07fb0el,0x8980c1cc8420ea49l,
wolfSSL 14:167253f4e170 41405 0x10d82e4a588d4e2bl },
wolfSSL 14:167253f4e170 41406 { 0xdddecd52b17eff2dl,0xe44c7b2ded8492a4l,0x96ca89ebb9bea6afl,
wolfSSL 14:167253f4e170 41407 0x724166fe1b03ed03l },
wolfSSL 14:167253f4e170 41408 0 },
wolfSSL 14:167253f4e170 41409 /* 40 << 200 */
wolfSSL 14:167253f4e170 41410 { { 0xfc87975f8fb54738l,0x3516078827c3ead3l,0x834116d2b74a085al,
wolfSSL 14:167253f4e170 41411 0x53c99a73a62fe996l },
wolfSSL 14:167253f4e170 41412 { 0x87585be05b81c51bl,0x925bafa8be0852b7l,0x76a4fafda84d19a7l,
wolfSSL 14:167253f4e170 41413 0x39a45982585206d4l },
wolfSSL 14:167253f4e170 41414 0 },
wolfSSL 14:167253f4e170 41415 /* 41 << 200 */
wolfSSL 14:167253f4e170 41416 { { 0x8bbc484ed551f3e1l,0x6e058a90b7eb06d2l,0xfaccd9a0e5cd281al,
wolfSSL 14:167253f4e170 41417 0xe7661b78d5b44900l },
wolfSSL 14:167253f4e170 41418 { 0x03afe115725fde22l,0xbe929230c7229fd1l,0x5cd0d16a0000035el,
wolfSSL 14:167253f4e170 41419 0x1f6a9df0c8f5a910l },
wolfSSL 14:167253f4e170 41420 0 },
wolfSSL 14:167253f4e170 41421 /* 43 << 200 */
wolfSSL 14:167253f4e170 41422 { { 0xe54bbcfd535dfc82l,0x89be0b89a9012196l,0xa67831ee71011beal,
wolfSSL 14:167253f4e170 41423 0x2ea7a8292db43878l },
wolfSSL 14:167253f4e170 41424 { 0xff7c144378ffe871l,0xa67dc3d4c63f65eal,0xbbfc7fc2a1527419l,
wolfSSL 14:167253f4e170 41425 0x6440380bf6c36b8fl },
wolfSSL 14:167253f4e170 41426 0 },
wolfSSL 14:167253f4e170 41427 /* 44 << 200 */
wolfSSL 14:167253f4e170 41428 { { 0x71ab9f69d812d7e6l,0x2847c5516e142126l,0x9e27755bb31e7753l,
wolfSSL 14:167253f4e170 41429 0xb89533e2943b8c7fl },
wolfSSL 14:167253f4e170 41430 { 0xbe7f0c6e14fa7dc6l,0x782a06388cee1f7al,0x7069292938e13a6bl,
wolfSSL 14:167253f4e170 41431 0x1e1221f0c63f4d28l },
wolfSSL 14:167253f4e170 41432 0 },
wolfSSL 14:167253f4e170 41433 /* 45 << 200 */
wolfSSL 14:167253f4e170 41434 { { 0x9030aa9a63a431f4l,0x0fa7b5d45039a318l,0x6a0cf40af083687dl,
wolfSSL 14:167253f4e170 41435 0x46689cec659fa752l },
wolfSSL 14:167253f4e170 41436 { 0x8259727a456fa97el,0x4f618a355b08d7fcl,0x2c44217b72028d15l,
wolfSSL 14:167253f4e170 41437 0x8083b09935111e32l },
wolfSSL 14:167253f4e170 41438 0 },
wolfSSL 14:167253f4e170 41439 /* 46 << 200 */
wolfSSL 14:167253f4e170 41440 { { 0xaa5976523b5b29f1l,0xb07f10ab37432a54l,0x16e3e2236e36556fl,
wolfSSL 14:167253f4e170 41441 0xf1c7c9bd47cd4586l },
wolfSSL 14:167253f4e170 41442 { 0xa4eef99d3f87216dl,0x4e54d3c52e1eaa79l,0x534c5901d2540d91l,
wolfSSL 14:167253f4e170 41443 0x718df7c9b6f0fcfcl },
wolfSSL 14:167253f4e170 41444 0 },
wolfSSL 14:167253f4e170 41445 /* 47 << 200 */
wolfSSL 14:167253f4e170 41446 { { 0x99497f8a2eb0ee3bl,0x87e550c1caeb3a20l,0xd23e053dfb91627cl,
wolfSSL 14:167253f4e170 41447 0xb971c043873124e6l },
wolfSSL 14:167253f4e170 41448 { 0x3581ab853b16e467l,0x24541c926145187bl,0x4423ec5c010c2527l,
wolfSSL 14:167253f4e170 41449 0x775f13029fa82a68l },
wolfSSL 14:167253f4e170 41450 0 },
wolfSSL 14:167253f4e170 41451 /* 48 << 200 */
wolfSSL 14:167253f4e170 41452 { { 0x499b6ab65eb03c0el,0xf19b795472bc3fdel,0xa86b5b9c6e3a80d2l,
wolfSSL 14:167253f4e170 41453 0xe43775086d42819fl },
wolfSSL 14:167253f4e170 41454 { 0xc1663650bb3ee8a3l,0x75eb14fcb132075fl,0xa8ccc9067ad834f6l,
wolfSSL 14:167253f4e170 41455 0xea6a2474e6e92ffdl },
wolfSSL 14:167253f4e170 41456 0 },
wolfSSL 14:167253f4e170 41457 /* 49 << 200 */
wolfSSL 14:167253f4e170 41458 { { 0xbaebdd8a0c40aec4l,0x5eccafb563e8cfd0l,0x1c204c0eb5159938l,
wolfSSL 14:167253f4e170 41459 0x607109d34b996aa9l },
wolfSSL 14:167253f4e170 41460 { 0x024c6c4b9cef59fel,0xbc846e216ed4b6f1l,0xf6a50ff3ff652c0al,
wolfSSL 14:167253f4e170 41461 0x368af2c72d95220cl },
wolfSSL 14:167253f4e170 41462 0 },
wolfSSL 14:167253f4e170 41463 /* 51 << 200 */
wolfSSL 14:167253f4e170 41464 { { 0xec9c2e35cbd3ccafl,0xb9eeff3ddcda8f30l,0x82012e191062d02el,
wolfSSL 14:167253f4e170 41465 0xed964cc94efc6b6el },
wolfSSL 14:167253f4e170 41466 { 0x8853ea0a6bf54c22l,0xea40fcc0f3cbe264l,0x21f9c01ddecf114el,
wolfSSL 14:167253f4e170 41467 0x05e754c63da71e59l },
wolfSSL 14:167253f4e170 41468 0 },
wolfSSL 14:167253f4e170 41469 /* 52 << 200 */
wolfSSL 14:167253f4e170 41470 { { 0xe6a26d38046dfc72l,0x70409579c2175175l,0x2a575ac5d44e0c1dl,
wolfSSL 14:167253f4e170 41471 0xb35395e01479ab5al },
wolfSSL 14:167253f4e170 41472 { 0x1550a5d4f7bfbd8el,0x01daeb680778807bl,0xe0aa940321294dbal,
wolfSSL 14:167253f4e170 41473 0x84bcdc8c5b5a93b7l },
wolfSSL 14:167253f4e170 41474 0 },
wolfSSL 14:167253f4e170 41475 /* 53 << 200 */
wolfSSL 14:167253f4e170 41476 { { 0x876cc4d2520f04abl,0x6e320f5da85ff6a8l,0x7c504720ce17bc80l,
wolfSSL 14:167253f4e170 41477 0xe7907079a62089f9l },
wolfSSL 14:167253f4e170 41478 { 0xa45c4ac7bca45feel,0xd8f3facd5bd54b0cl,0xc0b036277b3e4a24l,
wolfSSL 14:167253f4e170 41479 0xaabe96dfe4cd4b57l },
wolfSSL 14:167253f4e170 41480 0 },
wolfSSL 14:167253f4e170 41481 /* 55 << 200 */
wolfSSL 14:167253f4e170 41482 { { 0xdc85a54773862ce4l,0x169051a3cc6f5d85l,0x8e3d3be0355f4df7l,
wolfSSL 14:167253f4e170 41483 0xa139d6fac72bac76l },
wolfSSL 14:167253f4e170 41484 { 0xddc95d0dfeb0a6f0l,0xd53f70e545cd6955l,0x18eede5e47e54112l,
wolfSSL 14:167253f4e170 41485 0x4a135dc9cbc6a52el },
wolfSSL 14:167253f4e170 41486 0 },
wolfSSL 14:167253f4e170 41487 /* 57 << 200 */
wolfSSL 14:167253f4e170 41488 { { 0x705a08ba90a58fb4l,0x10eef880fb3f8a64l,0x4ced9ba2f8e585ffl,
wolfSSL 14:167253f4e170 41489 0xb4f0f955fc6ebef5l },
wolfSSL 14:167253f4e170 41490 { 0x152c1a338d8b739el,0xb2be701db495bee5l,0xd27141a8d3540a74l,
wolfSSL 14:167253f4e170 41491 0x20c8a00247f9e9d7l },
wolfSSL 14:167253f4e170 41492 0 },
wolfSSL 14:167253f4e170 41493 /* 59 << 200 */
wolfSSL 14:167253f4e170 41494 { { 0x6d5ae921f5adcb3fl,0xaed1047003a3b610l,0x7c75e36f22256df9l,
wolfSSL 14:167253f4e170 41495 0xe664b36fb97dae99l },
wolfSSL 14:167253f4e170 41496 { 0x138b5eca91e746ael,0xb3e01ef5648674a7l,0xa3f256da9e375c74l,
wolfSSL 14:167253f4e170 41497 0xa00e82bc6a82d6f3l },
wolfSSL 14:167253f4e170 41498 0 },
wolfSSL 14:167253f4e170 41499 /* 60 << 200 */
wolfSSL 14:167253f4e170 41500 { { 0xe7a01eae6e28b4a8l,0xb3bf8224782166c9l,0x0b7ba2a06a244510l,
wolfSSL 14:167253f4e170 41501 0x9751a69c2abbb4dbl },
wolfSSL 14:167253f4e170 41502 { 0xb611adc1b3f9fcbcl,0x1d08eb3b436c4675l,0x1c71e98a20f96a64l,
wolfSSL 14:167253f4e170 41503 0x33d9b58c7ffd3f08l },
wolfSSL 14:167253f4e170 41504 0 },
wolfSSL 14:167253f4e170 41505 /* 61 << 200 */
wolfSSL 14:167253f4e170 41506 { { 0x7c7b03c1affa2d6cl,0x5f189bb9aec6e624l,0xe77a1eedadeff5e7l,
wolfSSL 14:167253f4e170 41507 0xfc58b90f4280b467l },
wolfSSL 14:167253f4e170 41508 { 0x561e5d579b71cb4el,0x8ed767aa36d6a17el,0x38d8671e8aa9e188l,
wolfSSL 14:167253f4e170 41509 0x7bc68f07a95350c0l },
wolfSSL 14:167253f4e170 41510 0 },
wolfSSL 14:167253f4e170 41511 /* 63 << 200 */
wolfSSL 14:167253f4e170 41512 { { 0xe0cd38cf98c01384l,0xc6741123a4226d9fl,0xdd1d42dbf877a0b8l,
wolfSSL 14:167253f4e170 41513 0xc5986ef0110b3cbal },
wolfSSL 14:167253f4e170 41514 { 0xeba949f809c8cebel,0x96b47bc4bd39f1dcl,0xbad140b6e07a2a3cl,
wolfSSL 14:167253f4e170 41515 0x2a8d80999ac5ca8al },
wolfSSL 14:167253f4e170 41516 0 },
wolfSSL 14:167253f4e170 41517 /* 64 << 200 */
wolfSSL 14:167253f4e170 41518 { { 0x39d934abd3c095f1l,0x04b261bee4b76d71l,0x1d2e6970e73e6984l,
wolfSSL 14:167253f4e170 41519 0x879fb23b5e5fcb11l },
wolfSSL 14:167253f4e170 41520 { 0x11506c72dfd75490l,0x3a97d08561bcf1c1l,0x43201d82bf5e7007l,
wolfSSL 14:167253f4e170 41521 0x7f0ac52f798232a7l },
wolfSSL 14:167253f4e170 41522 0 },
wolfSSL 14:167253f4e170 41523 /* 65 << 200 */
wolfSSL 14:167253f4e170 41524 { { 0x8cf27618590ca850l,0x58134f6f44bb94f2l,0x0a147562b78b4eecl,
wolfSSL 14:167253f4e170 41525 0x2e5986e39f1ed647l },
wolfSSL 14:167253f4e170 41526 { 0x9becf893348393b0l,0xaea21b92c31c2a86l,0x3d69859e5ff1b9a6l,
wolfSSL 14:167253f4e170 41527 0x6fcd19f4cd805691l },
wolfSSL 14:167253f4e170 41528 0 },
wolfSSL 14:167253f4e170 41529 /* 71 << 200 */
wolfSSL 14:167253f4e170 41530 { { 0x81619bd4841f43c3l,0x3a3325538e5c61f0l,0x2b68921eda862151l,
wolfSSL 14:167253f4e170 41531 0x97f5c8a741a491f8l },
wolfSSL 14:167253f4e170 41532 { 0x8b452094d3b9afa0l,0x93b2b7b4f2124dbcl,0x53285e7d26e0e26dl,
wolfSSL 14:167253f4e170 41533 0x3f003fc5c8a24edel },
wolfSSL 14:167253f4e170 41534 0 },
wolfSSL 14:167253f4e170 41535 /* 77 << 200 */
wolfSSL 14:167253f4e170 41536 { { 0x4cdabb586c025824l,0x5935ad1586bfcd7dl,0x8ce2c3101b7c5533l,
wolfSSL 14:167253f4e170 41537 0x761c9fe96cae8808l },
wolfSSL 14:167253f4e170 41538 { 0x8a0723f5d9e66d70l,0xb640b323dcced11dl,0x5768528051ae548cl,
wolfSSL 14:167253f4e170 41539 0x83576f75d53f3f2cl },
wolfSSL 14:167253f4e170 41540 0 },
wolfSSL 14:167253f4e170 41541 /* 83 << 200 */
wolfSSL 14:167253f4e170 41542 { { 0xc715edc47b532ec3l,0x159765e6c4a6e14bl,0x4a74f15228cd2d45l,
wolfSSL 14:167253f4e170 41543 0xbfd309edae8c753bl },
wolfSSL 14:167253f4e170 41544 { 0xf56bb5315d6d5245l,0x2c89c21833b30a55l,0xe436141acd4ed5fal,
wolfSSL 14:167253f4e170 41545 0x7eb7a5c707868ee6l },
wolfSSL 14:167253f4e170 41546 0 },
wolfSSL 14:167253f4e170 41547 /* 89 << 200 */
wolfSSL 14:167253f4e170 41548 { { 0x9a3ad3ffb0c7c48cl,0x25e8d977738e3638l,0xbb6c6c9d1c024074l,
wolfSSL 14:167253f4e170 41549 0xeda1ac0f8cfdf416l },
wolfSSL 14:167253f4e170 41550 { 0x93059ba538de49e2l,0xdb199cfc1b9ce741l,0x49b05e9446f3b494l,
wolfSSL 14:167253f4e170 41551 0x717cafc606480902l },
wolfSSL 14:167253f4e170 41552 0 },
wolfSSL 14:167253f4e170 41553 /* 95 << 200 */
wolfSSL 14:167253f4e170 41554 { { 0x8d27421052885708l,0x9d2297fd74e5b9b5l,0xe7cb6a68dc4d7318l,
wolfSSL 14:167253f4e170 41555 0x0b60b0d276357b31l },
wolfSSL 14:167253f4e170 41556 { 0x57301994532c2095l,0xfbae2ba203373452l,0xe8020b20ba700583l,
wolfSSL 14:167253f4e170 41557 0x1ca7772c2988919cl },
wolfSSL 14:167253f4e170 41558 0 },
wolfSSL 14:167253f4e170 41559 /* 101 << 200 */
wolfSSL 14:167253f4e170 41560 { { 0x723296eb918f3eecl,0x358c9ff0b79901c6l,0x64a1934c8d5e814cl,
wolfSSL 14:167253f4e170 41561 0x7e5a9afced165177l },
wolfSSL 14:167253f4e170 41562 { 0xd783840168733e7al,0xfcf3c0b6f61ede6dl,0x94ec0bf08434e804l,
wolfSSL 14:167253f4e170 41563 0xa5a70153c192c1cdl },
wolfSSL 14:167253f4e170 41564 0 },
wolfSSL 14:167253f4e170 41565 /* 107 << 200 */
wolfSSL 14:167253f4e170 41566 { { 0x03cdf976c23e49d4l,0x51e5cfa5a2ae72d5l,0x7716faa3100f7a51l,
wolfSSL 14:167253f4e170 41567 0xc53153a2c14dc015l },
wolfSSL 14:167253f4e170 41568 { 0xe7c69b052b47ec18l,0xff4756907ea93b01l,0x55fde3c540a2f205l,
wolfSSL 14:167253f4e170 41569 0x0263d0b12f85aed6l },
wolfSSL 14:167253f4e170 41570 0 },
wolfSSL 14:167253f4e170 41571 /* 113 << 200 */
wolfSSL 14:167253f4e170 41572 { { 0x668c56619686fe30l,0x382a8ccd8f73a476l,0xda012cbfb40a85e7l,
wolfSSL 14:167253f4e170 41573 0x55ea1e72e9e88b91l },
wolfSSL 14:167253f4e170 41574 { 0x8312556088cc5afcl,0x44ae54cbc45b19c7l,0xc91fffa8f86a02cdl,
wolfSSL 14:167253f4e170 41575 0xc79f573752d7e89bl },
wolfSSL 14:167253f4e170 41576 0 },
wolfSSL 14:167253f4e170 41577 /* 116 << 200 */
wolfSSL 14:167253f4e170 41578 { { 0x652b50523e357579l,0x08ce7d3a2afe5746l,0x9dc1cca6f71a12efl,
wolfSSL 14:167253f4e170 41579 0x80a221c24f6c4196l },
wolfSSL 14:167253f4e170 41580 { 0xdde40eff0f49f508l,0x7995bb46913b0dc3l,0x4adbdeb385e44f6el,
wolfSSL 14:167253f4e170 41581 0x6816bb3ab222e4bbl },
wolfSSL 14:167253f4e170 41582 0 },
wolfSSL 14:167253f4e170 41583 /* 119 << 200 */
wolfSSL 14:167253f4e170 41584 { { 0xce1ee518579a1a4dl,0x5d86e8912bc3870al,0x230878d18da907c4l,
wolfSSL 14:167253f4e170 41585 0xc648392777ae7ea8l },
wolfSSL 14:167253f4e170 41586 { 0x64319653016c0ad7l,0x7cbfa0b0b71f20dal,0xbf087dc3395ed4d8l,
wolfSSL 14:167253f4e170 41587 0x59512add307d218dl },
wolfSSL 14:167253f4e170 41588 0 },
wolfSSL 14:167253f4e170 41589 /* 125 << 200 */
wolfSSL 14:167253f4e170 41590 { { 0x7378a969d8ae335el,0x11c69965506d3a42l,0x212539769949468al,
wolfSSL 14:167253f4e170 41591 0x570cf87e64995050l },
wolfSSL 14:167253f4e170 41592 { 0xf300ad2e30b94e22l,0xbc159cf8f36dad32l,0xdff3b3767ca8aa6al,
wolfSSL 14:167253f4e170 41593 0xa5de93b5627fb9e7l },
wolfSSL 14:167253f4e170 41594 0 },
wolfSSL 14:167253f4e170 41595 },
wolfSSL 14:167253f4e170 41596 {
wolfSSL 14:167253f4e170 41597 /* 0 << 208 */
wolfSSL 14:167253f4e170 41598 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 41599 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 41600 1 },
wolfSSL 14:167253f4e170 41601 /* 1 << 208 */
wolfSSL 14:167253f4e170 41602 { { 0x75d9bc15adf7cccfl,0x81a3e5d6dfa1e1b0l,0x8c39e444249bc17el,
wolfSSL 14:167253f4e170 41603 0xf37dccb28ea7fd43l },
wolfSSL 14:167253f4e170 41604 { 0xda654873907fba12l,0x35daa6da4a372904l,0x0564cfc66283a6c5l,
wolfSSL 14:167253f4e170 41605 0xd09fa4f64a9395bfl },
wolfSSL 14:167253f4e170 41606 0 },
wolfSSL 14:167253f4e170 41607 /* 3 << 208 */
wolfSSL 14:167253f4e170 41608 { { 0xc51aa29e5cfe5c48l,0x82c020ae815ee096l,0x7848ad827549a68al,
wolfSSL 14:167253f4e170 41609 0x7933d48960471355l },
wolfSSL 14:167253f4e170 41610 { 0x04998d2e67c51e57l,0x0f64020ad9944afcl,0x7a299fe1a7fadac6l,
wolfSSL 14:167253f4e170 41611 0x40c73ff45aefe92cl },
wolfSSL 14:167253f4e170 41612 0 },
wolfSSL 14:167253f4e170 41613 /* 4 << 208 */
wolfSSL 14:167253f4e170 41614 { { 0xe5f649be9d8e68fdl,0xdb0f05331b044320l,0xf6fde9b3e0c33398l,
wolfSSL 14:167253f4e170 41615 0x92f4209b66c8cfael },
wolfSSL 14:167253f4e170 41616 { 0xe9d1afcc1a739d4bl,0x09aea75fa28ab8del,0x14375fb5eac6f1d0l,
wolfSSL 14:167253f4e170 41617 0x6420b560708f7aa5l },
wolfSSL 14:167253f4e170 41618 0 },
wolfSSL 14:167253f4e170 41619 /* 5 << 208 */
wolfSSL 14:167253f4e170 41620 { { 0xbf44ffc75488771al,0xcb76e3f17f2f2191l,0x4197bde394f86a42l,
wolfSSL 14:167253f4e170 41621 0x45c25bb970641d9al },
wolfSSL 14:167253f4e170 41622 { 0xd8a29e31f88ce6dcl,0xbe2becfd4bb7ac7dl,0x13094214b5670cc7l,
wolfSSL 14:167253f4e170 41623 0xe90a8fd560af8433l },
wolfSSL 14:167253f4e170 41624 0 },
wolfSSL 14:167253f4e170 41625 /* 7 << 208 */
wolfSSL 14:167253f4e170 41626 { { 0x0ecf9b8b4ebd3f02l,0xa47acd9d86b770eal,0x93b84a6a2da213cel,
wolfSSL 14:167253f4e170 41627 0xd760871b53e7c8cfl },
wolfSSL 14:167253f4e170 41628 { 0x7a5f58e536e530d7l,0x7abc52a51912ad51l,0x7ad43db02ea0252al,
wolfSSL 14:167253f4e170 41629 0x498b00ecc176b742l },
wolfSSL 14:167253f4e170 41630 0 },
wolfSSL 14:167253f4e170 41631 /* 9 << 208 */
wolfSSL 14:167253f4e170 41632 { { 0x9ff713ef888ae17fl,0x6007f68fb34b7bebl,0x5d2b18983b653d64l,
wolfSSL 14:167253f4e170 41633 0xcbf73e91d3ca4b1bl },
wolfSSL 14:167253f4e170 41634 { 0x4b050ad56cdfb3a1l,0x41bd3ec3d1f833a4l,0x78d7e2ee719d7bf5l,
wolfSSL 14:167253f4e170 41635 0xea4604672a27412el },
wolfSSL 14:167253f4e170 41636 0 },
wolfSSL 14:167253f4e170 41637 /* 10 << 208 */
wolfSSL 14:167253f4e170 41638 { { 0x7dad6d1b42cd7900l,0xb6e6b439e058f8a4l,0x8836f1e662aa3bbcl,
wolfSSL 14:167253f4e170 41639 0xd45bf2c811142b0al },
wolfSSL 14:167253f4e170 41640 { 0xae324bac3c045ed1l,0x372be24d270a8333l,0xeeda7a3a6b7c73b6l,
wolfSSL 14:167253f4e170 41641 0xf6675402db49562al },
wolfSSL 14:167253f4e170 41642 0 },
wolfSSL 14:167253f4e170 41643 /* 11 << 208 */
wolfSSL 14:167253f4e170 41644 { { 0xc312ba68441e760dl,0x84d0d061a50e512el,0xfe764f4e4bbdd849l,
wolfSSL 14:167253f4e170 41645 0xa924adcf9dadd5c0l },
wolfSSL 14:167253f4e170 41646 { 0x08685961debfe976l,0xd3d846c529fba601l,0x43bf8227dc3f4040l,
wolfSSL 14:167253f4e170 41647 0x05e767b8a49e9ff5l },
wolfSSL 14:167253f4e170 41648 0 },
wolfSSL 14:167253f4e170 41649 /* 13 << 208 */
wolfSSL 14:167253f4e170 41650 { { 0xc4689c309953e453l,0x5e355a2e1712dca5l,0x1ff83c81f1cd96f7l,
wolfSSL 14:167253f4e170 41651 0xb06b89fb44cf56dbl },
wolfSSL 14:167253f4e170 41652 { 0x1827705365f16e0dl,0x6403b91de5618672l,0xba3f9475be384bc6l,
wolfSSL 14:167253f4e170 41653 0x7f691cbe303ce5f3l },
wolfSSL 14:167253f4e170 41654 0 },
wolfSSL 14:167253f4e170 41655 /* 15 << 208 */
wolfSSL 14:167253f4e170 41656 { { 0x4589ba03210f4045l,0xd5e7366301e8012al,0x1c26052d74462ffal,
wolfSSL 14:167253f4e170 41657 0xe78f600c4f989519l },
wolfSSL 14:167253f4e170 41658 { 0xc63ca0c97cee0b2fl,0xbe588573af760b5fl,0x05906fc4593773cdl,
wolfSSL 14:167253f4e170 41659 0xd5970fb0e322d5afl },
wolfSSL 14:167253f4e170 41660 0 },
wolfSSL 14:167253f4e170 41661 /* 16 << 208 */
wolfSSL 14:167253f4e170 41662 { { 0x103c46e60ebcf726l,0x4482b8316231470el,0x6f6dfaca487c2109l,
wolfSSL 14:167253f4e170 41663 0x2e0ace9762e666efl },
wolfSSL 14:167253f4e170 41664 { 0x3246a9d31f8d1f42l,0x1b1e83f1574944d2l,0x13dfa63aa57f334bl,
wolfSSL 14:167253f4e170 41665 0x0cf8daed9f025d81l },
wolfSSL 14:167253f4e170 41666 0 },
wolfSSL 14:167253f4e170 41667 /* 17 << 208 */
wolfSSL 14:167253f4e170 41668 { { 0xf67c098aae0690aal,0x1a4656422b7bc62bl,0xaffc6b917220dea2l,
wolfSSL 14:167253f4e170 41669 0xd97ac543d2552deel },
wolfSSL 14:167253f4e170 41670 { 0x1f84514a7e816b8el,0xe9887e81a8f38552l,0x2e6358e6847ad46bl,
wolfSSL 14:167253f4e170 41671 0x1f67871e6bc9895el },
wolfSSL 14:167253f4e170 41672 0 },
wolfSSL 14:167253f4e170 41673 /* 19 << 208 */
wolfSSL 14:167253f4e170 41674 { { 0x2462b6e0d47f43fal,0x71db3610d8a245e5l,0x0c26b0e734208974l,
wolfSSL 14:167253f4e170 41675 0x0cd6d49d2029bd2el },
wolfSSL 14:167253f4e170 41676 { 0xf207c9f6091922b8l,0x0c476c5c7f0fbf66l,0x6de7efb2295d6da8l,
wolfSSL 14:167253f4e170 41677 0xea054ee10ced6cfel },
wolfSSL 14:167253f4e170 41678 0 },
wolfSSL 14:167253f4e170 41679 /* 21 << 208 */
wolfSSL 14:167253f4e170 41680 { { 0xd21496e3e9bd795cl,0xf293f617c6a557del,0x9d041b7239a45642l,
wolfSSL 14:167253f4e170 41681 0xe8353dab4ac87f80l },
wolfSSL 14:167253f4e170 41682 { 0x21e9f35620d8d019l,0x1f4adca9d2fb2668l,0xe5f68227dfecd64al,
wolfSSL 14:167253f4e170 41683 0x10d71b79d7f09ec0l },
wolfSSL 14:167253f4e170 41684 0 },
wolfSSL 14:167253f4e170 41685 /* 23 << 208 */
wolfSSL 14:167253f4e170 41686 { { 0xca3f068999f87118l,0x99a933911b2417f0l,0xa383481a3d1f70e5l,
wolfSSL 14:167253f4e170 41687 0x7a31a6c833b14414l },
wolfSSL 14:167253f4e170 41688 { 0x9d60f4368b2a9931l,0xd4c97ded80588534l,0x7cb29e82ab6a8bdal,
wolfSSL 14:167253f4e170 41689 0x3799bdad97b4c45al },
wolfSSL 14:167253f4e170 41690 0 },
wolfSSL 14:167253f4e170 41691 /* 25 << 208 */
wolfSSL 14:167253f4e170 41692 { { 0x51da0ff629011af3l,0xcbb03c809a4f0855l,0xea3536725555b10bl,
wolfSSL 14:167253f4e170 41693 0x4bf94e025c7da97el },
wolfSSL 14:167253f4e170 41694 { 0x384352f5ff713300l,0xb2c2b675192d41e6l,0x4ff66861625ca046l,
wolfSSL 14:167253f4e170 41695 0xf0f5e472013dddc4l },
wolfSSL 14:167253f4e170 41696 0 },
wolfSSL 14:167253f4e170 41697 /* 27 << 208 */
wolfSSL 14:167253f4e170 41698 { { 0x38c44cdc59987914l,0xad7f2829757fb853l,0x9aabf1c8688e3342l,
wolfSSL 14:167253f4e170 41699 0xbe0f1e4ef534c850l },
wolfSSL 14:167253f4e170 41700 { 0x732cac652ec24ecal,0x9328b657933bb5e4l,0xe2747ff60bb31033l,
wolfSSL 14:167253f4e170 41701 0xdbaab72cfcdc36acl },
wolfSSL 14:167253f4e170 41702 0 },
wolfSSL 14:167253f4e170 41703 /* 28 << 208 */
wolfSSL 14:167253f4e170 41704 { { 0x0e5e3049a639fc6bl,0xe75c35d986003625l,0x0cf35bd85dcc1646l,
wolfSSL 14:167253f4e170 41705 0x8bcaced26c26273al },
wolfSSL 14:167253f4e170 41706 { 0xe22ecf1db5536742l,0x013dd8971a9e068bl,0x17f411cb8a7909c5l,
wolfSSL 14:167253f4e170 41707 0x5757ac98861dd506l },
wolfSSL 14:167253f4e170 41708 0 },
wolfSSL 14:167253f4e170 41709 /* 29 << 208 */
wolfSSL 14:167253f4e170 41710 { { 0xaf410d5aac66a3e8l,0x39fcbffb2031f658l,0xd29e58c947ce11fbl,
wolfSSL 14:167253f4e170 41711 0x7f0b874965f73e49l },
wolfSSL 14:167253f4e170 41712 { 0xedc30f4b27fea6c6l,0xe03b9103d2baa340l,0xa7bb3f17ae680612l,
wolfSSL 14:167253f4e170 41713 0xe06656a8197af6f0l },
wolfSSL 14:167253f4e170 41714 0 },
wolfSSL 14:167253f4e170 41715 /* 31 << 208 */
wolfSSL 14:167253f4e170 41716 { { 0x84562095bff86165l,0x994194e916bc7589l,0xb1320c7ec14c6710l,
wolfSSL 14:167253f4e170 41717 0x508a8d7f766e978fl },
wolfSSL 14:167253f4e170 41718 { 0xd04adc9ec7e1f6fel,0x7bafaff68398cecfl,0x906df2fccef3b934l,
wolfSSL 14:167253f4e170 41719 0xc65afe18f3008c38l },
wolfSSL 14:167253f4e170 41720 0 },
wolfSSL 14:167253f4e170 41721 /* 33 << 208 */
wolfSSL 14:167253f4e170 41722 { { 0x477ffeeeab983130l,0x5426363a96e83d55l,0xcf0370a15204af42l,
wolfSSL 14:167253f4e170 41723 0x99834414b5a6ea8fl },
wolfSSL 14:167253f4e170 41724 { 0xf475ba711ab4ee8al,0x8486da5d0102d8f2l,0x55082e713839c821l,
wolfSSL 14:167253f4e170 41725 0xa57e58395b65defal },
wolfSSL 14:167253f4e170 41726 0 },
wolfSSL 14:167253f4e170 41727 /* 34 << 208 */
wolfSSL 14:167253f4e170 41728 { { 0x34b2185bbbb33a76l,0x189038b7d48158c2l,0xfa32eb90e9e90217l,
wolfSSL 14:167253f4e170 41729 0x79271771730e74dfl },
wolfSSL 14:167253f4e170 41730 { 0x315ed8c2a5d01ffdl,0x9799dae723e6a95el,0x40070aa016f5715al,
wolfSSL 14:167253f4e170 41731 0x40e6c0ca5ea51f8cl },
wolfSSL 14:167253f4e170 41732 0 },
wolfSSL 14:167253f4e170 41733 /* 35 << 208 */
wolfSSL 14:167253f4e170 41734 { { 0x099c0570d8132163l,0xcd5508a3023dbbf3l,0x18162ff526bfe6a6l,
wolfSSL 14:167253f4e170 41735 0xf39e071144bbb455l },
wolfSSL 14:167253f4e170 41736 { 0x49664996eaa3cf96l,0x1c6442d5e2649be9l,0x6199f740c01d269dl,
wolfSSL 14:167253f4e170 41737 0x4be605ee37542c11l },
wolfSSL 14:167253f4e170 41738 0 },
wolfSSL 14:167253f4e170 41739 /* 36 << 208 */
wolfSSL 14:167253f4e170 41740 { { 0xc7313e9cf36658f0l,0xc433ef1c71f8057el,0x853262461b6a835al,
wolfSSL 14:167253f4e170 41741 0xc8f053987c86394cl },
wolfSSL 14:167253f4e170 41742 { 0xff398cdfe983c4a1l,0xbf5e816203b7b931l,0x93193c46b7b9045bl,
wolfSSL 14:167253f4e170 41743 0x1e4ebf5da4a6e46bl },
wolfSSL 14:167253f4e170 41744 0 },
wolfSSL 14:167253f4e170 41745 /* 37 << 208 */
wolfSSL 14:167253f4e170 41746 { { 0xd032fbfd0dbf82b4l,0x707181f668e58969l,0xef434381e7be2d5el,
wolfSSL 14:167253f4e170 41747 0x290669176f2c64ddl },
wolfSSL 14:167253f4e170 41748 { 0xf66cffc3772769abl,0x68d8a76a17aad01cl,0xdd3991c590f6e078l,
wolfSSL 14:167253f4e170 41749 0xdb74db06ea4ac7dcl },
wolfSSL 14:167253f4e170 41750 0 },
wolfSSL 14:167253f4e170 41751 /* 39 << 208 */
wolfSSL 14:167253f4e170 41752 { { 0x9f34a7c11c78be71l,0x7bf2f2d149ca6987l,0xb528a514dcd34afcl,
wolfSSL 14:167253f4e170 41753 0x4dddb3f1183a68b1l },
wolfSSL 14:167253f4e170 41754 { 0x54d2626660b83883l,0x9073e4e0e0cd8dadl,0xbd2b837d9eb818b2l,
wolfSSL 14:167253f4e170 41755 0x5fa5f9086ae2e32dl },
wolfSSL 14:167253f4e170 41756 0 },
wolfSSL 14:167253f4e170 41757 /* 40 << 208 */
wolfSSL 14:167253f4e170 41758 { { 0xf9942a6043a24fe7l,0x29c1191effb3492bl,0x9f662449902fde05l,
wolfSSL 14:167253f4e170 41759 0xc792a7ac6713c32dl },
wolfSSL 14:167253f4e170 41760 { 0x2fd88ad8b737982cl,0x7e3a0319a21e60e3l,0x09b0de447383591al,
wolfSSL 14:167253f4e170 41761 0x6df141ee8310a456l },
wolfSSL 14:167253f4e170 41762 0 },
wolfSSL 14:167253f4e170 41763 /* 41 << 208 */
wolfSSL 14:167253f4e170 41764 { { 0xcd02ba1e0df98a64l,0x301b6bfa03f5676el,0x41e1a8d4a2fe4090l,
wolfSSL 14:167253f4e170 41765 0x489c1cbf47f0e1dcl },
wolfSSL 14:167253f4e170 41766 { 0x4171a98c20760847l,0xdcb21cee77af4796l,0x5fb0f0c9d0b7e981l,
wolfSSL 14:167253f4e170 41767 0x4c2791dff33b9f8dl },
wolfSSL 14:167253f4e170 41768 0 },
wolfSSL 14:167253f4e170 41769 /* 43 << 208 */
wolfSSL 14:167253f4e170 41770 { { 0x95d7ec0c50420a50l,0x5794665c2a6756d5l,0x73558c6e9101e7f5l,
wolfSSL 14:167253f4e170 41771 0xa3fa0f8c1642af0el },
wolfSSL 14:167253f4e170 41772 { 0xa11b309b4ee43551l,0x3939de30cb8fc712l,0x9710f2320fde8921l,
wolfSSL 14:167253f4e170 41773 0x2a4db2d5cae8b41cl },
wolfSSL 14:167253f4e170 41774 0 },
wolfSSL 14:167253f4e170 41775 /* 44 << 208 */
wolfSSL 14:167253f4e170 41776 { { 0xaec1a039e6d6f471l,0x14b2ba0f1198d12el,0xebc1a1603aeee5acl,
wolfSSL 14:167253f4e170 41777 0x401f4836e0b964cel },
wolfSSL 14:167253f4e170 41778 { 0x2ee437964fd03f66l,0x3fdb4e49dd8f3f12l,0x6ef267f629380f18l,
wolfSSL 14:167253f4e170 41779 0x3e8e96708da64d16l },
wolfSSL 14:167253f4e170 41780 0 },
wolfSSL 14:167253f4e170 41781 /* 45 << 208 */
wolfSSL 14:167253f4e170 41782 { { 0xdf6cdac0bc4c78adl,0xbe9e32182e97376el,0xa37f9d8b1a139274l,
wolfSSL 14:167253f4e170 41783 0x7640c3982807128el },
wolfSSL 14:167253f4e170 41784 { 0xe9735166c05b5f85l,0xbccd3675100e5716l,0x51376a293e5c9682l,
wolfSSL 14:167253f4e170 41785 0x95efe088848f6aeal },
wolfSSL 14:167253f4e170 41786 0 },
wolfSSL 14:167253f4e170 41787 /* 46 << 208 */
wolfSSL 14:167253f4e170 41788 { { 0xfac2d7dd23d14105l,0xdda17149a9136f52l,0xb9f3a9c672d1a99bl,
wolfSSL 14:167253f4e170 41789 0x2fcf532a142c3b20l },
wolfSSL 14:167253f4e170 41790 { 0xc2731f1e61190c1bl,0x26dbe810a76509e4l,0xc96cc431908bb92fl,
wolfSSL 14:167253f4e170 41791 0x5661a84d80e3e694l },
wolfSSL 14:167253f4e170 41792 0 },
wolfSSL 14:167253f4e170 41793 /* 47 << 208 */
wolfSSL 14:167253f4e170 41794 { { 0x5194d144150ba121l,0x8de57c48b6b11561l,0x803228da96c156d9l,
wolfSSL 14:167253f4e170 41795 0x2112e4250a8f6376l },
wolfSSL 14:167253f4e170 41796 { 0x15436294643449ffl,0xfc3880add4118cd0l,0x16ed90731e3f7413l,
wolfSSL 14:167253f4e170 41797 0xa400699901d38d6dl },
wolfSSL 14:167253f4e170 41798 0 },
wolfSSL 14:167253f4e170 41799 /* 48 << 208 */
wolfSSL 14:167253f4e170 41800 { { 0xbc19180c207674f1l,0x112e09a733ae8fdbl,0x996675546aaeb71el,
wolfSSL 14:167253f4e170 41801 0x79432af1e101b1c7l },
wolfSSL 14:167253f4e170 41802 { 0xd5eb558fde2ddec6l,0x81392d1f5357753fl,0xa7a76b973ae1158al,
wolfSSL 14:167253f4e170 41803 0x416fbbff4a899991l },
wolfSSL 14:167253f4e170 41804 0 },
wolfSSL 14:167253f4e170 41805 /* 49 << 208 */
wolfSSL 14:167253f4e170 41806 { { 0xf84c9147c52d7384l,0x86391accec01efa6l,0xffd68616f9c6f3f4l,
wolfSSL 14:167253f4e170 41807 0xc7536461b17c2de6l },
wolfSSL 14:167253f4e170 41808 { 0xa81f4ba10121abdfl,0xa068a2e26f6eae27l,0xe0ee90350eb159f0l,
wolfSSL 14:167253f4e170 41809 0x4c48f761fd8c4b9cl },
wolfSSL 14:167253f4e170 41810 0 },
wolfSSL 14:167253f4e170 41811 /* 51 << 208 */
wolfSSL 14:167253f4e170 41812 { { 0x4b6d71e87790000cl,0xced195744ce9293el,0xc25626a3747585e8l,
wolfSSL 14:167253f4e170 41813 0xb8307d22d7044270l },
wolfSSL 14:167253f4e170 41814 { 0xf08e7ef6117c24cbl,0xae6403162f660d04l,0xbc3ffdcff224a2fdl,
wolfSSL 14:167253f4e170 41815 0x1ebc0328d0586c7el },
wolfSSL 14:167253f4e170 41816 0 },
wolfSSL 14:167253f4e170 41817 /* 52 << 208 */
wolfSSL 14:167253f4e170 41818 { { 0x9e65fdfd0d4a9dcfl,0x7bc29e48944ddf12l,0xbc1a92d93c856866l,
wolfSSL 14:167253f4e170 41819 0x273c69056e98dfe2l },
wolfSSL 14:167253f4e170 41820 { 0x69fce418cdfaa6b8l,0x606bd8235061c69fl,0x42d495a06af75e27l,
wolfSSL 14:167253f4e170 41821 0x8ed3d5056d873a1fl },
wolfSSL 14:167253f4e170 41822 0 },
wolfSSL 14:167253f4e170 41823 /* 53 << 208 */
wolfSSL 14:167253f4e170 41824 { { 0x46b160e5a6022278l,0x86b1d50cc30a51fcl,0xe898ac0e684b81b7l,
wolfSSL 14:167253f4e170 41825 0x04d591e277b93597l },
wolfSSL 14:167253f4e170 41826 { 0xd20cac347626e18al,0xb49c941f0a968733l,0x054e6e7e21631627l,
wolfSSL 14:167253f4e170 41827 0xd6d33db9d4c716b1l },
wolfSSL 14:167253f4e170 41828 0 },
wolfSSL 14:167253f4e170 41829 /* 55 << 208 */
wolfSSL 14:167253f4e170 41830 { { 0xaa79ab4bf91e9b75l,0x7df3235bd34d961dl,0x9f3954e6534a40e1l,
wolfSSL 14:167253f4e170 41831 0x80f88d2c790b4456l },
wolfSSL 14:167253f4e170 41832 { 0x98f7711b21e9fb2al,0x0a04c318877d27e6l,0x499b7c2412338848l,
wolfSSL 14:167253f4e170 41833 0x0b1dbe9ccd5e7ec3l },
wolfSSL 14:167253f4e170 41834 0 },
wolfSSL 14:167253f4e170 41835 /* 57 << 208 */
wolfSSL 14:167253f4e170 41836 { { 0xb430ff44e04715ffl,0x671358d565d076d0l,0x3946d38f22c3aa06l,
wolfSSL 14:167253f4e170 41837 0x80919ea363b2d627l },
wolfSSL 14:167253f4e170 41838 { 0x14ffa219e8790922l,0xfe1d895ae8d89c48l,0x717e9e51748e806el,
wolfSSL 14:167253f4e170 41839 0xb91e1ddf550d711dl },
wolfSSL 14:167253f4e170 41840 0 },
wolfSSL 14:167253f4e170 41841 /* 59 << 208 */
wolfSSL 14:167253f4e170 41842 { { 0x8aac26225f540127l,0x57cd5d7cba25f742l,0x87006a6b1df7a0fcl,
wolfSSL 14:167253f4e170 41843 0x88e9ab863ecbf26cl },
wolfSSL 14:167253f4e170 41844 { 0xe1b8155f9143b314l,0xc00196130b679bddl,0x819e7b61a1871d07l,
wolfSSL 14:167253f4e170 41845 0xc36e7892cc2c9cc9l },
wolfSSL 14:167253f4e170 41846 0 },
wolfSSL 14:167253f4e170 41847 /* 60 << 208 */
wolfSSL 14:167253f4e170 41848 { { 0x4b03c55b8e33787fl,0xef42f975a6384673l,0xff7304f75051b9f0l,
wolfSSL 14:167253f4e170 41849 0x18aca1dc741c87c2l },
wolfSSL 14:167253f4e170 41850 { 0x56f120a72d4bfe80l,0xfd823b3d053e732cl,0x11bccfe47537ca16l,
wolfSSL 14:167253f4e170 41851 0xdf6c9c741b5a996bl },
wolfSSL 14:167253f4e170 41852 0 },
wolfSSL 14:167253f4e170 41853 /* 61 << 208 */
wolfSSL 14:167253f4e170 41854 { { 0x65729b05301ee370l,0x3ed09a2a24c2824cl,0x781ef66a33481977l,
wolfSSL 14:167253f4e170 41855 0xf2ccdeec193506d0l },
wolfSSL 14:167253f4e170 41856 { 0x92b4f70d703422d6l,0x7f004a43f80a1b99l,0x47db23607a856445l,
wolfSSL 14:167253f4e170 41857 0x783a8dd1ce5b0622l },
wolfSSL 14:167253f4e170 41858 0 },
wolfSSL 14:167253f4e170 41859 /* 63 << 208 */
wolfSSL 14:167253f4e170 41860 { { 0x7febefd34e9aac5al,0x601c89e2bdd6173el,0x79b08930c257431el,
wolfSSL 14:167253f4e170 41861 0x915d601d399ee099l },
wolfSSL 14:167253f4e170 41862 { 0xfa48347eca02acd2l,0xc33249baeeb7ccedl,0xd76e408755704722l,
wolfSSL 14:167253f4e170 41863 0xd3709c600dcf4878l },
wolfSSL 14:167253f4e170 41864 0 },
wolfSSL 14:167253f4e170 41865 /* 64 << 208 */
wolfSSL 14:167253f4e170 41866 { { 0xee7332c7904fc3fal,0x14a23f45c7e3636al,0xc38659c3f091d9aal,
wolfSSL 14:167253f4e170 41867 0x4a995e5db12d8540l },
wolfSSL 14:167253f4e170 41868 { 0x20a53becf3a5598al,0x56534b17b1eaa995l,0x9ed3dca4bf04e03cl,
wolfSSL 14:167253f4e170 41869 0x716c563ad8d56268l },
wolfSSL 14:167253f4e170 41870 0 },
wolfSSL 14:167253f4e170 41871 /* 65 << 208 */
wolfSSL 14:167253f4e170 41872 { { 0x963353201580f3adl,0x6c495304b0cd50d4l,0xd035cdc7555ff981l,
wolfSSL 14:167253f4e170 41873 0xe65cd063c6b6bdfbl },
wolfSSL 14:167253f4e170 41874 { 0x7deb3cbb437e749cl,0xa9de9f3db5dc24a1l,0xe2e76a2b35c29ffal,
wolfSSL 14:167253f4e170 41875 0x4d35e261323ba650l },
wolfSSL 14:167253f4e170 41876 0 },
wolfSSL 14:167253f4e170 41877 /* 71 << 208 */
wolfSSL 14:167253f4e170 41878 { { 0x52c46fc8c89e2766l,0x7330b02bb945e5f2l,0xc77ef75c2673ebbcl,
wolfSSL 14:167253f4e170 41879 0x1740e72657c33783l },
wolfSSL 14:167253f4e170 41880 { 0xf0312d29623565fbl,0xff9f707af0ca1ed9l,0xb98609ca5ea51a4al,
wolfSSL 14:167253f4e170 41881 0xde86b9a87b5cc91fl },
wolfSSL 14:167253f4e170 41882 0 },
wolfSSL 14:167253f4e170 41883 /* 77 << 208 */
wolfSSL 14:167253f4e170 41884 { { 0x0dece4badca158b7l,0x5e39baf6a3e9f837l,0xcf14e6dc4d57b640l,
wolfSSL 14:167253f4e170 41885 0x0548aaa4b67bcbe7l },
wolfSSL 14:167253f4e170 41886 { 0xb6cf5b393c90e434l,0xf8b3c5645006f3abl,0xa74e92859bf04bd9l,
wolfSSL 14:167253f4e170 41887 0xf59a3a6bf99c8977l },
wolfSSL 14:167253f4e170 41888 0 },
wolfSSL 14:167253f4e170 41889 /* 83 << 208 */
wolfSSL 14:167253f4e170 41890 { { 0x652ca66ac5b072d5l,0x2102b55993ad4928l,0x1b5f192d88210f9bl,
wolfSSL 14:167253f4e170 41891 0xb18710144c6ad7e5l },
wolfSSL 14:167253f4e170 41892 { 0x3979fde3bc0abf13l,0xb5cb4c7dac3fd631l,0x4aedffa6c200ec7bl,
wolfSSL 14:167253f4e170 41893 0x8aed81ceaddf3610l },
wolfSSL 14:167253f4e170 41894 0 },
wolfSSL 14:167253f4e170 41895 /* 89 << 208 */
wolfSSL 14:167253f4e170 41896 { { 0x72b48105abeefbael,0x0e9e6e41827bb22bl,0xf45ada151e52a848l,
wolfSSL 14:167253f4e170 41897 0xb8e94579534867a2l },
wolfSSL 14:167253f4e170 41898 { 0x3a08773b7adb0fdcl,0xe7133a28b83316dfl,0xc8b7b08c5bb41470l,
wolfSSL 14:167253f4e170 41899 0x28719eb4aaf140c7l },
wolfSSL 14:167253f4e170 41900 0 },
wolfSSL 14:167253f4e170 41901 /* 95 << 208 */
wolfSSL 14:167253f4e170 41902 { { 0x398996cd430007cel,0x20d8c0e07642d616l,0x81566639a7eb2397l,
wolfSSL 14:167253f4e170 41903 0x74aa0b692e133732l },
wolfSSL 14:167253f4e170 41904 { 0x326745907ba80aa7l,0x56a491c39bd69d64l,0xc8c8b040e54dcce0l,
wolfSSL 14:167253f4e170 41905 0x3f991872d571d037l },
wolfSSL 14:167253f4e170 41906 0 },
wolfSSL 14:167253f4e170 41907 /* 101 << 208 */
wolfSSL 14:167253f4e170 41908 { { 0x70e681fa4fb595c9l,0xf0635d6386b4d97bl,0xfc029284c1347081l,
wolfSSL 14:167253f4e170 41909 0x5a4e9cbe4fee0303l },
wolfSSL 14:167253f4e170 41910 { 0xd43da8609c31094fl,0x0412cfed6515b4aal,0x10fc06da8d53be86l,
wolfSSL 14:167253f4e170 41911 0x4b7b380b4bccc94dl },
wolfSSL 14:167253f4e170 41912 0 },
wolfSSL 14:167253f4e170 41913 /* 107 << 208 */
wolfSSL 14:167253f4e170 41914 { { 0x560d57408e7d6738l,0xa82268a8937f12a2l,0x87787b2d3d95b463l,
wolfSSL 14:167253f4e170 41915 0xb36539b2030e23bfl },
wolfSSL 14:167253f4e170 41916 { 0x60d16b8fd61e761dl,0x96ba2949fe8efccdl,0x8c170eda667fa7ebl,
wolfSSL 14:167253f4e170 41917 0xc880d74cf800d7c3l },
wolfSSL 14:167253f4e170 41918 0 },
wolfSSL 14:167253f4e170 41919 /* 113 << 208 */
wolfSSL 14:167253f4e170 41920 { { 0x7c05d6c1efcbfea0l,0xae7ba3291a2f6dd8l,0x521598ed5bd42ecfl,
wolfSSL 14:167253f4e170 41921 0x58e07842ef0ab40cl },
wolfSSL 14:167253f4e170 41922 { 0xae65105f66c752a5l,0x4910fba45f99d499l,0xbfdaf5fce9e44357l,
wolfSSL 14:167253f4e170 41923 0x6aaf4053796ee5b6l },
wolfSSL 14:167253f4e170 41924 0 },
wolfSSL 14:167253f4e170 41925 /* 116 << 208 */
wolfSSL 14:167253f4e170 41926 { { 0xf58fecb16f640f62l,0xe274b92b39f51946l,0x7f4dfc046288af44l,
wolfSSL 14:167253f4e170 41927 0x0a91f32aeac329e5l },
wolfSSL 14:167253f4e170 41928 { 0x43ad274bd6aaba31l,0x719a16400f6884f9l,0x685d29f6daf91e20l,
wolfSSL 14:167253f4e170 41929 0x5ec1cc3327e49d52l },
wolfSSL 14:167253f4e170 41930 0 },
wolfSSL 14:167253f4e170 41931 /* 119 << 208 */
wolfSSL 14:167253f4e170 41932 { { 0x615ac02527ba93edl,0x0d43915d3556ef47l,0x8c739fd1cb0cda89l,
wolfSSL 14:167253f4e170 41933 0xa2318169625f7a16l },
wolfSSL 14:167253f4e170 41934 { 0x17d486113e0479cel,0x814beb6038ee541el,0x09c9807fb98ef355l,
wolfSSL 14:167253f4e170 41935 0x4ad3668752d07af6l },
wolfSSL 14:167253f4e170 41936 0 },
wolfSSL 14:167253f4e170 41937 /* 125 << 208 */
wolfSSL 14:167253f4e170 41938 { { 0x5c1f42e444f3f568l,0xd743b7c078fb409bl,0xe09edccb6224362cl,
wolfSSL 14:167253f4e170 41939 0x7f13d140c5fe872cl },
wolfSSL 14:167253f4e170 41940 { 0x85e8cb88f403c0ebl,0x918a231b688d20a0l,0xc65b7ab9f246c73fl,
wolfSSL 14:167253f4e170 41941 0xda743fbf76dbd6adl },
wolfSSL 14:167253f4e170 41942 0 },
wolfSSL 14:167253f4e170 41943 },
wolfSSL 14:167253f4e170 41944 {
wolfSSL 14:167253f4e170 41945 /* 0 << 216 */
wolfSSL 14:167253f4e170 41946 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 41947 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 41948 1 },
wolfSSL 14:167253f4e170 41949 /* 1 << 216 */
wolfSSL 14:167253f4e170 41950 { { 0xa0158eeae457a477l,0xd19857dbee6ddc05l,0xb326522418c41671l,
wolfSSL 14:167253f4e170 41951 0x3ffdfc7e3c2c0d58l },
wolfSSL 14:167253f4e170 41952 { 0x3a3a525426ee7cdal,0x341b0869df02c3a8l,0xa023bf42723bbfc8l,
wolfSSL 14:167253f4e170 41953 0x3d15002a14452691l },
wolfSSL 14:167253f4e170 41954 0 },
wolfSSL 14:167253f4e170 41955 /* 3 << 216 */
wolfSSL 14:167253f4e170 41956 { { 0xf3cae7e9262a3539l,0x78a49d1d6670d59el,0x37de0f63c1c5e1b9l,
wolfSSL 14:167253f4e170 41957 0x3072c30c69cb7c1cl },
wolfSSL 14:167253f4e170 41958 { 0x1d278a5277c850e6l,0x84f15f8f1f6a3de6l,0x46a8bb45592ca7adl,
wolfSSL 14:167253f4e170 41959 0x1912e3eee4d424b8l },
wolfSSL 14:167253f4e170 41960 0 },
wolfSSL 14:167253f4e170 41961 /* 4 << 216 */
wolfSSL 14:167253f4e170 41962 { { 0x6ba7a92079e5fb67l,0xe1331feb70aa725el,0x5080ccf57df5d837l,
wolfSSL 14:167253f4e170 41963 0xe4cae01d7ff72e21l },
wolfSSL 14:167253f4e170 41964 { 0xd9243ee60412a77dl,0x06ff7cacdf449025l,0xbe75f7cd23ef5a31l,
wolfSSL 14:167253f4e170 41965 0xbc9578220ddef7a8l },
wolfSSL 14:167253f4e170 41966 0 },
wolfSSL 14:167253f4e170 41967 /* 5 << 216 */
wolfSSL 14:167253f4e170 41968 { { 0xdc988086365e668bl,0xada8dcdaaabda5fbl,0xbc146b4c255f1fbel,
wolfSSL 14:167253f4e170 41969 0x9cfcde29cf34cfc3l },
wolfSSL 14:167253f4e170 41970 { 0xacbb453e7e85d1e4l,0x9ca09679f92358b5l,0x15fc2d96240823ffl,
wolfSSL 14:167253f4e170 41971 0x8d65adf70c11d11el },
wolfSSL 14:167253f4e170 41972 0 },
wolfSSL 14:167253f4e170 41973 /* 7 << 216 */
wolfSSL 14:167253f4e170 41974 { { 0x775557f10296f4fdl,0x1dca76a3ea51b436l,0xf3e98f60fb950805l,
wolfSSL 14:167253f4e170 41975 0x31ff32ea831cf7f1l },
wolfSSL 14:167253f4e170 41976 { 0x643e7bf18d2c714bl,0x64b5c3392e9d2acal,0xa9fd9ccc6adc2d23l,
wolfSSL 14:167253f4e170 41977 0xfc2397eccc721b9bl },
wolfSSL 14:167253f4e170 41978 0 },
wolfSSL 14:167253f4e170 41979 /* 9 << 216 */
wolfSSL 14:167253f4e170 41980 { { 0xf031182db48ec57dl,0x515d32f804b233b9l,0x06bbb1d4093aad26l,
wolfSSL 14:167253f4e170 41981 0x88a142fe0d83d1ecl },
wolfSSL 14:167253f4e170 41982 { 0x3b95c099245c73f8l,0xb126d4af52edcd32l,0xf8022c1e8fcb52e6l,
wolfSSL 14:167253f4e170 41983 0x5a51ac4c0106d339l },
wolfSSL 14:167253f4e170 41984 0 },
wolfSSL 14:167253f4e170 41985 /* 10 << 216 */
wolfSSL 14:167253f4e170 41986 { { 0xc589e1ce44ace150l,0xe0f8d3d94381e97cl,0x59e99b1162c5a4b8l,
wolfSSL 14:167253f4e170 41987 0x90d262f7fd0ec9f9l },
wolfSSL 14:167253f4e170 41988 { 0xfbc854c9283e13c9l,0x2d04fde7aedc7085l,0x057d776547dcbecbl,
wolfSSL 14:167253f4e170 41989 0x8dbdf5919a76fa5fl },
wolfSSL 14:167253f4e170 41990 0 },
wolfSSL 14:167253f4e170 41991 /* 11 << 216 */
wolfSSL 14:167253f4e170 41992 { { 0xb7f70a1a7c64a054l,0x0dc1c0df9db43e79l,0x6d0a4ae251fe63d6l,
wolfSSL 14:167253f4e170 41993 0xe0d5e3327f0c8abfl },
wolfSSL 14:167253f4e170 41994 { 0xff5500362b7ecee8l,0x3ea0e6f75d055008l,0x30deb62ff24ac84fl,
wolfSSL 14:167253f4e170 41995 0x936969fd5d7116b7l },
wolfSSL 14:167253f4e170 41996 0 },
wolfSSL 14:167253f4e170 41997 /* 13 << 216 */
wolfSSL 14:167253f4e170 41998 { { 0x02da76122617cf7fl,0xd6e25d4eeee35260l,0xb2fa5b0afd3533e9l,
wolfSSL 14:167253f4e170 41999 0xe76bb7b0b9126f88l },
wolfSSL 14:167253f4e170 42000 { 0x692e6a9988856866l,0x3fdf394f49db65cal,0x2529699122d8d606l,
wolfSSL 14:167253f4e170 42001 0xe815bfbf3dd7c4cfl },
wolfSSL 14:167253f4e170 42002 0 },
wolfSSL 14:167253f4e170 42003 /* 15 << 216 */
wolfSSL 14:167253f4e170 42004 { { 0x69c984ed4d844e7fl,0xd354b2174a2e8a82l,0x25bd4addfb2c4136l,
wolfSSL 14:167253f4e170 42005 0xf72df4de144b26e1l },
wolfSSL 14:167253f4e170 42006 { 0xd0aa9db0e6101afdl,0x4445efaae49bd1b8l,0x5dc54eee331593b2l,
wolfSSL 14:167253f4e170 42007 0xfa35e3b9094bf10bl },
wolfSSL 14:167253f4e170 42008 0 },
wolfSSL 14:167253f4e170 42009 /* 16 << 216 */
wolfSSL 14:167253f4e170 42010 { { 0xdb567d6ac42bd6d2l,0x6df86468bb1f96ael,0x0efe5b1a4843b28el,
wolfSSL 14:167253f4e170 42011 0x961bbb056379b240l },
wolfSSL 14:167253f4e170 42012 { 0xb6caf5f070a6a26bl,0x70686c0d328e6e39l,0x80da06cf895fc8d3l,
wolfSSL 14:167253f4e170 42013 0x804d8810b363fdc9l },
wolfSSL 14:167253f4e170 42014 0 },
wolfSSL 14:167253f4e170 42015 /* 17 << 216 */
wolfSSL 14:167253f4e170 42016 { { 0x660a0f893ea089c3l,0xa25823aac9009b09l,0xb2262d7ba681f5e5l,
wolfSSL 14:167253f4e170 42017 0x4fc30c8c3413863al },
wolfSSL 14:167253f4e170 42018 { 0x691544b7c32059f7l,0xf65cf276b21c6134l,0xe3a96b2a5104dabal,
wolfSSL 14:167253f4e170 42019 0xbb08d109a43ee42fl },
wolfSSL 14:167253f4e170 42020 0 },
wolfSSL 14:167253f4e170 42021 /* 19 << 216 */
wolfSSL 14:167253f4e170 42022 { { 0x85a52d69f9916861l,0x595469a4da4fa813l,0x1dd7786e3338502fl,
wolfSSL 14:167253f4e170 42023 0x34b8ef2853963ac5l },
wolfSSL 14:167253f4e170 42024 { 0xc0f019f81a891b25l,0xb619970c4f4bd775l,0x8c2a5af3be19f681l,
wolfSSL 14:167253f4e170 42025 0x9463db0498ec1728l },
wolfSSL 14:167253f4e170 42026 0 },
wolfSSL 14:167253f4e170 42027 /* 21 << 216 */
wolfSSL 14:167253f4e170 42028 { { 0xeb62c27801f39eabl,0x27de39340ab3a4aal,0xfbd17520a982ca8dl,
wolfSSL 14:167253f4e170 42029 0x58817ec2e4bdc6edl },
wolfSSL 14:167253f4e170 42030 { 0x312d78de31c6ac13l,0x9483bf7609202ea6l,0xf64ab8b622c6d8e1l,
wolfSSL 14:167253f4e170 42031 0xdddf589ce580de74l },
wolfSSL 14:167253f4e170 42032 0 },
wolfSSL 14:167253f4e170 42033 /* 23 << 216 */
wolfSSL 14:167253f4e170 42034 { { 0xe0fa3336ee98a92al,0x7d80eeef66a4d745l,0xb612531bba0119d3l,
wolfSSL 14:167253f4e170 42035 0x86e770c1b351fe15l },
wolfSSL 14:167253f4e170 42036 { 0xafbad6f882d5a397l,0x1e5f1cb80dbf0110l,0x25138ac09f79063dl,
wolfSSL 14:167253f4e170 42037 0x089ed22f2746a156l },
wolfSSL 14:167253f4e170 42038 0 },
wolfSSL 14:167253f4e170 42039 /* 25 << 216 */
wolfSSL 14:167253f4e170 42040 { { 0x198d1b5d7d8b8ddel,0xf32c11078dab37fbl,0xf15fcb6d42b93874l,
wolfSSL 14:167253f4e170 42041 0x91ddb74f41f94f84l },
wolfSSL 14:167253f4e170 42042 { 0x6a64540a271524b2l,0x950a0c12758b5a64l,0xf9f237933dce9580l,
wolfSSL 14:167253f4e170 42043 0xc8edd0ab2cf8ce32l },
wolfSSL 14:167253f4e170 42044 0 },
wolfSSL 14:167253f4e170 42045 /* 27 << 216 */
wolfSSL 14:167253f4e170 42046 { { 0xefc6357eae1046b7l,0xe6704929612932e4l,0xa20305d4b1355b17l,
wolfSSL 14:167253f4e170 42047 0x88a9136a58b4a156l },
wolfSSL 14:167253f4e170 42048 { 0xbc379985b4d275ecl,0x718b91316eaf338bl,0x61229a7ad152a509l,
wolfSSL 14:167253f4e170 42049 0x1109f7c445157ae9l },
wolfSSL 14:167253f4e170 42050 0 },
wolfSSL 14:167253f4e170 42051 /* 28 << 216 */
wolfSSL 14:167253f4e170 42052 { { 0xcf197ca7fb8088fal,0x014272474ddc96c5l,0xa2d2550a30777176l,
wolfSSL 14:167253f4e170 42053 0x534698984d0cf71dl },
wolfSSL 14:167253f4e170 42054 { 0x6ce937b83a2aaac6l,0xe9f91dc35af38d9bl,0x2598ad83c8bf2899l,
wolfSSL 14:167253f4e170 42055 0x8e706ac9b5536c16l },
wolfSSL 14:167253f4e170 42056 0 },
wolfSSL 14:167253f4e170 42057 /* 29 << 216 */
wolfSSL 14:167253f4e170 42058 { { 0x2bde42140df85c2cl,0x4fb839f4058a7a63l,0x7c10572a47f51231l,
wolfSSL 14:167253f4e170 42059 0x878826231989824el },
wolfSSL 14:167253f4e170 42060 { 0xa8293d2016e1564al,0xcb11c0f818c04576l,0x83b91e7d9740c631l,
wolfSSL 14:167253f4e170 42061 0xbdcb23d0cbffcea0l },
wolfSSL 14:167253f4e170 42062 0 },
wolfSSL 14:167253f4e170 42063 /* 31 << 216 */
wolfSSL 14:167253f4e170 42064 { { 0x64bdfd2a9094bfc8l,0x8558acc60fc54d1el,0x3992848faf27721el,
wolfSSL 14:167253f4e170 42065 0x7a8fcbdaa14cd009l },
wolfSSL 14:167253f4e170 42066 { 0x6de6120900a4b9c2l,0xbd192b1b20cf8f28l,0x2356b90168d9be83l,
wolfSSL 14:167253f4e170 42067 0xce1e7a944a49a48al },
wolfSSL 14:167253f4e170 42068 0 },
wolfSSL 14:167253f4e170 42069 /* 33 << 216 */
wolfSSL 14:167253f4e170 42070 { { 0x7630103b6ac189b9l,0x15d35edc6f1f5549l,0x9051799d31cb58edl,
wolfSSL 14:167253f4e170 42071 0xb4f32694a7a8579el },
wolfSSL 14:167253f4e170 42072 { 0x6f037435f2abe306l,0xf0595696410fb2f7l,0x2a0d347a5cc98f59l,
wolfSSL 14:167253f4e170 42073 0x9c19a9a87e3bbd69l },
wolfSSL 14:167253f4e170 42074 0 },
wolfSSL 14:167253f4e170 42075 /* 34 << 216 */
wolfSSL 14:167253f4e170 42076 { { 0x87f8df7c0e58d493l,0xb1ae5ed058b73f12l,0xc368f784dea0c34dl,
wolfSSL 14:167253f4e170 42077 0x9bd0a120859a91a0l },
wolfSSL 14:167253f4e170 42078 { 0xb00d88b7cc863c68l,0x3a1cc11e3d1f4d65l,0xea38e0e70aa85593l,
wolfSSL 14:167253f4e170 42079 0x37f13e987dc4aee8l },
wolfSSL 14:167253f4e170 42080 0 },
wolfSSL 14:167253f4e170 42081 /* 35 << 216 */
wolfSSL 14:167253f4e170 42082 { { 0x91dbe00e49430cd2l,0xcc67c0b17aa8ef6bl,0x769985b8a273f1a5l,
wolfSSL 14:167253f4e170 42083 0x358371dc360e5dafl },
wolfSSL 14:167253f4e170 42084 { 0xbf9b9127d6d8b5e8l,0x748ae12cb45588c1l,0x9c609eb556076c58l,
wolfSSL 14:167253f4e170 42085 0xf287489109733e89l },
wolfSSL 14:167253f4e170 42086 0 },
wolfSSL 14:167253f4e170 42087 /* 36 << 216 */
wolfSSL 14:167253f4e170 42088 { { 0x10d38667bc947badl,0x738e07ce2a36ee2el,0xc93470cdc577fcacl,
wolfSSL 14:167253f4e170 42089 0xdee1b6162782470dl },
wolfSSL 14:167253f4e170 42090 { 0x36a25e672e793d12l,0xd6aa6caee0f186dal,0x474d0fd980e07af7l,
wolfSSL 14:167253f4e170 42091 0xf7cdc47dba8a5cd4l },
wolfSSL 14:167253f4e170 42092 0 },
wolfSSL 14:167253f4e170 42093 /* 37 << 216 */
wolfSSL 14:167253f4e170 42094 { { 0xceb6aa80f8a08fddl,0xd98fc56f46fead7bl,0xe26bd3f8b07b3f1fl,
wolfSSL 14:167253f4e170 42095 0x3547e9b99d361c3el },
wolfSSL 14:167253f4e170 42096 { 0x1a89f802e94b8eccl,0x2210a590c0a40ef2l,0xe7e5b965afc01bf2l,
wolfSSL 14:167253f4e170 42097 0xca3d57fe234b936bl },
wolfSSL 14:167253f4e170 42098 0 },
wolfSSL 14:167253f4e170 42099 /* 39 << 216 */
wolfSSL 14:167253f4e170 42100 { { 0x9230a70db9f9e8cdl,0xa63cebfcb81ba2ecl,0x8482ca87a8f664d6l,
wolfSSL 14:167253f4e170 42101 0xa8ae78e00b137064l },
wolfSSL 14:167253f4e170 42102 { 0xb787bd558384c687l,0xfde1d1bdb29ae830l,0xc4a9b2e39f0b7535l,
wolfSSL 14:167253f4e170 42103 0x7e6c9a15efde2d01l },
wolfSSL 14:167253f4e170 42104 0 },
wolfSSL 14:167253f4e170 42105 /* 40 << 216 */
wolfSSL 14:167253f4e170 42106 { { 0x7d2e5c054f7269b1l,0xfcf30777e287c385l,0x10edc84ff2a46f21l,
wolfSSL 14:167253f4e170 42107 0x354417574f43fa36l },
wolfSSL 14:167253f4e170 42108 { 0xf1327899fd703431l,0xa438d7a616dd587al,0x65c34c57e9c8352dl,
wolfSSL 14:167253f4e170 42109 0xa728edab5cc5a24el },
wolfSSL 14:167253f4e170 42110 0 },
wolfSSL 14:167253f4e170 42111 /* 41 << 216 */
wolfSSL 14:167253f4e170 42112 { { 0xcd6e6db872896d4fl,0x324afa99896c4640l,0x37d18c3d33a292bdl,
wolfSSL 14:167253f4e170 42113 0x98dba3b44143421fl },
wolfSSL 14:167253f4e170 42114 { 0x2406f3c949c61b84l,0x402d974754899588l,0xc73b7fd634a485e5l,
wolfSSL 14:167253f4e170 42115 0x75c9bae08587f0c3l },
wolfSSL 14:167253f4e170 42116 0 },
wolfSSL 14:167253f4e170 42117 /* 43 << 216 */
wolfSSL 14:167253f4e170 42118 { { 0x6c32fa8cb0b4a04dl,0xeb58d0d875fda587l,0x61d8a157c4b86563l,
wolfSSL 14:167253f4e170 42119 0x92191bf01006b8afl },
wolfSSL 14:167253f4e170 42120 { 0xd04d3eff32d3478bl,0x3cc52eab2a684fc8l,0xb19a0f1625de54ccl,
wolfSSL 14:167253f4e170 42121 0x5c5295973620db2dl },
wolfSSL 14:167253f4e170 42122 0 },
wolfSSL 14:167253f4e170 42123 /* 44 << 216 */
wolfSSL 14:167253f4e170 42124 { { 0xa97b51265c3427b0l,0x6401405cd282c9bdl,0x3629f8d7222c5c45l,
wolfSSL 14:167253f4e170 42125 0xb1c02c16e8d50aedl },
wolfSSL 14:167253f4e170 42126 { 0xbea2ed75d9635bc9l,0x226790c76e24552fl,0x3c33f2a365f1d066l,
wolfSSL 14:167253f4e170 42127 0x2a43463e6dfccc2el },
wolfSSL 14:167253f4e170 42128 0 },
wolfSSL 14:167253f4e170 42129 /* 45 << 216 */
wolfSSL 14:167253f4e170 42130 { { 0x09b2e0d3b8da1e01l,0xa3a1a8fee9c0eb04l,0x59af5afe8bf653bal,
wolfSSL 14:167253f4e170 42131 0xba979f8bd0a54836l },
wolfSSL 14:167253f4e170 42132 { 0xa0d8194b51ee6ffbl,0x451c29e2f4b0586cl,0x7eb5fddb7471ee3dl,
wolfSSL 14:167253f4e170 42133 0x84b627d4bcb3afd8l },
wolfSSL 14:167253f4e170 42134 0 },
wolfSSL 14:167253f4e170 42135 /* 46 << 216 */
wolfSSL 14:167253f4e170 42136 { { 0x8cc3453adb483761l,0xe7cc608565d5672bl,0x277ed6cbde3efc87l,
wolfSSL 14:167253f4e170 42137 0x19f2f36869234eafl },
wolfSSL 14:167253f4e170 42138 { 0x9aaf43175c0b800bl,0x1f1e7c898b6da6e2l,0x6cfb4715b94ec75el,
wolfSSL 14:167253f4e170 42139 0xd590dd5f453118c2l },
wolfSSL 14:167253f4e170 42140 0 },
wolfSSL 14:167253f4e170 42141 /* 47 << 216 */
wolfSSL 14:167253f4e170 42142 { { 0xa70e9b0afb54e812l,0x092a0d7d8d86819bl,0x5421ff042e669090l,
wolfSSL 14:167253f4e170 42143 0x8af770c6b133c952l },
wolfSSL 14:167253f4e170 42144 { 0xc8e8dd596c8b1426l,0x1c92eb0e9523b483l,0x5a7c88f2cf3d40edl,
wolfSSL 14:167253f4e170 42145 0x4cc0c04bf5dd98f8l },
wolfSSL 14:167253f4e170 42146 0 },
wolfSSL 14:167253f4e170 42147 /* 48 << 216 */
wolfSSL 14:167253f4e170 42148 { { 0x14e49da11f17a34cl,0x5420ab39235a1456l,0xb76372412f50363bl,
wolfSSL 14:167253f4e170 42149 0x7b15d623c3fabb6el },
wolfSSL 14:167253f4e170 42150 { 0xa0ef40b1e274e49cl,0x5cf5074496b1860al,0xd6583fbf66afe5a4l,
wolfSSL 14:167253f4e170 42151 0x44240510f47e3e9al },
wolfSSL 14:167253f4e170 42152 0 },
wolfSSL 14:167253f4e170 42153 /* 49 << 216 */
wolfSSL 14:167253f4e170 42154 { { 0xb3939a8ffd617288l,0x3d37e5c2d68c2636l,0x4a595fac9d666c0el,
wolfSSL 14:167253f4e170 42155 0xfebcad9edb3a4978l },
wolfSSL 14:167253f4e170 42156 { 0x6d284a49c125016fl,0x05a7b9c80ee246a2l,0xe8b351739436c6e9l,
wolfSSL 14:167253f4e170 42157 0xffb89032d4be40b7l },
wolfSSL 14:167253f4e170 42158 0 },
wolfSSL 14:167253f4e170 42159 /* 51 << 216 */
wolfSSL 14:167253f4e170 42160 { { 0xba1387a5436ebf33l,0xc351a400e8d05267l,0x18645dde4259dbe8l,
wolfSSL 14:167253f4e170 42161 0x5fc32895c10fd676l },
wolfSSL 14:167253f4e170 42162 { 0x1ef7a944807f040el,0x9486b5c625738e5fl,0xc9e56cf4a7e3e96cl,
wolfSSL 14:167253f4e170 42163 0x34c7dc87a20be832l },
wolfSSL 14:167253f4e170 42164 0 },
wolfSSL 14:167253f4e170 42165 /* 52 << 216 */
wolfSSL 14:167253f4e170 42166 { { 0xe10d49996fe8393fl,0x0f809a3fe91f3a32l,0x61096d1c802f63c8l,
wolfSSL 14:167253f4e170 42167 0x289e146257750d3dl },
wolfSSL 14:167253f4e170 42168 { 0xed06167e9889feeal,0xd5c9c0e2e0993909l,0x46fca0d856508ac6l,
wolfSSL 14:167253f4e170 42169 0x918260474f1b8e83l },
wolfSSL 14:167253f4e170 42170 0 },
wolfSSL 14:167253f4e170 42171 /* 53 << 216 */
wolfSSL 14:167253f4e170 42172 { { 0x1d5f2ad7a9bf79cbl,0x228fb24fca9c2f98l,0x5f7c3883701c4b71l,
wolfSSL 14:167253f4e170 42173 0x18cf76c4ec42d686l },
wolfSSL 14:167253f4e170 42174 { 0x3680d2e94dcdec8dl,0x6d58e87ba0d60cb6l,0x72fbf086a0e513cfl,
wolfSSL 14:167253f4e170 42175 0xb922d3c5346ed99al },
wolfSSL 14:167253f4e170 42176 0 },
wolfSSL 14:167253f4e170 42177 /* 55 << 216 */
wolfSSL 14:167253f4e170 42178 { { 0x1678d658c2b9b874l,0x0e0b2c47f6360d4dl,0x01a45c02a0c9b9acl,
wolfSSL 14:167253f4e170 42179 0x05e82e9d0da69afbl },
wolfSSL 14:167253f4e170 42180 { 0x50be4001f28b8018l,0x503d967b667d8241l,0x6cd816534981da04l,
wolfSSL 14:167253f4e170 42181 0x9b18c3117f09c35fl },
wolfSSL 14:167253f4e170 42182 0 },
wolfSSL 14:167253f4e170 42183 /* 57 << 216 */
wolfSSL 14:167253f4e170 42184 { { 0xdfdfd5b409d22331l,0xf445126817f0c6a2l,0xe51d1aa8a5cde27bl,
wolfSSL 14:167253f4e170 42185 0xb61a12a37aaf9513l },
wolfSSL 14:167253f4e170 42186 { 0xe43a241d3b3ea114l,0x5c62b624366ae28dl,0x085a530db5f237eal,
wolfSSL 14:167253f4e170 42187 0x7c4ed375651205afl },
wolfSSL 14:167253f4e170 42188 0 },
wolfSSL 14:167253f4e170 42189 /* 59 << 216 */
wolfSSL 14:167253f4e170 42190 { { 0xf9de879dce842decl,0xe505320a94cedb89l,0xee55dae7f05ad888l,
wolfSSL 14:167253f4e170 42191 0x44ffbfa7f028b4efl },
wolfSSL 14:167253f4e170 42192 { 0xa3c1b32e63b2cd31l,0x201a058910c5ab29l,0x20f930afcd4085d6l,
wolfSSL 14:167253f4e170 42193 0xda79ed169f6ff24bl },
wolfSSL 14:167253f4e170 42194 0 },
wolfSSL 14:167253f4e170 42195 /* 60 << 216 */
wolfSSL 14:167253f4e170 42196 { { 0x7e8cfbcf704e23c6l,0xc71b7d2228aaa65bl,0xa041b2bd245e3c83l,
wolfSSL 14:167253f4e170 42197 0x69b98834d21854ffl },
wolfSSL 14:167253f4e170 42198 { 0x89d227a3963bfeecl,0x99947aaade7da7cbl,0x1d9ee9dbee68a9b1l,
wolfSSL 14:167253f4e170 42199 0x0a08f003698ec368l },
wolfSSL 14:167253f4e170 42200 0 },
wolfSSL 14:167253f4e170 42201 /* 61 << 216 */
wolfSSL 14:167253f4e170 42202 { { 0x04c64f33b0959be5l,0x182332ba396a7fe2l,0x4c5401e302e15b97l,
wolfSSL 14:167253f4e170 42203 0x92880f9877db104bl },
wolfSSL 14:167253f4e170 42204 { 0x0bf0b9cc21726a33l,0x780264741acc7b6dl,0x9721f621a26f08e3l,
wolfSSL 14:167253f4e170 42205 0xe3935b434197fed1l },
wolfSSL 14:167253f4e170 42206 0 },
wolfSSL 14:167253f4e170 42207 /* 63 << 216 */
wolfSSL 14:167253f4e170 42208 { { 0x0bffae503652be69l,0x395a9c6afb3fd5d8l,0x17f66adaa4fadfbfl,
wolfSSL 14:167253f4e170 42209 0x1ee92a35f9268f8cl },
wolfSSL 14:167253f4e170 42210 { 0x40ded34d6827781al,0xcd36224e34e63dccl,0xec90cf571cd1ef7al,
wolfSSL 14:167253f4e170 42211 0xf6067d578f72a3bfl },
wolfSSL 14:167253f4e170 42212 0 },
wolfSSL 14:167253f4e170 42213 /* 64 << 216 */
wolfSSL 14:167253f4e170 42214 { { 0x142b55021a93507al,0xb4cd11878d3c06cfl,0xdf70e76a91ec3f40l,
wolfSSL 14:167253f4e170 42215 0x484e81ad4e7553c2l },
wolfSSL 14:167253f4e170 42216 { 0x830f87b5272e9d6el,0xea1c93e5c6ff514al,0x67cc2adcc4192a8el,
wolfSSL 14:167253f4e170 42217 0xc77e27e242f4535al },
wolfSSL 14:167253f4e170 42218 0 },
wolfSSL 14:167253f4e170 42219 /* 65 << 216 */
wolfSSL 14:167253f4e170 42220 { { 0x537388d299e2f9d2l,0x15ead88612cd6d08l,0x33dfe3a769082d86l,
wolfSSL 14:167253f4e170 42221 0x0ef25f4266d79d40l },
wolfSSL 14:167253f4e170 42222 { 0x8035b4e546ba5cf1l,0x4e48f53711eec591l,0x40b56cda122a7aael,
wolfSSL 14:167253f4e170 42223 0x78e270211dbb79a7l },
wolfSSL 14:167253f4e170 42224 0 },
wolfSSL 14:167253f4e170 42225 /* 71 << 216 */
wolfSSL 14:167253f4e170 42226 { { 0x520b655355b4a5b1l,0xeee835cafb4f5fdel,0xb2ae86e59a823d7fl,
wolfSSL 14:167253f4e170 42227 0x24325f4fc084497fl },
wolfSSL 14:167253f4e170 42228 { 0x542bed4e6f0eefa4l,0x2909233b141792fdl,0x74bfc3bfc847a946l,
wolfSSL 14:167253f4e170 42229 0x8ec1d009e212cb44l },
wolfSSL 14:167253f4e170 42230 0 },
wolfSSL 14:167253f4e170 42231 /* 77 << 216 */
wolfSSL 14:167253f4e170 42232 { { 0xc2082b6d5cedd516l,0xaf148eadeafa3a10l,0x104cd5855ad63aa6l,
wolfSSL 14:167253f4e170 42233 0xe3fdbf8c78c11e1el },
wolfSSL 14:167253f4e170 42234 { 0x78651c493c25c24el,0x8064c4f37b7cce0el,0xa55441d4a6d8a928l,
wolfSSL 14:167253f4e170 42235 0x4525c40eb0db3adcl },
wolfSSL 14:167253f4e170 42236 0 },
wolfSSL 14:167253f4e170 42237 /* 83 << 216 */
wolfSSL 14:167253f4e170 42238 { { 0x5f69e49cfde6001el,0xc61e753aee59b47el,0xd0d4559971b0db5bl,
wolfSSL 14:167253f4e170 42239 0x7f76f7b45ad4acc3l },
wolfSSL 14:167253f4e170 42240 { 0xb0318a9c39830897l,0x2b15da22feef3822l,0x34049400acfb0753l,
wolfSSL 14:167253f4e170 42241 0x16f4fb51a5114ed4l },
wolfSSL 14:167253f4e170 42242 0 },
wolfSSL 14:167253f4e170 42243 /* 89 << 216 */
wolfSSL 14:167253f4e170 42244 { { 0x0b5c76928defbf10l,0xb9f1795cb79cdb6el,0xba17e7759a90317cl,
wolfSSL 14:167253f4e170 42245 0x3cb69cf950cf514bl },
wolfSSL 14:167253f4e170 42246 { 0x076cc4c1e5b892ffl,0x75724e8fb548b73cl,0x2ebcdb33248ff2e6l,
wolfSSL 14:167253f4e170 42247 0x1f12967be109b08fl },
wolfSSL 14:167253f4e170 42248 0 },
wolfSSL 14:167253f4e170 42249 /* 95 << 216 */
wolfSSL 14:167253f4e170 42250 { { 0x3f514c63461b7bb3l,0x3bdca5aa70afbad7l,0x368ce251eab3e38bl,
wolfSSL 14:167253f4e170 42251 0xdc0fb3300d101049l },
wolfSSL 14:167253f4e170 42252 { 0x7ce09abdff5013eel,0x926dd7dd7d10729dl,0xe6fe47ab6f486197l,
wolfSSL 14:167253f4e170 42253 0xd23964eaa6eb6903l },
wolfSSL 14:167253f4e170 42254 0 },
wolfSSL 14:167253f4e170 42255 /* 101 << 216 */
wolfSSL 14:167253f4e170 42256 { { 0x537ceb74eca30797l,0xf171bba557b0f338l,0x220a31fee831f1f8l,
wolfSSL 14:167253f4e170 42257 0xabbc2c7c5ae6bbbcl },
wolfSSL 14:167253f4e170 42258 { 0xaf7609f27eadfb60l,0x22cff1d58f28b51bl,0x63c3d76d6d1863bdl,
wolfSSL 14:167253f4e170 42259 0x3a6a2fb489e8a4c8l },
wolfSSL 14:167253f4e170 42260 0 },
wolfSSL 14:167253f4e170 42261 /* 107 << 216 */
wolfSSL 14:167253f4e170 42262 { { 0x9e74f8beb26e38f0l,0xc4c73fc4ea8bd55bl,0x086f688e1429e1fcl,
wolfSSL 14:167253f4e170 42263 0x91438ff40f78159fl },
wolfSSL 14:167253f4e170 42264 { 0x3571ae5f20810acbl,0x305edafe7451eb00l,0x8443c96d5704385cl,
wolfSSL 14:167253f4e170 42265 0xc03b234e542605b5l },
wolfSSL 14:167253f4e170 42266 0 },
wolfSSL 14:167253f4e170 42267 /* 113 << 216 */
wolfSSL 14:167253f4e170 42268 { { 0x2e5ff4fed85567c2l,0x136f49c7e4abd0c6l,0x5a68730cfb8a62d1l,
wolfSSL 14:167253f4e170 42269 0x101ebfd030bcb848l },
wolfSSL 14:167253f4e170 42270 { 0x634b0618fee950bbl,0xfa748d21c8aa65bal,0xc1d67c3e699f5560l,
wolfSSL 14:167253f4e170 42271 0x6fb0546cb22889d2l },
wolfSSL 14:167253f4e170 42272 0 },
wolfSSL 14:167253f4e170 42273 /* 116 << 216 */
wolfSSL 14:167253f4e170 42274 { { 0xa9784ebd9c95f0f9l,0x5ed9deb224640771l,0x31244af7035561c4l,
wolfSSL 14:167253f4e170 42275 0x87332f3a7ee857del },
wolfSSL 14:167253f4e170 42276 { 0x09e16e9e2b9e0d88l,0x52d910f456a06049l,0x507ed477a9592f48l,
wolfSSL 14:167253f4e170 42277 0x85cb917b2365d678l },
wolfSSL 14:167253f4e170 42278 0 },
wolfSSL 14:167253f4e170 42279 /* 119 << 216 */
wolfSSL 14:167253f4e170 42280 { { 0x6108f2b458a9d40dl,0xb036034838e15a52l,0xcc5610a3fd5625d6l,
wolfSSL 14:167253f4e170 42281 0x79825dd083b0418el },
wolfSSL 14:167253f4e170 42282 { 0xf83a95fc6324b6e5l,0x2463114deedfc4ebl,0x58b177e32250707fl,
wolfSSL 14:167253f4e170 42283 0x778dcd454af8d942l },
wolfSSL 14:167253f4e170 42284 0 },
wolfSSL 14:167253f4e170 42285 /* 125 << 216 */
wolfSSL 14:167253f4e170 42286 { { 0x1ecf2670eb816bf8l,0xa2d6e73aaa6d59c6l,0xf9a11434156852ebl,
wolfSSL 14:167253f4e170 42287 0x9bc9bb70f6f82c83l },
wolfSSL 14:167253f4e170 42288 { 0xd23a018d9c874836l,0xd26bf8bc6db5a8b5l,0x1d648846bec0c624l,
wolfSSL 14:167253f4e170 42289 0x39f15d97ef90302fl },
wolfSSL 14:167253f4e170 42290 0 },
wolfSSL 14:167253f4e170 42291 },
wolfSSL 14:167253f4e170 42292 {
wolfSSL 14:167253f4e170 42293 /* 0 << 224 */
wolfSSL 14:167253f4e170 42294 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 42295 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 42296 1 },
wolfSSL 14:167253f4e170 42297 /* 1 << 224 */
wolfSSL 14:167253f4e170 42298 { { 0xe3417bc035d0b34al,0x440b386b8327c0a7l,0x8fb7262dac0362d1l,
wolfSSL 14:167253f4e170 42299 0x2c41114ce0cdf943l },
wolfSSL 14:167253f4e170 42300 { 0x2ba5cef1ad95a0b1l,0xc09b37a867d54362l,0x26d6cdd201e486c9l,
wolfSSL 14:167253f4e170 42301 0x20477abf42ff9297l },
wolfSSL 14:167253f4e170 42302 0 },
wolfSSL 14:167253f4e170 42303 /* 3 << 224 */
wolfSSL 14:167253f4e170 42304 { { 0x126f35b51e706ad9l,0xb99cebb4c3a9ebdfl,0xa75389afbf608d90l,
wolfSSL 14:167253f4e170 42305 0x76113c4fc6c89858l },
wolfSSL 14:167253f4e170 42306 { 0x80de8eb097e2b5aal,0x7e1022cc63b91304l,0x3bdab6056ccc066cl,
wolfSSL 14:167253f4e170 42307 0x33cbb144b2edf900l },
wolfSSL 14:167253f4e170 42308 0 },
wolfSSL 14:167253f4e170 42309 /* 4 << 224 */
wolfSSL 14:167253f4e170 42310 { { 0xc41764717af715d2l,0xe2f7f594d0134a96l,0x2c1873efa41ec956l,
wolfSSL 14:167253f4e170 42311 0xe4e7b4f677821304l },
wolfSSL 14:167253f4e170 42312 { 0xe5c8ff9788d5374al,0x2b915e6380823d5bl,0xea6bc755b2ee8fe2l,
wolfSSL 14:167253f4e170 42313 0x6657624ce7112651l },
wolfSSL 14:167253f4e170 42314 0 },
wolfSSL 14:167253f4e170 42315 /* 5 << 224 */
wolfSSL 14:167253f4e170 42316 { { 0x157af101dace5acal,0xc4fdbcf211a6a267l,0xdaddf340c49c8609l,
wolfSSL 14:167253f4e170 42317 0x97e49f52e9604a65l },
wolfSSL 14:167253f4e170 42318 { 0x9be8e790937e2ad5l,0x846e2508326e17f1l,0x3f38007a0bbbc0dcl,
wolfSSL 14:167253f4e170 42319 0xcf03603fb11e16d6l },
wolfSSL 14:167253f4e170 42320 0 },
wolfSSL 14:167253f4e170 42321 /* 7 << 224 */
wolfSSL 14:167253f4e170 42322 { { 0x5ed0c007f8ae7c38l,0x6db07a5c3d740192l,0xbe5e9c2a5fe36db3l,
wolfSSL 14:167253f4e170 42323 0xd5b9d57a76e95046l },
wolfSSL 14:167253f4e170 42324 { 0x54ac32e78eba20f2l,0xef11ca8f71b9a352l,0x305e373eff98a658l,
wolfSSL 14:167253f4e170 42325 0xffe5a100823eb667l },
wolfSSL 14:167253f4e170 42326 0 },
wolfSSL 14:167253f4e170 42327 /* 9 << 224 */
wolfSSL 14:167253f4e170 42328 { { 0x5c8ed8d5da64309dl,0x61a6de5691b30704l,0xd6b52f6a2f9b5808l,
wolfSSL 14:167253f4e170 42329 0x0eee419498c958a7l },
wolfSSL 14:167253f4e170 42330 { 0xcddd9aab771e4caal,0x83965dfd78bc21bel,0x02affce3b3b504f5l,
wolfSSL 14:167253f4e170 42331 0x30847a21561c8291l },
wolfSSL 14:167253f4e170 42332 0 },
wolfSSL 14:167253f4e170 42333 /* 10 << 224 */
wolfSSL 14:167253f4e170 42334 { { 0xd2eb2cf152bfda05l,0xe0e4c4e96197b98cl,0x1d35076cf8a1726fl,
wolfSSL 14:167253f4e170 42335 0x6c06085b2db11e3dl },
wolfSSL 14:167253f4e170 42336 { 0x15c0c4d74463ba14l,0x9d292f830030238cl,0x1311ee8b3727536dl,
wolfSSL 14:167253f4e170 42337 0xfeea86efbeaedc1el },
wolfSSL 14:167253f4e170 42338 0 },
wolfSSL 14:167253f4e170 42339 /* 11 << 224 */
wolfSSL 14:167253f4e170 42340 { { 0xb9d18cd366131e2el,0xf31d974f80fe2682l,0xb6e49e0fe4160289l,
wolfSSL 14:167253f4e170 42341 0x7c48ec0b08e92799l },
wolfSSL 14:167253f4e170 42342 { 0x818111d8d1989aa7l,0xb34fa0aaebf926f9l,0xdb5fe2f5a245474al,
wolfSSL 14:167253f4e170 42343 0xf80a6ebb3c7ca756l },
wolfSSL 14:167253f4e170 42344 0 },
wolfSSL 14:167253f4e170 42345 /* 13 << 224 */
wolfSSL 14:167253f4e170 42346 { { 0x8ea610593de9abe3l,0x404348819cdc03bel,0x9b261245cfedce8cl,
wolfSSL 14:167253f4e170 42347 0x78c318b4cf5234a1l },
wolfSSL 14:167253f4e170 42348 { 0x510bcf16fde24c99l,0x2a77cb75a2c2ff5dl,0x9c895c2b27960fb4l,
wolfSSL 14:167253f4e170 42349 0xd30ce975b0eda42bl },
wolfSSL 14:167253f4e170 42350 0 },
wolfSSL 14:167253f4e170 42351 /* 15 << 224 */
wolfSSL 14:167253f4e170 42352 { { 0x09521177ff57d051l,0x2ff38037fb6a1961l,0xfc0aba74a3d76ad4l,
wolfSSL 14:167253f4e170 42353 0x7c76480325a7ec17l },
wolfSSL 14:167253f4e170 42354 { 0x7532d75f48879bc8l,0xea7eacc058ce6bc1l,0xc82176b48e896c16l,
wolfSSL 14:167253f4e170 42355 0x9a30e0b22c750fedl },
wolfSSL 14:167253f4e170 42356 0 },
wolfSSL 14:167253f4e170 42357 /* 16 << 224 */
wolfSSL 14:167253f4e170 42358 { { 0xc37e2c2e421d3aa4l,0xf926407ce84fa840l,0x18abc03d1454e41cl,
wolfSSL 14:167253f4e170 42359 0x26605ecd3f7af644l },
wolfSSL 14:167253f4e170 42360 { 0x242341a6d6a5eabfl,0x1edb84f4216b668el,0xd836edb804010102l,
wolfSSL 14:167253f4e170 42361 0x5b337ce7945e1d8cl },
wolfSSL 14:167253f4e170 42362 0 },
wolfSSL 14:167253f4e170 42363 /* 17 << 224 */
wolfSSL 14:167253f4e170 42364 { { 0xd2075c77c055dc14l,0x2a0ffa2581d89cdfl,0x8ce815ea6ffdcbafl,
wolfSSL 14:167253f4e170 42365 0xa3428878fb648867l },
wolfSSL 14:167253f4e170 42366 { 0x277699cf884655fbl,0xfa5b5bd6364d3e41l,0x01f680c6441e1cb7l,
wolfSSL 14:167253f4e170 42367 0x3fd61e66b70a7d67l },
wolfSSL 14:167253f4e170 42368 0 },
wolfSSL 14:167253f4e170 42369 /* 19 << 224 */
wolfSSL 14:167253f4e170 42370 { { 0xfd5bb657b1fa70fbl,0xfa07f50fd8073a00l,0xf72e3aa7bca02500l,
wolfSSL 14:167253f4e170 42371 0xf68f895d9975740dl },
wolfSSL 14:167253f4e170 42372 { 0x301120605cae2a6al,0x01bd721802874842l,0x3d4238917ce47bd3l,
wolfSSL 14:167253f4e170 42373 0xa66663c1789544f6l },
wolfSSL 14:167253f4e170 42374 0 },
wolfSSL 14:167253f4e170 42375 /* 21 << 224 */
wolfSSL 14:167253f4e170 42376 { { 0xb4b9a39b36194d40l,0xe857a7c577612601l,0xf4209dd24ecf2f58l,
wolfSSL 14:167253f4e170 42377 0x82b9e66d5a033487l },
wolfSSL 14:167253f4e170 42378 { 0xc1e36934e4e8b9ddl,0xd2372c9da42377d7l,0x51dc94c70e3ae43bl,
wolfSSL 14:167253f4e170 42379 0x4c57761e04474f6fl },
wolfSSL 14:167253f4e170 42380 0 },
wolfSSL 14:167253f4e170 42381 /* 23 << 224 */
wolfSSL 14:167253f4e170 42382 { { 0xa39114e24415503bl,0xc08ff7c64cbb17e9l,0x1eff674dd7dec966l,
wolfSSL 14:167253f4e170 42383 0x6d4690af53376f63l },
wolfSSL 14:167253f4e170 42384 { 0xff6fe32eea74237bl,0xc436d17ecd57508el,0x15aa28e1edcc40fel,
wolfSSL 14:167253f4e170 42385 0x0d769c04581bbb44l },
wolfSSL 14:167253f4e170 42386 0 },
wolfSSL 14:167253f4e170 42387 /* 25 << 224 */
wolfSSL 14:167253f4e170 42388 { { 0xfe51d0296ae55043l,0x8931e98f44a87de1l,0xe57f1cc609e4fee2l,
wolfSSL 14:167253f4e170 42389 0x0d063b674e072d92l },
wolfSSL 14:167253f4e170 42390 { 0x70a998b9ed0e4316l,0xe74a736b306aca46l,0xecf0fbf24fda97c7l,
wolfSSL 14:167253f4e170 42391 0xa40f65cb3e178d93l },
wolfSSL 14:167253f4e170 42392 0 },
wolfSSL 14:167253f4e170 42393 /* 27 << 224 */
wolfSSL 14:167253f4e170 42394 { { 0x8667e981c27253c9l,0x05a6aefb92b36a45l,0xa62c4b369cb7bb46l,
wolfSSL 14:167253f4e170 42395 0x8394f37511f7027bl },
wolfSSL 14:167253f4e170 42396 { 0x747bc79c5f109d0fl,0xcad88a765b8cc60al,0x80c5a66b58f09e68l,
wolfSSL 14:167253f4e170 42397 0xe753d451f6127eacl },
wolfSSL 14:167253f4e170 42398 0 },
wolfSSL 14:167253f4e170 42399 /* 28 << 224 */
wolfSSL 14:167253f4e170 42400 { { 0xc44b74a15b0ec6f5l,0x47989fe45289b2b8l,0x745f848458d6fc73l,
wolfSSL 14:167253f4e170 42401 0xec362a6ff61c70abl },
wolfSSL 14:167253f4e170 42402 { 0x070c98a7b3a8ad41l,0x73a20fc07b63db51l,0xed2c2173f44c35f4l,
wolfSSL 14:167253f4e170 42403 0x8a56149d9acc9dcal },
wolfSSL 14:167253f4e170 42404 0 },
wolfSSL 14:167253f4e170 42405 /* 29 << 224 */
wolfSSL 14:167253f4e170 42406 { { 0x98f178819ac6e0f4l,0x360fdeafa413b5edl,0x0625b8f4a300b0fdl,
wolfSSL 14:167253f4e170 42407 0xf1f4d76a5b3222d3l },
wolfSSL 14:167253f4e170 42408 { 0x9d6f5109587f76b8l,0x8b4ee08d2317fdb5l,0x88089bb78c68b095l,
wolfSSL 14:167253f4e170 42409 0x95570e9a5808d9b9l },
wolfSSL 14:167253f4e170 42410 0 },
wolfSSL 14:167253f4e170 42411 /* 31 << 224 */
wolfSSL 14:167253f4e170 42412 { { 0x2e1284943fb42622l,0x3b2700ac500907d5l,0xf370fb091a95ec63l,
wolfSSL 14:167253f4e170 42413 0xf8f30be231b6dfbdl },
wolfSSL 14:167253f4e170 42414 { 0xf2b2f8d269e55f15l,0x1fead851cc1323e9l,0xfa366010d9e5eef6l,
wolfSSL 14:167253f4e170 42415 0x64d487b0e316107el },
wolfSSL 14:167253f4e170 42416 0 },
wolfSSL 14:167253f4e170 42417 /* 33 << 224 */
wolfSSL 14:167253f4e170 42418 { { 0xc9a9513929607745l,0x0ca07420a26f2b28l,0xcb2790e74bc6f9ddl,
wolfSSL 14:167253f4e170 42419 0x345bbb58adcaffc0l },
wolfSSL 14:167253f4e170 42420 { 0xc65ea38cbe0f27a2l,0x67c24d7c641fcb56l,0x2c25f0a7a9e2c757l,
wolfSSL 14:167253f4e170 42421 0x93f5cdb016f16c49l },
wolfSSL 14:167253f4e170 42422 0 },
wolfSSL 14:167253f4e170 42423 /* 34 << 224 */
wolfSSL 14:167253f4e170 42424 { { 0x2ca5a9d7c5ee30a1l,0xd1593635b909b729l,0x804ce9f3dadeff48l,
wolfSSL 14:167253f4e170 42425 0xec464751b07c30c3l },
wolfSSL 14:167253f4e170 42426 { 0x89d65ff39e49af6al,0xf2d6238a6f3d01bcl,0x1095561e0bced843l,
wolfSSL 14:167253f4e170 42427 0x51789e12c8a13fd8l },
wolfSSL 14:167253f4e170 42428 0 },
wolfSSL 14:167253f4e170 42429 /* 35 << 224 */
wolfSSL 14:167253f4e170 42430 { { 0xd633f929763231dfl,0x46df9f7de7cbddefl,0x01c889c0cb265da8l,
wolfSSL 14:167253f4e170 42431 0xfce1ad10af4336d2l },
wolfSSL 14:167253f4e170 42432 { 0x8d110df6fc6a0a7el,0xdd431b986da425dcl,0xcdc4aeab1834aabel,
wolfSSL 14:167253f4e170 42433 0x84deb1248439b7fcl },
wolfSSL 14:167253f4e170 42434 0 },
wolfSSL 14:167253f4e170 42435 /* 36 << 224 */
wolfSSL 14:167253f4e170 42436 { { 0x8796f1693c2a5998l,0x9b9247b47947190dl,0x55b9d9a511597014l,
wolfSSL 14:167253f4e170 42437 0x7e9dd70d7b1566eel },
wolfSSL 14:167253f4e170 42438 { 0x94ad78f7cbcd5e64l,0x0359ac179bd4c032l,0x3b11baaf7cc222ael,
wolfSSL 14:167253f4e170 42439 0xa6a6e284ba78e812l },
wolfSSL 14:167253f4e170 42440 0 },
wolfSSL 14:167253f4e170 42441 /* 37 << 224 */
wolfSSL 14:167253f4e170 42442 { { 0x8392053f24cea1a0l,0xc97bce4a33621491l,0x7eb1db3435399ee9l,
wolfSSL 14:167253f4e170 42443 0x473f78efece81ad1l },
wolfSSL 14:167253f4e170 42444 { 0x41d72fe0f63d3d0dl,0xe620b880afab62fcl,0x92096bc993158383l,
wolfSSL 14:167253f4e170 42445 0x41a213578f896f6cl },
wolfSSL 14:167253f4e170 42446 0 },
wolfSSL 14:167253f4e170 42447 /* 39 << 224 */
wolfSSL 14:167253f4e170 42448 { { 0x6fb4d4e42bad4d5fl,0xfa4c3590fef0059bl,0x6a10218af5122294l,
wolfSSL 14:167253f4e170 42449 0x9a78a81aa85751d1l },
wolfSSL 14:167253f4e170 42450 { 0x04f20579a98e84e7l,0xfe1242c04997e5b5l,0xe77a273bca21e1e4l,
wolfSSL 14:167253f4e170 42451 0xfcc8b1ef9411939dl },
wolfSSL 14:167253f4e170 42452 0 },
wolfSSL 14:167253f4e170 42453 /* 40 << 224 */
wolfSSL 14:167253f4e170 42454 { { 0xe20ea30292d0487al,0x1442dbec294b91fel,0x1f7a4afebb6b0e8fl,
wolfSSL 14:167253f4e170 42455 0x1700ef746889c318l },
wolfSSL 14:167253f4e170 42456 { 0xf5bbffc370f1fc62l,0x3b31d4b669c79ccal,0xe8bc2aaba7f6340dl,
wolfSSL 14:167253f4e170 42457 0xb0b08ab4a725e10al },
wolfSSL 14:167253f4e170 42458 0 },
wolfSSL 14:167253f4e170 42459 /* 41 << 224 */
wolfSSL 14:167253f4e170 42460 { { 0x44f05701ae340050l,0xba4b30161cf0c569l,0x5aa29f83fbe19a51l,
wolfSSL 14:167253f4e170 42461 0x1b9ed428b71d752el },
wolfSSL 14:167253f4e170 42462 { 0x1666e54eeb4819f5l,0x616cdfed9e18b75bl,0x112ed5be3ee27b0bl,
wolfSSL 14:167253f4e170 42463 0xfbf2831944c7de4dl },
wolfSSL 14:167253f4e170 42464 0 },
wolfSSL 14:167253f4e170 42465 /* 43 << 224 */
wolfSSL 14:167253f4e170 42466 { { 0x722eb104e2b4e075l,0x49987295437c4926l,0xb1e4c0e446a9b82dl,
wolfSSL 14:167253f4e170 42467 0xd0cb319757a006f5l },
wolfSSL 14:167253f4e170 42468 { 0xf3de0f7dd7808c56l,0xb5c54d8f51f89772l,0x500a114aadbd31aal,
wolfSSL 14:167253f4e170 42469 0x9afaaaa6295f6cabl },
wolfSSL 14:167253f4e170 42470 0 },
wolfSSL 14:167253f4e170 42471 /* 44 << 224 */
wolfSSL 14:167253f4e170 42472 { { 0x94705e2104cf667al,0xfc2a811b9d3935d7l,0x560b02806d09267cl,
wolfSSL 14:167253f4e170 42473 0xf19ed119f780e53bl },
wolfSSL 14:167253f4e170 42474 { 0xf0227c09067b6269l,0x967b85335caef599l,0x155b924368efeebcl,
wolfSSL 14:167253f4e170 42475 0xcd6d34f5c497bae6l },
wolfSSL 14:167253f4e170 42476 0 },
wolfSSL 14:167253f4e170 42477 /* 45 << 224 */
wolfSSL 14:167253f4e170 42478 { { 0x1dd8d5d36cceb370l,0x2aeac579a78d7bf9l,0x5d65017d70b67a62l,
wolfSSL 14:167253f4e170 42479 0x70c8e44f17c53f67l },
wolfSSL 14:167253f4e170 42480 { 0xd1fc095086a34d09l,0xe0fca256e7134907l,0xe24fa29c80fdd315l,
wolfSSL 14:167253f4e170 42481 0x2c4acd03d87499adl },
wolfSSL 14:167253f4e170 42482 0 },
wolfSSL 14:167253f4e170 42483 /* 46 << 224 */
wolfSSL 14:167253f4e170 42484 { { 0xbaaf75173b5a9ba6l,0xb9cbe1f612e51a51l,0xd88edae35e154897l,
wolfSSL 14:167253f4e170 42485 0xe4309c3c77b66ca0l },
wolfSSL 14:167253f4e170 42486 { 0xf5555805f67f3746l,0x85fc37baa36401ffl,0xdf86e2cad9499a53l,
wolfSSL 14:167253f4e170 42487 0x6270b2a3ecbc955bl },
wolfSSL 14:167253f4e170 42488 0 },
wolfSSL 14:167253f4e170 42489 /* 47 << 224 */
wolfSSL 14:167253f4e170 42490 { { 0xafae64f5974ad33bl,0x04d85977fe7b2df1l,0x2a3db3ff4ab03f73l,
wolfSSL 14:167253f4e170 42491 0x0b87878a8702740al },
wolfSSL 14:167253f4e170 42492 { 0x6d263f015a061732l,0xc25430cea32a1901l,0xf7ebab3ddb155018l,
wolfSSL 14:167253f4e170 42493 0x3a86f69363a9b78el },
wolfSSL 14:167253f4e170 42494 0 },
wolfSSL 14:167253f4e170 42495 /* 48 << 224 */
wolfSSL 14:167253f4e170 42496 { { 0x349ae368da9f3804l,0x470f07fea164349cl,0xd52f4cc98562baa5l,
wolfSSL 14:167253f4e170 42497 0xc74a9e862b290df3l },
wolfSSL 14:167253f4e170 42498 { 0xd3a1aa3543471a24l,0x239446beb8194511l,0xbec2dd0081dcd44dl,
wolfSSL 14:167253f4e170 42499 0xca3d7f0fc42ac82dl },
wolfSSL 14:167253f4e170 42500 0 },
wolfSSL 14:167253f4e170 42501 /* 49 << 224 */
wolfSSL 14:167253f4e170 42502 { { 0x1f3db085fdaf4520l,0xbb6d3e804549daf2l,0xf5969d8a19ad5c42l,
wolfSSL 14:167253f4e170 42503 0x7052b13ddbfd1511l },
wolfSSL 14:167253f4e170 42504 { 0x11890d1b682b9060l,0xa71d3883ac34452cl,0xa438055b783805b4l,
wolfSSL 14:167253f4e170 42505 0x432412774725b23el },
wolfSSL 14:167253f4e170 42506 0 },
wolfSSL 14:167253f4e170 42507 /* 51 << 224 */
wolfSSL 14:167253f4e170 42508 { { 0x40b08f7443b30ca8l,0xe10b5bbad9934583l,0xe8a546d6b51110adl,
wolfSSL 14:167253f4e170 42509 0x1dd50e6628e0b6c5l },
wolfSSL 14:167253f4e170 42510 { 0x292e9d54cff2b821l,0x3882555d47281760l,0x134838f83724d6e3l,
wolfSSL 14:167253f4e170 42511 0xf2c679e022ddcda1l },
wolfSSL 14:167253f4e170 42512 0 },
wolfSSL 14:167253f4e170 42513 /* 52 << 224 */
wolfSSL 14:167253f4e170 42514 { { 0x40ee88156d2a5768l,0x7f227bd21c1e7e2dl,0x487ba134d04ff443l,
wolfSSL 14:167253f4e170 42515 0x76e2ff3dc614e54bl },
wolfSSL 14:167253f4e170 42516 { 0x36b88d6fa3177ec7l,0xbf731d512328fff5l,0x758caea249ba158el,
wolfSSL 14:167253f4e170 42517 0x5ab8ff4c02938188l },
wolfSSL 14:167253f4e170 42518 0 },
wolfSSL 14:167253f4e170 42519 /* 53 << 224 */
wolfSSL 14:167253f4e170 42520 { { 0x33e1605635edc56dl,0x5a69d3497e940d79l,0x6c4fd00103866dcbl,
wolfSSL 14:167253f4e170 42521 0x20a38f574893cdefl },
wolfSSL 14:167253f4e170 42522 { 0xfbf3e790fac3a15bl,0x6ed7ea2e7a4f8e6bl,0xa663eb4fbc3aca86l,
wolfSSL 14:167253f4e170 42523 0x22061ea5080d53f7l },
wolfSSL 14:167253f4e170 42524 0 },
wolfSSL 14:167253f4e170 42525 /* 55 << 224 */
wolfSSL 14:167253f4e170 42526 { { 0x635a8e5ec3a0ee43l,0x70aaebca679898ffl,0x9ee9f5475dc63d56l,
wolfSSL 14:167253f4e170 42527 0xce987966ffb34d00l },
wolfSSL 14:167253f4e170 42528 { 0xf9f86b195e26310al,0x9e435484382a8ca8l,0x253bcb81c2352fe4l,
wolfSSL 14:167253f4e170 42529 0xa4eac8b04474b571l },
wolfSSL 14:167253f4e170 42530 0 },
wolfSSL 14:167253f4e170 42531 /* 57 << 224 */
wolfSSL 14:167253f4e170 42532 { { 0x2617f91c93aa96b8l,0x0fc8716b7fca2e13l,0xa7106f5e95328723l,
wolfSSL 14:167253f4e170 42533 0xd1c9c40b262e6522l },
wolfSSL 14:167253f4e170 42534 { 0xb9bafe8642b7c094l,0x1873439d1543c021l,0xe1baa5de5cbefd5dl,
wolfSSL 14:167253f4e170 42535 0xa363fc5e521e8affl },
wolfSSL 14:167253f4e170 42536 0 },
wolfSSL 14:167253f4e170 42537 /* 59 << 224 */
wolfSSL 14:167253f4e170 42538 { { 0xbc00fc2f2f8ba2c7l,0x0966eb2f7c67aa28l,0x13f7b5165a786972l,
wolfSSL 14:167253f4e170 42539 0x3bfb75578a2fbba0l },
wolfSSL 14:167253f4e170 42540 { 0x131c4f235a2b9620l,0xbff3ed276faf46bel,0x9b4473d17e172323l,
wolfSSL 14:167253f4e170 42541 0x421e8878339f6246l },
wolfSSL 14:167253f4e170 42542 0 },
wolfSSL 14:167253f4e170 42543 /* 60 << 224 */
wolfSSL 14:167253f4e170 42544 { { 0x0fa8587a25a41632l,0xc0814124a35b6c93l,0x2b18a9f559ebb8dbl,
wolfSSL 14:167253f4e170 42545 0x264e335776edb29cl },
wolfSSL 14:167253f4e170 42546 { 0xaf245ccdc87c51e2l,0x16b3015b501e6214l,0xbb31c5600a3882cel,
wolfSSL 14:167253f4e170 42547 0x6961bb94fec11e04l },
wolfSSL 14:167253f4e170 42548 0 },
wolfSSL 14:167253f4e170 42549 /* 61 << 224 */
wolfSSL 14:167253f4e170 42550 { { 0x3b825b8deff7a3a0l,0xbec33738b1df7326l,0x68ad747c99604a1fl,
wolfSSL 14:167253f4e170 42551 0xd154c9349a3bd499l },
wolfSSL 14:167253f4e170 42552 { 0xac33506f1cc7a906l,0x73bb53926c560e8fl,0x6428fcbe263e3944l,
wolfSSL 14:167253f4e170 42553 0xc11828d51c387434l },
wolfSSL 14:167253f4e170 42554 0 },
wolfSSL 14:167253f4e170 42555 /* 63 << 224 */
wolfSSL 14:167253f4e170 42556 { { 0x659b17c8d8ceb147l,0x9b649eeeb70a5554l,0x6b7fa0b5ac6bc634l,
wolfSSL 14:167253f4e170 42557 0xd99fe2c71d6e732fl },
wolfSSL 14:167253f4e170 42558 { 0x30e6e7628d3abba2l,0x18fee6e7a797b799l,0x5c9d360dc696464dl,
wolfSSL 14:167253f4e170 42559 0xe3baeb4827bfde12l },
wolfSSL 14:167253f4e170 42560 0 },
wolfSSL 14:167253f4e170 42561 /* 64 << 224 */
wolfSSL 14:167253f4e170 42562 { { 0x2bf5db47f23206d5l,0x2f6d34201d260152l,0x17b876533f8ff89al,
wolfSSL 14:167253f4e170 42563 0x5157c30c378fa458l },
wolfSSL 14:167253f4e170 42564 { 0x7517c5c52d4fb936l,0xef22f7ace6518cdcl,0xdeb483e6bf847a64l,
wolfSSL 14:167253f4e170 42565 0xf508455892e0fa89l },
wolfSSL 14:167253f4e170 42566 0 },
wolfSSL 14:167253f4e170 42567 /* 65 << 224 */
wolfSSL 14:167253f4e170 42568 { { 0xf77bb113a74ed3bel,0x89e4eb8f074f2637l,0x7fbfa84df7ce2aebl,
wolfSSL 14:167253f4e170 42569 0xe7c6ecd5baaefe4cl },
wolfSSL 14:167253f4e170 42570 { 0x176bba7df6319542l,0x70098120f6080799l,0x2e2118339054d9aal,
wolfSSL 14:167253f4e170 42571 0x1be4c6a78295a912l },
wolfSSL 14:167253f4e170 42572 0 },
wolfSSL 14:167253f4e170 42573 /* 71 << 224 */
wolfSSL 14:167253f4e170 42574 { { 0x6bb4d8c35df1455fl,0xb839f08f0384b033l,0x718868af11f95d50l,
wolfSSL 14:167253f4e170 42575 0xae256a92e07a8801l },
wolfSSL 14:167253f4e170 42576 { 0xa5bafaf24d71a273l,0x18ff04ea2a30e68fl,0x364c193287ba727el,
wolfSSL 14:167253f4e170 42577 0x4bb8cf99befcaf73l },
wolfSSL 14:167253f4e170 42578 0 },
wolfSSL 14:167253f4e170 42579 /* 77 << 224 */
wolfSSL 14:167253f4e170 42580 { { 0xc79f5b1f4e9fb3d7l,0x52854970a51cccddl,0xa4e27e97f00054a3l,
wolfSSL 14:167253f4e170 42581 0x26a79792240e1232l },
wolfSSL 14:167253f4e170 42582 { 0xb15579fecb5ff465l,0x6ef54c3bd1722a84l,0xee211bfa5239a4d8l,
wolfSSL 14:167253f4e170 42583 0x36c7db27270b7059l },
wolfSSL 14:167253f4e170 42584 0 },
wolfSSL 14:167253f4e170 42585 /* 83 << 224 */
wolfSSL 14:167253f4e170 42586 { { 0x5e7da0a9f9858cd3l,0x67459de5b633de49l,0x2db0d54b2e73892el,
wolfSSL 14:167253f4e170 42587 0x37f50877adae399al },
wolfSSL 14:167253f4e170 42588 { 0x83c28b83b65e6179l,0xae5a915ca39faf17l,0x6ab8f3fbe841b53cl,
wolfSSL 14:167253f4e170 42589 0x7c30997b0df7d004l },
wolfSSL 14:167253f4e170 42590 0 },
wolfSSL 14:167253f4e170 42591 /* 89 << 224 */
wolfSSL 14:167253f4e170 42592 { { 0x87904ca7b3b862bdl,0x7593db93cf9ea671l,0x8a2670f8739aa783l,
wolfSSL 14:167253f4e170 42593 0x3921d779f5154ca6l },
wolfSSL 14:167253f4e170 42594 { 0xe81ca56468f65ebbl,0x0c600603bc4e64d4l,0xdf170049cb83b2d1l,
wolfSSL 14:167253f4e170 42595 0x373893b863487064l },
wolfSSL 14:167253f4e170 42596 0 },
wolfSSL 14:167253f4e170 42597 /* 95 << 224 */
wolfSSL 14:167253f4e170 42598 { { 0x7c3c52b9c0c4e88el,0x0f0484d06f0c2446l,0xeb876827000fe87bl,
wolfSSL 14:167253f4e170 42599 0xa749b3136d20f94al },
wolfSSL 14:167253f4e170 42600 { 0x0876dae9d55abda6l,0xe6e4367620726911l,0xf85e8a8c4a2676b4l,
wolfSSL 14:167253f4e170 42601 0x4e8c97f1b4a890ebl },
wolfSSL 14:167253f4e170 42602 0 },
wolfSSL 14:167253f4e170 42603 /* 101 << 224 */
wolfSSL 14:167253f4e170 42604 { { 0xa992f482a3c0a4f4l,0xe1536f3f7a8d961al,0x26fc79ae000752b0l,
wolfSSL 14:167253f4e170 42605 0xdbfb706b76ad8508l },
wolfSSL 14:167253f4e170 42606 { 0x2642b2ed6f4cf9e4l,0xa013db54557fa7e2l,0x2ef711821d326116l,
wolfSSL 14:167253f4e170 42607 0x8dc3f5bcbafc83ecl },
wolfSSL 14:167253f4e170 42608 0 },
wolfSSL 14:167253f4e170 42609 /* 107 << 224 */
wolfSSL 14:167253f4e170 42610 { { 0x9671258578e5a201l,0xc71aca1de9125569l,0x360c45c0e2231379l,
wolfSSL 14:167253f4e170 42611 0x2d71783512e82369l },
wolfSSL 14:167253f4e170 42612 { 0x392432d3d84b2153l,0x502fd3f6d6939ffel,0x33c440ae6e766cacl,
wolfSSL 14:167253f4e170 42613 0x99f1fbee28062416l },
wolfSSL 14:167253f4e170 42614 0 },
wolfSSL 14:167253f4e170 42615 /* 113 << 224 */
wolfSSL 14:167253f4e170 42616 { { 0xe51ad841861604cbl,0x1ec9c54f630283a7l,0xcc42cad582a39473l,
wolfSSL 14:167253f4e170 42617 0xa2eb053709929c4al },
wolfSSL 14:167253f4e170 42618 { 0xe374459767f655a3l,0x9f54c2451d7f2674l,0xd85e9163fbc8aba5l,
wolfSSL 14:167253f4e170 42619 0x12fd0b55866bc892l },
wolfSSL 14:167253f4e170 42620 0 },
wolfSSL 14:167253f4e170 42621 /* 116 << 224 */
wolfSSL 14:167253f4e170 42622 { { 0x4f2c3063d7bd4661l,0xe533798d57a974ccl,0x44860d503ea02d85l,
wolfSSL 14:167253f4e170 42623 0xf2a7f4e5acaa0521l },
wolfSSL 14:167253f4e170 42624 { 0x05593061abb108f0l,0x56d1056044528309l,0x1f674df9c88b6d1el,
wolfSSL 14:167253f4e170 42625 0x19fdc4cbd8744c4dl },
wolfSSL 14:167253f4e170 42626 0 },
wolfSSL 14:167253f4e170 42627 /* 119 << 224 */
wolfSSL 14:167253f4e170 42628 { { 0xfd1488ec00f2f1d5l,0x24fcc67b44a825ddl,0xc7bfae2ea925a0f4l,
wolfSSL 14:167253f4e170 42629 0x5e03249cad59cf48l },
wolfSSL 14:167253f4e170 42630 { 0x1dc5a8e11af4844cl,0x89b2fbc58a598c20l,0xb0f56afff2078121l,
wolfSSL 14:167253f4e170 42631 0x8194012d4878bb0dl },
wolfSSL 14:167253f4e170 42632 0 },
wolfSSL 14:167253f4e170 42633 /* 125 << 224 */
wolfSSL 14:167253f4e170 42634 { { 0xc1cbe9d3a5ae1031l,0x38da74435706b987l,0x01844b55b353f188l,
wolfSSL 14:167253f4e170 42635 0x390c59ca87a807c5l },
wolfSSL 14:167253f4e170 42636 { 0x55ac7b1fb13b780cl,0x060970bff375c1cbl,0x8dd1f378c7ab4e5cl,
wolfSSL 14:167253f4e170 42637 0xcca782e5cf726645l },
wolfSSL 14:167253f4e170 42638 0 },
wolfSSL 14:167253f4e170 42639 },
wolfSSL 14:167253f4e170 42640 {
wolfSSL 14:167253f4e170 42641 /* 0 << 232 */
wolfSSL 14:167253f4e170 42642 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 42643 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 42644 1 },
wolfSSL 14:167253f4e170 42645 /* 1 << 232 */
wolfSSL 14:167253f4e170 42646 { { 0x91213462f23f2d92l,0x6cab71bd60b94078l,0x6bdd0a63176cde20l,
wolfSSL 14:167253f4e170 42647 0x54c9b20cee4d54bcl },
wolfSSL 14:167253f4e170 42648 { 0x3cd2d8aa9f2ac02fl,0x03f8e617206eedb0l,0xc7f68e1693086434l,
wolfSSL 14:167253f4e170 42649 0x831469c592dd3db9l },
wolfSSL 14:167253f4e170 42650 0 },
wolfSSL 14:167253f4e170 42651 /* 3 << 232 */
wolfSSL 14:167253f4e170 42652 { { 0x4a9090cde36d0757l,0xf722d7b1d9a29382l,0xfb7fb04c04b48ddfl,
wolfSSL 14:167253f4e170 42653 0x628ad2a7ebe16f43l },
wolfSSL 14:167253f4e170 42654 { 0xcd3fbfb520226040l,0x6c34ecb15104b6c4l,0x30c0754ec903c188l,
wolfSSL 14:167253f4e170 42655 0xec336b082d23cab0l },
wolfSSL 14:167253f4e170 42656 0 },
wolfSSL 14:167253f4e170 42657 /* 4 << 232 */
wolfSSL 14:167253f4e170 42658 { { 0x9f51439e558df019l,0x230da4baac712b27l,0x518919e355185a24l,
wolfSSL 14:167253f4e170 42659 0x4dcefcdd84b78f50l },
wolfSSL 14:167253f4e170 42660 { 0xa7d90fb2a47d4c5al,0x55ac9abfb30e009el,0xfd2fc35974eed273l,
wolfSSL 14:167253f4e170 42661 0xb72d824cdbea8fafl },
wolfSSL 14:167253f4e170 42662 0 },
wolfSSL 14:167253f4e170 42663 /* 5 << 232 */
wolfSSL 14:167253f4e170 42664 { { 0xd213f923cbb13d1bl,0x98799f425bfb9bfel,0x1ae8ddc9701144a9l,
wolfSSL 14:167253f4e170 42665 0x0b8b3bb64c5595eel },
wolfSSL 14:167253f4e170 42666 { 0x0ea9ef2e3ecebb21l,0x17cb6c4b3671f9a7l,0x47ef464f726f1d1fl,
wolfSSL 14:167253f4e170 42667 0x171b94846943a276l },
wolfSSL 14:167253f4e170 42668 0 },
wolfSSL 14:167253f4e170 42669 /* 7 << 232 */
wolfSSL 14:167253f4e170 42670 { { 0xc9941109a607419dl,0xfaa71e62bb6bca80l,0x34158c1307c431f3l,
wolfSSL 14:167253f4e170 42671 0x594abebc992bc47al },
wolfSSL 14:167253f4e170 42672 { 0x6dfea691eb78399fl,0x48aafb353f42cba4l,0xedcd65af077c04f0l,
wolfSSL 14:167253f4e170 42673 0x1a29a366e884491al },
wolfSSL 14:167253f4e170 42674 0 },
wolfSSL 14:167253f4e170 42675 /* 9 << 232 */
wolfSSL 14:167253f4e170 42676 { { 0x7bf6a5c1f7ea25aal,0xd165e6bffbb07d5fl,0xe353936189e78671l,
wolfSSL 14:167253f4e170 42677 0xa3fcac892bac4219l },
wolfSSL 14:167253f4e170 42678 { 0xdfab6fd4f0baa8abl,0x5a4adac1e2c1c2e5l,0x6cd75e3140d85849l,
wolfSSL 14:167253f4e170 42679 0xce263fea19b39181l },
wolfSSL 14:167253f4e170 42680 0 },
wolfSSL 14:167253f4e170 42681 /* 10 << 232 */
wolfSSL 14:167253f4e170 42682 { { 0xb8d804a3315980cdl,0x693bc492fa3bebf7l,0x3578aeee2253c504l,
wolfSSL 14:167253f4e170 42683 0x158de498cd2474a2l },
wolfSSL 14:167253f4e170 42684 { 0x1331f5c7cfda8368l,0xd2d7bbb378d7177el,0xdf61133af3c1e46el,
wolfSSL 14:167253f4e170 42685 0x5836ce7dd30e7be8l },
wolfSSL 14:167253f4e170 42686 0 },
wolfSSL 14:167253f4e170 42687 /* 11 << 232 */
wolfSSL 14:167253f4e170 42688 { { 0xe042ece59a29a5c5l,0xb19b3c073b6c8402l,0xc97667c719d92684l,
wolfSSL 14:167253f4e170 42689 0xb5624622ebc66372l },
wolfSSL 14:167253f4e170 42690 { 0x0cb96e653c04fa02l,0x83a7176c8eaa39aal,0x2033561deaa1633fl,
wolfSSL 14:167253f4e170 42691 0x45a9d0864533df73l },
wolfSSL 14:167253f4e170 42692 0 },
wolfSSL 14:167253f4e170 42693 /* 13 << 232 */
wolfSSL 14:167253f4e170 42694 { { 0xa29ae9df5ece6e7cl,0x0603ac8f0facfb55l,0xcfe85b7adda233a5l,
wolfSSL 14:167253f4e170 42695 0xe618919fbd75f0b8l },
wolfSSL 14:167253f4e170 42696 { 0xf555a3d299bf1603l,0x1f43afc9f184255al,0xdcdaf341319a3e02l,
wolfSSL 14:167253f4e170 42697 0xd3b117ef03903a39l },
wolfSSL 14:167253f4e170 42698 0 },
wolfSSL 14:167253f4e170 42699 /* 15 << 232 */
wolfSSL 14:167253f4e170 42700 { { 0xb6b82fa74d82f4c2l,0x90725a606804efb3l,0xbc82ec46adc3425el,
wolfSSL 14:167253f4e170 42701 0xb7b805812787843el },
wolfSSL 14:167253f4e170 42702 { 0xdf46d91cdd1fc74cl,0xdc1c62cbe783a6c4l,0x59d1b9f31a04cbbal,
wolfSSL 14:167253f4e170 42703 0xd87f6f7295e40764l },
wolfSSL 14:167253f4e170 42704 0 },
wolfSSL 14:167253f4e170 42705 /* 16 << 232 */
wolfSSL 14:167253f4e170 42706 { { 0x196860411e84e0e5l,0xa5db84d3aea34c93l,0xf9d5bb197073a732l,
wolfSSL 14:167253f4e170 42707 0xb8d2fe566bcfd7c0l },
wolfSSL 14:167253f4e170 42708 { 0x45775f36f3eb82fal,0x8cb20cccfdff8b58l,0x1659b65f8374c110l,
wolfSSL 14:167253f4e170 42709 0xb8b4a422330c789al },
wolfSSL 14:167253f4e170 42710 0 },
wolfSSL 14:167253f4e170 42711 /* 17 << 232 */
wolfSSL 14:167253f4e170 42712 { { 0xa6312c9e8977d99bl,0xbe94433183f531e7l,0x8232c0c218d3b1d4l,
wolfSSL 14:167253f4e170 42713 0x617aae8be1247b73l },
wolfSSL 14:167253f4e170 42714 { 0x40153fc4282aec3bl,0xc6063d2ff7b8f823l,0x68f10e583304f94cl,
wolfSSL 14:167253f4e170 42715 0x31efae74ee676346l },
wolfSSL 14:167253f4e170 42716 0 },
wolfSSL 14:167253f4e170 42717 /* 19 << 232 */
wolfSSL 14:167253f4e170 42718 { { 0xd98bf2a43734e520l,0x5e3abbe3209bdcbal,0x77c76553bc945b35l,
wolfSSL 14:167253f4e170 42719 0x5331c093c6ef14aal },
wolfSSL 14:167253f4e170 42720 { 0x518ffe2976b60c80l,0x2285593b7ace16f8l,0xab1f64ccbe2b9784l,
wolfSSL 14:167253f4e170 42721 0xe8f2c0d9ab2421b6l },
wolfSSL 14:167253f4e170 42722 0 },
wolfSSL 14:167253f4e170 42723 /* 21 << 232 */
wolfSSL 14:167253f4e170 42724 { { 0x481dae5fd5ecfefcl,0x07084fd8c2bff8fcl,0x8040a01aea324596l,
wolfSSL 14:167253f4e170 42725 0x4c646980d4de4036l },
wolfSSL 14:167253f4e170 42726 { 0x9eb8ab4ed65abfc3l,0xe01cb91f13541ec7l,0x8f029adbfd695012l,
wolfSSL 14:167253f4e170 42727 0x9ae284833c7569ecl },
wolfSSL 14:167253f4e170 42728 0 },
wolfSSL 14:167253f4e170 42729 /* 23 << 232 */
wolfSSL 14:167253f4e170 42730 { { 0xc83605f6f10ff927l,0xd387145123739fc6l,0x6d163450cac1c2ccl,
wolfSSL 14:167253f4e170 42731 0x6b521296a2ec1ac5l },
wolfSSL 14:167253f4e170 42732 { 0x0606c4f96e3cb4a5l,0xe47d3f41778abff7l,0x425a8d5ebe8e3a45l,
wolfSSL 14:167253f4e170 42733 0x53ea9e97a6102160l },
wolfSSL 14:167253f4e170 42734 0 },
wolfSSL 14:167253f4e170 42735 /* 25 << 232 */
wolfSSL 14:167253f4e170 42736 { { 0x6b72fab526bc2797l,0x13670d1699f16771l,0x001700521e3e48d1l,
wolfSSL 14:167253f4e170 42737 0x978fe401b7adf678l },
wolfSSL 14:167253f4e170 42738 { 0x55ecfb92d41c5dd4l,0x5ff8e247c7b27da5l,0xe7518272013fb606l,
wolfSSL 14:167253f4e170 42739 0x5768d7e52f547a3cl },
wolfSSL 14:167253f4e170 42740 0 },
wolfSSL 14:167253f4e170 42741 /* 27 << 232 */
wolfSSL 14:167253f4e170 42742 { { 0x0e966e64c73b2383l,0x49eb3447d17d8762l,0xde1078218da05dabl,
wolfSSL 14:167253f4e170 42743 0x443d8baa016b7236l },
wolfSSL 14:167253f4e170 42744 { 0x163b63a5ea7610d6l,0xe47e4185ce1ca979l,0xae648b6580baa132l,
wolfSSL 14:167253f4e170 42745 0xebf53de20e0d5b64l },
wolfSSL 14:167253f4e170 42746 0 },
wolfSSL 14:167253f4e170 42747 /* 28 << 232 */
wolfSSL 14:167253f4e170 42748 { { 0x6ba535da9a85788bl,0xd21f03aebd0626d4l,0x099f8c47e873dc64l,
wolfSSL 14:167253f4e170 42749 0xcda8564d018ec97el },
wolfSSL 14:167253f4e170 42750 { 0x3e8d7a5cde92c68cl,0x78e035a173323cc4l,0x3ef26275f880ff7cl,
wolfSSL 14:167253f4e170 42751 0xa4ee3dff273eedaal },
wolfSSL 14:167253f4e170 42752 0 },
wolfSSL 14:167253f4e170 42753 /* 29 << 232 */
wolfSSL 14:167253f4e170 42754 { { 0x8bbaec49571d92acl,0x569e85fe4692517fl,0x8333b014a14ea4afl,
wolfSSL 14:167253f4e170 42755 0x32f2a62f12e5c5adl },
wolfSSL 14:167253f4e170 42756 { 0x98c2ce3a06d89b85l,0xb90741aa2ff77a08l,0x2530defc01f795a2l,
wolfSSL 14:167253f4e170 42757 0xd6e5ba0b84b3c199l },
wolfSSL 14:167253f4e170 42758 0 },
wolfSSL 14:167253f4e170 42759 /* 31 << 232 */
wolfSSL 14:167253f4e170 42760 { { 0x3d1b24cb28c682c6l,0x27f252288612575bl,0xb587c779e8e66e98l,
wolfSSL 14:167253f4e170 42761 0x7b0c03e9405eb1fel },
wolfSSL 14:167253f4e170 42762 { 0xfdf0d03015b548e7l,0xa8be76e038b36af7l,0x4cdab04a4f310c40l,
wolfSSL 14:167253f4e170 42763 0x6287223ef47ecaecl },
wolfSSL 14:167253f4e170 42764 0 },
wolfSSL 14:167253f4e170 42765 /* 33 << 232 */
wolfSSL 14:167253f4e170 42766 { { 0x0a4c6f3670ad54aal,0xc24cfd0d2a543909l,0xe1b0bc5b745c1a97l,
wolfSSL 14:167253f4e170 42767 0xb8431cfd68f0ddbfl },
wolfSSL 14:167253f4e170 42768 { 0x326357989ed8cb06l,0xa00a80ff759d2b7dl,0x81f335c190570e02l,
wolfSSL 14:167253f4e170 42769 0xbfccd89849c4e4d9l },
wolfSSL 14:167253f4e170 42770 0 },
wolfSSL 14:167253f4e170 42771 /* 34 << 232 */
wolfSSL 14:167253f4e170 42772 { { 0x4dcb646bfd16d8c4l,0x76a6b640e38ba57bl,0xd92de1f79d8ae7e2l,
wolfSSL 14:167253f4e170 42773 0x126f48f13f77f23bl },
wolfSSL 14:167253f4e170 42774 { 0xb7b53ca977e8abc2l,0x3faa17112c0787ffl,0xf8f9308c8e5762f8l,
wolfSSL 14:167253f4e170 42775 0x600a8a7f6b83aea8l },
wolfSSL 14:167253f4e170 42776 0 },
wolfSSL 14:167253f4e170 42777 /* 35 << 232 */
wolfSSL 14:167253f4e170 42778 { { 0xa2aed4a799aa03c0l,0x1f93b93da18b79c5l,0x7b4550b7314192c3l,
wolfSSL 14:167253f4e170 42779 0x9da00676272bb08el },
wolfSSL 14:167253f4e170 42780 { 0xe42f0d7e23e072edl,0x7ce76494888b5783l,0x4c7900203680b63bl,
wolfSSL 14:167253f4e170 42781 0x6040c83f662a8718l },
wolfSSL 14:167253f4e170 42782 0 },
wolfSSL 14:167253f4e170 42783 /* 36 << 232 */
wolfSSL 14:167253f4e170 42784 { { 0xba9e5c88a56d73edl,0x6c24f7712ca054d3l,0x4a37c235083beae1l,
wolfSSL 14:167253f4e170 42785 0x04a883b26483e9fdl },
wolfSSL 14:167253f4e170 42786 { 0x0c63f3aee27c2c5dl,0x0e1da88dae4671f1l,0xa577e8e25995e1dbl,
wolfSSL 14:167253f4e170 42787 0xbfc4b1b16ed6066al },
wolfSSL 14:167253f4e170 42788 0 },
wolfSSL 14:167253f4e170 42789 /* 37 << 232 */
wolfSSL 14:167253f4e170 42790 { { 0x8b398541f53d9e63l,0x4ab045bb019395cbl,0x69a1b90371dd70c7l,
wolfSSL 14:167253f4e170 42791 0xdedf284b38aaa431l },
wolfSSL 14:167253f4e170 42792 { 0xb45e245aaed3efe7l,0x49460905079f2facl,0xde4dee470845bd78l,
wolfSSL 14:167253f4e170 42793 0x0540524039d02ec3l },
wolfSSL 14:167253f4e170 42794 0 },
wolfSSL 14:167253f4e170 42795 /* 39 << 232 */
wolfSSL 14:167253f4e170 42796 { { 0x300cf051675cc986l,0x758afea99324219fl,0xf524c3fad5a93b5fl,
wolfSSL 14:167253f4e170 42797 0xb73385abc3864a8al },
wolfSSL 14:167253f4e170 42798 { 0xbde19289f6be9050l,0xbb9018558205a3f3l,0x99a9d14d229f6b89l,
wolfSSL 14:167253f4e170 42799 0x4c3a802f4336e68fl },
wolfSSL 14:167253f4e170 42800 0 },
wolfSSL 14:167253f4e170 42801 /* 40 << 232 */
wolfSSL 14:167253f4e170 42802 { { 0xdd4a12d8e12b31f8l,0x577e29bc177736e6l,0x2353722ba88935e8l,
wolfSSL 14:167253f4e170 42803 0xca1d3729015f286dl },
wolfSSL 14:167253f4e170 42804 { 0x86c7b6a239a3e035l,0x6e5250bfd3b03a9fl,0x79d98930fd0d536el,
wolfSSL 14:167253f4e170 42805 0x8c4cbbabfa0c3832l },
wolfSSL 14:167253f4e170 42806 0 },
wolfSSL 14:167253f4e170 42807 /* 41 << 232 */
wolfSSL 14:167253f4e170 42808 { { 0x92ecff374f8e6163l,0x171cc8830f35faeal,0xc5434242bcd36142l,
wolfSSL 14:167253f4e170 42809 0x707049adb28b63bbl },
wolfSSL 14:167253f4e170 42810 { 0xa1f4d1dbf6443da9l,0x002bb062dabc108bl,0x17287f171a272b08l,
wolfSSL 14:167253f4e170 42811 0x2a3aac8c884cf6bbl },
wolfSSL 14:167253f4e170 42812 0 },
wolfSSL 14:167253f4e170 42813 /* 43 << 232 */
wolfSSL 14:167253f4e170 42814 { { 0x55524645651c0a5al,0x14624a9703cf0d12l,0xca9315a8f884a9e2l,
wolfSSL 14:167253f4e170 42815 0x9840c6e2df7c9d59l },
wolfSSL 14:167253f4e170 42816 { 0xd96bd10a7438e8d5l,0x12be73d2b2f887del,0x5e47445dca2493efl,
wolfSSL 14:167253f4e170 42817 0x85aef555e9fff03el },
wolfSSL 14:167253f4e170 42818 0 },
wolfSSL 14:167253f4e170 42819 /* 44 << 232 */
wolfSSL 14:167253f4e170 42820 { { 0x169b38c9a43b2339l,0x884308d91732bfabl,0xe4b593a28ff202ddl,
wolfSSL 14:167253f4e170 42821 0xaf51d11f1e65376cl },
wolfSSL 14:167253f4e170 42822 { 0x6ec648de741525ffl,0xf93cbd369ff4c628l,0xc76df9efb1129c79l,
wolfSSL 14:167253f4e170 42823 0x31a5f2e2b7a67294l },
wolfSSL 14:167253f4e170 42824 0 },
wolfSSL 14:167253f4e170 42825 /* 45 << 232 */
wolfSSL 14:167253f4e170 42826 { { 0x0661bc02801d0e38l,0x4a37dc0e71fc46b7l,0x0b224cfc80c3e311l,
wolfSSL 14:167253f4e170 42827 0x2dd3d2779646a957l },
wolfSSL 14:167253f4e170 42828 { 0xfa45aa18ef524012l,0x5d2a2d0916185a09l,0x34d5c630b5313dcel,
wolfSSL 14:167253f4e170 42829 0xd9581ed151e4cf84l },
wolfSSL 14:167253f4e170 42830 0 },
wolfSSL 14:167253f4e170 42831 /* 46 << 232 */
wolfSSL 14:167253f4e170 42832 { { 0x5845aa4a8ebd2af8l,0x141404ecd3df43ccl,0xff3fc7681ffd48d9l,
wolfSSL 14:167253f4e170 42833 0x8a096e72e0cefb65l },
wolfSSL 14:167253f4e170 42834 { 0xc9c81cfdffc3a5cdl,0x7550aa3029b27cf9l,0x34dca72b65fa0380l,
wolfSSL 14:167253f4e170 42835 0xe8c5f6059ddd032bl },
wolfSSL 14:167253f4e170 42836 0 },
wolfSSL 14:167253f4e170 42837 /* 47 << 232 */
wolfSSL 14:167253f4e170 42838 { { 0xe53da8a46bfbadb3l,0x4a9dfa55afaeeb5el,0x076245ea6644b1d4l,
wolfSSL 14:167253f4e170 42839 0xc19be4012307bbcbl },
wolfSSL 14:167253f4e170 42840 { 0x097774c19d77318bl,0xacc8a1519cfd51c4l,0x736ef6b3ecaa7b08l,
wolfSSL 14:167253f4e170 42841 0x107479132d643a80l },
wolfSSL 14:167253f4e170 42842 0 },
wolfSSL 14:167253f4e170 42843 /* 48 << 232 */
wolfSSL 14:167253f4e170 42844 { { 0x2d500910cab91f1el,0xbedd9e444d1cd216l,0xd634b74fedd02252l,
wolfSSL 14:167253f4e170 42845 0xbd60f8e11258617al },
wolfSSL 14:167253f4e170 42846 { 0xd8c7537b9e05614al,0xfd26c766e7af5fc5l,0x0660b581582bd926l,
wolfSSL 14:167253f4e170 42847 0x87019244acf07fc8l },
wolfSSL 14:167253f4e170 42848 0 },
wolfSSL 14:167253f4e170 42849 /* 49 << 232 */
wolfSSL 14:167253f4e170 42850 { { 0xd4889fdf6220ae8el,0x745d67ec1abf1549l,0x957b2e3d2fb89c36l,
wolfSSL 14:167253f4e170 42851 0x9768c90edc62ada9l },
wolfSSL 14:167253f4e170 42852 { 0x90332fd748e6c46el,0x5aa5a4e54e90ef0dl,0x58838fd3ddcc8571l,
wolfSSL 14:167253f4e170 42853 0xd12f6c6f9a721126l },
wolfSSL 14:167253f4e170 42854 0 },
wolfSSL 14:167253f4e170 42855 /* 51 << 232 */
wolfSSL 14:167253f4e170 42856 { { 0x2f0fd0b2cec757bal,0x46a7a9c63032cd1dl,0x9af3a600547d7a77l,
wolfSSL 14:167253f4e170 42857 0x828e16eca43da1bal },
wolfSSL 14:167253f4e170 42858 { 0x0b303a66092a8d92l,0x78ba0389c23d08bal,0x52aed08d4616bd29l,
wolfSSL 14:167253f4e170 42859 0x4c0ff1210539c9fal },
wolfSSL 14:167253f4e170 42860 0 },
wolfSSL 14:167253f4e170 42861 /* 52 << 232 */
wolfSSL 14:167253f4e170 42862 { { 0x2c3b7322badcfe8el,0x6e0616fac5e25a04l,0x0a3c12753da6e4a2l,
wolfSSL 14:167253f4e170 42863 0xe46c957e077bca01l },
wolfSSL 14:167253f4e170 42864 { 0xb46ca4e3da4be64bl,0xa59bda668e75ee78l,0x41835184a4de98f2l,
wolfSSL 14:167253f4e170 42865 0x6efb1f924ed6a568l },
wolfSSL 14:167253f4e170 42866 0 },
wolfSSL 14:167253f4e170 42867 /* 53 << 232 */
wolfSSL 14:167253f4e170 42868 { { 0xbb8cdc094af1dd72l,0x93c0aa38a2460633l,0xf66f5d238a7ebc93l,
wolfSSL 14:167253f4e170 42869 0x43ecda843e8e37a6l },
wolfSSL 14:167253f4e170 42870 { 0x399da8265fd5139el,0x8b39930fd446f38el,0x114414135d2b68efl,
wolfSSL 14:167253f4e170 42871 0x8be163b8d1637c38l },
wolfSSL 14:167253f4e170 42872 0 },
wolfSSL 14:167253f4e170 42873 /* 55 << 232 */
wolfSSL 14:167253f4e170 42874 { { 0x488e2a35b70ddbd3l,0xb4aa5f718da50077l,0xb38b74b1d8752bbdl,
wolfSSL 14:167253f4e170 42875 0x7007f328416106a3l },
wolfSSL 14:167253f4e170 42876 { 0xe6a62e4fcec4ea68l,0x9fdfb79741ef920bl,0x1a19d7dfe3c337a6l,
wolfSSL 14:167253f4e170 42877 0x08f643558be0f586l },
wolfSSL 14:167253f4e170 42878 0 },
wolfSSL 14:167253f4e170 42879 /* 57 << 232 */
wolfSSL 14:167253f4e170 42880 { { 0x91a5d8ff60343a1fl,0x921e442173ef8cdfl,0x4358f27b975138cdl,
wolfSSL 14:167253f4e170 42881 0x36fd8577a4992b08l },
wolfSSL 14:167253f4e170 42882 { 0xc07c8ca1f8d044c6l,0xcf42903687747b6bl,0x0932ffb0867c8632l,
wolfSSL 14:167253f4e170 42883 0x7e565213250e5a89l },
wolfSSL 14:167253f4e170 42884 0 },
wolfSSL 14:167253f4e170 42885 /* 59 << 232 */
wolfSSL 14:167253f4e170 42886 { { 0xae7c3b9b06255feal,0x2eb1d9a78a6fe229l,0xf81548e77601e6f8l,
wolfSSL 14:167253f4e170 42887 0x777394eb7bd96d6cl },
wolfSSL 14:167253f4e170 42888 { 0x54734187000a3509l,0xaeec146492d43c04l,0xc9b7f0d7c428b4acl,
wolfSSL 14:167253f4e170 42889 0x9d4bcedccd7f7018l },
wolfSSL 14:167253f4e170 42890 0 },
wolfSSL 14:167253f4e170 42891 /* 60 << 232 */
wolfSSL 14:167253f4e170 42892 { { 0x4741b9b311370605l,0x47fa72f75d09b355l,0x391a71ac7a144c6al,
wolfSSL 14:167253f4e170 42893 0x0808c0f498b6e3cal },
wolfSSL 14:167253f4e170 42894 { 0x7eaed9ef7fe53900l,0xf157a2a5e5a830bal,0xd13ec09127974afcl,
wolfSSL 14:167253f4e170 42895 0x78d710a70b87997dl },
wolfSSL 14:167253f4e170 42896 0 },
wolfSSL 14:167253f4e170 42897 /* 61 << 232 */
wolfSSL 14:167253f4e170 42898 { { 0xcbb96ecb4e263f81l,0x093e0d1509084351l,0x7af3232629220a81l,
wolfSSL 14:167253f4e170 42899 0xd721b415c60f36dcl },
wolfSSL 14:167253f4e170 42900 { 0xe3340a87fe9387a1l,0x6088bf482ff2b126l,0xd31028f1d2bc982cl,
wolfSSL 14:167253f4e170 42901 0x9794e106630d52cbl },
wolfSSL 14:167253f4e170 42902 0 },
wolfSSL 14:167253f4e170 42903 /* 63 << 232 */
wolfSSL 14:167253f4e170 42904 { { 0x1dac76780b11e972l,0x46e814c62698dafel,0x553f7370c37640d6l,
wolfSSL 14:167253f4e170 42905 0xdcf588cc51cede93l },
wolfSSL 14:167253f4e170 42906 { 0x4d6b56d3c3f6215bl,0x07edc6621b8f8f03l,0xdfef9d60b9a5dfbcl,
wolfSSL 14:167253f4e170 42907 0x377edf4d10af7a5bl },
wolfSSL 14:167253f4e170 42908 0 },
wolfSSL 14:167253f4e170 42909 /* 64 << 232 */
wolfSSL 14:167253f4e170 42910 { { 0x8928e99aeeaf8c49l,0xee7aa73d6e24d728l,0x4c5007c2e72b156cl,
wolfSSL 14:167253f4e170 42911 0x5fcf57c5ed408a1dl },
wolfSSL 14:167253f4e170 42912 { 0x9f719e39b6057604l,0x7d343c01c2868bbfl,0x2cca254b7e103e2dl,
wolfSSL 14:167253f4e170 42913 0xe6eb38a9f131bea2l },
wolfSSL 14:167253f4e170 42914 0 },
wolfSSL 14:167253f4e170 42915 /* 65 << 232 */
wolfSSL 14:167253f4e170 42916 { { 0x26ae28bede7a4b7el,0xd2f07569d2664163l,0x798690d4ff69266al,
wolfSSL 14:167253f4e170 42917 0x77093d356ef3695dl },
wolfSSL 14:167253f4e170 42918 { 0xaca9903d567dd3dfl,0x259c59a3a274c67bl,0x9f34bc0bfc1198b0l,
wolfSSL 14:167253f4e170 42919 0x51a7726290b1521cl },
wolfSSL 14:167253f4e170 42920 0 },
wolfSSL 14:167253f4e170 42921 /* 71 << 232 */
wolfSSL 14:167253f4e170 42922 { { 0xa20644bc80ca5391l,0xf9cdb4f7e5b36ea3l,0xe7936c0641426e22l,
wolfSSL 14:167253f4e170 42923 0x39bc23033eef8a52l },
wolfSSL 14:167253f4e170 42924 { 0x31253f43e5d8f896l,0xb0e5a588dc3df499l,0x1d03519a2d7e66d5l,
wolfSSL 14:167253f4e170 42925 0x923de91f6d7da5e3l },
wolfSSL 14:167253f4e170 42926 0 },
wolfSSL 14:167253f4e170 42927 /* 77 << 232 */
wolfSSL 14:167253f4e170 42928 { { 0x17a833ffedf861e4l,0x0ee3d0af4ebec965l,0xd0fac1c1ea66870el,
wolfSSL 14:167253f4e170 42929 0x325756d0ae810cf4l },
wolfSSL 14:167253f4e170 42930 { 0x4ed78d2c78e9a415l,0x6cc65685192046e4l,0x03e4243d8498a91el,
wolfSSL 14:167253f4e170 42931 0x56a02dd25ab97794l },
wolfSSL 14:167253f4e170 42932 0 },
wolfSSL 14:167253f4e170 42933 /* 83 << 232 */
wolfSSL 14:167253f4e170 42934 { { 0xc2fd373748e2b156l,0x259e9a98139645bel,0xe90106fb9877b4f1l,
wolfSSL 14:167253f4e170 42935 0x49e5bac5889ce002l },
wolfSSL 14:167253f4e170 42936 { 0x936a7dd18cf14e0bl,0x70bf6d304e3a8a01l,0x99d3e8bfeb748b62l,
wolfSSL 14:167253f4e170 42937 0xa52a27c99b31c55cl },
wolfSSL 14:167253f4e170 42938 0 },
wolfSSL 14:167253f4e170 42939 /* 89 << 232 */
wolfSSL 14:167253f4e170 42940 { { 0x9db1d41d300637d5l,0xe38744397c2dd836l,0x36179baf0d04ceb3l,
wolfSSL 14:167253f4e170 42941 0xe9ccd17b251b3f2dl },
wolfSSL 14:167253f4e170 42942 { 0xd8228073442b6d1dl,0x59a038363eed2971l,0xb443732046979f5cl,
wolfSSL 14:167253f4e170 42943 0x54ad4113ae63937cl },
wolfSSL 14:167253f4e170 42944 0 },
wolfSSL 14:167253f4e170 42945 /* 95 << 232 */
wolfSSL 14:167253f4e170 42946 { { 0x092c34e6d9246e9fl,0xb4b3b63d3eeb18a7l,0x8b3778beed9d1383l,
wolfSSL 14:167253f4e170 42947 0xe4cb7be9d70d5d80l },
wolfSSL 14:167253f4e170 42948 { 0xcff12e9b3d059203l,0x277af117ba86699fl,0x9bd4e8e363603585l,
wolfSSL 14:167253f4e170 42949 0x0750b0f28e89c8d5l },
wolfSSL 14:167253f4e170 42950 0 },
wolfSSL 14:167253f4e170 42951 /* 101 << 232 */
wolfSSL 14:167253f4e170 42952 { { 0x38b77e5958f7187bl,0x31c7068de0cb618el,0xa0f8e0d6c11ebe62l,
wolfSSL 14:167253f4e170 42953 0x07adc8010473d7ebl },
wolfSSL 14:167253f4e170 42954 { 0x36161a2c5c3e9510l,0xb2ec90d64ad04815l,0x01e2dd1f917d8166l,
wolfSSL 14:167253f4e170 42955 0x549bcbdd6aa0f794l },
wolfSSL 14:167253f4e170 42956 0 },
wolfSSL 14:167253f4e170 42957 /* 107 << 232 */
wolfSSL 14:167253f4e170 42958 { { 0x4ab27c3a8e4e45e5l,0xf6bd9d82f2bb99e7l,0xcab48c735e9da59fl,
wolfSSL 14:167253f4e170 42959 0xdeb09eb2b9727353l },
wolfSSL 14:167253f4e170 42960 { 0xc4a7954bafb8fa3el,0x34af2a49abf6803dl,0xc1ee1416d63e13bbl,
wolfSSL 14:167253f4e170 42961 0xd49bf42d7a949193l },
wolfSSL 14:167253f4e170 42962 0 },
wolfSSL 14:167253f4e170 42963 /* 113 << 232 */
wolfSSL 14:167253f4e170 42964 { { 0x504823ea9c9c07c6l,0x9dbec902bee2288cl,0x018d7875f0ceb6bbl,
wolfSSL 14:167253f4e170 42965 0x678b997304f7022cl },
wolfSSL 14:167253f4e170 42966 { 0x74d658238c5fb369l,0x7d4e1f114ca89ee8l,0x148316399905abc0l,
wolfSSL 14:167253f4e170 42967 0xc107324e2c4deff4l },
wolfSSL 14:167253f4e170 42968 0 },
wolfSSL 14:167253f4e170 42969 /* 116 << 232 */
wolfSSL 14:167253f4e170 42970 { { 0x1bc4fa8bdadc4404l,0x0edb9534daa12ee3l,0x084481b6a5f7289cl,
wolfSSL 14:167253f4e170 42971 0x7f42461d9d8fb3d2l },
wolfSSL 14:167253f4e170 42972 { 0xf93f1d3212293c70l,0xc14706596bb73ea3l,0xf80834afde339cadl,
wolfSSL 14:167253f4e170 42973 0x99dcfc0081f22953l },
wolfSSL 14:167253f4e170 42974 0 },
wolfSSL 14:167253f4e170 42975 /* 119 << 232 */
wolfSSL 14:167253f4e170 42976 { { 0x497e544f9fca737el,0x7f6342210e91e1afl,0x638e500c78d7b20bl,
wolfSSL 14:167253f4e170 42977 0xb1ffed3f7ebaa947l },
wolfSSL 14:167253f4e170 42978 { 0x751aa54871086f83l,0x8100bb703cf97848l,0xc32f91ace19ad68fl,
wolfSSL 14:167253f4e170 42979 0x7dffb6851fb9157el },
wolfSSL 14:167253f4e170 42980 0 },
wolfSSL 14:167253f4e170 42981 /* 125 << 232 */
wolfSSL 14:167253f4e170 42982 { { 0x5108589778e25060l,0x33e3cb7316cfe6cbl,0x0884cb8d410c0822l,
wolfSSL 14:167253f4e170 42983 0xaa806ecc0be3fc94l },
wolfSSL 14:167253f4e170 42984 { 0x9f9121f5f692353el,0xb9ab0310f8ee3349l,0x390032ce2561973el,
wolfSSL 14:167253f4e170 42985 0xc07b6c6c8856b766l },
wolfSSL 14:167253f4e170 42986 0 },
wolfSSL 14:167253f4e170 42987 },
wolfSSL 14:167253f4e170 42988 {
wolfSSL 14:167253f4e170 42989 /* 0 << 240 */
wolfSSL 14:167253f4e170 42990 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 42991 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 42992 1 },
wolfSSL 14:167253f4e170 42993 /* 1 << 240 */
wolfSSL 14:167253f4e170 42994 { { 0x1083e2ea1f095615l,0x0a28ad7714e68c33l,0x6bfc02523d8818bel,
wolfSSL 14:167253f4e170 42995 0xb585113af35850cdl },
wolfSSL 14:167253f4e170 42996 { 0x7d935f0b30df8aa1l,0xaddda07c4ab7e3acl,0x92c34299552f00cbl,
wolfSSL 14:167253f4e170 42997 0xc33ed1de2909df6cl },
wolfSSL 14:167253f4e170 42998 0 },
wolfSSL 14:167253f4e170 42999 /* 3 << 240 */
wolfSSL 14:167253f4e170 43000 { { 0xabe7905a83cdd60el,0x50602fb5a1170184l,0x689886cdb023642al,
wolfSSL 14:167253f4e170 43001 0xd568d090a6e1fb00l },
wolfSSL 14:167253f4e170 43002 { 0x5b1922c70259217fl,0x93831cd9c43141e4l,0xdfca35870c95f86el,
wolfSSL 14:167253f4e170 43003 0xdec2057a568ae828l },
wolfSSL 14:167253f4e170 43004 0 },
wolfSSL 14:167253f4e170 43005 /* 4 << 240 */
wolfSSL 14:167253f4e170 43006 { { 0x568f8925913cc16dl,0x18bc5b6de1a26f5al,0xdfa413bef5f499ael,
wolfSSL 14:167253f4e170 43007 0xf8835decc3f0ae84l },
wolfSSL 14:167253f4e170 43008 { 0xb6e60bd865a40ab0l,0x65596439194b377el,0xbcd8562592084a69l,
wolfSSL 14:167253f4e170 43009 0x5ce433b94f23ede0l },
wolfSSL 14:167253f4e170 43010 0 },
wolfSSL 14:167253f4e170 43011 /* 5 << 240 */
wolfSSL 14:167253f4e170 43012 { { 0x860d523d42e06189l,0xbf0779414e3aff13l,0x0b616dcac1b20650l,
wolfSSL 14:167253f4e170 43013 0xe66dd6d12131300dl },
wolfSSL 14:167253f4e170 43014 { 0xd4a0fd67ff99abdel,0xc9903550c7aac50dl,0x022ecf8b7c46b2d7l,
wolfSSL 14:167253f4e170 43015 0x3333b1e83abf92afl },
wolfSSL 14:167253f4e170 43016 0 },
wolfSSL 14:167253f4e170 43017 /* 7 << 240 */
wolfSSL 14:167253f4e170 43018 { { 0xefecdef7be42a582l,0xd3fc608065046be6l,0xc9af13c809e8dba9l,
wolfSSL 14:167253f4e170 43019 0x1e6c9847641491ffl },
wolfSSL 14:167253f4e170 43020 { 0x3b574925d30c31f7l,0xb7eb72baac2a2122l,0x776a0dacef0859e7l,
wolfSSL 14:167253f4e170 43021 0x06fec31421900942l },
wolfSSL 14:167253f4e170 43022 0 },
wolfSSL 14:167253f4e170 43023 /* 9 << 240 */
wolfSSL 14:167253f4e170 43024 { { 0x7ec62fbbf4737f21l,0xd8dba5ab6209f5acl,0x24b5d7a9a5f9adbel,
wolfSSL 14:167253f4e170 43025 0x707d28f7a61dc768l },
wolfSSL 14:167253f4e170 43026 { 0x7711460bcaa999eal,0xba7b174d1c92e4ccl,0x3c4bab6618d4bf2dl,
wolfSSL 14:167253f4e170 43027 0xb8f0c980eb8bd279l },
wolfSSL 14:167253f4e170 43028 0 },
wolfSSL 14:167253f4e170 43029 /* 10 << 240 */
wolfSSL 14:167253f4e170 43030 { { 0x9d658932790691bfl,0xed61058906b736ael,0x712c2f04c0d63b6el,
wolfSSL 14:167253f4e170 43031 0x5cf06fd5c63d488fl },
wolfSSL 14:167253f4e170 43032 { 0x97363facd9588e41l,0x1f9bf7622b93257el,0xa9d1ffc4667acacel,
wolfSSL 14:167253f4e170 43033 0x1cf4a1aa0a061ecfl },
wolfSSL 14:167253f4e170 43034 0 },
wolfSSL 14:167253f4e170 43035 /* 11 << 240 */
wolfSSL 14:167253f4e170 43036 { { 0x28d675b2c0519a23l,0x9ebf94fe4f6952e3l,0xf28bb767a2294a8al,
wolfSSL 14:167253f4e170 43037 0x85512b4dfe0af3f5l },
wolfSSL 14:167253f4e170 43038 { 0x18958ba899b16a0dl,0x95c2430cba7548a7l,0xb30d1b10a16be615l,
wolfSSL 14:167253f4e170 43039 0xe3ebbb9785bfb74cl },
wolfSSL 14:167253f4e170 43040 0 },
wolfSSL 14:167253f4e170 43041 /* 13 << 240 */
wolfSSL 14:167253f4e170 43042 { { 0x81eeb865d2fdca23l,0x5a15ee08cc8ef895l,0x768fa10a01905614l,
wolfSSL 14:167253f4e170 43043 0xeff5b8ef880ee19bl },
wolfSSL 14:167253f4e170 43044 { 0xf0c0cabbcb1c8a0el,0x2e1ee9cdb8c838f9l,0x0587d8b88a4a14c0l,
wolfSSL 14:167253f4e170 43045 0xf6f278962ff698e5l },
wolfSSL 14:167253f4e170 43046 0 },
wolfSSL 14:167253f4e170 43047 /* 15 << 240 */
wolfSSL 14:167253f4e170 43048 { { 0x9c4b646e9e2fce99l,0x68a210811e80857fl,0x06d54e443643b52al,
wolfSSL 14:167253f4e170 43049 0xde8d6d630d8eb843l },
wolfSSL 14:167253f4e170 43050 { 0x7032156342146a0al,0x8ba826f25eaa3622l,0x227a58bd86138787l,
wolfSSL 14:167253f4e170 43051 0x43b6c03c10281d37l },
wolfSSL 14:167253f4e170 43052 0 },
wolfSSL 14:167253f4e170 43053 /* 16 << 240 */
wolfSSL 14:167253f4e170 43054 { { 0x02b37a952f41deffl,0x0e44a59ae63b89b7l,0x673257dc143ff951l,
wolfSSL 14:167253f4e170 43055 0x19c02205d752baf4l },
wolfSSL 14:167253f4e170 43056 { 0x46c23069c4b7d692l,0x2e6392c3fd1502acl,0x6057b1a21b220846l,
wolfSSL 14:167253f4e170 43057 0xe51ff9460c1b5b63l },
wolfSSL 14:167253f4e170 43058 0 },
wolfSSL 14:167253f4e170 43059 /* 17 << 240 */
wolfSSL 14:167253f4e170 43060 { { 0x7aca2632f02fc0f0l,0xb92b337dc7f01c86l,0x624bc4bf5afbdc7dl,
wolfSSL 14:167253f4e170 43061 0x812b07bc4de21a5el },
wolfSSL 14:167253f4e170 43062 { 0x29d137240b2090ccl,0x0403c5095a1b2132l,0x1dca34d50e35e015l,
wolfSSL 14:167253f4e170 43063 0xf085ed7d3bbbb66fl },
wolfSSL 14:167253f4e170 43064 0 },
wolfSSL 14:167253f4e170 43065 /* 19 << 240 */
wolfSSL 14:167253f4e170 43066 { { 0xc27b98f9f781e865l,0x51e1f692994e1345l,0x0807d516e19361eel,
wolfSSL 14:167253f4e170 43067 0x13885ceffb998aefl },
wolfSSL 14:167253f4e170 43068 { 0xd223d5e92f0f8a17l,0x48672010e8d20280l,0x6f02fd60237eac98l,
wolfSSL 14:167253f4e170 43069 0xcc51bfad9ada7ee7l },
wolfSSL 14:167253f4e170 43070 0 },
wolfSSL 14:167253f4e170 43071 /* 21 << 240 */
wolfSSL 14:167253f4e170 43072 { { 0x2756bcdd1e09701dl,0x94e31db990d45c80l,0xb9e856a98566e584l,
wolfSSL 14:167253f4e170 43073 0x4f87d9deab10e3f3l },
wolfSSL 14:167253f4e170 43074 { 0x166ecb373ded9cb2l,0xfd14c7073f653d3el,0x105d049b92aec425l,
wolfSSL 14:167253f4e170 43075 0x7f657e4909a42e11l },
wolfSSL 14:167253f4e170 43076 0 },
wolfSSL 14:167253f4e170 43077 /* 23 << 240 */
wolfSSL 14:167253f4e170 43078 { { 0xea6490076a159594l,0x3e424d6b1f97ce52l,0xac6df30a185e8ccbl,
wolfSSL 14:167253f4e170 43079 0xad56ec80517747bfl },
wolfSSL 14:167253f4e170 43080 { 0xf0935ccf4391fe93l,0x866b260f03811d40l,0x792047b99f7b9abel,
wolfSSL 14:167253f4e170 43081 0xb1600bc88ee42d84l },
wolfSSL 14:167253f4e170 43082 0 },
wolfSSL 14:167253f4e170 43083 /* 25 << 240 */
wolfSSL 14:167253f4e170 43084 { { 0x2d97b3db7768a85fl,0x2b78f6334287e038l,0x86c947676f892bb1l,
wolfSSL 14:167253f4e170 43085 0x920bfb1ac0a9c200l },
wolfSSL 14:167253f4e170 43086 { 0x4292f6ec332041b2l,0xa30bb937c9989d54l,0x39f941ebc6d5879el,
wolfSSL 14:167253f4e170 43087 0x76a450fcdfdbb187l },
wolfSSL 14:167253f4e170 43088 0 },
wolfSSL 14:167253f4e170 43089 /* 27 << 240 */
wolfSSL 14:167253f4e170 43090 { { 0x31256089ee430db6l,0xaece9bd8f6836f56l,0x484cfc4bfb85a046l,
wolfSSL 14:167253f4e170 43091 0xee1e3e2c1599b2b9l },
wolfSSL 14:167253f4e170 43092 { 0x7e3c38903d122eafl,0xaa940ce0c770556cl,0x4802d6631b08fae8l,
wolfSSL 14:167253f4e170 43093 0xb08a85807f69f8bal },
wolfSSL 14:167253f4e170 43094 0 },
wolfSSL 14:167253f4e170 43095 /* 28 << 240 */
wolfSSL 14:167253f4e170 43096 { { 0x70ed0a0405411eael,0x60deb08f16494c66l,0x8cf20fc6133797bbl,
wolfSSL 14:167253f4e170 43097 0x3e30f4f50c6bc310l },
wolfSSL 14:167253f4e170 43098 { 0x1a677c29749c46c7l,0xfe1d93f4f11e981cl,0x937303d82e3e688bl,
wolfSSL 14:167253f4e170 43099 0x01aef5a7a6aa9e85l },
wolfSSL 14:167253f4e170 43100 0 },
wolfSSL 14:167253f4e170 43101 /* 29 << 240 */
wolfSSL 14:167253f4e170 43102 { { 0x4902f495b959b920l,0x13b0fdbdfca2d885l,0x41cbd9e7b6a2f0fal,
wolfSSL 14:167253f4e170 43103 0xf9bdf11056430b87l },
wolfSSL 14:167253f4e170 43104 { 0xd705a223954d19b9l,0x74d0fc5c972a4fdel,0xcbcbfed6912977eal,
wolfSSL 14:167253f4e170 43105 0x870611fdcc59a5afl },
wolfSSL 14:167253f4e170 43106 0 },
wolfSSL 14:167253f4e170 43107 /* 31 << 240 */
wolfSSL 14:167253f4e170 43108 { { 0xf4f19bd04089236al,0x3b206c12313d0e0bl,0x73e70df303feaeb2l,
wolfSSL 14:167253f4e170 43109 0x09dba0eb9bd1efe0l },
wolfSSL 14:167253f4e170 43110 { 0x4c7fd532fc4e5305l,0xd792ffede93d787al,0xc72dc4e2e4245010l,
wolfSSL 14:167253f4e170 43111 0xe7e0d47d0466bbbdl },
wolfSSL 14:167253f4e170 43112 0 },
wolfSSL 14:167253f4e170 43113 /* 33 << 240 */
wolfSSL 14:167253f4e170 43114 { { 0x549c861983e4f8bbl,0xf70133fbd8e06829l,0xc962b8e28c64e849l,
wolfSSL 14:167253f4e170 43115 0xad87f5b1901e4c25l },
wolfSSL 14:167253f4e170 43116 { 0xd005bde568a1cab5l,0x6a591acf0d2a95bal,0x728f14ce30ebcae4l,
wolfSSL 14:167253f4e170 43117 0x303cec99a3459b0fl },
wolfSSL 14:167253f4e170 43118 0 },
wolfSSL 14:167253f4e170 43119 /* 34 << 240 */
wolfSSL 14:167253f4e170 43120 { { 0x62e62f258350e6bcl,0x5a5ea94d96adba1fl,0x36c2a2844a23c7b3l,
wolfSSL 14:167253f4e170 43121 0x32f50a72992f5c8bl },
wolfSSL 14:167253f4e170 43122 { 0x55d685204136c6afl,0x1aafd32992794f20l,0x69f5d820b59aa9bfl,
wolfSSL 14:167253f4e170 43123 0x218966a8570e209al },
wolfSSL 14:167253f4e170 43124 0 },
wolfSSL 14:167253f4e170 43125 /* 35 << 240 */
wolfSSL 14:167253f4e170 43126 { { 0xf3204feb2f9a31fcl,0x77f33a360429f463l,0xfb9f3a5a59a1d6a7l,
wolfSSL 14:167253f4e170 43127 0x4445a2e93b1a78e0l },
wolfSSL 14:167253f4e170 43128 { 0xc77a9b6fd58e32d3l,0xa44e23c8302e6390l,0x7d8e00b4c0f7bcb0l,
wolfSSL 14:167253f4e170 43129 0xd2e2237b0ffa46f4l },
wolfSSL 14:167253f4e170 43130 0 },
wolfSSL 14:167253f4e170 43131 /* 36 << 240 */
wolfSSL 14:167253f4e170 43132 { { 0xb3046cb13c8ea6d3l,0xf0151b5efce2f445l,0xa968e60b55e5715el,
wolfSSL 14:167253f4e170 43133 0x39e52662587dce61l },
wolfSSL 14:167253f4e170 43134 { 0xfde176e0b7de2862l,0x298d83e68e8db497l,0x1042136773641bfbl,
wolfSSL 14:167253f4e170 43135 0xd72ac78d36e0bb0dl },
wolfSSL 14:167253f4e170 43136 0 },
wolfSSL 14:167253f4e170 43137 /* 37 << 240 */
wolfSSL 14:167253f4e170 43138 { { 0x2cabb94fff6b8340l,0xf425a35a21771acbl,0x564fec3d12c4a758l,
wolfSSL 14:167253f4e170 43139 0x57a61af39ba8f281l },
wolfSSL 14:167253f4e170 43140 { 0x5807e78c97e9a71dl,0x991d9be75b8314e6l,0x1cd90b16ec4133b9l,
wolfSSL 14:167253f4e170 43141 0xff043efa0f1ac621l },
wolfSSL 14:167253f4e170 43142 0 },
wolfSSL 14:167253f4e170 43143 /* 39 << 240 */
wolfSSL 14:167253f4e170 43144 { { 0xea6e5527d7e58321l,0xfb95c13c04056ff1l,0x9447361f2fc4e732l,
wolfSSL 14:167253f4e170 43145 0x63cbc655786d0154l },
wolfSSL 14:167253f4e170 43146 { 0x302c0d668610fb71l,0xbf692d6920d06613l,0x8465b74b4be8355al,
wolfSSL 14:167253f4e170 43147 0xcc883c95c31356b7l },
wolfSSL 14:167253f4e170 43148 0 },
wolfSSL 14:167253f4e170 43149 /* 40 << 240 */
wolfSSL 14:167253f4e170 43150 { { 0x4ab6e919b33eabcal,0xb58f0998a1acacbfl,0xa747e5782ddbc28fl,
wolfSSL 14:167253f4e170 43151 0xf9dd04ca59866cbcl },
wolfSSL 14:167253f4e170 43152 { 0x084c062ff7a0073fl,0x6d22acdfb577fc38l,0x0870ee08eacd907cl,
wolfSSL 14:167253f4e170 43153 0x710b4b266c9fcf95l },
wolfSSL 14:167253f4e170 43154 0 },
wolfSSL 14:167253f4e170 43155 /* 41 << 240 */
wolfSSL 14:167253f4e170 43156 { { 0xa99546faf1c835a7l,0x1514a5a30d59f933l,0x1f6ad0f81bedd730l,
wolfSSL 14:167253f4e170 43157 0x24de76287b528aaal },
wolfSSL 14:167253f4e170 43158 { 0x4d9e7845c02fff87l,0xba74f8a942c79e67l,0x5bf5015f476e285bl,
wolfSSL 14:167253f4e170 43159 0x0b1a5d8b1b93b364l },
wolfSSL 14:167253f4e170 43160 0 },
wolfSSL 14:167253f4e170 43161 /* 43 << 240 */
wolfSSL 14:167253f4e170 43162 { { 0x8c7c0d7ff839819fl,0xc82b819827a95965l,0xce7294d377270519l,
wolfSSL 14:167253f4e170 43163 0xfb508d6cad47aff7l },
wolfSSL 14:167253f4e170 43164 { 0xf6de15431035076al,0x697d60ac5dd465c6l,0x88d771b8a76dcd26l,
wolfSSL 14:167253f4e170 43165 0x8c7ce11ab10c9c44l },
wolfSSL 14:167253f4e170 43166 0 },
wolfSSL 14:167253f4e170 43167 /* 44 << 240 */
wolfSSL 14:167253f4e170 43168 { { 0x215ea44a08216060l,0xccfa18a187996cf6l,0xccfb2483f7eccdd2l,
wolfSSL 14:167253f4e170 43169 0x07aa601ad453c66al },
wolfSSL 14:167253f4e170 43170 { 0xd43cf263cffee9e2l,0x230bc099718f69bfl,0xc43de21300c193e8l,
wolfSSL 14:167253f4e170 43171 0x94cf251799c8746fl },
wolfSSL 14:167253f4e170 43172 0 },
wolfSSL 14:167253f4e170 43173 /* 45 << 240 */
wolfSSL 14:167253f4e170 43174 { { 0x4785d7f87d1320c5l,0x84bed8c3d0771dcbl,0xff28044d22254edbl,
wolfSSL 14:167253f4e170 43175 0x2e5992a445f71504l },
wolfSSL 14:167253f4e170 43176 { 0xcb92695b72bbf5cdl,0x9bcbde35c42422e5l,0x856594fd1d07ed86l,
wolfSSL 14:167253f4e170 43177 0x3aaf0b717716b4ffl },
wolfSSL 14:167253f4e170 43178 0 },
wolfSSL 14:167253f4e170 43179 /* 46 << 240 */
wolfSSL 14:167253f4e170 43180 { { 0x3edf24f9eebed405l,0x9e3141360eccb503l,0xf7704c25b85c2bc2l,
wolfSSL 14:167253f4e170 43181 0x4cb7c1de9a3247eel },
wolfSSL 14:167253f4e170 43182 { 0x798ac8f2f0b507c5l,0x6e6217206851bbf1l,0xc0b89398c0d9ed16l,
wolfSSL 14:167253f4e170 43183 0xf7d5d2a09f20728fl },
wolfSSL 14:167253f4e170 43184 0 },
wolfSSL 14:167253f4e170 43185 /* 47 << 240 */
wolfSSL 14:167253f4e170 43186 { { 0x7358a94a19f0ededl,0x5e08c4c3e32ccfbbl,0x84a8eeeb0089f071l,
wolfSSL 14:167253f4e170 43187 0xdaf0514c41fc436el },
wolfSSL 14:167253f4e170 43188 { 0x30fe216f310309afl,0xe72f77bd564e6fc9l,0xe7ef3bddfdc59fd5l,
wolfSSL 14:167253f4e170 43189 0xd199b1c9a8e1169cl },
wolfSSL 14:167253f4e170 43190 0 },
wolfSSL 14:167253f4e170 43191 /* 48 << 240 */
wolfSSL 14:167253f4e170 43192 { { 0xb9dc857c5b0f7bd4l,0x6990c2c9108ea1cdl,0x84730b83b984c7a9l,
wolfSSL 14:167253f4e170 43193 0x552723d2eab18a78l },
wolfSSL 14:167253f4e170 43194 { 0x9752c2e2919ba0f9l,0x075a3bd94bf40890l,0x71e52a04a6d98212l,
wolfSSL 14:167253f4e170 43195 0x3fb6607a9f18a4c8l },
wolfSSL 14:167253f4e170 43196 0 },
wolfSSL 14:167253f4e170 43197 /* 49 << 240 */
wolfSSL 14:167253f4e170 43198 { { 0xa0305d01e8c3214dl,0x025b3cae8d51cea3l,0xeeaf7ab239923274l,
wolfSSL 14:167253f4e170 43199 0x51179407c876b72cl },
wolfSSL 14:167253f4e170 43200 { 0xcf0241c7d4549a68l,0xffae7f4c793dab3dl,0xdfb5917b4bdf2280l,
wolfSSL 14:167253f4e170 43201 0xcf25c870a652e391l },
wolfSSL 14:167253f4e170 43202 0 },
wolfSSL 14:167253f4e170 43203 /* 51 << 240 */
wolfSSL 14:167253f4e170 43204 { { 0xb1345466b922e1c8l,0xae42f46ab5bf8a34l,0x1e1ab6053310e604l,
wolfSSL 14:167253f4e170 43205 0x64093cd9b4d7a658l },
wolfSSL 14:167253f4e170 43206 { 0x5d3b385ab3d9242cl,0x2225b99ae56f8ec7l,0x19a8cbfc9a916e11l,
wolfSSL 14:167253f4e170 43207 0x11c5df831f957c03l },
wolfSSL 14:167253f4e170 43208 0 },
wolfSSL 14:167253f4e170 43209 /* 52 << 240 */
wolfSSL 14:167253f4e170 43210 { { 0x09f1d04af381147bl,0x7be13628b26b345fl,0xd8371966d1c60b78l,
wolfSSL 14:167253f4e170 43211 0xf1743c2c5d91808fl },
wolfSSL 14:167253f4e170 43212 { 0x8a2966acafc71cc3l,0x0ba9702efdfc24c3l,0x60c80158e6fbb539l,
wolfSSL 14:167253f4e170 43213 0x58eaee49812c32f4l },
wolfSSL 14:167253f4e170 43214 0 },
wolfSSL 14:167253f4e170 43215 /* 53 << 240 */
wolfSSL 14:167253f4e170 43216 { { 0x31af7f5ee89d0b84l,0xa776dada6caa110bl,0xd67b7891df6d54ddl,
wolfSSL 14:167253f4e170 43217 0x831613cab82b8a5cl },
wolfSSL 14:167253f4e170 43218 { 0x7a4eb86ef020af6dl,0x2914fd11bd795a7bl,0xc038a273fcb54a17l,
wolfSSL 14:167253f4e170 43219 0x6b2dc8e18219cc75l },
wolfSSL 14:167253f4e170 43220 0 },
wolfSSL 14:167253f4e170 43221 /* 55 << 240 */
wolfSSL 14:167253f4e170 43222 { { 0x031fc875464ba9b5l,0xe268cf45bd812dd3l,0x443f57defbfb664al,
wolfSSL 14:167253f4e170 43223 0xfd1a38544e28c2fal },
wolfSSL 14:167253f4e170 43224 { 0xb8799782cb96515bl,0xa12d3e3f1138c95dl,0x0cc5ee117748ee57l,
wolfSSL 14:167253f4e170 43225 0x6ab167cf955a7dfcl },
wolfSSL 14:167253f4e170 43226 0 },
wolfSSL 14:167253f4e170 43227 /* 57 << 240 */
wolfSSL 14:167253f4e170 43228 { { 0x0d54aaca4dc1c74fl,0x74af1807bf2e0d61l,0x151254f87aebe0f1l,
wolfSSL 14:167253f4e170 43229 0x4072f38bf6376095l },
wolfSSL 14:167253f4e170 43230 { 0x31ebe17a26646abfl,0xdc8cb6b40ecc1282l,0x4f6326bbbc095a66l,
wolfSSL 14:167253f4e170 43231 0x37dad65a0363636dl },
wolfSSL 14:167253f4e170 43232 0 },
wolfSSL 14:167253f4e170 43233 /* 59 << 240 */
wolfSSL 14:167253f4e170 43234 { { 0xc851860a70f8c15al,0xb2d4555488368381l,0xbfd46e197019c7b6l,
wolfSSL 14:167253f4e170 43235 0xa1a9b12f6bb6f33bl },
wolfSSL 14:167253f4e170 43236 { 0xecfd5fe6f170c82bl,0x6d58bb52d601afc3l,0xb8b3de15fe6eb102l,
wolfSSL 14:167253f4e170 43237 0xad07336886a47964l },
wolfSSL 14:167253f4e170 43238 0 },
wolfSSL 14:167253f4e170 43239 /* 60 << 240 */
wolfSSL 14:167253f4e170 43240 { { 0x89f514c91911840fl,0xc9fa6b504cc106bcl,0x70a97f0dfe55b4f1l,
wolfSSL 14:167253f4e170 43241 0xada6306be5888609l },
wolfSSL 14:167253f4e170 43242 { 0xa9437881c6dc8d15l,0x0fc0f5368411f3dfl,0xd26162087a913dd2l,
wolfSSL 14:167253f4e170 43243 0x4fe1c7c4e92848cdl },
wolfSSL 14:167253f4e170 43244 0 },
wolfSSL 14:167253f4e170 43245 /* 61 << 240 */
wolfSSL 14:167253f4e170 43246 { { 0xaa18eb262e07383dl,0xb948c35c34e90f3dl,0x95e97f81d3653565l,
wolfSSL 14:167253f4e170 43247 0x4a821a2687b5b75dl },
wolfSSL 14:167253f4e170 43248 { 0x87b4d81c892db882l,0xa69e65d689f3bfadl,0xe475f532eb371cacl,
wolfSSL 14:167253f4e170 43249 0xd8cc23fa17194d5dl },
wolfSSL 14:167253f4e170 43250 0 },
wolfSSL 14:167253f4e170 43251 /* 63 << 240 */
wolfSSL 14:167253f4e170 43252 { { 0x3fc0052ad789d484l,0xe8c67aac29324323l,0x133fd07cf54c43d3l,
wolfSSL 14:167253f4e170 43253 0xd4a0848fb91d4faal },
wolfSSL 14:167253f4e170 43254 { 0xf683ce065ea5098fl,0xe84348f9887c8a76l,0x38f8c2cf79b224b6l,
wolfSSL 14:167253f4e170 43255 0x327e4c534a818cb1l },
wolfSSL 14:167253f4e170 43256 0 },
wolfSSL 14:167253f4e170 43257 /* 64 << 240 */
wolfSSL 14:167253f4e170 43258 { { 0xb6d92a7f3e5f9f11l,0x9afe153ad6cb3b8el,0x4d1a6dd7ddf800bdl,
wolfSSL 14:167253f4e170 43259 0xf6c13cc0caf17e19l },
wolfSSL 14:167253f4e170 43260 { 0x15f6c58e325fc3eel,0x71095400a31dc3b2l,0x168e7c07afa3d3e7l,
wolfSSL 14:167253f4e170 43261 0x3f8417a194c7ae2dl },
wolfSSL 14:167253f4e170 43262 0 },
wolfSSL 14:167253f4e170 43263 /* 65 << 240 */
wolfSSL 14:167253f4e170 43264 { { 0x0c9e9237d5f812bcl,0xdae5b7e9595f02e5l,0x5ec1dece42b1e9a8l,
wolfSSL 14:167253f4e170 43265 0x506a6ef8e527a685l },
wolfSSL 14:167253f4e170 43266 { 0xe3049290236af251l,0x6322dd1bf81970acl,0x1459d39c516d5e61l,
wolfSSL 14:167253f4e170 43267 0x672f502d9455b694l },
wolfSSL 14:167253f4e170 43268 0 },
wolfSSL 14:167253f4e170 43269 /* 71 << 240 */
wolfSSL 14:167253f4e170 43270 { { 0xf83788e06b228af2l,0xaafc823911f596fal,0x6d47fa592f0fcb13l,
wolfSSL 14:167253f4e170 43271 0x0b7af65f1c99c5d4l },
wolfSSL 14:167253f4e170 43272 { 0xbc4c185dca961e6fl,0xec02b09f158481a4l,0x4bbfd9f31423fdd4l,
wolfSSL 14:167253f4e170 43273 0x0ff44a53b619644bl },
wolfSSL 14:167253f4e170 43274 0 },
wolfSSL 14:167253f4e170 43275 /* 77 << 240 */
wolfSSL 14:167253f4e170 43276 { { 0x23e255a3ea3f59d8l,0x1f4a47a8261ac30bl,0x346bf409c8faf0b3l,
wolfSSL 14:167253f4e170 43277 0xd13e73fbc03a226bl },
wolfSSL 14:167253f4e170 43278 { 0x670ddc792fe8a79bl,0x335fa172f1aac412l,0xe2347de1a5ceff20l,
wolfSSL 14:167253f4e170 43279 0x66e02c73381130f2l },
wolfSSL 14:167253f4e170 43280 0 },
wolfSSL 14:167253f4e170 43281 /* 83 << 240 */
wolfSSL 14:167253f4e170 43282 { { 0xa6b874c51db717cdl,0x027d318ab00f160bl,0x578f89f49be791afl,
wolfSSL 14:167253f4e170 43283 0x659ef2f01f3b5e9bl },
wolfSSL 14:167253f4e170 43284 { 0xa0c593033835d84cl,0xb71e261fdb6f9a60l,0x65837c7f44b7813fl,
wolfSSL 14:167253f4e170 43285 0xea776163ea4bcc96l },
wolfSSL 14:167253f4e170 43286 0 },
wolfSSL 14:167253f4e170 43287 /* 89 << 240 */
wolfSSL 14:167253f4e170 43288 { { 0x208234118df3f15fl,0xe0514d4694f341acl,0xdc66282d6486d704l,
wolfSSL 14:167253f4e170 43289 0xd5fb354ad2548389l },
wolfSSL 14:167253f4e170 43290 { 0xf3e98d72df273295l,0x27ded7fa50cd09fcl,0x4f486af3c5c1c169l,
wolfSSL 14:167253f4e170 43291 0xe51044150aa41ba3l },
wolfSSL 14:167253f4e170 43292 0 },
wolfSSL 14:167253f4e170 43293 /* 95 << 240 */
wolfSSL 14:167253f4e170 43294 { { 0x66b14d296fce0aecl,0x35fe5e60c8915ceal,0x06a023b736c5da39l,
wolfSSL 14:167253f4e170 43295 0x0977c9f0404e932fl },
wolfSSL 14:167253f4e170 43296 { 0x1dd6f95db54866del,0xe5ec79359387430cl,0x98dee57b5ef42e67l,
wolfSSL 14:167253f4e170 43297 0x1707f01912ed3ad0l },
wolfSSL 14:167253f4e170 43298 0 },
wolfSSL 14:167253f4e170 43299 /* 101 << 240 */
wolfSSL 14:167253f4e170 43300 { { 0xeb3abdedeec82495l,0x587a696e764a41c7l,0x13fdcce2add1a6a3l,
wolfSSL 14:167253f4e170 43301 0x299a0d43286b2162l },
wolfSSL 14:167253f4e170 43302 { 0x2c4e71e18131f1b4l,0x48f0e806ada3d04fl,0x91d2de80c57491b2l,
wolfSSL 14:167253f4e170 43303 0x1b1266236cc355cbl },
wolfSSL 14:167253f4e170 43304 0 },
wolfSSL 14:167253f4e170 43305 /* 107 << 240 */
wolfSSL 14:167253f4e170 43306 { { 0xdc28afe5a6d44444l,0xb5ad8d3cfe0b947bl,0x50c6126c96ce9fb9l,
wolfSSL 14:167253f4e170 43307 0x5384a998d1fc7d39l },
wolfSSL 14:167253f4e170 43308 { 0xa43ff8898788f51cl,0x30359593a6bc7b87l,0x3e1691dccc0d019al,
wolfSSL 14:167253f4e170 43309 0xda0ef5ad7943abcdl },
wolfSSL 14:167253f4e170 43310 0 },
wolfSSL 14:167253f4e170 43311 /* 113 << 240 */
wolfSSL 14:167253f4e170 43312 { { 0x5bc58b6f020b5cd7l,0x9098e202e103ff4el,0xc1f1a3d9f6fce7c7l,
wolfSSL 14:167253f4e170 43313 0xf9dc32a856090ccel },
wolfSSL 14:167253f4e170 43314 { 0x4c7d2520a9cc3b09l,0x98d47b5dd8c4dfcel,0xdcee788297e689b4l,
wolfSSL 14:167253f4e170 43315 0xe5eec71815f982b9l },
wolfSSL 14:167253f4e170 43316 0 },
wolfSSL 14:167253f4e170 43317 /* 116 << 240 */
wolfSSL 14:167253f4e170 43318 { { 0xff154bb8a1e1538cl,0xb9883276f7dcfae9l,0x1ac0a4d2c1c8cba4l,
wolfSSL 14:167253f4e170 43319 0x511a54cc76e6b284l },
wolfSSL 14:167253f4e170 43320 { 0xe2da436f00011f6dl,0x4d357a190f43a8adl,0xf36899c95458655bl,
wolfSSL 14:167253f4e170 43321 0xe5f75c768d613ed9l },
wolfSSL 14:167253f4e170 43322 0 },
wolfSSL 14:167253f4e170 43323 /* 119 << 240 */
wolfSSL 14:167253f4e170 43324 { { 0x15b4af1d93f12ef8l,0x3f4c5868fd032f88l,0x39f67a08f27d86bdl,
wolfSSL 14:167253f4e170 43325 0x2f551820da32db6bl },
wolfSSL 14:167253f4e170 43326 { 0x72fe295ac2c16214l,0x39927c381a2cf9afl,0x8dda23d6b1dc1ae7l,
wolfSSL 14:167253f4e170 43327 0x1209ff3ed32071d4l },
wolfSSL 14:167253f4e170 43328 0 },
wolfSSL 14:167253f4e170 43329 /* 125 << 240 */
wolfSSL 14:167253f4e170 43330 { { 0x861fdceb9a3c6c6fl,0x76d7a01386778453l,0xbf8d147cd5e422cbl,
wolfSSL 14:167253f4e170 43331 0xd16f532e51772d19l },
wolfSSL 14:167253f4e170 43332 { 0x72025ee2570d02cdl,0xe8e7737be80c7664l,0x81b7d56c334a8d8fl,
wolfSSL 14:167253f4e170 43333 0x42477a0ff1b79308l },
wolfSSL 14:167253f4e170 43334 0 },
wolfSSL 14:167253f4e170 43335 },
wolfSSL 14:167253f4e170 43336 {
wolfSSL 14:167253f4e170 43337 /* 0 << 248 */
wolfSSL 14:167253f4e170 43338 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 43339 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 43340 1 },
wolfSSL 14:167253f4e170 43341 /* 1 << 248 */
wolfSSL 14:167253f4e170 43342 { { 0xf306a3c8ee3c76cbl,0x3cf11623d32a1f6el,0xe6d5ab646863e956l,
wolfSSL 14:167253f4e170 43343 0x3b8a4cbe5c005c26l },
wolfSSL 14:167253f4e170 43344 { 0xdcd529a59ce6bb27l,0xc4afaa5204d4b16fl,0xb0624a267923798dl,
wolfSSL 14:167253f4e170 43345 0x85e56df66b307fabl },
wolfSSL 14:167253f4e170 43346 0 },
wolfSSL 14:167253f4e170 43347 /* 3 << 248 */
wolfSSL 14:167253f4e170 43348 { { 0x896895959884aaf7l,0xb1959be307b348a6l,0x96250e573c147c87l,
wolfSSL 14:167253f4e170 43349 0xae0efb3add0c61f8l },
wolfSSL 14:167253f4e170 43350 { 0xed00745eca8c325el,0x3c911696ecff3f70l,0x73acbc65319ad41dl,
wolfSSL 14:167253f4e170 43351 0x7b01a020f0b1c7efl },
wolfSSL 14:167253f4e170 43352 0 },
wolfSSL 14:167253f4e170 43353 /* 4 << 248 */
wolfSSL 14:167253f4e170 43354 { { 0x9910ba6b23a5d896l,0x1fe19e357fe4364el,0x6e1da8c39a33c677l,
wolfSSL 14:167253f4e170 43355 0x15b4488b29fd9fd0l },
wolfSSL 14:167253f4e170 43356 { 0x1f4392541a1f22bfl,0x920a8a70ab8163e8l,0x3fd1b24907e5658el,
wolfSSL 14:167253f4e170 43357 0xf2c4f79cb6ec839bl },
wolfSSL 14:167253f4e170 43358 0 },
wolfSSL 14:167253f4e170 43359 /* 5 << 248 */
wolfSSL 14:167253f4e170 43360 { { 0x262143b5224c08dcl,0x2bbb09b481b50c91l,0xc16ed709aca8c84fl,
wolfSSL 14:167253f4e170 43361 0xa6210d9db2850ca8l },
wolfSSL 14:167253f4e170 43362 { 0x6d8df67a09cb54d6l,0x91eef6e0500919a4l,0x90f613810f132857l,
wolfSSL 14:167253f4e170 43363 0x9acede47f8d5028bl },
wolfSSL 14:167253f4e170 43364 0 },
wolfSSL 14:167253f4e170 43365 /* 7 << 248 */
wolfSSL 14:167253f4e170 43366 { { 0x45e21446de673629l,0x57f7aa1e703c2d21l,0xa0e99b7f98c868c7l,
wolfSSL 14:167253f4e170 43367 0x4e42f66d8b641676l },
wolfSSL 14:167253f4e170 43368 { 0x602884dc91077896l,0xa0d690cfc2c9885bl,0xfeb4da333b9a5187l,
wolfSSL 14:167253f4e170 43369 0x5f789598153c87eel },
wolfSSL 14:167253f4e170 43370 0 },
wolfSSL 14:167253f4e170 43371 /* 9 << 248 */
wolfSSL 14:167253f4e170 43372 { { 0xb19b1c4fca66eca8l,0xf04a20b55663de54l,0x42a29a33c223b617l,
wolfSSL 14:167253f4e170 43373 0x86c68d0d44827e11l },
wolfSSL 14:167253f4e170 43374 { 0x71f90ddeadba1206l,0xeeffb4167a6ceeeal,0x9e302fbac543e8afl,
wolfSSL 14:167253f4e170 43375 0xcf07f7471aa77b96l },
wolfSSL 14:167253f4e170 43376 0 },
wolfSSL 14:167253f4e170 43377 /* 10 << 248 */
wolfSSL 14:167253f4e170 43378 { { 0xcf57fca29849e95bl,0x96e9793ed510053cl,0x89fa443d07d3e75el,
wolfSSL 14:167253f4e170 43379 0xfe2bc235e52800a0l },
wolfSSL 14:167253f4e170 43380 { 0x1c208b8c0ac7e740l,0xb5852a49e7222263l,0x217e4005e541e592l,
wolfSSL 14:167253f4e170 43381 0xee52747dc960b0e1l },
wolfSSL 14:167253f4e170 43382 0 },
wolfSSL 14:167253f4e170 43383 /* 11 << 248 */
wolfSSL 14:167253f4e170 43384 { { 0x5fd7cafb475952afl,0x23a6d71954a43337l,0xa83a7523b1617941l,
wolfSSL 14:167253f4e170 43385 0x0b7f35d412b37dd4l },
wolfSSL 14:167253f4e170 43386 { 0x81ec51292ae27eafl,0x7ca92fb3318169dfl,0xc01bfd6078d0875al,
wolfSSL 14:167253f4e170 43387 0xcc6074e3c99c436el },
wolfSSL 14:167253f4e170 43388 0 },
wolfSSL 14:167253f4e170 43389 /* 13 << 248 */
wolfSSL 14:167253f4e170 43390 { { 0x4ca6bdebf57912b8l,0x9a17577e98507b5al,0x8ed4ab7759e51dfcl,
wolfSSL 14:167253f4e170 43391 0x103b7b2a470f5a36l },
wolfSSL 14:167253f4e170 43392 { 0x0c8545ac12553321l,0xab5861a760482817l,0xf4b5f602b9b856cfl,
wolfSSL 14:167253f4e170 43393 0x609955787adf2e5fl },
wolfSSL 14:167253f4e170 43394 0 },
wolfSSL 14:167253f4e170 43395 /* 15 << 248 */
wolfSSL 14:167253f4e170 43396 { { 0x60ce25b1ee5cb44fl,0xddcc7d182c2d7598l,0x1765a1b301847b5cl,
wolfSSL 14:167253f4e170 43397 0xf5d9c3635d0d23b7l },
wolfSSL 14:167253f4e170 43398 { 0x42ff1ba7928b65d0l,0x587ac69d6148e043l,0x3099be0dd320390bl,
wolfSSL 14:167253f4e170 43399 0xa7b88dfc4278329fl },
wolfSSL 14:167253f4e170 43400 0 },
wolfSSL 14:167253f4e170 43401 /* 16 << 248 */
wolfSSL 14:167253f4e170 43402 { { 0x80802dc91ec34f9el,0xd8772d3533810603l,0x3f06d66c530cb4f3l,
wolfSSL 14:167253f4e170 43403 0x7be5ed0dc475c129l },
wolfSSL 14:167253f4e170 43404 { 0xcb9e3c1931e82b10l,0xc63d2857c9ff6b4cl,0xb92118c692a1b45el,
wolfSSL 14:167253f4e170 43405 0x0aec44147285bbcal },
wolfSSL 14:167253f4e170 43406 0 },
wolfSSL 14:167253f4e170 43407 /* 17 << 248 */
wolfSSL 14:167253f4e170 43408 { { 0x7685bb9e0ba4e0b7l,0x330a7ebc5e58c29bl,0xbc1d9173e8a3797al,
wolfSSL 14:167253f4e170 43409 0x7c506a16ea60f86cl },
wolfSSL 14:167253f4e170 43410 { 0x9defb9248c099445l,0xcf1ddcc0256df210l,0x4844ce293d07e990l,
wolfSSL 14:167253f4e170 43411 0x92318e37e2628503l },
wolfSSL 14:167253f4e170 43412 0 },
wolfSSL 14:167253f4e170 43413 /* 19 << 248 */
wolfSSL 14:167253f4e170 43414 { { 0x61acd597fdf968d7l,0x7321a8b26598c381l,0xcb86a2809f448a0cl,
wolfSSL 14:167253f4e170 43415 0x38534a01855df66al },
wolfSSL 14:167253f4e170 43416 { 0xc119ec141e29037fl,0xe23c20ad0b42ba67l,0xefb1c4e033fb4f22l,
wolfSSL 14:167253f4e170 43417 0xf088358f445a5032l },
wolfSSL 14:167253f4e170 43418 0 },
wolfSSL 14:167253f4e170 43419 /* 21 << 248 */
wolfSSL 14:167253f4e170 43420 { { 0x2d73f5d1b8475744l,0xcc297e0a9d399b06l,0xa8c61d4038d3df06l,
wolfSSL 14:167253f4e170 43421 0xacc6e8651a2d27a0l },
wolfSSL 14:167253f4e170 43422 { 0x63dd6f6230153bf2l,0x6b23ad7bd73b83b7l,0x25382bf767ff7dcdl,
wolfSSL 14:167253f4e170 43423 0x7e268c8fcf7ce2d1l },
wolfSSL 14:167253f4e170 43424 0 },
wolfSSL 14:167253f4e170 43425 /* 23 << 248 */
wolfSSL 14:167253f4e170 43426 { { 0x4b9161c3cb2ebef1l,0x6009716b669ed801l,0x97c65219aacefe44l,
wolfSSL 14:167253f4e170 43427 0xde13597d71aae4b5l },
wolfSSL 14:167253f4e170 43428 { 0x3a077a816141d651l,0xe1b4e80129f876eal,0x729aed6d5c00c96cl,
wolfSSL 14:167253f4e170 43429 0x0c6f404374cc645el },
wolfSSL 14:167253f4e170 43430 0 },
wolfSSL 14:167253f4e170 43431 /* 25 << 248 */
wolfSSL 14:167253f4e170 43432 { { 0x22c51812df5a66e1l,0x1c8069c9ae7dedeal,0xcff9d86f0eea5180l,
wolfSSL 14:167253f4e170 43433 0x676dbd6f44235ddal },
wolfSSL 14:167253f4e170 43434 { 0xa53f01383db1ad42l,0xd079e571bcf19029l,0x1e37b9ecfab0cf82l,
wolfSSL 14:167253f4e170 43435 0x93ae35ed4844e9c4l },
wolfSSL 14:167253f4e170 43436 0 },
wolfSSL 14:167253f4e170 43437 /* 27 << 248 */
wolfSSL 14:167253f4e170 43438 { { 0xdaee55a543756358l,0x0ace18d41b2d3f89l,0x3391fa36824dd7d4l,
wolfSSL 14:167253f4e170 43439 0x7b9963d1770e5f3fl },
wolfSSL 14:167253f4e170 43440 { 0xc1fb9a78c94f724dl,0x94ff86fe76c4da6bl,0xb5d928c64170609bl,
wolfSSL 14:167253f4e170 43441 0xc9372becfb015a9fl },
wolfSSL 14:167253f4e170 43442 0 },
wolfSSL 14:167253f4e170 43443 /* 28 << 248 */
wolfSSL 14:167253f4e170 43444 { { 0x9c34b650e16e05e9l,0x965a774094e74640l,0xa3fd22fbcea3f029l,
wolfSSL 14:167253f4e170 43445 0x1eb6a9688f95277cl },
wolfSSL 14:167253f4e170 43446 { 0x2520a63d7bad84f6l,0xad917201f58f2feel,0xea92c1669b840d48l,
wolfSSL 14:167253f4e170 43447 0x12109c4aacef5cbdl },
wolfSSL 14:167253f4e170 43448 0 },
wolfSSL 14:167253f4e170 43449 /* 29 << 248 */
wolfSSL 14:167253f4e170 43450 { { 0xd85850d0d407a252l,0x6fa3b14de63909d4l,0x2ff9f6593e0fba69l,
wolfSSL 14:167253f4e170 43451 0x7f9fd2a2d1b2cd0bl },
wolfSSL 14:167253f4e170 43452 { 0x611233d745ad896al,0xfe4211648df850f9l,0x7808832399e32983l,
wolfSSL 14:167253f4e170 43453 0x4b040859dee6741dl },
wolfSSL 14:167253f4e170 43454 0 },
wolfSSL 14:167253f4e170 43455 /* 31 << 248 */
wolfSSL 14:167253f4e170 43456 { { 0x7dd2afd456e1ed5cl,0xd48429ec41ba4992l,0x97a02188968bab27l,
wolfSSL 14:167253f4e170 43457 0x09ecf813e63c4168l },
wolfSSL 14:167253f4e170 43458 { 0xf4ac65e77288b10cl,0x10630ab2afac7410l,0x4e3e59c3bb049e56l,
wolfSSL 14:167253f4e170 43459 0x25972fff40fea0b1l },
wolfSSL 14:167253f4e170 43460 0 },
wolfSSL 14:167253f4e170 43461 /* 33 << 248 */
wolfSSL 14:167253f4e170 43462 { { 0xfd8363da98365c18l,0x8aa57b1a8d47bf91l,0x423dce57695f4dd6l,
wolfSSL 14:167253f4e170 43463 0xfccf54d4cc17f034l },
wolfSSL 14:167253f4e170 43464 { 0x8fdba27c3610ea51l,0xcc0a06d654306b06l,0xb97a121c389b9dfdl,
wolfSSL 14:167253f4e170 43465 0x7dbb90eb1ed0ca42l },
wolfSSL 14:167253f4e170 43466 0 },
wolfSSL 14:167253f4e170 43467 /* 34 << 248 */
wolfSSL 14:167253f4e170 43468 { { 0xd32d7cec0094e84cl,0x862ae25e2ece8f72l,0x8644ef1cdfceb8abl,
wolfSSL 14:167253f4e170 43469 0x68a9969c8e225628l },
wolfSSL 14:167253f4e170 43470 { 0xdf209e27b3117876l,0x308a6e1882ba242bl,0xcbd09a659bf0cdb6l,
wolfSSL 14:167253f4e170 43471 0x79f2826cc85b9705l },
wolfSSL 14:167253f4e170 43472 0 },
wolfSSL 14:167253f4e170 43473 /* 35 << 248 */
wolfSSL 14:167253f4e170 43474 { { 0x3b36b6bf8f011496l,0xea6acc1a9bcf6ef8l,0x6db132263b101f12l,
wolfSSL 14:167253f4e170 43475 0x4fc4e35e3b7585c3l },
wolfSSL 14:167253f4e170 43476 { 0x641de27556eb64c6l,0x9b2834d3f3b08519l,0xebb76a2ba1f44b40l,
wolfSSL 14:167253f4e170 43477 0x1b545ccd3cd31677l },
wolfSSL 14:167253f4e170 43478 0 },
wolfSSL 14:167253f4e170 43479 /* 36 << 248 */
wolfSSL 14:167253f4e170 43480 { { 0xab293027aad991c1l,0x598d0bf8849be4b7l,0x8c94a21ab972da90l,
wolfSSL 14:167253f4e170 43481 0xada4cfdd7ecfa840l },
wolfSSL 14:167253f4e170 43482 { 0x93d4b9c0fbcec63al,0x7ca617a203219a34l,0x900424eb6a652a55l,
wolfSSL 14:167253f4e170 43483 0xaf9346e9eb8562e0l },
wolfSSL 14:167253f4e170 43484 0 },
wolfSSL 14:167253f4e170 43485 /* 37 << 248 */
wolfSSL 14:167253f4e170 43486 { { 0x9681a73d2d8bc904l,0x8b5f9b317b1553bel,0xfb03b874f6bc852fl,
wolfSSL 14:167253f4e170 43487 0x8e658fb8cbbec8b0l },
wolfSSL 14:167253f4e170 43488 { 0x9b2ff17bb9e9f9d1l,0xf46e9bf3e8679854l,0x7fbb1323618ed3aal,
wolfSSL 14:167253f4e170 43489 0x064a1c5d714ebc3dl },
wolfSSL 14:167253f4e170 43490 0 },
wolfSSL 14:167253f4e170 43491 /* 39 << 248 */
wolfSSL 14:167253f4e170 43492 { { 0xac0bdfc39f0e69dcl,0x71957386ae12f132l,0xa263ef2e6aa90b5bl,
wolfSSL 14:167253f4e170 43493 0xa94b152390d42976l },
wolfSSL 14:167253f4e170 43494 { 0xfb2d17741bcdbf7bl,0xba77b77c3a04f72fl,0xa6818ed8ec3e25a1l,
wolfSSL 14:167253f4e170 43495 0x2e0e01743733e251l },
wolfSSL 14:167253f4e170 43496 0 },
wolfSSL 14:167253f4e170 43497 /* 40 << 248 */
wolfSSL 14:167253f4e170 43498 { { 0xc3e04d7902381461l,0xb1643ab5911bc478l,0xc92becfa390b3ef2l,
wolfSSL 14:167253f4e170 43499 0x54476778acd2f1b6l },
wolfSSL 14:167253f4e170 43500 { 0x8daa0c4d66bf3aafl,0x2bc1287b2c21c65al,0xee182910b5a13ac3l,
wolfSSL 14:167253f4e170 43501 0xbb04730090b0790al },
wolfSSL 14:167253f4e170 43502 0 },
wolfSSL 14:167253f4e170 43503 /* 41 << 248 */
wolfSSL 14:167253f4e170 43504 { { 0x8bdd6f35a8540489l,0x788c03e5ee390d4el,0x203323c18f653017l,
wolfSSL 14:167253f4e170 43505 0x39953308c4bc0094l },
wolfSSL 14:167253f4e170 43506 { 0x6ee0857118308d0bl,0x70e9f90b450b0002l,0x191662aa8139f145l,
wolfSSL 14:167253f4e170 43507 0xd7c5415b62d71124l },
wolfSSL 14:167253f4e170 43508 0 },
wolfSSL 14:167253f4e170 43509 /* 43 << 248 */
wolfSSL 14:167253f4e170 43510 { { 0x41b37d72b927231cl,0xca17b5429e4de13al,0x7bc03469cded2ce3l,
wolfSSL 14:167253f4e170 43511 0x961b0ecb4f4560f9l },
wolfSSL 14:167253f4e170 43512 { 0x7c5bd41b43d31fa1l,0x3ed047f643f44dc3l,0x5b02083efe1a4d14l,
wolfSSL 14:167253f4e170 43513 0xcc2c66ac18b330bcl },
wolfSSL 14:167253f4e170 43514 0 },
wolfSSL 14:167253f4e170 43515 /* 44 << 248 */
wolfSSL 14:167253f4e170 43516 { { 0x83766947d17d4e0bl,0xc5772beefdc3a47bl,0x765a50db1a6fd0ffl,
wolfSSL 14:167253f4e170 43517 0x17f904ba45b0995el },
wolfSSL 14:167253f4e170 43518 { 0xcee643832883487el,0xf56db7f3c270aaedl,0x6738d94f46cb1fd9l,
wolfSSL 14:167253f4e170 43519 0xc8fa426a142fd4d5l },
wolfSSL 14:167253f4e170 43520 0 },
wolfSSL 14:167253f4e170 43521 /* 45 << 248 */
wolfSSL 14:167253f4e170 43522 { { 0xc85bef5b5a78efcel,0xaf380c6b0580e41el,0x6c093256a43b8d9bl,
wolfSSL 14:167253f4e170 43523 0xed9d07bbea670933l },
wolfSSL 14:167253f4e170 43524 { 0xfdb9a295f1682c6el,0x4cc29a63532b6bb7l,0x21a918f9f8e42dd0l,
wolfSSL 14:167253f4e170 43525 0x9ac935ce0edacca0l },
wolfSSL 14:167253f4e170 43526 0 },
wolfSSL 14:167253f4e170 43527 /* 46 << 248 */
wolfSSL 14:167253f4e170 43528 { { 0xbfe48a8ff43daf9dl,0xd7799b31b313c052l,0x46d480d77119c60el,
wolfSSL 14:167253f4e170 43529 0x5090d91f0b80bcb9l },
wolfSSL 14:167253f4e170 43530 { 0xc94c4c1e873bd7bfl,0x16e69b4f9915aa0al,0x769be02bb1d5928cl,
wolfSSL 14:167253f4e170 43531 0x3fdaf62162e1d85al },
wolfSSL 14:167253f4e170 43532 0 },
wolfSSL 14:167253f4e170 43533 /* 47 << 248 */
wolfSSL 14:167253f4e170 43534 { { 0x03497a57371c1b5cl,0x11e4c0b3552ab6abl,0xf857061f0a169ee7l,
wolfSSL 14:167253f4e170 43535 0xc21c6c43e6d1bc66l },
wolfSSL 14:167253f4e170 43536 { 0x706283a82832be7al,0xd35b143299aba62cl,0x7f4da83de9aef62dl,
wolfSSL 14:167253f4e170 43537 0x2b7e5fc8723fa4e5l },
wolfSSL 14:167253f4e170 43538 0 },
wolfSSL 14:167253f4e170 43539 /* 48 << 248 */
wolfSSL 14:167253f4e170 43540 { { 0xae485bb72b724759l,0x945353e1b2d4c63al,0x82159d07de7d6f2cl,
wolfSSL 14:167253f4e170 43541 0x389caef34ec5b109l },
wolfSSL 14:167253f4e170 43542 { 0x4a8ebb53db65ef14l,0x2dc2cb7edd99de43l,0x816fa3ed83f2405fl,
wolfSSL 14:167253f4e170 43543 0x73429bb9c14208a3l },
wolfSSL 14:167253f4e170 43544 0 },
wolfSSL 14:167253f4e170 43545 /* 49 << 248 */
wolfSSL 14:167253f4e170 43546 { { 0xc086e737eb4cfa54l,0x9400e1ad3c44aad9l,0x210bba94336959b4l,
wolfSSL 14:167253f4e170 43547 0x08621a809106f0cal },
wolfSSL 14:167253f4e170 43548 { 0x2ae66096c510ee9cl,0x2ba21617fc76a895l,0xc0707f8b0c186f1el,
wolfSSL 14:167253f4e170 43549 0x1fe170a3ed0bfe25l },
wolfSSL 14:167253f4e170 43550 0 },
wolfSSL 14:167253f4e170 43551 /* 51 << 248 */
wolfSSL 14:167253f4e170 43552 { { 0x3780fe2084759c5cl,0x716ec626b7050aa7l,0x6a43fb8b84b63bd1l,
wolfSSL 14:167253f4e170 43553 0xb01098a039bc449fl },
wolfSSL 14:167253f4e170 43554 { 0x96b3ff8ebb7daa4dl,0x2d146882654a7f01l,0x2500f701dcae6143l,
wolfSSL 14:167253f4e170 43555 0xc13d51d01626fd3bl },
wolfSSL 14:167253f4e170 43556 0 },
wolfSSL 14:167253f4e170 43557 /* 52 << 248 */
wolfSSL 14:167253f4e170 43558 { { 0x08ed8febd56daf06l,0x8d98277b4a837f69l,0x9947c636a9b6e05al,
wolfSSL 14:167253f4e170 43559 0x58c8a77ac0d58abdl },
wolfSSL 14:167253f4e170 43560 { 0xf45496a45f121e4fl,0x16cd67c71076d3d3l,0xecbd1958e3fb0c5dl,
wolfSSL 14:167253f4e170 43561 0xfbe185ec38e1eb47l },
wolfSSL 14:167253f4e170 43562 0 },
wolfSSL 14:167253f4e170 43563 /* 53 << 248 */
wolfSSL 14:167253f4e170 43564 { { 0x65b067eb740216e3l,0x1e19a71479db8760l,0x8d30dca18878de5al,
wolfSSL 14:167253f4e170 43565 0x627d03e8aa47c005l },
wolfSSL 14:167253f4e170 43566 { 0x096d58c0d2536c96l,0x232e6a4d69b12c2al,0x850eb8c0e7044bcel,
wolfSSL 14:167253f4e170 43567 0xd9cf923bef2ee9a1l },
wolfSSL 14:167253f4e170 43568 0 },
wolfSSL 14:167253f4e170 43569 /* 55 << 248 */
wolfSSL 14:167253f4e170 43570 { { 0x8b301094c8eaee90l,0x9a96950b8330928fl,0x472ba105faccc3bal,
wolfSSL 14:167253f4e170 43571 0x00f8620e9153172al },
wolfSSL 14:167253f4e170 43572 { 0x019b8164303fcdf5l,0x614d5c3c41fb4c73l,0x632d98f2c5992f89l,
wolfSSL 14:167253f4e170 43573 0xfbeb29d790e2dea5l },
wolfSSL 14:167253f4e170 43574 0 },
wolfSSL 14:167253f4e170 43575 /* 57 << 248 */
wolfSSL 14:167253f4e170 43576 { { 0xefd48b577f91d6e0l,0x8575605595bcf5d4l,0x7677b4a7bb9d891bl,
wolfSSL 14:167253f4e170 43577 0xdc9931e9685912c9l },
wolfSSL 14:167253f4e170 43578 { 0x69bca306f31a07c8l,0x3dd729534962a7f0l,0xdcea49cc9d366c2al,
wolfSSL 14:167253f4e170 43579 0xce664ba7dc79a57dl },
wolfSSL 14:167253f4e170 43580 0 },
wolfSSL 14:167253f4e170 43581 /* 59 << 248 */
wolfSSL 14:167253f4e170 43582 { { 0x7842d547013ec3b5l,0xa2785ceb433cf990l,0x9d667e5f700ab14al,
wolfSSL 14:167253f4e170 43583 0x4b46f362a0f46d55l },
wolfSSL 14:167253f4e170 43584 { 0x152c0e80cc7a3487l,0x7f3a88cef86f5e68l,0x6f950a73f1b2a75fl,
wolfSSL 14:167253f4e170 43585 0x9be5b1aa51d24f3bl },
wolfSSL 14:167253f4e170 43586 0 },
wolfSSL 14:167253f4e170 43587 /* 60 << 248 */
wolfSSL 14:167253f4e170 43588 { { 0xaea68626dc4ad4f4l,0x5dc516824ddbc0b6l,0xa76697bd602e9065l,
wolfSSL 14:167253f4e170 43589 0xbeeb3ea58c37888el },
wolfSSL 14:167253f4e170 43590 { 0x1ec4a2f214569113l,0xe48b820ca35f4484l,0x9fb560949ae44df2l,
wolfSSL 14:167253f4e170 43591 0x6ca1346292cc09fdl },
wolfSSL 14:167253f4e170 43592 0 },
wolfSSL 14:167253f4e170 43593 /* 61 << 248 */
wolfSSL 14:167253f4e170 43594 { { 0x887e0b87bcdc3a36l,0x6b0d617d503dee65l,0x96bda1f6cebcb893l,
wolfSSL 14:167253f4e170 43595 0xdc0dd17341e20b3el },
wolfSSL 14:167253f4e170 43596 { 0x812fbacfa6657c11l,0x32492fcbc94a6f4bl,0x854a0bcb6a772123l,
wolfSSL 14:167253f4e170 43597 0x1ed573f65d463f31l },
wolfSSL 14:167253f4e170 43598 0 },
wolfSSL 14:167253f4e170 43599 /* 63 << 248 */
wolfSSL 14:167253f4e170 43600 { { 0x22c7ef7bd022cc4dl,0xeec383d61e63b4bcl,0x52e0aaa06502b46fl,
wolfSSL 14:167253f4e170 43601 0x9224187ded5e41bfl },
wolfSSL 14:167253f4e170 43602 { 0x3a01f53dd26faf1cl,0x9bc4ee2e4e591d10l,0x10b7a98eea7e4c88l,
wolfSSL 14:167253f4e170 43603 0xe521c150e2c1beccl },
wolfSSL 14:167253f4e170 43604 0 },
wolfSSL 14:167253f4e170 43605 /* 64 << 248 */
wolfSSL 14:167253f4e170 43606 { { 0xb618d590b01e6e27l,0x047e2ccde180b2dcl,0xd1b299b504aea4a9l,
wolfSSL 14:167253f4e170 43607 0x412c9e1e9fa403a4l },
wolfSSL 14:167253f4e170 43608 { 0x88d28a3679407552l,0x49c50136f332b8e3l,0x3a1b6fcce668de19l,
wolfSSL 14:167253f4e170 43609 0x178851bc75122b97l },
wolfSSL 14:167253f4e170 43610 0 },
wolfSSL 14:167253f4e170 43611 /* 65 << 248 */
wolfSSL 14:167253f4e170 43612 { { 0x26f9b9322ed53a71l,0x0bac7348c72ef2e0l,0x7e96001da5c6faf1l,
wolfSSL 14:167253f4e170 43613 0x5d43f76dea00eb2dl },
wolfSSL 14:167253f4e170 43614 { 0x1327370f44f1c478l,0x1c83a9ac6bb964c8l,0xa3a9769f76ffbd25l,
wolfSSL 14:167253f4e170 43615 0xdf045fb6b04f1bddl },
wolfSSL 14:167253f4e170 43616 0 },
wolfSSL 14:167253f4e170 43617 /* 71 << 248 */
wolfSSL 14:167253f4e170 43618 { { 0x4283898d556b975el,0x6e2301ffe3880361l,0xc6d3b2bbe9198077l,
wolfSSL 14:167253f4e170 43619 0xc4799578d21cac02l },
wolfSSL 14:167253f4e170 43620 { 0x11448ff8f784eb7cl,0xb775973fbb81898dl,0x4e51f061519c76b9l,
wolfSSL 14:167253f4e170 43621 0xaba1f3ef3cad0393l },
wolfSSL 14:167253f4e170 43622 0 },
wolfSSL 14:167253f4e170 43623 /* 77 << 248 */
wolfSSL 14:167253f4e170 43624 { { 0x59d60c1c9b339830l,0x5af60a44ac32746dl,0x5ac006bc9dea8d80l,
wolfSSL 14:167253f4e170 43625 0x4a2a56d97f2b1180l },
wolfSSL 14:167253f4e170 43626 { 0x2032845a46946fc4l,0xe25b911226a3b503l,0xfed89db9a28827d3l,
wolfSSL 14:167253f4e170 43627 0xdd2d7e90c6b74593l },
wolfSSL 14:167253f4e170 43628 0 },
wolfSSL 14:167253f4e170 43629 /* 83 << 248 */
wolfSSL 14:167253f4e170 43630 { { 0x9b047a26cda38ecfl,0x6889284f5f6cb442l,0x4d128bcb14753820l,
wolfSSL 14:167253f4e170 43631 0x8f9937c160eedd78l },
wolfSSL 14:167253f4e170 43632 { 0xe333bad751ab9127l,0xd31b01c67ace3b19l,0x0732de39d7c0b4bel,
wolfSSL 14:167253f4e170 43633 0xad04fa4c649e2b9bl },
wolfSSL 14:167253f4e170 43634 0 },
wolfSSL 14:167253f4e170 43635 /* 89 << 248 */
wolfSSL 14:167253f4e170 43636 { { 0x02e042689d1495bal,0x95dca5a85591b5f8l,0xb10488d856f46c71l,
wolfSSL 14:167253f4e170 43637 0x97829baf3590000al },
wolfSSL 14:167253f4e170 43638 { 0xaeda5cb378c9e78al,0x3615873a7ba1c71cl,0x7c9f9f4d4333aa12l,
wolfSSL 14:167253f4e170 43639 0x893fab42cea8e6d3l },
wolfSSL 14:167253f4e170 43640 0 },
wolfSSL 14:167253f4e170 43641 /* 95 << 248 */
wolfSSL 14:167253f4e170 43642 { { 0x9eb09fff69aaa09fl,0xf36678a926731322l,0x8be61ee1cafcabafl,
wolfSSL 14:167253f4e170 43643 0x77a172f558ddb763l },
wolfSSL 14:167253f4e170 43644 { 0x7e09dfc66471130el,0x7f8909791039771el,0x0e44071d37800b9bl,
wolfSSL 14:167253f4e170 43645 0x09123d27fe762d10l },
wolfSSL 14:167253f4e170 43646 0 },
wolfSSL 14:167253f4e170 43647 /* 101 << 248 */
wolfSSL 14:167253f4e170 43648 { { 0xffd455a7a1b7fdd6l,0xb6162cb4dabdffael,0xf859519ec89c0e56l,
wolfSSL 14:167253f4e170 43649 0x07406c1b421f2846l },
wolfSSL 14:167253f4e170 43650 { 0x42db24ed9e96ddbbl,0x03bcae092dc5da85l,0x75099cd217aa7493l,
wolfSSL 14:167253f4e170 43651 0x8cd1aa4266b8740dl },
wolfSSL 14:167253f4e170 43652 0 },
wolfSSL 14:167253f4e170 43653 /* 107 << 248 */
wolfSSL 14:167253f4e170 43654 { { 0xe94333d5dde7fec3l,0x894fd673745a9be3l,0xaf3d97c725683748l,
wolfSSL 14:167253f4e170 43655 0xeaa469a2c9ec165fl },
wolfSSL 14:167253f4e170 43656 { 0xc9a18decdc7abd3bl,0xf059008082717b02l,0x9816374a4fdf4300l,
wolfSSL 14:167253f4e170 43657 0x449d3eb74fb5a6cel },
wolfSSL 14:167253f4e170 43658 0 },
wolfSSL 14:167253f4e170 43659 /* 113 << 248 */
wolfSSL 14:167253f4e170 43660 { { 0x7fc983ebd28001a6l,0xeabf5276dae74b6bl,0x50adb67d742ed0a5l,
wolfSSL 14:167253f4e170 43661 0x1d2ad363650e1446l },
wolfSSL 14:167253f4e170 43662 { 0x5a564253d122f5d0l,0x7e5aefc7e30471del,0xdc64cbb3e5dc2f2cl,
wolfSSL 14:167253f4e170 43663 0xe645b9fa9437be4el },
wolfSSL 14:167253f4e170 43664 0 },
wolfSSL 14:167253f4e170 43665 /* 116 << 248 */
wolfSSL 14:167253f4e170 43666 { { 0x0f58cec54e27d357l,0x08dcf2b70004539el,0xb1ead64104f96709l,
wolfSSL 14:167253f4e170 43667 0x350fed185a914c72l },
wolfSSL 14:167253f4e170 43668 { 0x44f43523c5147854l,0x45f8b46f46d04ac7l,0x62c306869a449d51l,
wolfSSL 14:167253f4e170 43669 0xaacc0f0d9e66d9a3l },
wolfSSL 14:167253f4e170 43670 0 },
wolfSSL 14:167253f4e170 43671 /* 119 << 248 */
wolfSSL 14:167253f4e170 43672 { { 0x94cb62e5bdd61b63l,0xe6ce5b5104a0ec57l,0x0461cb95f0bda8a4l,
wolfSSL 14:167253f4e170 43673 0xca2d6220cbadfe8fl },
wolfSSL 14:167253f4e170 43674 { 0x6c19bdf03c1ad65el,0x774a49bae04239d5l,0xf78cb7404a2fd59dl,
wolfSSL 14:167253f4e170 43675 0xaebf90ed66a09130l },
wolfSSL 14:167253f4e170 43676 0 },
wolfSSL 14:167253f4e170 43677 /* 125 << 248 */
wolfSSL 14:167253f4e170 43678 { { 0x10e4074857cc8d54l,0x29985831918e3cf9l,0x3d87def9f2e344eel,
wolfSSL 14:167253f4e170 43679 0x8899992c68977860l },
wolfSSL 14:167253f4e170 43680 { 0xbdc8d73b210f3c50l,0x98aa042fa9857f46l,0x76a34daf6c71357fl,
wolfSSL 14:167253f4e170 43681 0x086289d3200bcb6dl },
wolfSSL 14:167253f4e170 43682 0 },
wolfSSL 14:167253f4e170 43683 },
wolfSSL 14:167253f4e170 43684 {
wolfSSL 14:167253f4e170 43685 /* 0 << 256 */
wolfSSL 14:167253f4e170 43686 { { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 43687 { 0x00, 0x00, 0x00, 0x00 },
wolfSSL 14:167253f4e170 43688 1 },
wolfSSL 14:167253f4e170 43689 /* 1 << 256 */
wolfSSL 14:167253f4e170 43690 { { 0xb4e370af3aeac968l,0xe4f7fee9c4b63266l,0xb4acd4c2e3ac5664l,
wolfSSL 14:167253f4e170 43691 0xf8910bd2ceb38cbfl },
wolfSSL 14:167253f4e170 43692 { 0x1c3ae50cc9c0726el,0x15309569d97b40bfl,0x70884b7ffd5a5a1bl,
wolfSSL 14:167253f4e170 43693 0x3890896aef8314cdl },
wolfSSL 14:167253f4e170 43694 0 },
wolfSSL 14:167253f4e170 43695 /* 3 << 256 */
wolfSSL 14:167253f4e170 43696 { { 0x996884f5903fa271l,0xe6da0fd2b9da921el,0xa6f2f2695db01e54l,
wolfSSL 14:167253f4e170 43697 0x1ee3e9bd6876214el },
wolfSSL 14:167253f4e170 43698 { 0xa26e181ce27a9497l,0x36d254e48e215e04l,0x42f32a6c252cabcal,
wolfSSL 14:167253f4e170 43699 0x9948148780b57614l },
wolfSSL 14:167253f4e170 43700 0 },
wolfSSL 14:167253f4e170 43701 /* 4 << 256 */
wolfSSL 14:167253f4e170 43702 { { 0xab41b43a43228d83l,0x24ae1c304ad63f99l,0x8e525f1a46a51229l,
wolfSSL 14:167253f4e170 43703 0x14af860fcd26d2b4l },
wolfSSL 14:167253f4e170 43704 { 0xd6baef613f714aa1l,0xf51865adeb78795el,0xd3e21fcee6a9d694l,
wolfSSL 14:167253f4e170 43705 0x82ceb1dd8a37b527l },
wolfSSL 14:167253f4e170 43706 0 },
wolfSSL 14:167253f4e170 43707 /* 5 << 256 */
wolfSSL 14:167253f4e170 43708 { { 0x4a665bfd2f9fd51al,0x7f2f1fe2481b97f7l,0xcad05d69ad36ce50l,
wolfSSL 14:167253f4e170 43709 0x314fc2a4844f4dedl },
wolfSSL 14:167253f4e170 43710 { 0xd5593d8cb55fc5c6l,0xe3510ce8bfb1e23dl,0xf9b7be6937453ccel,
wolfSSL 14:167253f4e170 43711 0xd3541b7969fae631l },
wolfSSL 14:167253f4e170 43712 0 },
wolfSSL 14:167253f4e170 43713 /* 7 << 256 */
wolfSSL 14:167253f4e170 43714 { { 0x711b8a4176a9f05dl,0x06ca4e4b9011d488l,0x543bc62ba248a65el,
wolfSSL 14:167253f4e170 43715 0x017535ffc9290894l },
wolfSSL 14:167253f4e170 43716 { 0x840b84ce406851d7l,0xafa3acdf90e960b4l,0xac3394af7128fd34l,
wolfSSL 14:167253f4e170 43717 0x54eb4d5b2ac0f92cl },
wolfSSL 14:167253f4e170 43718 0 },
wolfSSL 14:167253f4e170 43719 /* 9 << 256 */
wolfSSL 14:167253f4e170 43720 { { 0x3549a0f14df48fecl,0x6ae7b1eec239f83al,0x001dcf253eb90ff3l,
wolfSSL 14:167253f4e170 43721 0x02ff0f02581e90edl },
wolfSSL 14:167253f4e170 43722 { 0x72921d8ca103dcefl,0x2c513c3c5876293el,0xc07064ca6b68875el,
wolfSSL 14:167253f4e170 43723 0x7198d44653b9537cl },
wolfSSL 14:167253f4e170 43724 0 },
wolfSSL 14:167253f4e170 43725 /* 10 << 256 */
wolfSSL 14:167253f4e170 43726 { { 0x58349b77685e089bl,0x1c678441219b7b8cl,0xba8da91f61e2e20dl,
wolfSSL 14:167253f4e170 43727 0xf9c50b8c309fd4e6l },
wolfSSL 14:167253f4e170 43728 { 0x99b0164996d0ef64l,0xac334ded60cdb63al,0x6b9ada19fb0bce4fl,
wolfSSL 14:167253f4e170 43729 0x39dc9375c7896377l },
wolfSSL 14:167253f4e170 43730 0 },
wolfSSL 14:167253f4e170 43731 /* 11 << 256 */
wolfSSL 14:167253f4e170 43732 { { 0x068dda8b7e1bc126l,0x77c7c58176243a21l,0xcc8ba55c875f9dael,
wolfSSL 14:167253f4e170 43733 0xdde7afe2ce469f95l },
wolfSSL 14:167253f4e170 43734 { 0xde2a15f5e9523b85l,0x447512c6d85674ael,0x5691f89e12c6c20cl,
wolfSSL 14:167253f4e170 43735 0xd64ef40e0fae4513l },
wolfSSL 14:167253f4e170 43736 0 },
wolfSSL 14:167253f4e170 43737 /* 13 << 256 */
wolfSSL 14:167253f4e170 43738 { { 0x10db2041c4d9eb40l,0x420eccb724f03f8al,0x64470fd17d29080el,
wolfSSL 14:167253f4e170 43739 0xf66c5b4416e52414l },
wolfSSL 14:167253f4e170 43740 { 0xa32cc70e4ca94031l,0xa67931592c8401bal,0x34f2dc29abfcc58dl,
wolfSSL 14:167253f4e170 43741 0x6f340f9a07325d7dl },
wolfSSL 14:167253f4e170 43742 0 },
wolfSSL 14:167253f4e170 43743 /* 15 << 256 */
wolfSSL 14:167253f4e170 43744 { { 0xf55d446b060a52bbl,0x2f33cb9f02939f24l,0x0f27a01bc8953718l,
wolfSSL 14:167253f4e170 43745 0x362882917fcd3932l },
wolfSSL 14:167253f4e170 43746 { 0x7485613488ed4436l,0xcfe69e27195f089el,0xd6ab040a8ff10bd8l,
wolfSSL 14:167253f4e170 43747 0x9741c5472e4a1623l },
wolfSSL 14:167253f4e170 43748 0 },
wolfSSL 14:167253f4e170 43749 /* 16 << 256 */
wolfSSL 14:167253f4e170 43750 { { 0xc52d8d8b6d55d6a4l,0xc4130fb3be58e8f9l,0x5f55c345e1275627l,
wolfSSL 14:167253f4e170 43751 0xb881a03c117042d3l },
wolfSSL 14:167253f4e170 43752 { 0x00a970a53238d301l,0x40d7cf2412a2c4f1l,0xace4a2f5d770ea74l,
wolfSSL 14:167253f4e170 43753 0x36a2e587e96940b2l },
wolfSSL 14:167253f4e170 43754 0 },
wolfSSL 14:167253f4e170 43755 /* 17 << 256 */
wolfSSL 14:167253f4e170 43756 { { 0x84793d9fef12d4c8l,0x04b89b152d8a163cl,0x0fdb566fb4a87740l,
wolfSSL 14:167253f4e170 43757 0xf7e6e5cf9e595680l },
wolfSSL 14:167253f4e170 43758 { 0xbcb973e41c5cd74el,0xafcb439fe4ed49d8l,0xd5c0820aebbae8eel,
wolfSSL 14:167253f4e170 43759 0x23483d836f56e2a2l },
wolfSSL 14:167253f4e170 43760 0 },
wolfSSL 14:167253f4e170 43761 /* 19 << 256 */
wolfSSL 14:167253f4e170 43762 { { 0x91f9b8be5e8ad115l,0xf1fd6a2e225db496l,0xf362d2cf4a444085l,
wolfSSL 14:167253f4e170 43763 0x033d9201eea043ebl },
wolfSSL 14:167253f4e170 43764 { 0x1e50c0989951a150l,0x4814fca5cfcf1f94l,0xaf3e8ef41bf82de5l,
wolfSSL 14:167253f4e170 43765 0xba0e2991038cff53l },
wolfSSL 14:167253f4e170 43766 0 },
wolfSSL 14:167253f4e170 43767 /* 21 << 256 */
wolfSSL 14:167253f4e170 43768 { { 0x904a41ae5fc373fal,0x235556d61a6a3fc4l,0xe44eb3ea36eeb570l,
wolfSSL 14:167253f4e170 43769 0xa4e1b34a26ba5ca6l },
wolfSSL 14:167253f4e170 43770 { 0x210e7c9131180257l,0x2c28669622158b0cl,0xc78b69c783ddd341l,
wolfSSL 14:167253f4e170 43771 0xfc05941b294e1750l },
wolfSSL 14:167253f4e170 43772 0 },
wolfSSL 14:167253f4e170 43773 /* 23 << 256 */
wolfSSL 14:167253f4e170 43774 { { 0x70666f51fc167dedl,0x47e9e289fe75b8d1l,0x8a5f59739605a03el,
wolfSSL 14:167253f4e170 43775 0x19876a58dd579094l },
wolfSSL 14:167253f4e170 43776 { 0x69a5c8cca964e426l,0xed74a652ccf20306l,0x5c93ae3cf06d31d5l,
wolfSSL 14:167253f4e170 43777 0x51922fa2127a8a12l },
wolfSSL 14:167253f4e170 43778 0 },
wolfSSL 14:167253f4e170 43779 /* 25 << 256 */
wolfSSL 14:167253f4e170 43780 { { 0xa18e26f99e3d509el,0xbc296dd2c10814fal,0x5dadd6eeaa24e147l,
wolfSSL 14:167253f4e170 43781 0xdba2121a8340f12el },
wolfSSL 14:167253f4e170 43782 { 0xd348e7f3e245ca21l,0x1e45a42978e3eb5bl,0x252bf89c169677bbl,
wolfSSL 14:167253f4e170 43783 0xfb33a2564021ac55l },
wolfSSL 14:167253f4e170 43784 0 },
wolfSSL 14:167253f4e170 43785 /* 27 << 256 */
wolfSSL 14:167253f4e170 43786 { { 0x30dc46586e7d72b8l,0x38df46fb0d81c3d6l,0x901bab6e10e84162l,
wolfSSL 14:167253f4e170 43787 0x25d7303ff7932801l },
wolfSSL 14:167253f4e170 43788 { 0xe781d5f37500be42l,0x9a7104c3380ff208l,0xfa801181652121a1l,
wolfSSL 14:167253f4e170 43789 0xef89f4f18d3bed43l },
wolfSSL 14:167253f4e170 43790 0 },
wolfSSL 14:167253f4e170 43791 /* 28 << 256 */
wolfSSL 14:167253f4e170 43792 { { 0xbe4ae5683594917al,0xef7c1c47a04bf81el,0xa1dc3612046d91a0l,
wolfSSL 14:167253f4e170 43793 0x3eee37affb11b338l },
wolfSSL 14:167253f4e170 43794 { 0x7e90278fd03d8f51l,0x3045a6da4fa183c6l,0xb39e573391cd16a9l,
wolfSSL 14:167253f4e170 43795 0xc748a504e54e9411l },
wolfSSL 14:167253f4e170 43796 0 },
wolfSSL 14:167253f4e170 43797 /* 29 << 256 */
wolfSSL 14:167253f4e170 43798 { { 0x07804331a1c6ec56l,0x25358e795b347123l,0x1ab9b39acf9432a4l,
wolfSSL 14:167253f4e170 43799 0x9628501d0a7881cel },
wolfSSL 14:167253f4e170 43800 { 0x749d58988a46d98el,0x01ea43346a17c321l,0xe2b197f9b1f9160fl,
wolfSSL 14:167253f4e170 43801 0x2052c7c07815f2a2l },
wolfSSL 14:167253f4e170 43802 0 },
wolfSSL 14:167253f4e170 43803 /* 31 << 256 */
wolfSSL 14:167253f4e170 43804 { { 0xaa691bfbc57a1a6dl,0x06cae127d737d525l,0x5be04b2f963c7c98l,
wolfSSL 14:167253f4e170 43805 0x936b1f5bfc00bc4al },
wolfSSL 14:167253f4e170 43806 { 0x3fed4ac77eda6a34l,0xba6ca7aa2500a438l,0x1e979fa6786c2a75l,
wolfSSL 14:167253f4e170 43807 0xa3db26bec13f37d4l },
wolfSSL 14:167253f4e170 43808 0 },
wolfSSL 14:167253f4e170 43809 /* 33 << 256 */
wolfSSL 14:167253f4e170 43810 { { 0x20afae333d7006d1l,0xdcbca6fbbda467d1l,0x2714b3827df4006cl,
wolfSSL 14:167253f4e170 43811 0x9abc0510c8e94549l },
wolfSSL 14:167253f4e170 43812 { 0x5b30a6d464c14915l,0xba91d0c35752b44fl,0x7ad9b19bbb389f1fl,
wolfSSL 14:167253f4e170 43813 0xe4c7aa04ef7c6e13l },
wolfSSL 14:167253f4e170 43814 0 },
wolfSSL 14:167253f4e170 43815 /* 34 << 256 */
wolfSSL 14:167253f4e170 43816 { { 0x1e24a3f23d12e2b6l,0xf99df403febd6db3l,0x61e580a6b0c8e12fl,
wolfSSL 14:167253f4e170 43817 0x819341b7c2bfe085l },
wolfSSL 14:167253f4e170 43818 { 0xd53002d640828921l,0x31e1eb65cea010efl,0xc48d0cfe85b3279fl,
wolfSSL 14:167253f4e170 43819 0xb90de69089f35fa5l },
wolfSSL 14:167253f4e170 43820 0 },
wolfSSL 14:167253f4e170 43821 /* 35 << 256 */
wolfSSL 14:167253f4e170 43822 { { 0xa3f6fd3c88ed748fl,0x6d72613af48127b9l,0xe85ed703d1e6f7e5l,
wolfSSL 14:167253f4e170 43823 0xbb563db449636f40l },
wolfSSL 14:167253f4e170 43824 { 0x23bae3c9708497bal,0x89dbff163aa65cf4l,0x70861847e6c0850al,
wolfSSL 14:167253f4e170 43825 0x5ef19d5d48b2e90cl },
wolfSSL 14:167253f4e170 43826 0 },
wolfSSL 14:167253f4e170 43827 /* 36 << 256 */
wolfSSL 14:167253f4e170 43828 { { 0xab6a1e13107f7bacl,0x83a8bc57972091f5l,0x3c65b454f6dcba41l,
wolfSSL 14:167253f4e170 43829 0xd7606ff96abc431dl },
wolfSSL 14:167253f4e170 43830 { 0xa3af9c189bd09971l,0x6ddd3bbf276bad63l,0xd2aba9beab4f0816l,
wolfSSL 14:167253f4e170 43831 0x8f13063c151581edl },
wolfSSL 14:167253f4e170 43832 0 },
wolfSSL 14:167253f4e170 43833 /* 37 << 256 */
wolfSSL 14:167253f4e170 43834 { { 0xf9c02364f5761b15l,0x3cfa250afd478139l,0x67d51e7416e26191l,
wolfSSL 14:167253f4e170 43835 0x0281bbf65eda396cl },
wolfSSL 14:167253f4e170 43836 { 0xbd38d4d70d1f4510l,0x2032a930edff593el,0x0ab74a0cf2ea4ad7l,
wolfSSL 14:167253f4e170 43837 0xb95aa9c3302498d6l },
wolfSSL 14:167253f4e170 43838 0 },
wolfSSL 14:167253f4e170 43839 /* 39 << 256 */
wolfSSL 14:167253f4e170 43840 { { 0x2995495dd7da3c7cl,0x28d579d0a0bb703el,0xabec6afec8288837l,
wolfSSL 14:167253f4e170 43841 0x93c34dfd05ab989bl },
wolfSSL 14:167253f4e170 43842 { 0xcc94f05dde5ea3dfl,0xc3e3d4ef90f436e6l,0x32b3dee1cf59dc4el,
wolfSSL 14:167253f4e170 43843 0x5eab01635447d9d9l },
wolfSSL 14:167253f4e170 43844 0 },
wolfSSL 14:167253f4e170 43845 /* 40 << 256 */
wolfSSL 14:167253f4e170 43846 { { 0xd31c5e8e2c23464el,0x5bcc382f50cfbde7l,0x6cee3d8da93c3d9bl,
wolfSSL 14:167253f4e170 43847 0xbee2948909ee62acl },
wolfSSL 14:167253f4e170 43848 { 0x4848d59c10742b84l,0x2486796fe35e9c84l,0x1a1d9570cd8f391al,
wolfSSL 14:167253f4e170 43849 0x839aa0913eedb743l },
wolfSSL 14:167253f4e170 43850 0 },
wolfSSL 14:167253f4e170 43851 /* 41 << 256 */
wolfSSL 14:167253f4e170 43852 { { 0xae02a7ce0f83f369l,0x3b67c56097994835l,0x715def441ae4bbeal,
wolfSSL 14:167253f4e170 43853 0x11e764ee59f6b9eel },
wolfSSL 14:167253f4e170 43854 { 0x70c775051c962c3al,0x42811507d937a258l,0x06dbdceed03e6e86l,
wolfSSL 14:167253f4e170 43855 0x39a3a7ed48cae79el },
wolfSSL 14:167253f4e170 43856 0 },
wolfSSL 14:167253f4e170 43857 /* 43 << 256 */
wolfSSL 14:167253f4e170 43858 { { 0xa32e729fb220eef8l,0x12d876baf37ac5d7l,0x9376ab45105a7f34l,
wolfSSL 14:167253f4e170 43859 0xb422331a4deb7275l },
wolfSSL 14:167253f4e170 43860 { 0x6ea07fb7686dea5el,0xba67ed3e1d8e32c9l,0x5ae52632bbc6bb9cl,
wolfSSL 14:167253f4e170 43861 0xdca55b86d1397575l },
wolfSSL 14:167253f4e170 43862 0 },
wolfSSL 14:167253f4e170 43863 /* 44 << 256 */
wolfSSL 14:167253f4e170 43864 { { 0xd9183f74378200b1l,0xe5ea1645762f5605l,0x78b42e2f7bd6290fl,
wolfSSL 14:167253f4e170 43865 0xa0bdfccc07fa0899l },
wolfSSL 14:167253f4e170 43866 { 0x2f92ea52dacda629l,0x810b4e6c48de27e2l,0x013d8587d9d1250dl,
wolfSSL 14:167253f4e170 43867 0xc153d519dd5141d5l },
wolfSSL 14:167253f4e170 43868 0 },
wolfSSL 14:167253f4e170 43869 /* 45 << 256 */
wolfSSL 14:167253f4e170 43870 { { 0x8f1f6cb5b8f1d719l,0xa9abc27b04e15a4el,0xc0d944a92ad42296l,
wolfSSL 14:167253f4e170 43871 0x69ecc877f3d2b0e5l },
wolfSSL 14:167253f4e170 43872 { 0xec60dbea16a5581al,0x2a0ead5fb85130d6l,0x7b3d2ebb6fddac23l,
wolfSSL 14:167253f4e170 43873 0x06213269ac448663l },
wolfSSL 14:167253f4e170 43874 0 },
wolfSSL 14:167253f4e170 43875 /* 46 << 256 */
wolfSSL 14:167253f4e170 43876 { { 0xe1074008ac11e180l,0xdff3339c14b8f830l,0x136e22be636504f3l,
wolfSSL 14:167253f4e170 43877 0xb07ae98aa09c5c4cl },
wolfSSL 14:167253f4e170 43878 { 0x9b0a0517192168e9l,0x39e09fac86ad0865l,0x24f90705adb08d41l,
wolfSSL 14:167253f4e170 43879 0x9c699cc759d3be24l },
wolfSSL 14:167253f4e170 43880 0 },
wolfSSL 14:167253f4e170 43881 /* 47 << 256 */
wolfSSL 14:167253f4e170 43882 { { 0xd9e16551907e36b0l,0x57f24b6caf91cb5al,0xbdb7dfdb062edae4l,
wolfSSL 14:167253f4e170 43883 0x99e3bffe4b85f424l },
wolfSSL 14:167253f4e170 43884 { 0x250774f4b2961ba7l,0xe7c0f2386d993c51l,0xcd0aae29f559b4bdl,
wolfSSL 14:167253f4e170 43885 0x3b12893a09a6859bl },
wolfSSL 14:167253f4e170 43886 0 },
wolfSSL 14:167253f4e170 43887 /* 48 << 256 */
wolfSSL 14:167253f4e170 43888 { { 0xac177eb985ae12c3l,0x8e6cb5cc6cf76537l,0x134abb19f265f9e3l,
wolfSSL 14:167253f4e170 43889 0xc37309b71ba3f55dl },
wolfSSL 14:167253f4e170 43890 { 0x570833b4392d564bl,0xaa273a27d8c22f00l,0x9ba6b6276006773al,
wolfSSL 14:167253f4e170 43891 0x2156c94f0a16c092l },
wolfSSL 14:167253f4e170 43892 0 },
wolfSSL 14:167253f4e170 43893 /* 49 << 256 */
wolfSSL 14:167253f4e170 43894 { { 0x2be0436b408e1258l,0xb179a2e34f47f121l,0x140b948fa42d3cfcl,
wolfSSL 14:167253f4e170 43895 0x96649c6700d2b4e6l },
wolfSSL 14:167253f4e170 43896 { 0x2bf934c7d08a4b34l,0x371c770136b472ddl,0x36297876e06adc73l,
wolfSSL 14:167253f4e170 43897 0x59e0d8251c3e6558l },
wolfSSL 14:167253f4e170 43898 0 },
wolfSSL 14:167253f4e170 43899 /* 51 << 256 */
wolfSSL 14:167253f4e170 43900 { { 0x9368cfd304a8bc81l,0x145249d4c49e58c7l,0x8c7ac1891392be01l,
wolfSSL 14:167253f4e170 43901 0x58cbcb5fbc7b0903l },
wolfSSL 14:167253f4e170 43902 { 0x502218a1a0377b0al,0x5c17eb8afb625836l,0x845c09ef349f4d26l,
wolfSSL 14:167253f4e170 43903 0x15fdeb2554ddce85l },
wolfSSL 14:167253f4e170 43904 0 },
wolfSSL 14:167253f4e170 43905 /* 52 << 256 */
wolfSSL 14:167253f4e170 43906 { { 0xf773535a64e8344dl,0xb8486a33d0dbabe6l,0x43c2df99b578862dl,
wolfSSL 14:167253f4e170 43907 0xcead29a11a39820el },
wolfSSL 14:167253f4e170 43908 { 0x3e5466fe63134d63l,0xc37ea88fdf43a104l,0x3b34ac34bbaacb5al,
wolfSSL 14:167253f4e170 43909 0x8281c240bc20be5al },
wolfSSL 14:167253f4e170 43910 0 },
wolfSSL 14:167253f4e170 43911 /* 53 << 256 */
wolfSSL 14:167253f4e170 43912 { { 0x55113d5e0f8dec77l,0xdfe59f251d7e1543l,0x3b2837e0a63a849al,
wolfSSL 14:167253f4e170 43913 0xdfbdb8b67a5691afl },
wolfSSL 14:167253f4e170 43914 { 0x8dd6faf0bd4cf444l,0x28b2bdfaab128b6cl,0x44af3ee24b1098ebl,
wolfSSL 14:167253f4e170 43915 0xbbf328ebe50b2d02l },
wolfSSL 14:167253f4e170 43916 0 },
wolfSSL 14:167253f4e170 43917 /* 55 << 256 */
wolfSSL 14:167253f4e170 43918 { { 0xf231b1f4e4e6151al,0x6ac7130413258c6al,0x6f9cb1c1a09b9f86l,
wolfSSL 14:167253f4e170 43919 0xbfc9291ee52ed880l },
wolfSSL 14:167253f4e170 43920 { 0x2a7d8230bea258a2l,0xd52a0da6baf386acl,0x5166764b3af00b7el,
wolfSSL 14:167253f4e170 43921 0x84792b043c985be2l },
wolfSSL 14:167253f4e170 43922 0 },
wolfSSL 14:167253f4e170 43923 /* 57 << 256 */
wolfSSL 14:167253f4e170 43924 { { 0x914ca588a906d9e4l,0xb4e4e86abc27a876l,0x97e6ed27724324f2l,
wolfSSL 14:167253f4e170 43925 0xda7e9aa5c0b87d2cl },
wolfSSL 14:167253f4e170 43926 { 0xafccbe6b33a56f84l,0x69e8fd4ac892d90al,0xb47512910bb5457fl,
wolfSSL 14:167253f4e170 43927 0xad65e4d05cb136fal },
wolfSSL 14:167253f4e170 43928 0 },
wolfSSL 14:167253f4e170 43929 /* 59 << 256 */
wolfSSL 14:167253f4e170 43930 { { 0xb09974d2fd679a1bl,0x17abc2a54578faf0l,0xe7da92828c830388l,
wolfSSL 14:167253f4e170 43931 0x7e455d8b0edf6146l },
wolfSSL 14:167253f4e170 43932 { 0xdff3b2f0c324bdb6l,0xe7a1718769f4a4f9l,0xfb4e0b3129c500a4l,
wolfSSL 14:167253f4e170 43933 0x1ed50799a09c5a07l },
wolfSSL 14:167253f4e170 43934 0 },
wolfSSL 14:167253f4e170 43935 /* 60 << 256 */
wolfSSL 14:167253f4e170 43936 { { 0x6b669496c679d9f9l,0x3b741f36e78f0830l,0xf99d4857eb3f9e53l,
wolfSSL 14:167253f4e170 43937 0x41be594276f7d4ael },
wolfSSL 14:167253f4e170 43938 { 0x75f44d57c09a112bl,0xa5139fd68475eeb7l,0xa4560cd5c6bc9df6l,
wolfSSL 14:167253f4e170 43939 0x8ce2c4cf50845434l },
wolfSSL 14:167253f4e170 43940 0 },
wolfSSL 14:167253f4e170 43941 /* 61 << 256 */
wolfSSL 14:167253f4e170 43942 { { 0x96b515c32b3cb0a6l,0x65836de3930d5344l,0xfb032d5b00e6d403l,
wolfSSL 14:167253f4e170 43943 0x2648301843c93bd1l },
wolfSSL 14:167253f4e170 43944 { 0xfc4525dd4b572363l,0x12b7923e7b28ab5cl,0xf376b633e22ac5e6l,
wolfSSL 14:167253f4e170 43945 0xd6ff6582e30b4707l },
wolfSSL 14:167253f4e170 43946 0 },
wolfSSL 14:167253f4e170 43947 /* 63 << 256 */
wolfSSL 14:167253f4e170 43948 { { 0x8bdce75c83b09e07l,0x64228b19227717c4l,0xeae8f8a2dc6a1f02l,
wolfSSL 14:167253f4e170 43949 0x1081031be72f3b6dl },
wolfSSL 14:167253f4e170 43950 { 0xba0f876072c3f736l,0xde38a0c5246a28adl,0x0b116fe08596c412l,
wolfSSL 14:167253f4e170 43951 0xb9e37be3fa135d11l },
wolfSSL 14:167253f4e170 43952 0 },
wolfSSL 14:167253f4e170 43953 /* 64 << 256 */
wolfSSL 14:167253f4e170 43954 { { 0x09800dc1b48d4168l,0xa740b282bfee87a2l,0x80c6b75dc94a547al,
wolfSSL 14:167253f4e170 43955 0x8cb622f0099c1985l },
wolfSSL 14:167253f4e170 43956 { 0xe6c789631467e05dl,0x027b658822fd3064l,0xe14735e2c2fdb68cl,
wolfSSL 14:167253f4e170 43957 0xfd2869947d853158l },
wolfSSL 14:167253f4e170 43958 0 },
wolfSSL 14:167253f4e170 43959 /* 65 << 256 */
wolfSSL 14:167253f4e170 43960 { { 0x301916a5bbd7caf1l,0xef563fda4e2076c2l,0xccbc56088467f279l,
wolfSSL 14:167253f4e170 43961 0xd7de3088b8d0f1bfl },
wolfSSL 14:167253f4e170 43962 { 0x3d9adcce8586910dl,0x3fa3b8b9d775e0e9l,0x4b7a4a1d88136503l,
wolfSSL 14:167253f4e170 43963 0xc748656de4994fcel },
wolfSSL 14:167253f4e170 43964 0 },
wolfSSL 14:167253f4e170 43965 /* 71 << 256 */
wolfSSL 14:167253f4e170 43966 { { 0x18cc605c2d9f8646l,0x3764f1c29e441b64l,0xb0ea7f7fc4b64ee3l,
wolfSSL 14:167253f4e170 43967 0xb5c22d0c042f8678l },
wolfSSL 14:167253f4e170 43968 { 0x3761f7f89b3057fdl,0xc85b8de64a207ce4l,0x11da715bc5c04cf7l,
wolfSSL 14:167253f4e170 43969 0x0cb1fa77c8e99c1fl },
wolfSSL 14:167253f4e170 43970 0 },
wolfSSL 14:167253f4e170 43971 /* 77 << 256 */
wolfSSL 14:167253f4e170 43972 { { 0x35f9cfc8045dab4el,0x08a65c6771a7d720l,0xf076767b8eef1351l,
wolfSSL 14:167253f4e170 43973 0x5351dbff8638fbe5l },
wolfSSL 14:167253f4e170 43974 { 0x5aead6f7772ad54cl,0x5f6b441fafe93e69l,0xb7b83d1aeeb876b5l,
wolfSSL 14:167253f4e170 43975 0xbe1ba4a7cdc094d9l },
wolfSSL 14:167253f4e170 43976 0 },
wolfSSL 14:167253f4e170 43977 /* 83 << 256 */
wolfSSL 14:167253f4e170 43978 { { 0x005d8f04ec0377bal,0x036b8e1ace58f05dl,0xdd6ffc6f1b28cf58l,
wolfSSL 14:167253f4e170 43979 0xc3d95a58e206189fl },
wolfSSL 14:167253f4e170 43980 { 0xcb2873c1f52e8b8cl,0xcffdb18d80142af1l,0x7cf88eb64c77ed78l,
wolfSSL 14:167253f4e170 43981 0xb3a3141981ef2c12l },
wolfSSL 14:167253f4e170 43982 0 },
wolfSSL 14:167253f4e170 43983 /* 89 << 256 */
wolfSSL 14:167253f4e170 43984 { { 0xbb17e6f957c175b1l,0xf33abc63260a6f6dl,0x9435f2de620ddd6bl,
wolfSSL 14:167253f4e170 43985 0x90bdde59ff3e99eal },
wolfSSL 14:167253f4e170 43986 { 0x3d7875e0567b520fl,0xdd6954aa813b4978l,0x1af3dc24de7b631cl,
wolfSSL 14:167253f4e170 43987 0x82ddcd08934d3c97l },
wolfSSL 14:167253f4e170 43988 0 },
wolfSSL 14:167253f4e170 43989 /* 95 << 256 */
wolfSSL 14:167253f4e170 43990 { { 0x7a9d60affc5ce598l,0xc6f507597c37abfdl,0xaa1b32f3a79355d0l,
wolfSSL 14:167253f4e170 43991 0xac581b94d7e4fcf3l },
wolfSSL 14:167253f4e170 43992 { 0x2669cefd139f6466l,0x560a98bb26f97570l,0x32e1c1db2837b908l,
wolfSSL 14:167253f4e170 43993 0x7823d7922d252781l },
wolfSSL 14:167253f4e170 43994 0 },
wolfSSL 14:167253f4e170 43995 /* 101 << 256 */
wolfSSL 14:167253f4e170 43996 { { 0xea018b4cdedf9af0l,0x4b64c0a380c1d2f9l,0x527a0b1c36992c44l,
wolfSSL 14:167253f4e170 43997 0x72a2408142b7adffl },
wolfSSL 14:167253f4e170 43998 { 0x0023d10f97a502eel,0xc0f9ed067b401ac4l,0xabd1bd03d6d3b516l,
wolfSSL 14:167253f4e170 43999 0xc320e3e478c5d0bel },
wolfSSL 14:167253f4e170 44000 0 },
wolfSSL 14:167253f4e170 44001 /* 107 << 256 */
wolfSSL 14:167253f4e170 44002 { { 0x9f5d2a6a37dd009cl,0x88c0f42ac2c3cbacl,0x3155636977552a1el,
wolfSSL 14:167253f4e170 44003 0xe78ec89d02f8098fl },
wolfSSL 14:167253f4e170 44004 { 0x276c2ad71b6eeff9l,0xf4c49a28f7f91856l,0x698a2368dc795124l,
wolfSSL 14:167253f4e170 44005 0x5502810de92a6c0fl },
wolfSSL 14:167253f4e170 44006 0 },
wolfSSL 14:167253f4e170 44007 /* 113 << 256 */
wolfSSL 14:167253f4e170 44008 { { 0x82a5042e9f5e5192l,0x64da65fac0965a88l,0xf4c80dd56668399el,
wolfSSL 14:167253f4e170 44009 0x635323757e33c233l },
wolfSSL 14:167253f4e170 44010 { 0x5e5339b1a0048616l,0x4a17b1931c91741fl,0x65fdc7c213dcf3d0l,
wolfSSL 14:167253f4e170 44011 0x230181426d10c410l },
wolfSSL 14:167253f4e170 44012 0 },
wolfSSL 14:167253f4e170 44013 /* 116 << 256 */
wolfSSL 14:167253f4e170 44014 { { 0x090a04220f46c635l,0xc7eac842a04de3f5l,0x45b69d4c8990d4b2l,
wolfSSL 14:167253f4e170 44015 0x032aeb50b8e0cdc6l },
wolfSSL 14:167253f4e170 44016 { 0x02ce332a4ee3f307l,0x3c80c1545043980fl,0xc774838bcbd5287cl,
wolfSSL 14:167253f4e170 44017 0x052661074a37d0ael },
wolfSSL 14:167253f4e170 44018 0 },
wolfSSL 14:167253f4e170 44019 /* 119 << 256 */
wolfSSL 14:167253f4e170 44020 { { 0xc401b9c0f4d70fbfl,0xf82bbfde98ee47fel,0x94965118c84d91afl,
wolfSSL 14:167253f4e170 44021 0xdd9a67c4d3b6ad1dl },
wolfSSL 14:167253f4e170 44022 { 0x85c9cf1eb66a3ad4l,0x05580a0fbf5f514cl,0xf3ef0fd00218536el,
wolfSSL 14:167253f4e170 44023 0x1dc2cf2bd14a7ca9l },
wolfSSL 14:167253f4e170 44024 0 },
wolfSSL 14:167253f4e170 44025 /* 125 << 256 */
wolfSSL 14:167253f4e170 44026 { { 0x18c83e337c1e24d4l,0x30911165563657c6l,0xf9be1af679e53083l,
wolfSSL 14:167253f4e170 44027 0x9b058059637753cel },
wolfSSL 14:167253f4e170 44028 { 0x6a37fa24e54522b9l,0xc11d38b426dbf4c4l,0xbc6738655ebd4d9al,
wolfSSL 14:167253f4e170 44029 0x2b40e9427fd4e2ecl },
wolfSSL 14:167253f4e170 44030 0 },
wolfSSL 14:167253f4e170 44031 },
wolfSSL 14:167253f4e170 44032 };
wolfSSL 14:167253f4e170 44033
wolfSSL 14:167253f4e170 44034 /* Structure used to describe recoding of scalar multiplication. */
wolfSSL 14:167253f4e170 44035 typedef struct ecc_recode_sum {
wolfSSL 14:167253f4e170 44036 /* Index into pre-computation table. */
wolfSSL 14:167253f4e170 44037 uint8_t i;
wolfSSL 14:167253f4e170 44038 /* Multiplier to add point into. */
wolfSSL 14:167253f4e170 44039 uint8_t mul;
wolfSSL 14:167253f4e170 44040 /* Use the negative of the point. */
wolfSSL 14:167253f4e170 44041 uint8_t neg;
wolfSSL 14:167253f4e170 44042 } ecc_recode_sum;
wolfSSL 14:167253f4e170 44043
wolfSSL 14:167253f4e170 44044 /* The index into pre-computation table to use. */
wolfSSL 14:167253f4e170 44045 static uint8_t recode_index_4_8[258] = {
wolfSSL 14:167253f4e170 44046 0, 1, 1, 1, 3, 4, 2, 5, 3, 2, 4, 8, 3, 9, 5, 4,
wolfSSL 14:167253f4e170 44047 11, 12, 6, 13, 7, 5, 8, 15, 55, 16, 9, 6, 18, 19, 7, 20,
wolfSSL 14:167253f4e170 44048 11, 8, 12, 23, 24, 25, 13, 9, 27, 28, 14, 29, 30, 10, 15, 33,
wolfSSL 14:167253f4e170 44049 11, 35, 16, 12, 37, 38, 17, 39, 18, 13, 19, 41, 42, 43, 20, 14,
wolfSSL 14:167253f4e170 44050 45, 46, 21, 44, 22, 15, 23, 47, 24, 43, 25, 16, 42, 48, 26, 41,
wolfSSL 14:167253f4e170 44051 27, 17, 28, 49, 18, 40, 29, 19, 30, 50, 31, 39, 32, 20, 33, 51,
wolfSSL 14:167253f4e170 44052 34, 38, 35, 21, 37, 52, 22, 36, 37, 23, 38, 53, 24, 35, 39, 25,
wolfSSL 14:167253f4e170 44053 34, 54, 40, 33, 55, 26, 32, 56, 27, 31, 43, 28, 30, 57, 44, 29,
wolfSSL 14:167253f4e170 44054 45, 29, 44, 57, 30, 28, 43, 31, 27, 56, 32, 26, 55, 33, 40, 54,
wolfSSL 14:167253f4e170 44055 34, 25, 39, 35, 24, 53, 38, 23, 37, 36, 22, 52, 37, 21, 35, 38,
wolfSSL 14:167253f4e170 44056 34, 51, 33, 20, 32, 39, 31, 50, 30, 19, 29, 40, 18, 49, 28, 17,
wolfSSL 14:167253f4e170 44057 27, 41, 26, 48, 42, 16, 25, 43, 24, 47, 23, 15, 22, 44, 21, 46,
wolfSSL 14:167253f4e170 44058 45, 14, 20, 43, 42, 41, 19, 13, 18, 39, 17, 38, 37, 12, 16, 35,
wolfSSL 14:167253f4e170 44059 11, 33, 15, 10, 30, 29, 14, 28, 27, 9, 13, 25, 24, 23, 12, 8,
wolfSSL 14:167253f4e170 44060 11, 20, 7, 19, 18, 6, 9, 16, 55, 15, 8, 5, 7, 13, 6, 12,
wolfSSL 14:167253f4e170 44061 11, 4, 5, 9, 3, 8, 4, 2, 3, 5, 2, 4, 3, 1, 1, 1,
wolfSSL 14:167253f4e170 44062 0, 1,
wolfSSL 14:167253f4e170 44063 };
wolfSSL 14:167253f4e170 44064
wolfSSL 14:167253f4e170 44065 /* Multiple to add point into. */
wolfSSL 14:167253f4e170 44066 static uint8_t recode_mul_4_8[258] = {
wolfSSL 14:167253f4e170 44067 0, 1, 2, 3, 1, 1, 2, 1, 2, 3, 2, 1, 3, 1, 2, 3,
wolfSSL 14:167253f4e170 44068 1, 1, 2, 1, 2, 3, 2, 1, 2, 1, 2, 3, 1, 1, 3, 1,
wolfSSL 14:167253f4e170 44069 2, 3, 2, 1, 1, 1, 2, 3, 1, 1, 2, 1, 1, 3, 2, 1,
wolfSSL 14:167253f4e170 44070 3, 1, 2, 3, 1, 1, 2, 1, 2, 3, 2, 1, 1, 1, 2, 3,
wolfSSL 14:167253f4e170 44071 1, 1, 2, 3, 2, 3, 2, 1, 2, 3, 2, 3, 3, 1, 2, 3,
wolfSSL 14:167253f4e170 44072 2, 3, 2, 1, 3, 3, 2, 3, 2, 1, 2, 3, 2, 3, 2, 1,
wolfSSL 14:167253f4e170 44073 2, 3, 2, 3, 3, 1, 3, 3, 2, 3, 2, 1, 3, 3, 2, 3,
wolfSSL 14:167253f4e170 44074 3, 1, 2, 3, 1, 3, 3, 1, 3, 3, 2, 3, 3, 1, 2, 3,
wolfSSL 14:167253f4e170 44075 2, 3, 2, 1, 3, 3, 2, 3, 3, 1, 3, 3, 1, 3, 2, 1,
wolfSSL 14:167253f4e170 44076 3, 3, 2, 3, 3, 1, 2, 3, 2, 3, 3, 1, 3, 3, 2, 3,
wolfSSL 14:167253f4e170 44077 2, 1, 2, 3, 2, 3, 2, 1, 2, 3, 2, 3, 3, 1, 2, 3,
wolfSSL 14:167253f4e170 44078 2, 3, 2, 1, 3, 3, 2, 3, 2, 1, 2, 3, 2, 3, 2, 1,
wolfSSL 14:167253f4e170 44079 1, 3, 2, 1, 1, 1, 2, 3, 2, 1, 2, 1, 1, 3, 2, 1,
wolfSSL 14:167253f4e170 44080 3, 1, 2, 3, 1, 1, 2, 1, 1, 3, 2, 1, 1, 1, 2, 3,
wolfSSL 14:167253f4e170 44081 2, 1, 3, 1, 1, 3, 2, 1, 2, 1, 2, 3, 2, 1, 2, 1,
wolfSSL 14:167253f4e170 44082 1, 3, 2, 1, 3, 1, 2, 3, 2, 1, 2, 1, 1, 3, 2, 1,
wolfSSL 14:167253f4e170 44083 0, 1,
wolfSSL 14:167253f4e170 44084 };
wolfSSL 14:167253f4e170 44085
wolfSSL 14:167253f4e170 44086 /* Whether to negate y-ordinate. */
wolfSSL 14:167253f4e170 44087 static uint8_t recode_neg_4_8[258] = {
wolfSSL 14:167253f4e170 44088 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 44089 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 44090 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 44091 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 44092 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1,
wolfSSL 14:167253f4e170 44093 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
wolfSSL 14:167253f4e170 44094 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0,
wolfSSL 14:167253f4e170 44095 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
wolfSSL 14:167253f4e170 44096 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1,
wolfSSL 14:167253f4e170 44097 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0,
wolfSSL 14:167253f4e170 44098 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 44099 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1,
wolfSSL 14:167253f4e170 44100 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 44101 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 44102 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 44103 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
wolfSSL 14:167253f4e170 44104 0, 0,
wolfSSL 14:167253f4e170 44105 };
wolfSSL 14:167253f4e170 44106
wolfSSL 14:167253f4e170 44107 /* Recode the scalar for multiplication using pre-computed values, multipliers
wolfSSL 14:167253f4e170 44108 * and subtraction.
wolfSSL 14:167253f4e170 44109 *
wolfSSL 14:167253f4e170 44110 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 44111 * v Vector of operations to peform.
wolfSSL 14:167253f4e170 44112 */
wolfSSL 14:167253f4e170 44113 static void sp_256_ecc_recode_sum_8_4(sp_digit* k, ecc_recode_sum* v)
wolfSSL 14:167253f4e170 44114 {
wolfSSL 14:167253f4e170 44115 int i, j;
wolfSSL 14:167253f4e170 44116 uint16_t y;
wolfSSL 14:167253f4e170 44117 int carry = 0;
wolfSSL 14:167253f4e170 44118 int o;
wolfSSL 14:167253f4e170 44119 sp_digit n;
wolfSSL 14:167253f4e170 44120
wolfSSL 14:167253f4e170 44121 j = 0;
wolfSSL 14:167253f4e170 44122 n = k[j];
wolfSSL 14:167253f4e170 44123 o = 0;
wolfSSL 14:167253f4e170 44124 for (i=0; i<33; i++) {
wolfSSL 14:167253f4e170 44125 y = n;
wolfSSL 14:167253f4e170 44126 if (o + 8 < 64) {
wolfSSL 14:167253f4e170 44127 y &= 0xff;
wolfSSL 14:167253f4e170 44128 n >>= 8;
wolfSSL 14:167253f4e170 44129 o += 8;
wolfSSL 14:167253f4e170 44130 }
wolfSSL 14:167253f4e170 44131 else if (o + 8 == 64) {
wolfSSL 14:167253f4e170 44132 n >>= 8;
wolfSSL 14:167253f4e170 44133 if (++j < 4)
wolfSSL 14:167253f4e170 44134 n = k[j];
wolfSSL 14:167253f4e170 44135 o = 0;
wolfSSL 14:167253f4e170 44136 }
wolfSSL 14:167253f4e170 44137 else if (++j < 4) {
wolfSSL 14:167253f4e170 44138 n = k[j];
wolfSSL 14:167253f4e170 44139 y |= (n << (64 - o)) & 0xff;
wolfSSL 14:167253f4e170 44140 o -= 56;
wolfSSL 14:167253f4e170 44141 n >>= o;
wolfSSL 14:167253f4e170 44142 }
wolfSSL 14:167253f4e170 44143
wolfSSL 14:167253f4e170 44144 y += carry;
wolfSSL 14:167253f4e170 44145 v[i].i = recode_index_4_8[y];
wolfSSL 14:167253f4e170 44146 v[i].mul = recode_mul_4_8[y];
wolfSSL 14:167253f4e170 44147 v[i].neg = recode_neg_4_8[y];
wolfSSL 14:167253f4e170 44148 carry = (y >> 8) + v[i].neg;
wolfSSL 14:167253f4e170 44149 }
wolfSSL 14:167253f4e170 44150 }
wolfSSL 14:167253f4e170 44151
wolfSSL 14:167253f4e170 44152 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 44153 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 44154 *
wolfSSL 14:167253f4e170 44155 * r Resulting point.
wolfSSL 14:167253f4e170 44156 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 44157 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 44158 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 44159 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 44160 */
wolfSSL 14:167253f4e170 44161 static int sp_256_ecc_mulmod_base_4(sp_point* r, sp_digit* k, int map,
wolfSSL 14:167253f4e170 44162 void* heap)
wolfSSL 14:167253f4e170 44163 {
wolfSSL 14:167253f4e170 44164 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44165 sp_point td[4];
wolfSSL 14:167253f4e170 44166 sp_point pd;
wolfSSL 14:167253f4e170 44167 sp_digit tmpd[2 * 4 * 5];
wolfSSL 14:167253f4e170 44168 #endif
wolfSSL 14:167253f4e170 44169 sp_point* t;
wolfSSL 14:167253f4e170 44170 sp_point* p;
wolfSSL 14:167253f4e170 44171 sp_digit* tmp;
wolfSSL 14:167253f4e170 44172 sp_digit* negy;
wolfSSL 14:167253f4e170 44173 int i;
wolfSSL 14:167253f4e170 44174 ecc_recode_sum v[33];
wolfSSL 14:167253f4e170 44175 int err;
wolfSSL 14:167253f4e170 44176
wolfSSL 14:167253f4e170 44177 (void)heap;
wolfSSL 14:167253f4e170 44178
wolfSSL 14:167253f4e170 44179 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 44180 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44181 t = (sp_point*)XMALLOC(sizeof(sp_point) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44182 if (t == NULL)
wolfSSL 14:167253f4e170 44183 err = MEMORY_E;
wolfSSL 14:167253f4e170 44184 tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
wolfSSL 14:167253f4e170 44185 DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44186 if (tmp == NULL)
wolfSSL 14:167253f4e170 44187 err = MEMORY_E;
wolfSSL 14:167253f4e170 44188 #else
wolfSSL 14:167253f4e170 44189 t = td;
wolfSSL 14:167253f4e170 44190 tmp = tmpd;
wolfSSL 14:167253f4e170 44191 #endif
wolfSSL 14:167253f4e170 44192 negy = tmp;
wolfSSL 14:167253f4e170 44193
wolfSSL 14:167253f4e170 44194 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44195 sp_256_ecc_recode_sum_8_4(k, v);
wolfSSL 14:167253f4e170 44196
wolfSSL 14:167253f4e170 44197 XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 44198 XMEMSET(t, 0, sizeof(sp_point) * 4);
wolfSSL 14:167253f4e170 44199 for (i=0; i<4; i++) {
wolfSSL 14:167253f4e170 44200 XMEMCPY(t[i].z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 44201 t[i].infinity = 1;
wolfSSL 14:167253f4e170 44202 }
wolfSSL 14:167253f4e170 44203
wolfSSL 14:167253f4e170 44204 i = 32;
wolfSSL 14:167253f4e170 44205 XMEMCPY(t[v[i].mul].x, p256_table[i][v[i].i].x, sizeof(p256_table[i]->x));
wolfSSL 14:167253f4e170 44206 XMEMCPY(t[v[i].mul].y, p256_table[i][v[i].i].y, sizeof(p256_table[i]->y));
wolfSSL 14:167253f4e170 44207 t[v[i].mul].infinity = p256_table[i][v[i].i].infinity;
wolfSSL 14:167253f4e170 44208 for (--i; i>=0; i--) {
wolfSSL 14:167253f4e170 44209 XMEMCPY(p->x, p256_table[i][v[i].i].x, sizeof(p256_table[i]->x));
wolfSSL 14:167253f4e170 44210 XMEMCPY(p->y, p256_table[i][v[i].i].y, sizeof(p256_table[i]->y));
wolfSSL 14:167253f4e170 44211 p->infinity = p256_table[i][v[i].i].infinity;
wolfSSL 14:167253f4e170 44212 sp_256_sub_4(negy, p256_mod, p->y);
wolfSSL 14:167253f4e170 44213 sp_256_cond_copy_4(p->y, negy, (sp_digit)0 - v[i].neg);
wolfSSL 14:167253f4e170 44214 sp_256_proj_point_add_qz1_4(&t[v[i].mul], &t[v[i].mul], p, tmp);
wolfSSL 14:167253f4e170 44215 }
wolfSSL 14:167253f4e170 44216 sp_256_proj_point_add_4(&t[2], &t[2], &t[3], tmp);
wolfSSL 14:167253f4e170 44217 sp_256_proj_point_add_4(&t[1], &t[1], &t[3], tmp);
wolfSSL 14:167253f4e170 44218 sp_256_proj_point_dbl_4(&t[2], &t[2], tmp);
wolfSSL 14:167253f4e170 44219 sp_256_proj_point_add_4(&t[1], &t[1], &t[2], tmp);
wolfSSL 14:167253f4e170 44220
wolfSSL 14:167253f4e170 44221 if (map)
wolfSSL 14:167253f4e170 44222 sp_256_map_4(r, &t[1], tmp);
wolfSSL 14:167253f4e170 44223 else
wolfSSL 14:167253f4e170 44224 XMEMCPY(r, &t[1], sizeof(sp_point));
wolfSSL 14:167253f4e170 44225 }
wolfSSL 14:167253f4e170 44226
wolfSSL 14:167253f4e170 44227 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44228 if (t != NULL) {
wolfSSL 14:167253f4e170 44229 XMEMSET(t, 0, sizeof(sp_point) * 4);
wolfSSL 14:167253f4e170 44230 XFREE(t, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44231 }
wolfSSL 14:167253f4e170 44232 if (tmp != NULL) {
wolfSSL 14:167253f4e170 44233 XMEMSET(tmp, 0, sizeof(sp_digit) * 2 * 4 * 5);
wolfSSL 14:167253f4e170 44234 XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44235 }
wolfSSL 14:167253f4e170 44236 #else
wolfSSL 14:167253f4e170 44237 ForceZero(tmpd, sizeof(tmpd));
wolfSSL 14:167253f4e170 44238 ForceZero(td, sizeof(td));
wolfSSL 14:167253f4e170 44239 #endif
wolfSSL 14:167253f4e170 44240 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 44241
wolfSSL 14:167253f4e170 44242 return MP_OKAY;
wolfSSL 14:167253f4e170 44243 }
wolfSSL 14:167253f4e170 44244
wolfSSL 14:167253f4e170 44245 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44246 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 44247 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 44248 *
wolfSSL 14:167253f4e170 44249 * r Resulting point.
wolfSSL 14:167253f4e170 44250 * k Scalar to multiply by.
wolfSSL 14:167253f4e170 44251 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 44252 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 44253 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 44254 */
wolfSSL 14:167253f4e170 44255 static int sp_256_ecc_mulmod_base_avx2_4(sp_point* r, sp_digit* k, int map,
wolfSSL 14:167253f4e170 44256 void* heap)
wolfSSL 14:167253f4e170 44257 {
wolfSSL 14:167253f4e170 44258 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44259 sp_point td[4];
wolfSSL 14:167253f4e170 44260 sp_point pd;
wolfSSL 14:167253f4e170 44261 sp_digit tmpd[2 * 4 * 5];
wolfSSL 14:167253f4e170 44262 #endif
wolfSSL 14:167253f4e170 44263 sp_point* t;
wolfSSL 14:167253f4e170 44264 sp_point* p;
wolfSSL 14:167253f4e170 44265 sp_digit* tmp;
wolfSSL 14:167253f4e170 44266 sp_digit* negy;
wolfSSL 14:167253f4e170 44267 int i;
wolfSSL 14:167253f4e170 44268 ecc_recode_sum v[33];
wolfSSL 14:167253f4e170 44269 int err;
wolfSSL 14:167253f4e170 44270
wolfSSL 14:167253f4e170 44271 (void)heap;
wolfSSL 14:167253f4e170 44272
wolfSSL 14:167253f4e170 44273 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 44274 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44275 t = (sp_point*)XMALLOC(sizeof(sp_point) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44276 if (t == NULL)
wolfSSL 14:167253f4e170 44277 err = MEMORY_E;
wolfSSL 14:167253f4e170 44278 tmp = (sp_digit*)XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, heap,
wolfSSL 14:167253f4e170 44279 DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44280 if (tmp == NULL)
wolfSSL 14:167253f4e170 44281 err = MEMORY_E;
wolfSSL 14:167253f4e170 44282 #else
wolfSSL 14:167253f4e170 44283 t = td;
wolfSSL 14:167253f4e170 44284 tmp = tmpd;
wolfSSL 14:167253f4e170 44285 #endif
wolfSSL 14:167253f4e170 44286 negy = tmp;
wolfSSL 14:167253f4e170 44287
wolfSSL 14:167253f4e170 44288 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44289 sp_256_ecc_recode_sum_8_4(k, v);
wolfSSL 14:167253f4e170 44290
wolfSSL 14:167253f4e170 44291 XMEMCPY(p->z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 44292 XMEMSET(t, 0, sizeof(sp_point) * 4);
wolfSSL 14:167253f4e170 44293 for (i=0; i<4; i++) {
wolfSSL 14:167253f4e170 44294 XMEMCPY(t[i].z, p256_norm_mod, sizeof(p256_norm_mod));
wolfSSL 14:167253f4e170 44295 t[i].infinity = 1;
wolfSSL 14:167253f4e170 44296 }
wolfSSL 14:167253f4e170 44297
wolfSSL 14:167253f4e170 44298 i = 32;
wolfSSL 14:167253f4e170 44299 XMEMCPY(t[v[i].mul].x, p256_table[i][v[i].i].x, sizeof(p256_table[i]->x));
wolfSSL 14:167253f4e170 44300 XMEMCPY(t[v[i].mul].y, p256_table[i][v[i].i].y, sizeof(p256_table[i]->y));
wolfSSL 14:167253f4e170 44301 t[v[i].mul].infinity = p256_table[i][v[i].i].infinity;
wolfSSL 14:167253f4e170 44302 for (--i; i>=0; i--) {
wolfSSL 14:167253f4e170 44303 XMEMCPY(p->x, p256_table[i][v[i].i].x, sizeof(p256_table[i]->x));
wolfSSL 14:167253f4e170 44304 XMEMCPY(p->y, p256_table[i][v[i].i].y, sizeof(p256_table[i]->y));
wolfSSL 14:167253f4e170 44305 p->infinity = p256_table[i][v[i].i].infinity;
wolfSSL 14:167253f4e170 44306 sp_256_sub_4(negy, p256_mod, p->y);
wolfSSL 14:167253f4e170 44307 sp_256_cond_copy_4(p->y, negy, (sp_digit)0 - v[i].neg);
wolfSSL 14:167253f4e170 44308 sp_256_proj_point_add_qz1_avx2_4(&t[v[i].mul], &t[v[i].mul], p, tmp);
wolfSSL 14:167253f4e170 44309 }
wolfSSL 14:167253f4e170 44310 sp_256_proj_point_add_avx2_4(&t[2], &t[2], &t[3], tmp);
wolfSSL 14:167253f4e170 44311 sp_256_proj_point_add_avx2_4(&t[1], &t[1], &t[3], tmp);
wolfSSL 14:167253f4e170 44312 sp_256_proj_point_dbl_avx2_4(&t[2], &t[2], tmp);
wolfSSL 14:167253f4e170 44313 sp_256_proj_point_add_avx2_4(&t[1], &t[1], &t[2], tmp);
wolfSSL 14:167253f4e170 44314
wolfSSL 14:167253f4e170 44315 if (map)
wolfSSL 14:167253f4e170 44316 sp_256_map_avx2_4(r, &t[1], tmp);
wolfSSL 14:167253f4e170 44317 else
wolfSSL 14:167253f4e170 44318 XMEMCPY(r, &t[1], sizeof(sp_point));
wolfSSL 14:167253f4e170 44319 }
wolfSSL 14:167253f4e170 44320
wolfSSL 14:167253f4e170 44321 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44322 if (t != NULL) {
wolfSSL 14:167253f4e170 44323 XMEMSET(t, 0, sizeof(sp_point) * 4);
wolfSSL 14:167253f4e170 44324 XFREE(t, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44325 }
wolfSSL 14:167253f4e170 44326 if (tmp != NULL) {
wolfSSL 14:167253f4e170 44327 XMEMSET(tmp, 0, sizeof(sp_digit) * 2 * 4 * 5);
wolfSSL 14:167253f4e170 44328 XFREE(tmp, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44329 }
wolfSSL 14:167253f4e170 44330 #else
wolfSSL 14:167253f4e170 44331 ForceZero(tmpd, sizeof(tmpd));
wolfSSL 14:167253f4e170 44332 ForceZero(td, sizeof(td));
wolfSSL 14:167253f4e170 44333 #endif
wolfSSL 14:167253f4e170 44334 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 44335
wolfSSL 14:167253f4e170 44336 return MP_OKAY;
wolfSSL 14:167253f4e170 44337 }
wolfSSL 14:167253f4e170 44338
wolfSSL 14:167253f4e170 44339 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 44340 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 44341 /* Multiply the base point of P256 by the scalar and return the result.
wolfSSL 14:167253f4e170 44342 * If map is true then convert result to affine co-ordinates.
wolfSSL 14:167253f4e170 44343 *
wolfSSL 14:167253f4e170 44344 * km Scalar to multiply by.
wolfSSL 14:167253f4e170 44345 * r Resulting point.
wolfSSL 14:167253f4e170 44346 * map Indicates whether to convert result to affine.
wolfSSL 14:167253f4e170 44347 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 44348 * returns MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 44349 */
wolfSSL 14:167253f4e170 44350 int sp_ecc_mulmod_base_256(mp_int* km, ecc_point* r, int map, void* heap)
wolfSSL 14:167253f4e170 44351 {
wolfSSL 14:167253f4e170 44352 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44353 sp_point p;
wolfSSL 14:167253f4e170 44354 sp_digit kd[4];
wolfSSL 14:167253f4e170 44355 #endif
wolfSSL 14:167253f4e170 44356 sp_point* point;
wolfSSL 14:167253f4e170 44357 sp_digit* k = NULL;
wolfSSL 14:167253f4e170 44358 int err = MP_OKAY;
wolfSSL 14:167253f4e170 44359 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44360 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 44361 #endif
wolfSSL 14:167253f4e170 44362
wolfSSL 14:167253f4e170 44363 err = sp_ecc_point_new(heap, p, point);
wolfSSL 14:167253f4e170 44364 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44365 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44366 k = XMALLOC(sizeof(sp_digit) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44367 if (k == NULL)
wolfSSL 14:167253f4e170 44368 err = MEMORY_E;
wolfSSL 14:167253f4e170 44369 }
wolfSSL 14:167253f4e170 44370 #else
wolfSSL 14:167253f4e170 44371 k = kd;
wolfSSL 14:167253f4e170 44372 #endif
wolfSSL 14:167253f4e170 44373 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44374 sp_256_from_mp(k, 4, km);
wolfSSL 14:167253f4e170 44375
wolfSSL 14:167253f4e170 44376 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44377 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 44378 err = sp_256_ecc_mulmod_base_avx2_4(point, k, map, heap);
wolfSSL 14:167253f4e170 44379 else
wolfSSL 14:167253f4e170 44380 #endif
wolfSSL 14:167253f4e170 44381 err = sp_256_ecc_mulmod_base_4(point, k, map, heap);
wolfSSL 14:167253f4e170 44382 }
wolfSSL 14:167253f4e170 44383 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 44384 err = sp_256_point_to_ecc_point_4(point, r);
wolfSSL 14:167253f4e170 44385
wolfSSL 14:167253f4e170 44386 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44387 if (k != NULL)
wolfSSL 14:167253f4e170 44388 XFREE(k, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44389 #endif
wolfSSL 14:167253f4e170 44390 sp_ecc_point_free(point, 0, heap);
wolfSSL 14:167253f4e170 44391
wolfSSL 14:167253f4e170 44392 return err;
wolfSSL 14:167253f4e170 44393 }
wolfSSL 14:167253f4e170 44394
wolfSSL 14:167253f4e170 44395 #if defined(WOLFSSL_VALIDATE_ECC_KEYGEN) || defined(HAVE_ECC_SIGN)
wolfSSL 14:167253f4e170 44396 /* Returns 1 if the number of zero.
wolfSSL 14:167253f4e170 44397 * Implementation is constant time.
wolfSSL 14:167253f4e170 44398 *
wolfSSL 14:167253f4e170 44399 * a Number to check.
wolfSSL 14:167253f4e170 44400 * returns 1 if the number is zero and 0 otherwise.
wolfSSL 14:167253f4e170 44401 */
wolfSSL 14:167253f4e170 44402 static int sp_256_iszero_4(const sp_digit* a)
wolfSSL 14:167253f4e170 44403 {
wolfSSL 14:167253f4e170 44404 return (a[0] | a[1] | a[2] | a[3]) == 0;
wolfSSL 14:167253f4e170 44405 }
wolfSSL 14:167253f4e170 44406
wolfSSL 14:167253f4e170 44407 #endif /* WOLFSSL_VALIDATE_ECC_KEYGEN || HAVE_ECC_SIGN */
wolfSSL 14:167253f4e170 44408 /* Add 1 to a. (a = a + 1)
wolfSSL 14:167253f4e170 44409 *
wolfSSL 14:167253f4e170 44410 * r A single precision integer.
wolfSSL 14:167253f4e170 44411 * a A single precision integer.
wolfSSL 14:167253f4e170 44412 */
wolfSSL 14:167253f4e170 44413 static void sp_256_add_one_4(sp_digit* a)
wolfSSL 14:167253f4e170 44414 {
wolfSSL 14:167253f4e170 44415 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 44416 "addq $1, (%[a])\n\t"
wolfSSL 14:167253f4e170 44417 "adcq $0, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44418 "adcq $0, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 44419 "adcq $0, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 44420 :
wolfSSL 14:167253f4e170 44421 : [a] "r" (a)
wolfSSL 14:167253f4e170 44422 : "memory"
wolfSSL 14:167253f4e170 44423 );
wolfSSL 14:167253f4e170 44424 }
wolfSSL 14:167253f4e170 44425
wolfSSL 14:167253f4e170 44426 /* Read big endian unsigned byte aray into r.
wolfSSL 14:167253f4e170 44427 *
wolfSSL 14:167253f4e170 44428 * r A single precision integer.
wolfSSL 14:167253f4e170 44429 * a Byte array.
wolfSSL 14:167253f4e170 44430 * n Number of bytes in array to read.
wolfSSL 14:167253f4e170 44431 */
wolfSSL 14:167253f4e170 44432 static void sp_256_from_bin(sp_digit* r, int max, const byte* a, int n)
wolfSSL 14:167253f4e170 44433 {
wolfSSL 14:167253f4e170 44434 int i, j = 0, s = 0;
wolfSSL 14:167253f4e170 44435
wolfSSL 14:167253f4e170 44436 r[0] = 0;
wolfSSL 14:167253f4e170 44437 for (i = n-1; i >= 0; i--) {
wolfSSL 14:167253f4e170 44438 r[j] |= ((sp_digit)a[i]) << s;
wolfSSL 14:167253f4e170 44439 if (s >= 56) {
wolfSSL 14:167253f4e170 44440 r[j] &= 0xffffffffffffffffl;
wolfSSL 14:167253f4e170 44441 s = 64 - s;
wolfSSL 14:167253f4e170 44442 if (j + 1 >= max)
wolfSSL 14:167253f4e170 44443 break;
wolfSSL 14:167253f4e170 44444 r[++j] = a[i] >> s;
wolfSSL 14:167253f4e170 44445 s = 8 - s;
wolfSSL 14:167253f4e170 44446 }
wolfSSL 14:167253f4e170 44447 else
wolfSSL 14:167253f4e170 44448 s += 8;
wolfSSL 14:167253f4e170 44449 }
wolfSSL 14:167253f4e170 44450
wolfSSL 14:167253f4e170 44451 for (j++; j < max; j++)
wolfSSL 14:167253f4e170 44452 r[j] = 0;
wolfSSL 14:167253f4e170 44453 }
wolfSSL 14:167253f4e170 44454
wolfSSL 14:167253f4e170 44455 /* Generates a scalar that is in the range 1..order-1.
wolfSSL 14:167253f4e170 44456 *
wolfSSL 14:167253f4e170 44457 * rng Random number generator.
wolfSSL 14:167253f4e170 44458 * k Scalar value.
wolfSSL 14:167253f4e170 44459 * returns RNG failures, MEMORY_E when memory allocation fails and
wolfSSL 14:167253f4e170 44460 * MP_OKAY on success.
wolfSSL 14:167253f4e170 44461 */
wolfSSL 14:167253f4e170 44462 static int sp_256_ecc_gen_k_4(WC_RNG* rng, sp_digit* k)
wolfSSL 14:167253f4e170 44463 {
wolfSSL 14:167253f4e170 44464 int err;
wolfSSL 14:167253f4e170 44465 byte buf[32];
wolfSSL 14:167253f4e170 44466
wolfSSL 14:167253f4e170 44467 do {
wolfSSL 14:167253f4e170 44468 err = wc_RNG_GenerateBlock(rng, buf, sizeof(buf));
wolfSSL 14:167253f4e170 44469 if (err == 0) {
wolfSSL 14:167253f4e170 44470 sp_256_from_bin(k, 4, buf, sizeof(buf));
wolfSSL 14:167253f4e170 44471 if (sp_256_cmp_4(k, p256_order2) < 0) {
wolfSSL 14:167253f4e170 44472 sp_256_add_one_4(k);
wolfSSL 14:167253f4e170 44473 break;
wolfSSL 14:167253f4e170 44474 }
wolfSSL 14:167253f4e170 44475 }
wolfSSL 14:167253f4e170 44476 }
wolfSSL 14:167253f4e170 44477 while (err == 0);
wolfSSL 14:167253f4e170 44478
wolfSSL 14:167253f4e170 44479 return err;
wolfSSL 14:167253f4e170 44480 }
wolfSSL 14:167253f4e170 44481
wolfSSL 14:167253f4e170 44482 /* Makes a random EC key pair.
wolfSSL 14:167253f4e170 44483 *
wolfSSL 14:167253f4e170 44484 * rng Random number generator.
wolfSSL 14:167253f4e170 44485 * priv Generated private value.
wolfSSL 14:167253f4e170 44486 * pub Generated public point.
wolfSSL 14:167253f4e170 44487 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 44488 * returns ECC_INF_E when the point does not have the correct order, RNG
wolfSSL 14:167253f4e170 44489 * failures, MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 44490 */
wolfSSL 14:167253f4e170 44491 int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap)
wolfSSL 14:167253f4e170 44492 {
wolfSSL 14:167253f4e170 44493 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44494 sp_point p;
wolfSSL 14:167253f4e170 44495 sp_digit kd[4];
wolfSSL 14:167253f4e170 44496 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
wolfSSL 14:167253f4e170 44497 sp_point inf;
wolfSSL 14:167253f4e170 44498 #endif
wolfSSL 14:167253f4e170 44499 #endif
wolfSSL 14:167253f4e170 44500 sp_point* point;
wolfSSL 14:167253f4e170 44501 sp_digit* k = NULL;
wolfSSL 14:167253f4e170 44502 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
wolfSSL 14:167253f4e170 44503 sp_point* infinity;
wolfSSL 14:167253f4e170 44504 #endif
wolfSSL 14:167253f4e170 44505 int err;
wolfSSL 14:167253f4e170 44506 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44507 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 44508 #endif
wolfSSL 14:167253f4e170 44509
wolfSSL 14:167253f4e170 44510 (void)heap;
wolfSSL 14:167253f4e170 44511
wolfSSL 14:167253f4e170 44512 err = sp_ecc_point_new(heap, p, point);
wolfSSL 14:167253f4e170 44513 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
wolfSSL 14:167253f4e170 44514 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 44515 err = sp_ecc_point_new(heap, inf, infinity);
wolfSSL 14:167253f4e170 44516 #endif
wolfSSL 14:167253f4e170 44517 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44518 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44519 k = XMALLOC(sizeof(sp_digit) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44520 if (k == NULL)
wolfSSL 14:167253f4e170 44521 err = MEMORY_E;
wolfSSL 14:167253f4e170 44522 }
wolfSSL 14:167253f4e170 44523 #else
wolfSSL 14:167253f4e170 44524 k = kd;
wolfSSL 14:167253f4e170 44525 #endif
wolfSSL 14:167253f4e170 44526
wolfSSL 14:167253f4e170 44527 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 44528 err = sp_256_ecc_gen_k_4(rng, k);
wolfSSL 14:167253f4e170 44529 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44530 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44531 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 44532 err = sp_256_ecc_mulmod_base_avx2_4(point, k, 1, NULL);
wolfSSL 14:167253f4e170 44533 else
wolfSSL 14:167253f4e170 44534 #endif
wolfSSL 14:167253f4e170 44535 err = sp_256_ecc_mulmod_base_4(point, k, 1, NULL);
wolfSSL 14:167253f4e170 44536 }
wolfSSL 14:167253f4e170 44537
wolfSSL 14:167253f4e170 44538 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
wolfSSL 14:167253f4e170 44539 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44540 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44541 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 44542 err = sp_256_ecc_mulmod_avx2_4(infinity, point, p256_order, 1,
wolfSSL 14:167253f4e170 44543 NULL);
wolfSSL 14:167253f4e170 44544 }
wolfSSL 14:167253f4e170 44545 else
wolfSSL 14:167253f4e170 44546 #endif
wolfSSL 14:167253f4e170 44547 err = sp_256_ecc_mulmod_4(infinity, point, p256_order, 1, NULL);
wolfSSL 14:167253f4e170 44548 }
wolfSSL 14:167253f4e170 44549 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44550 if (!sp_256_iszero_4(point->x) || !sp_256_iszero_4(point->y))
wolfSSL 14:167253f4e170 44551 err = ECC_INF_E;
wolfSSL 14:167253f4e170 44552 }
wolfSSL 14:167253f4e170 44553 #endif
wolfSSL 14:167253f4e170 44554
wolfSSL 14:167253f4e170 44555 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 44556 err = sp_256_to_mp(k, priv);
wolfSSL 14:167253f4e170 44557 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 44558 err = sp_256_point_to_ecc_point_4(point, pub);
wolfSSL 14:167253f4e170 44559
wolfSSL 14:167253f4e170 44560 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44561 if (k != NULL)
wolfSSL 14:167253f4e170 44562 XFREE(k, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44563 #endif
wolfSSL 14:167253f4e170 44564 #ifdef WOLFSSL_VALIDATE_ECC_KEYGEN
wolfSSL 14:167253f4e170 44565 sp_ecc_point_free(infinity, 1, heap);
wolfSSL 14:167253f4e170 44566 #endif
wolfSSL 14:167253f4e170 44567 sp_ecc_point_free(point, 1, heap);
wolfSSL 14:167253f4e170 44568
wolfSSL 14:167253f4e170 44569 return err;
wolfSSL 14:167253f4e170 44570 }
wolfSSL 14:167253f4e170 44571
wolfSSL 14:167253f4e170 44572 #ifdef HAVE_ECC_DHE
wolfSSL 14:167253f4e170 44573 /* Write r as big endian to byte aray.
wolfSSL 14:167253f4e170 44574 * Fixed length number of bytes written: 32
wolfSSL 14:167253f4e170 44575 *
wolfSSL 14:167253f4e170 44576 * r A single precision integer.
wolfSSL 14:167253f4e170 44577 * a Byte array.
wolfSSL 14:167253f4e170 44578 */
wolfSSL 14:167253f4e170 44579 static void sp_256_to_bin(sp_digit* r, byte* a)
wolfSSL 14:167253f4e170 44580 {
wolfSSL 14:167253f4e170 44581 int i, j, s = 0, b;
wolfSSL 14:167253f4e170 44582
wolfSSL 14:167253f4e170 44583 j = 256 / 8 - 1;
wolfSSL 14:167253f4e170 44584 a[j] = 0;
wolfSSL 14:167253f4e170 44585 for (i=0; i<4 && j>=0; i++) {
wolfSSL 14:167253f4e170 44586 b = 0;
wolfSSL 14:167253f4e170 44587 a[j--] |= r[i] << s; b += 8 - s;
wolfSSL 14:167253f4e170 44588 if (j < 0)
wolfSSL 14:167253f4e170 44589 break;
wolfSSL 14:167253f4e170 44590 while (b < 64) {
wolfSSL 14:167253f4e170 44591 a[j--] = r[i] >> b; b += 8;
wolfSSL 14:167253f4e170 44592 if (j < 0)
wolfSSL 14:167253f4e170 44593 break;
wolfSSL 14:167253f4e170 44594 }
wolfSSL 14:167253f4e170 44595 s = 8 - (b - 64);
wolfSSL 14:167253f4e170 44596 if (j >= 0)
wolfSSL 14:167253f4e170 44597 a[j] = 0;
wolfSSL 14:167253f4e170 44598 if (s != 0)
wolfSSL 14:167253f4e170 44599 j++;
wolfSSL 14:167253f4e170 44600 }
wolfSSL 14:167253f4e170 44601 }
wolfSSL 14:167253f4e170 44602
wolfSSL 14:167253f4e170 44603 /* Multiply the point by the scalar and serialize the X ordinate.
wolfSSL 14:167253f4e170 44604 * The number is 0 padded to maximum size on output.
wolfSSL 14:167253f4e170 44605 *
wolfSSL 14:167253f4e170 44606 * priv Scalar to multiply the point by.
wolfSSL 14:167253f4e170 44607 * pub Point to multiply.
wolfSSL 14:167253f4e170 44608 * out Buffer to hold X ordinate.
wolfSSL 14:167253f4e170 44609 * outLen On entry, size of the buffer in bytes.
wolfSSL 14:167253f4e170 44610 * On exit, length of data in buffer in bytes.
wolfSSL 14:167253f4e170 44611 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 44612 * returns BUFFER_E if the buffer is to small for output size,
wolfSSL 14:167253f4e170 44613 * MEMORY_E when memory allocation fails and MP_OKAY on success.
wolfSSL 14:167253f4e170 44614 */
wolfSSL 14:167253f4e170 44615 int sp_ecc_secret_gen_256(mp_int* priv, ecc_point* pub, byte* out,
wolfSSL 14:167253f4e170 44616 word32* outLen, void* heap)
wolfSSL 14:167253f4e170 44617 {
wolfSSL 14:167253f4e170 44618 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44619 sp_point p;
wolfSSL 14:167253f4e170 44620 sp_digit kd[4];
wolfSSL 14:167253f4e170 44621 #endif
wolfSSL 14:167253f4e170 44622 sp_point* point = NULL;
wolfSSL 14:167253f4e170 44623 sp_digit* k = NULL;
wolfSSL 14:167253f4e170 44624 int err = MP_OKAY;
wolfSSL 14:167253f4e170 44625 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44626 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 44627 #endif
wolfSSL 14:167253f4e170 44628
wolfSSL 14:167253f4e170 44629 if (*outLen < 32)
wolfSSL 14:167253f4e170 44630 err = BUFFER_E;
wolfSSL 14:167253f4e170 44631
wolfSSL 14:167253f4e170 44632 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 44633 err = sp_ecc_point_new(heap, p, point);
wolfSSL 14:167253f4e170 44634 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44635 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44636 k = XMALLOC(sizeof(sp_digit) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44637 if (k == NULL)
wolfSSL 14:167253f4e170 44638 err = MEMORY_E;
wolfSSL 14:167253f4e170 44639 }
wolfSSL 14:167253f4e170 44640 #else
wolfSSL 14:167253f4e170 44641 k = kd;
wolfSSL 14:167253f4e170 44642 #endif
wolfSSL 14:167253f4e170 44643
wolfSSL 14:167253f4e170 44644 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44645 sp_256_from_mp(k, 4, priv);
wolfSSL 14:167253f4e170 44646 sp_256_point_from_ecc_point_4(point, pub);
wolfSSL 14:167253f4e170 44647 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44648 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 44649 err = sp_256_ecc_mulmod_avx2_4(point, point, k, 1, heap);
wolfSSL 14:167253f4e170 44650 else
wolfSSL 14:167253f4e170 44651 #endif
wolfSSL 14:167253f4e170 44652 err = sp_256_ecc_mulmod_4(point, point, k, 1, heap);
wolfSSL 14:167253f4e170 44653 }
wolfSSL 14:167253f4e170 44654 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 44655 sp_256_to_bin(point->x, out);
wolfSSL 14:167253f4e170 44656 *outLen = 32;
wolfSSL 14:167253f4e170 44657 }
wolfSSL 14:167253f4e170 44658
wolfSSL 14:167253f4e170 44659 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 44660 if (k != NULL)
wolfSSL 14:167253f4e170 44661 XFREE(k, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 44662 #endif
wolfSSL 14:167253f4e170 44663 sp_ecc_point_free(point, 0, heap);
wolfSSL 14:167253f4e170 44664
wolfSSL 14:167253f4e170 44665 return err;
wolfSSL 14:167253f4e170 44666 }
wolfSSL 14:167253f4e170 44667 #endif /* HAVE_ECC_DHE */
wolfSSL 14:167253f4e170 44668
wolfSSL 14:167253f4e170 44669 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 44670 /* Add b to a into r. (r = a + b)
wolfSSL 14:167253f4e170 44671 *
wolfSSL 14:167253f4e170 44672 * r A single precision integer.
wolfSSL 14:167253f4e170 44673 * a A single precision integer.
wolfSSL 14:167253f4e170 44674 * b A single precision integer.
wolfSSL 14:167253f4e170 44675 */
wolfSSL 14:167253f4e170 44676 SP_NOINLINE static sp_digit sp_256_add_4(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 44677 const sp_digit* b)
wolfSSL 14:167253f4e170 44678 {
wolfSSL 14:167253f4e170 44679 sp_digit c = 0;
wolfSSL 14:167253f4e170 44680
wolfSSL 14:167253f4e170 44681 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 44682 "movq (%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 44683 "addq (%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44684 "movq %%rax, (%[r])\n\t"
wolfSSL 14:167253f4e170 44685 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 44686 "adcq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44687 "movq %%rax, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 44688 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 44689 "adcq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44690 "movq %%rax, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 44691 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 44692 "adcq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44693 "movq %%rax, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 44694 "adcq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 44695 : [c] "+r" (c)
wolfSSL 14:167253f4e170 44696 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 44697 : "memory", "rax"
wolfSSL 14:167253f4e170 44698 );
wolfSSL 14:167253f4e170 44699
wolfSSL 14:167253f4e170 44700 return c;
wolfSSL 14:167253f4e170 44701 }
wolfSSL 14:167253f4e170 44702
wolfSSL 14:167253f4e170 44703 #endif
wolfSSL 14:167253f4e170 44704 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 44705 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 44706 *
wolfSSL 14:167253f4e170 44707 * r A single precision integer.
wolfSSL 14:167253f4e170 44708 * a A single precision integer.
wolfSSL 14:167253f4e170 44709 * b A single precision integer.
wolfSSL 14:167253f4e170 44710 */
wolfSSL 14:167253f4e170 44711 SP_NOINLINE static void sp_256_mul_4(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 44712 const sp_digit* b)
wolfSSL 14:167253f4e170 44713 {
wolfSSL 14:167253f4e170 44714 sp_digit tmp[4];
wolfSSL 14:167253f4e170 44715
wolfSSL 14:167253f4e170 44716 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 44717 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 44718 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44719 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 44720 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 44721 "movq %%rax, (%[tmp])\n\t"
wolfSSL 14:167253f4e170 44722 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44723 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 44724 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44725 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 44726 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44727 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44728 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44729 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 44730 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 44731 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44732 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44733 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44734 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44735 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 44736 "movq %%rcx, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 44737 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 44738 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44739 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 44740 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44741 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 44742 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44743 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 44744 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 44745 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44746 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44747 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 44748 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44749 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 44750 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 44751 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44752 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 44753 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 44754 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44755 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 44756 "movq %%r8, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 44757 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 44758 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44759 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 44760 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 44761 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 44762 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44763 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 44764 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 44765 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44766 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44767 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 44768 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44769 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 44770 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 44771 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44772 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 44773 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 44774 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44775 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 44776 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 44777 "movq 0(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44778 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 44779 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 44780 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44781 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 44782 "movq %%rbx, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 44783 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 44784 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44785 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44786 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44787 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44788 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44789 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 44790 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 44791 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44792 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 44793 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44794 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44795 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 44796 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 44797 "movq 8(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44798 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 44799 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44800 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44801 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 44802 "movq %%rcx, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 44803 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 44804 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44805 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 44806 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44807 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 44808 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44809 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 44810 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 44811 "movq 16(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44812 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 44813 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 44814 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44815 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 44816 "movq %%r8, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 44817 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 44818 "movq 24(%[b]), %%rax\n\t"
wolfSSL 14:167253f4e170 44819 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 44820 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 44821 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44822 "movq %%rbx, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 44823 "movq %%rcx, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 44824 :
wolfSSL 14:167253f4e170 44825 : [r] "r" (r), [a] "r" (a), [b] "r" (b), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 44826 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 44827 );
wolfSSL 14:167253f4e170 44828
wolfSSL 14:167253f4e170 44829 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 44830 }
wolfSSL 14:167253f4e170 44831
wolfSSL 14:167253f4e170 44832 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 44833 /* Multiply a and b into r. (r = a * b)
wolfSSL 14:167253f4e170 44834 *
wolfSSL 14:167253f4e170 44835 * r Result of multiplication.
wolfSSL 14:167253f4e170 44836 * a First number to multiply.
wolfSSL 14:167253f4e170 44837 * b Second number to multiply.
wolfSSL 14:167253f4e170 44838 */
wolfSSL 14:167253f4e170 44839 SP_NOINLINE static void sp_256_mul_avx2_4(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 44840 const sp_digit* b)
wolfSSL 14:167253f4e170 44841 {
wolfSSL 14:167253f4e170 44842 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 44843 "# A[0] * B[0]\n\t"
wolfSSL 14:167253f4e170 44844 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44845 "mulxq 0(%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 44846 "# A[2] * B[0]\n\t"
wolfSSL 14:167253f4e170 44847 "mulxq 16(%[a]), %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 44848 "# A[1] * B[0]\n\t"
wolfSSL 14:167253f4e170 44849 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44850 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 44851 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 44852 "# A[1] * B[3]\n\t"
wolfSSL 14:167253f4e170 44853 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44854 "mulxq 8(%[a]), %%r12, %%r13\n\t"
wolfSSL 14:167253f4e170 44855 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 44856 "# A[0] * B[1]\n\t"
wolfSSL 14:167253f4e170 44857 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44858 "mulxq 0(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44859 "adoxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 44860 "# A[2] * B[1]\n\t"
wolfSSL 14:167253f4e170 44861 "mulxq 16(%[a]), %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 44862 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 44863 "adcxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 44864 "# A[1] * B[2]\n\t"
wolfSSL 14:167253f4e170 44865 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44866 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44867 "adcxq %%r14, %%r12\n\t"
wolfSSL 14:167253f4e170 44868 "adoxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 44869 "adcxq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 44870 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 44871 "# A[0] * B[2]\n\t"
wolfSSL 14:167253f4e170 44872 "mulxq 0(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44873 "adoxq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 44874 "xorq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 44875 "adcxq %%rax, %%r10\n\t"
wolfSSL 14:167253f4e170 44876 "# A[1] * B[1]\n\t"
wolfSSL 14:167253f4e170 44877 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44878 "mulxq 8(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 44879 "adcxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 44880 "adoxq %%rdx, %%r10\n\t"
wolfSSL 14:167253f4e170 44881 "# A[3] * B[1]\n\t"
wolfSSL 14:167253f4e170 44882 "movq 8(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44883 "adoxq %%rax, %%r11\n\t"
wolfSSL 14:167253f4e170 44884 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44885 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 44886 "# A[2] * B[2]\n\t"
wolfSSL 14:167253f4e170 44887 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44888 "mulxq 16(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 44889 "adcxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 44890 "adoxq %%rdx, %%r12\n\t"
wolfSSL 14:167253f4e170 44891 "# A[3] * B[3]\n\t"
wolfSSL 14:167253f4e170 44892 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44893 "adoxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 44894 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44895 "adoxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 44896 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 44897 "# A[0] * B[3]\n\t"
wolfSSL 14:167253f4e170 44898 "mulxq 0(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 44899 "adcxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 44900 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44901 "adcxq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 44902 "# A[3] * B[0]\n\t"
wolfSSL 14:167253f4e170 44903 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44904 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 44905 "mulxq 24(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 44906 "adoxq %%rdx, %%r11\n\t"
wolfSSL 14:167253f4e170 44907 "adoxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 44908 "# A[2] * B[3]\n\t"
wolfSSL 14:167253f4e170 44909 "movq 24(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44910 "mulxq 16(%[a]), %%rdx, %%rax\n\t"
wolfSSL 14:167253f4e170 44911 "adcxq %%rdx, %%r13\n\t"
wolfSSL 14:167253f4e170 44912 "# A[3] * B[2]\n\t"
wolfSSL 14:167253f4e170 44913 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44914 "adcxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 44915 "mulxq 24(%[a]), %%rax, %%rdx\n\t"
wolfSSL 14:167253f4e170 44916 "adcxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 44917 "adoxq %%rax, %%r13\n\t"
wolfSSL 14:167253f4e170 44918 "adoxq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 44919 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 44920 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 44921 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 44922 "movq %%r10, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 44923 "movq %%r11, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 44924 "movq %%r12, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 44925 "movq %%r13, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 44926 "movq %%r14, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 44927 "movq %%r15, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 44928 :
wolfSSL 14:167253f4e170 44929 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 44930 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 44931 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 44932 );
wolfSSL 14:167253f4e170 44933 }
wolfSSL 14:167253f4e170 44934
wolfSSL 14:167253f4e170 44935 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 44936 #endif
wolfSSL 14:167253f4e170 44937 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 44938 /* Sub b from a into a. (a -= b)
wolfSSL 14:167253f4e170 44939 *
wolfSSL 14:167253f4e170 44940 * a A single precision integer and result.
wolfSSL 14:167253f4e170 44941 * b A single precision integer.
wolfSSL 14:167253f4e170 44942 */
wolfSSL 14:167253f4e170 44943 SP_NOINLINE static sp_digit sp_256_sub_in_place_4(sp_digit* a,
wolfSSL 14:167253f4e170 44944 const sp_digit* b)
wolfSSL 14:167253f4e170 44945 {
wolfSSL 14:167253f4e170 44946 sp_digit c = 0;
wolfSSL 14:167253f4e170 44947
wolfSSL 14:167253f4e170 44948 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 44949 "movq 0(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 44950 "movq 8(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 44951 "movq 0(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44952 "movq 8(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 44953 "subq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44954 "movq 16(%[b]), %%rdx\n\t"
wolfSSL 14:167253f4e170 44955 "movq %%r8, 0(%[a])\n\t"
wolfSSL 14:167253f4e170 44956 "movq 16(%[a]), %%r8\n\t"
wolfSSL 14:167253f4e170 44957 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 44958 "movq 24(%[b]), %%rcx\n\t"
wolfSSL 14:167253f4e170 44959 "movq %%r9, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44960 "movq 24(%[a]), %%r9\n\t"
wolfSSL 14:167253f4e170 44961 "sbbq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44962 "movq %%r8, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 44963 "sbbq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 44964 "movq %%r9, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 44965 "sbbq $0, %[c]\n\t"
wolfSSL 14:167253f4e170 44966 : [c] "+r" (c)
wolfSSL 14:167253f4e170 44967 : [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 44968 : "memory", "rdx", "rcx", "r8", "r9"
wolfSSL 14:167253f4e170 44969 );
wolfSSL 14:167253f4e170 44970
wolfSSL 14:167253f4e170 44971 return c;
wolfSSL 14:167253f4e170 44972 }
wolfSSL 14:167253f4e170 44973
wolfSSL 14:167253f4e170 44974 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 44975 *
wolfSSL 14:167253f4e170 44976 * r A single precision integer.
wolfSSL 14:167253f4e170 44977 * a A single precision integer.
wolfSSL 14:167253f4e170 44978 * b A single precision digit.
wolfSSL 14:167253f4e170 44979 */
wolfSSL 14:167253f4e170 44980 SP_NOINLINE static void sp_256_mul_d_4(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 44981 const sp_digit b)
wolfSSL 14:167253f4e170 44982 {
wolfSSL 14:167253f4e170 44983 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 44984 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 44985 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 44986 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 44987 "mulq (%[a])\n\t"
wolfSSL 14:167253f4e170 44988 "movq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 44989 "movq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 44990 "movq %%rbx, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 44991 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 44992 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 44993 "xorq %%rbx, %%rbx\n\t"
wolfSSL 14:167253f4e170 44994 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 44995 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 44996 "movq %%rcx, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 44997 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 44998 "adcq $0, %%rbx\n\t"
wolfSSL 14:167253f4e170 44999 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 45000 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 45001 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45002 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 45003 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45004 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 45005 "adcq %%rdx, %%rbx\n\t"
wolfSSL 14:167253f4e170 45006 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 45007 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 45008 "movq %[b], %%rax\n\t"
wolfSSL 14:167253f4e170 45009 "mulq 24(%[a])\n\t"
wolfSSL 14:167253f4e170 45010 "addq %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 45011 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45012 "movq %%rbx, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 45013 "movq %%rcx, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 45014 :
wolfSSL 14:167253f4e170 45015 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 45016 : "memory", "rax", "rdx", "rbx", "rcx", "r8"
wolfSSL 14:167253f4e170 45017 );
wolfSSL 14:167253f4e170 45018 }
wolfSSL 14:167253f4e170 45019
wolfSSL 14:167253f4e170 45020 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45021 /* Mul a by digit b into r. (r = a * b)
wolfSSL 14:167253f4e170 45022 *
wolfSSL 14:167253f4e170 45023 * r A single precision integer.
wolfSSL 14:167253f4e170 45024 * a A single precision integer.
wolfSSL 14:167253f4e170 45025 * b A single precision digit.
wolfSSL 14:167253f4e170 45026 */
wolfSSL 14:167253f4e170 45027 SP_NOINLINE static void sp_256_mul_d_avx2_4(sp_digit* r, const sp_digit* a,
wolfSSL 14:167253f4e170 45028 const sp_digit b)
wolfSSL 14:167253f4e170 45029 {
wolfSSL 14:167253f4e170 45030 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 45031 "# A[0] * B\n\t"
wolfSSL 14:167253f4e170 45032 "movq %[b], %%rdx\n\t"
wolfSSL 14:167253f4e170 45033 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 45034 "mulxq (%[a]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45035 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 45036 "# A[1] * B\n\t"
wolfSSL 14:167253f4e170 45037 "mulxq 8(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45038 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 45039 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45040 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 45041 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 45042 "# A[2] * B\n\t"
wolfSSL 14:167253f4e170 45043 "mulxq 16(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45044 "movq %%r10, %%r9\n\t"
wolfSSL 14:167253f4e170 45045 "adcxq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45046 "movq %%r8, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 45047 "adoxq %%rcx, %%r9\n\t"
wolfSSL 14:167253f4e170 45048 "# A[3] * B\n\t"
wolfSSL 14:167253f4e170 45049 "mulxq 24(%[a]), %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45050 "movq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 45051 "adcxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45052 "adoxq %%rcx, %%r8\n\t"
wolfSSL 14:167253f4e170 45053 "adcxq %%r10, %%r8\n\t"
wolfSSL 14:167253f4e170 45054 "movq %%r9, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 45055 "movq %%r8, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 45056 :
wolfSSL 14:167253f4e170 45057 : [r] "r" (r), [a] "r" (a), [b] "r" (b)
wolfSSL 14:167253f4e170 45058 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10"
wolfSSL 14:167253f4e170 45059 );
wolfSSL 14:167253f4e170 45060 }
wolfSSL 14:167253f4e170 45061 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 45062
wolfSSL 14:167253f4e170 45063 /* Divide the double width number (d1|d0) by the dividend. (d1|d0 / div)
wolfSSL 14:167253f4e170 45064 *
wolfSSL 14:167253f4e170 45065 * d1 The high order half of the number to divide.
wolfSSL 14:167253f4e170 45066 * d0 The low order half of the number to divide.
wolfSSL 14:167253f4e170 45067 * div The dividend.
wolfSSL 14:167253f4e170 45068 * returns the result of the division.
wolfSSL 14:167253f4e170 45069 */
wolfSSL 14:167253f4e170 45070 static sp_digit div_256_word_4(sp_digit d1, sp_digit d0, sp_digit div)
wolfSSL 14:167253f4e170 45071 {
wolfSSL 14:167253f4e170 45072 sp_digit r;
wolfSSL 14:167253f4e170 45073
wolfSSL 14:167253f4e170 45074 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 45075 "movq %[d0], %%rax\n\t"
wolfSSL 14:167253f4e170 45076 "movq %[d1], %%rdx\n\t"
wolfSSL 14:167253f4e170 45077 "divq %[div]\n\t"
wolfSSL 14:167253f4e170 45078 "movq %%rax, %[r]\n\t"
wolfSSL 14:167253f4e170 45079 : [r] "=r" (r)
wolfSSL 14:167253f4e170 45080 : [d1] "r" (d1), [d0] "r" (d0), [div] "r" (div)
wolfSSL 14:167253f4e170 45081 : "rax", "rdx"
wolfSSL 14:167253f4e170 45082 );
wolfSSL 14:167253f4e170 45083
wolfSSL 14:167253f4e170 45084 return r;
wolfSSL 14:167253f4e170 45085 }
wolfSSL 14:167253f4e170 45086
wolfSSL 14:167253f4e170 45087 /* AND m into each word of a and store in r.
wolfSSL 14:167253f4e170 45088 *
wolfSSL 14:167253f4e170 45089 * r A single precision integer.
wolfSSL 14:167253f4e170 45090 * a A single precision integer.
wolfSSL 14:167253f4e170 45091 * m Mask to AND against each digit.
wolfSSL 14:167253f4e170 45092 */
wolfSSL 14:167253f4e170 45093 static void sp_256_mask_4(sp_digit* r, sp_digit* a, sp_digit m)
wolfSSL 14:167253f4e170 45094 {
wolfSSL 14:167253f4e170 45095 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45096 int i;
wolfSSL 14:167253f4e170 45097
wolfSSL 14:167253f4e170 45098 for (i=0; i<4; i++)
wolfSSL 14:167253f4e170 45099 r[i] = a[i] & m;
wolfSSL 14:167253f4e170 45100 #else
wolfSSL 14:167253f4e170 45101 r[0] = a[0] & m;
wolfSSL 14:167253f4e170 45102 r[1] = a[1] & m;
wolfSSL 14:167253f4e170 45103 r[2] = a[2] & m;
wolfSSL 14:167253f4e170 45104 r[3] = a[3] & m;
wolfSSL 14:167253f4e170 45105 #endif
wolfSSL 14:167253f4e170 45106 }
wolfSSL 14:167253f4e170 45107
wolfSSL 14:167253f4e170 45108 /* Divide d in a and put remainder into r (m*d + r = a)
wolfSSL 14:167253f4e170 45109 * m is not calculated as it is not needed at this time.
wolfSSL 14:167253f4e170 45110 *
wolfSSL 14:167253f4e170 45111 * a Nmber to be divided.
wolfSSL 14:167253f4e170 45112 * d Number to divide with.
wolfSSL 14:167253f4e170 45113 * m Multiplier result.
wolfSSL 14:167253f4e170 45114 * r Remainder from the division.
wolfSSL 14:167253f4e170 45115 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 45116 */
wolfSSL 14:167253f4e170 45117 static WC_INLINE int sp_256_div_4(sp_digit* a, sp_digit* d, sp_digit* m,
wolfSSL 14:167253f4e170 45118 sp_digit* r)
wolfSSL 14:167253f4e170 45119 {
wolfSSL 14:167253f4e170 45120 sp_digit t1[8], t2[5];
wolfSSL 14:167253f4e170 45121 sp_digit div, r1;
wolfSSL 14:167253f4e170 45122 int i;
wolfSSL 14:167253f4e170 45123 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45124 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 45125 #endif
wolfSSL 14:167253f4e170 45126
wolfSSL 14:167253f4e170 45127 (void)m;
wolfSSL 14:167253f4e170 45128
wolfSSL 14:167253f4e170 45129 div = d[3];
wolfSSL 14:167253f4e170 45130 XMEMCPY(t1, a, sizeof(*t1) * 2 * 4);
wolfSSL 14:167253f4e170 45131 for (i=3; i>=0; i--) {
wolfSSL 14:167253f4e170 45132 r1 = div_256_word_4(t1[4 + i], t1[4 + i - 1], div);
wolfSSL 14:167253f4e170 45133
wolfSSL 14:167253f4e170 45134 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45135 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 45136 sp_256_mul_d_avx2_4(t2, d, r1);
wolfSSL 14:167253f4e170 45137 else
wolfSSL 14:167253f4e170 45138 #endif
wolfSSL 14:167253f4e170 45139 sp_256_mul_d_4(t2, d, r1);
wolfSSL 14:167253f4e170 45140 t1[4 + i] += sp_256_sub_in_place_4(&t1[i], t2);
wolfSSL 14:167253f4e170 45141 t1[4 + i] -= t2[4];
wolfSSL 14:167253f4e170 45142 sp_256_mask_4(t2, d, t1[4 + i]);
wolfSSL 14:167253f4e170 45143 t1[4 + i] += sp_256_add_4(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 45144 sp_256_mask_4(t2, d, t1[4 + i]);
wolfSSL 14:167253f4e170 45145 t1[4 + i] += sp_256_add_4(&t1[i], &t1[i], t2);
wolfSSL 14:167253f4e170 45146 }
wolfSSL 14:167253f4e170 45147
wolfSSL 14:167253f4e170 45148 r1 = sp_256_cmp_4(t1, d) >= 0;
wolfSSL 14:167253f4e170 45149 sp_256_cond_sub_4(r, t1, t2, (sp_digit)0 - r1);
wolfSSL 14:167253f4e170 45150
wolfSSL 14:167253f4e170 45151 return MP_OKAY;
wolfSSL 14:167253f4e170 45152 }
wolfSSL 14:167253f4e170 45153
wolfSSL 14:167253f4e170 45154 /* Reduce a modulo m into r. (r = a mod m)
wolfSSL 14:167253f4e170 45155 *
wolfSSL 14:167253f4e170 45156 * r A single precision number that is the reduced result.
wolfSSL 14:167253f4e170 45157 * a A single precision number that is to be reduced.
wolfSSL 14:167253f4e170 45158 * m A single precision number that is the modulus to reduce with.
wolfSSL 14:167253f4e170 45159 * returns MP_OKAY indicating success.
wolfSSL 14:167253f4e170 45160 */
wolfSSL 14:167253f4e170 45161 static WC_INLINE int sp_256_mod_4(sp_digit* r, sp_digit* a, sp_digit* m)
wolfSSL 14:167253f4e170 45162 {
wolfSSL 14:167253f4e170 45163 return sp_256_div_4(a, m, NULL, r);
wolfSSL 14:167253f4e170 45164 }
wolfSSL 14:167253f4e170 45165
wolfSSL 14:167253f4e170 45166 #endif
wolfSSL 14:167253f4e170 45167 #if defined(HAVE_ECC_SIGN) || defined(HAVE_ECC_VERIFY)
wolfSSL 14:167253f4e170 45168 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 45169 *
wolfSSL 14:167253f4e170 45170 * r A single precision integer.
wolfSSL 14:167253f4e170 45171 * a A single precision integer.
wolfSSL 14:167253f4e170 45172 */
wolfSSL 14:167253f4e170 45173 SP_NOINLINE static void sp_256_sqr_4(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 45174 {
wolfSSL 14:167253f4e170 45175 sp_digit tmp[4];
wolfSSL 14:167253f4e170 45176
wolfSSL 14:167253f4e170 45177 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 45178 "# A[0] * A[0]\n\t"
wolfSSL 14:167253f4e170 45179 "movq 0(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45180 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 45181 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 45182 "movq %%rax, (%[tmp])\n\t"
wolfSSL 14:167253f4e170 45183 "movq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 45184 "# A[0] * A[1]\n\t"
wolfSSL 14:167253f4e170 45185 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45186 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 45187 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45188 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45189 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 45190 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 45191 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45192 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 45193 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 45194 "movq %%r8, 8(%[tmp])\n\t"
wolfSSL 14:167253f4e170 45195 "# A[0] * A[2]\n\t"
wolfSSL 14:167253f4e170 45196 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45197 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 45198 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 45199 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45200 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45201 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 45202 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45203 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45204 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 45205 "# A[1] * A[1]\n\t"
wolfSSL 14:167253f4e170 45206 "movq 8(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45207 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 45208 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45209 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45210 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 45211 "movq %%r9, 16(%[tmp])\n\t"
wolfSSL 14:167253f4e170 45212 "# A[0] * A[3]\n\t"
wolfSSL 14:167253f4e170 45213 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45214 "mulq 0(%[a])\n\t"
wolfSSL 14:167253f4e170 45215 "xorq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 45216 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45217 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 45218 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 45219 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45220 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 45221 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 45222 "# A[1] * A[2]\n\t"
wolfSSL 14:167253f4e170 45223 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45224 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 45225 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45226 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 45227 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 45228 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45229 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 45230 "adcq $0, %%r9\n\t"
wolfSSL 14:167253f4e170 45231 "movq %%rcx, 24(%[tmp])\n\t"
wolfSSL 14:167253f4e170 45232 "# A[1] * A[3]\n\t"
wolfSSL 14:167253f4e170 45233 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45234 "mulq 8(%[a])\n\t"
wolfSSL 14:167253f4e170 45235 "xorq %%rcx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45236 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45237 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 45238 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 45239 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45240 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 45241 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 45242 "# A[2] * A[2]\n\t"
wolfSSL 14:167253f4e170 45243 "movq 16(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45244 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 45245 "addq %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45246 "adcq %%rdx, %%r9\n\t"
wolfSSL 14:167253f4e170 45247 "adcq $0, %%rcx\n\t"
wolfSSL 14:167253f4e170 45248 "movq %%r8, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 45249 "# A[2] * A[3]\n\t"
wolfSSL 14:167253f4e170 45250 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45251 "mulq 16(%[a])\n\t"
wolfSSL 14:167253f4e170 45252 "xorq %%r8, %%r8\n\t"
wolfSSL 14:167253f4e170 45253 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45254 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45255 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 45256 "addq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45257 "adcq %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45258 "adcq $0, %%r8\n\t"
wolfSSL 14:167253f4e170 45259 "movq %%r9, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 45260 "# A[3] * A[3]\n\t"
wolfSSL 14:167253f4e170 45261 "movq 24(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45262 "mulq %%rax\n\t"
wolfSSL 14:167253f4e170 45263 "addq %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45264 "adcq %%rdx, %%r8\n\t"
wolfSSL 14:167253f4e170 45265 "movq %%rcx, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 45266 "movq %%r8, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 45267 :
wolfSSL 14:167253f4e170 45268 : [r] "r" (r), [a] "r" (a), [tmp] "r" (tmp)
wolfSSL 14:167253f4e170 45269 : "memory", "rax", "rdx", "rcx", "r8", "r9", "r10", "r11", "r12"
wolfSSL 14:167253f4e170 45270 );
wolfSSL 14:167253f4e170 45271
wolfSSL 14:167253f4e170 45272 XMEMCPY(r, tmp, sizeof(tmp));
wolfSSL 14:167253f4e170 45273 }
wolfSSL 14:167253f4e170 45274
wolfSSL 14:167253f4e170 45275 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45276 /* Order-2 for the P256 curve. */
wolfSSL 14:167253f4e170 45277 static const uint64_t p256_order_2[4] = {
wolfSSL 14:167253f4e170 45278 0xf3b9cac2fc63254f,0xbce6faada7179e84,0xffffffffffffffff,
wolfSSL 14:167253f4e170 45279 0xffffffff00000000
wolfSSL 14:167253f4e170 45280 };
wolfSSL 14:167253f4e170 45281 #else
wolfSSL 14:167253f4e170 45282 /* The low half of the order-2 of the P256 curve. */
wolfSSL 14:167253f4e170 45283 static const uint64_t p256_order_low[2] = {
wolfSSL 14:167253f4e170 45284 0xf3b9cac2fc63254f,0xbce6faada7179e84
wolfSSL 14:167253f4e170 45285 };
wolfSSL 14:167253f4e170 45286 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 45287
wolfSSL 14:167253f4e170 45288 /* Multiply two number mod the order of P256 curve. (r = a * b mod order)
wolfSSL 14:167253f4e170 45289 *
wolfSSL 14:167253f4e170 45290 * r Result of the multiplication.
wolfSSL 14:167253f4e170 45291 * a First operand of the multiplication.
wolfSSL 14:167253f4e170 45292 * b Second operand of the multiplication.
wolfSSL 14:167253f4e170 45293 */
wolfSSL 14:167253f4e170 45294 static void sp_256_mont_mul_order_4(sp_digit* r, sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 45295 {
wolfSSL 14:167253f4e170 45296 sp_256_mul_4(r, a, b);
wolfSSL 14:167253f4e170 45297 sp_256_mont_reduce_4(r, p256_order, p256_mp_order);
wolfSSL 14:167253f4e170 45298 }
wolfSSL 14:167253f4e170 45299
wolfSSL 14:167253f4e170 45300 /* Square number mod the order of P256 curve. (r = a * a mod order)
wolfSSL 14:167253f4e170 45301 *
wolfSSL 14:167253f4e170 45302 * r Result of the squaring.
wolfSSL 14:167253f4e170 45303 * a Number to square.
wolfSSL 14:167253f4e170 45304 */
wolfSSL 14:167253f4e170 45305 static void sp_256_mont_sqr_order_4(sp_digit* r, sp_digit* a)
wolfSSL 14:167253f4e170 45306 {
wolfSSL 14:167253f4e170 45307 sp_256_sqr_4(r, a);
wolfSSL 14:167253f4e170 45308 sp_256_mont_reduce_4(r, p256_order, p256_mp_order);
wolfSSL 14:167253f4e170 45309 }
wolfSSL 14:167253f4e170 45310
wolfSSL 14:167253f4e170 45311 #ifndef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45312 /* Square number mod the order of P256 curve a number of times.
wolfSSL 14:167253f4e170 45313 * (r = a ^ n mod order)
wolfSSL 14:167253f4e170 45314 *
wolfSSL 14:167253f4e170 45315 * r Result of the squaring.
wolfSSL 14:167253f4e170 45316 * a Number to square.
wolfSSL 14:167253f4e170 45317 */
wolfSSL 14:167253f4e170 45318 static void sp_256_mont_sqr_n_order_4(sp_digit* r, sp_digit* a, int n)
wolfSSL 14:167253f4e170 45319 {
wolfSSL 14:167253f4e170 45320 int i;
wolfSSL 14:167253f4e170 45321
wolfSSL 14:167253f4e170 45322 sp_256_mont_sqr_order_4(r, a);
wolfSSL 14:167253f4e170 45323 for (i=1; i<n; i++)
wolfSSL 14:167253f4e170 45324 sp_256_mont_sqr_order_4(r, r);
wolfSSL 14:167253f4e170 45325 }
wolfSSL 14:167253f4e170 45326 #endif /* !WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 45327
wolfSSL 14:167253f4e170 45328 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
wolfSSL 14:167253f4e170 45329 * (r = 1 / a mod order)
wolfSSL 14:167253f4e170 45330 *
wolfSSL 14:167253f4e170 45331 * r Inverse result.
wolfSSL 14:167253f4e170 45332 * a Number to invert.
wolfSSL 14:167253f4e170 45333 * td Temporary data.
wolfSSL 14:167253f4e170 45334 */
wolfSSL 14:167253f4e170 45335 static void sp_256_mont_inv_order_4(sp_digit* r, sp_digit* a,
wolfSSL 14:167253f4e170 45336 sp_digit* td)
wolfSSL 14:167253f4e170 45337 {
wolfSSL 14:167253f4e170 45338 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45339 sp_digit* t = td;
wolfSSL 14:167253f4e170 45340 int i;
wolfSSL 14:167253f4e170 45341
wolfSSL 14:167253f4e170 45342 XMEMCPY(t, a, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 45343 for (i=254; i>=0; i--) {
wolfSSL 14:167253f4e170 45344 sp_256_mont_sqr_order_4(t, t);
wolfSSL 14:167253f4e170 45345 if (p256_order_2[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45346 sp_256_mont_mul_order_4(t, t, a);
wolfSSL 14:167253f4e170 45347 }
wolfSSL 14:167253f4e170 45348 XMEMCPY(r, t, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 45349 #else
wolfSSL 14:167253f4e170 45350 sp_digit* t = td;
wolfSSL 14:167253f4e170 45351 sp_digit* t2 = td + 2 * 4;
wolfSSL 14:167253f4e170 45352 sp_digit* t3 = td + 4 * 4;
wolfSSL 14:167253f4e170 45353 int i;
wolfSSL 14:167253f4e170 45354
wolfSSL 14:167253f4e170 45355 /* t = a^2 */
wolfSSL 14:167253f4e170 45356 sp_256_mont_sqr_order_4(t, a);
wolfSSL 14:167253f4e170 45357 /* t = a^3 = t * a */
wolfSSL 14:167253f4e170 45358 sp_256_mont_mul_order_4(t, t, a);
wolfSSL 14:167253f4e170 45359 /* t2= a^c = t ^ 2 ^ 2 */
wolfSSL 14:167253f4e170 45360 sp_256_mont_sqr_n_order_4(t2, t, 2);
wolfSSL 14:167253f4e170 45361 /* t3= a^f = t2 * t */
wolfSSL 14:167253f4e170 45362 sp_256_mont_mul_order_4(t3, t2, t);
wolfSSL 14:167253f4e170 45363 /* t2= a^f0 = t3 ^ 2 ^ 4 */
wolfSSL 14:167253f4e170 45364 sp_256_mont_sqr_n_order_4(t2, t3, 4);
wolfSSL 14:167253f4e170 45365 /* t = a^ff = t2 * t3 */
wolfSSL 14:167253f4e170 45366 sp_256_mont_mul_order_4(t, t2, t3);
wolfSSL 14:167253f4e170 45367 /* t3= a^ff00 = t ^ 2 ^ 8 */
wolfSSL 14:167253f4e170 45368 sp_256_mont_sqr_n_order_4(t2, t, 8);
wolfSSL 14:167253f4e170 45369 /* t = a^ffff = t2 * t */
wolfSSL 14:167253f4e170 45370 sp_256_mont_mul_order_4(t, t2, t);
wolfSSL 14:167253f4e170 45371 /* t2= a^ffff0000 = t ^ 2 ^ 16 */
wolfSSL 14:167253f4e170 45372 sp_256_mont_sqr_n_order_4(t2, t, 16);
wolfSSL 14:167253f4e170 45373 /* t = a^ffffffff = t2 * t */
wolfSSL 14:167253f4e170 45374 sp_256_mont_mul_order_4(t, t2, t);
wolfSSL 14:167253f4e170 45375 /* t2= a^ffffffff0000000000000000 = t ^ 2 ^ 64 */
wolfSSL 14:167253f4e170 45376 sp_256_mont_sqr_n_order_4(t2, t, 64);
wolfSSL 14:167253f4e170 45377 /* t2= a^ffffffff00000000ffffffff = t2 * t */
wolfSSL 14:167253f4e170 45378 sp_256_mont_mul_order_4(t2, t2, t);
wolfSSL 14:167253f4e170 45379 /* t2= a^ffffffff00000000ffffffff00000000 = t2 ^ 2 ^ 32 */
wolfSSL 14:167253f4e170 45380 sp_256_mont_sqr_n_order_4(t2, t2, 32);
wolfSSL 14:167253f4e170 45381 /* t2= a^ffffffff00000000ffffffffffffffff = t2 * t */
wolfSSL 14:167253f4e170 45382 sp_256_mont_mul_order_4(t2, t2, t);
wolfSSL 14:167253f4e170 45383 /* t2= a^ffffffff00000000ffffffffffffffffbce6 */
wolfSSL 14:167253f4e170 45384 for (i=127; i>=112; i--) {
wolfSSL 14:167253f4e170 45385 sp_256_mont_sqr_order_4(t2, t2);
wolfSSL 14:167253f4e170 45386 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45387 sp_256_mont_mul_order_4(t2, t2, a);
wolfSSL 14:167253f4e170 45388 }
wolfSSL 14:167253f4e170 45389 /* t2= a^ffffffff00000000ffffffffffffffffbce6f */
wolfSSL 14:167253f4e170 45390 sp_256_mont_sqr_n_order_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45391 sp_256_mont_mul_order_4(t2, t2, t3);
wolfSSL 14:167253f4e170 45392 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84 */
wolfSSL 14:167253f4e170 45393 for (i=107; i>=64; i--) {
wolfSSL 14:167253f4e170 45394 sp_256_mont_sqr_order_4(t2, t2);
wolfSSL 14:167253f4e170 45395 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45396 sp_256_mont_mul_order_4(t2, t2, a);
wolfSSL 14:167253f4e170 45397 }
wolfSSL 14:167253f4e170 45398 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f */
wolfSSL 14:167253f4e170 45399 sp_256_mont_sqr_n_order_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45400 sp_256_mont_mul_order_4(t2, t2, t3);
wolfSSL 14:167253f4e170 45401 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2 */
wolfSSL 14:167253f4e170 45402 for (i=59; i>=32; i--) {
wolfSSL 14:167253f4e170 45403 sp_256_mont_sqr_order_4(t2, t2);
wolfSSL 14:167253f4e170 45404 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45405 sp_256_mont_mul_order_4(t2, t2, a);
wolfSSL 14:167253f4e170 45406 }
wolfSSL 14:167253f4e170 45407 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2f */
wolfSSL 14:167253f4e170 45408 sp_256_mont_sqr_n_order_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45409 sp_256_mont_mul_order_4(t2, t2, t3);
wolfSSL 14:167253f4e170 45410 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254 */
wolfSSL 14:167253f4e170 45411 for (i=27; i>=0; i--) {
wolfSSL 14:167253f4e170 45412 sp_256_mont_sqr_order_4(t2, t2);
wolfSSL 14:167253f4e170 45413 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45414 sp_256_mont_mul_order_4(t2, t2, a);
wolfSSL 14:167253f4e170 45415 }
wolfSSL 14:167253f4e170 45416 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 */
wolfSSL 14:167253f4e170 45417 sp_256_mont_sqr_n_order_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45418 /* r = a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f */
wolfSSL 14:167253f4e170 45419 sp_256_mont_mul_order_4(r, t2, t3);
wolfSSL 14:167253f4e170 45420 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 45421 }
wolfSSL 14:167253f4e170 45422
wolfSSL 14:167253f4e170 45423 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45424 /* Square a and put result in r. (r = a * a)
wolfSSL 14:167253f4e170 45425 *
wolfSSL 14:167253f4e170 45426 * r Result of squaring.
wolfSSL 14:167253f4e170 45427 * a Number to square in Montogmery form.
wolfSSL 14:167253f4e170 45428 */
wolfSSL 14:167253f4e170 45429 SP_NOINLINE static void sp_256_sqr_avx2_4(sp_digit* r, const sp_digit* a)
wolfSSL 14:167253f4e170 45430 {
wolfSSL 14:167253f4e170 45431 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 45432 "# A[0] * A[1]\n\t"
wolfSSL 14:167253f4e170 45433 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45434 "mulxq 8(%[a]), %%r9, %%r10\n\t"
wolfSSL 14:167253f4e170 45435 "# A[0] * A[3]\n\t"
wolfSSL 14:167253f4e170 45436 "mulxq 24(%[a]), %%r11, %%r12\n\t"
wolfSSL 14:167253f4e170 45437 "# A[2] * A[1]\n\t"
wolfSSL 14:167253f4e170 45438 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45439 "mulxq 8(%[a]), %%rcx, %%rbx\n\t"
wolfSSL 14:167253f4e170 45440 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 45441 "adoxq %%rcx, %%r11\n\t"
wolfSSL 14:167253f4e170 45442 "# A[2] * A[3]\n\t"
wolfSSL 14:167253f4e170 45443 "mulxq 24(%[a]), %%r13, %%r14\n\t"
wolfSSL 14:167253f4e170 45444 "adoxq %%rbx, %%r12\n\t"
wolfSSL 14:167253f4e170 45445 "# A[2] * A[0]\n\t"
wolfSSL 14:167253f4e170 45446 "mulxq 0(%[a]), %%rcx, %%rbx\n\t"
wolfSSL 14:167253f4e170 45447 "adoxq %%r15, %%r13\n\t"
wolfSSL 14:167253f4e170 45448 "adcxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 45449 "adoxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 45450 "# A[1] * A[3]\n\t"
wolfSSL 14:167253f4e170 45451 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45452 "mulxq 24(%[a]), %%rax, %%r8\n\t"
wolfSSL 14:167253f4e170 45453 "adcxq %%rbx, %%r11\n\t"
wolfSSL 14:167253f4e170 45454 "adcxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 45455 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 45456 "adcxq %%r15, %%r14\n\t"
wolfSSL 14:167253f4e170 45457 "# Double with Carry Flag\n\t"
wolfSSL 14:167253f4e170 45458 "xorq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 45459 "# A[0] * A[0]\n\t"
wolfSSL 14:167253f4e170 45460 "movq 0(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45461 "mulxq %%rdx, %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 45462 "adcxq %%r9, %%r9\n\t"
wolfSSL 14:167253f4e170 45463 "# A[1] * A[1]\n\t"
wolfSSL 14:167253f4e170 45464 "movq 8(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45465 "mulxq %%rdx, %%rcx, %%rbx\n\t"
wolfSSL 14:167253f4e170 45466 "adcxq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 45467 "adoxq %%rax, %%r9\n\t"
wolfSSL 14:167253f4e170 45468 "adcxq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 45469 "adoxq %%rcx, %%r10\n\t"
wolfSSL 14:167253f4e170 45470 "# A[2] * A[2]\n\t"
wolfSSL 14:167253f4e170 45471 "movq 16(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45472 "mulxq %%rdx, %%rax, %%rcx\n\t"
wolfSSL 14:167253f4e170 45473 "adcxq %%r12, %%r12\n\t"
wolfSSL 14:167253f4e170 45474 "adoxq %%rbx, %%r11\n\t"
wolfSSL 14:167253f4e170 45475 "adcxq %%r13, %%r13\n\t"
wolfSSL 14:167253f4e170 45476 "adoxq %%rax, %%r12\n\t"
wolfSSL 14:167253f4e170 45477 "# A[3] * A[3]\n\t"
wolfSSL 14:167253f4e170 45478 "movq 24(%[a]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45479 "mulxq %%rdx, %%rax, %%rbx\n\t"
wolfSSL 14:167253f4e170 45480 "adcxq %%r14, %%r14\n\t"
wolfSSL 14:167253f4e170 45481 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 45482 "adcxq %%r15, %%r15\n\t"
wolfSSL 14:167253f4e170 45483 "adoxq %%rax, %%r14\n\t"
wolfSSL 14:167253f4e170 45484 "adoxq %%rbx, %%r15\n\t"
wolfSSL 14:167253f4e170 45485 "movq %%r8, 0(%[r])\n\t"
wolfSSL 14:167253f4e170 45486 "movq %%r9, 8(%[r])\n\t"
wolfSSL 14:167253f4e170 45487 "movq %%r10, 16(%[r])\n\t"
wolfSSL 14:167253f4e170 45488 "movq %%r11, 24(%[r])\n\t"
wolfSSL 14:167253f4e170 45489 "movq %%r12, 32(%[r])\n\t"
wolfSSL 14:167253f4e170 45490 "movq %%r13, 40(%[r])\n\t"
wolfSSL 14:167253f4e170 45491 "movq %%r14, 48(%[r])\n\t"
wolfSSL 14:167253f4e170 45492 "movq %%r15, 56(%[r])\n\t"
wolfSSL 14:167253f4e170 45493 :
wolfSSL 14:167253f4e170 45494 : [r] "r" (r), [a] "r" (a)
wolfSSL 14:167253f4e170 45495 : "memory", "rax", "rdx", "rcx", "rbx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 45496 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 45497 );
wolfSSL 14:167253f4e170 45498 }
wolfSSL 14:167253f4e170 45499
wolfSSL 14:167253f4e170 45500 /* Reduce the number back to 256 bits using Montgomery reduction.
wolfSSL 14:167253f4e170 45501 *
wolfSSL 14:167253f4e170 45502 * a A single precision number to reduce in place.
wolfSSL 14:167253f4e170 45503 * m The single precision number representing the modulus.
wolfSSL 14:167253f4e170 45504 * mp The digit representing the negative inverse of m mod 2^n.
wolfSSL 14:167253f4e170 45505 */
wolfSSL 14:167253f4e170 45506 SP_NOINLINE static void sp_256_mont_reduce_avx2_4(sp_digit* a, sp_digit* m,
wolfSSL 14:167253f4e170 45507 sp_digit mp)
wolfSSL 14:167253f4e170 45508 {
wolfSSL 14:167253f4e170 45509 __asm__ __volatile__ (
wolfSSL 14:167253f4e170 45510 "movq 0(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 45511 "movq 8(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 45512 "movq 16(%[a]), %%r14\n\t"
wolfSSL 14:167253f4e170 45513 "movq 24(%[a]), %%r15\n\t"
wolfSSL 14:167253f4e170 45514 "xorq %%r10, %%r10\n\t"
wolfSSL 14:167253f4e170 45515 "xorq %%r11, %%r11\n\t"
wolfSSL 14:167253f4e170 45516 "# a[0-4] += m[0-3] * mu = m[0-3] * (a[0] * mp)\n\t"
wolfSSL 14:167253f4e170 45517 "movq 32(%[a]), %%rax\n\t"
wolfSSL 14:167253f4e170 45518 "# mu = a[0] * mp\n\t"
wolfSSL 14:167253f4e170 45519 "movq %%r12, %%rdx\n\t"
wolfSSL 14:167253f4e170 45520 "mulxq %[mp], %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45521 "# a[0] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 45522 "mulx 0(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45523 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 45524 "# a[1] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 45525 "mulx 8(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45526 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 45527 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 45528 "# a[2] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 45529 "mulx 16(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45530 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 45531 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 45532 "# a[3] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 45533 "mulx 24(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45534 "adoxq %%r9, %%r15\n\t"
wolfSSL 14:167253f4e170 45535 "adcxq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 45536 "adoxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 45537 "adcxq %%r11, %%rax\n\t"
wolfSSL 14:167253f4e170 45538 "adoxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45539 "adcxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45540 "# a[1-5] += m[0-3] * mu = m[0-3] * (a[1] * mp)\n\t"
wolfSSL 14:167253f4e170 45541 "movq 40(%[a]), %%r12\n\t"
wolfSSL 14:167253f4e170 45542 "# mu = a[1] * mp\n\t"
wolfSSL 14:167253f4e170 45543 "movq %%r13, %%rdx\n\t"
wolfSSL 14:167253f4e170 45544 "mulxq %[mp], %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45545 "# a[1] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 45546 "mulx 0(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45547 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 45548 "# a[2] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 45549 "mulx 8(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45550 "adoxq %%r9, %%r14\n\t"
wolfSSL 14:167253f4e170 45551 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 45552 "# a[3] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 45553 "mulx 16(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45554 "adoxq %%rcx, %%r15\n\t"
wolfSSL 14:167253f4e170 45555 "adcxq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 45556 "# a[4] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 45557 "mulx 24(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45558 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 45559 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 45560 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 45561 "adcxq %%r10, %%r12\n\t"
wolfSSL 14:167253f4e170 45562 "movq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45563 "adoxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45564 "adcxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45565 "# a[2-6] += m[0-3] * mu = m[0-3] * (a[2] * mp)\n\t"
wolfSSL 14:167253f4e170 45566 "movq 48(%[a]), %%r13\n\t"
wolfSSL 14:167253f4e170 45567 "# mu = a[2] * mp\n\t"
wolfSSL 14:167253f4e170 45568 "movq %%r14, %%rdx\n\t"
wolfSSL 14:167253f4e170 45569 "mulxq %[mp], %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45570 "# a[2] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 45571 "mulx 0(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45572 "adcxq %%r8, %%r14\n\t"
wolfSSL 14:167253f4e170 45573 "# a[3] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 45574 "mulx 8(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45575 "adoxq %%r9, %%r15\n\t"
wolfSSL 14:167253f4e170 45576 "adcxq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 45577 "# a[4] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 45578 "mulx 16(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45579 "adoxq %%rcx, %%rax\n\t"
wolfSSL 14:167253f4e170 45580 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 45581 "# a[5] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 45582 "mulx 24(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45583 "adoxq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 45584 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 45585 "adoxq %%rcx, %%r13\n\t"
wolfSSL 14:167253f4e170 45586 "adcxq %%r10, %%r13\n\t"
wolfSSL 14:167253f4e170 45587 "movq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45588 "adoxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45589 "adcxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45590 "# a[3-7] += m[0-3] * mu = m[0-3] * (a[3] * mp)\n\t"
wolfSSL 14:167253f4e170 45591 "movq 56(%[a]), %%r14\n\t"
wolfSSL 14:167253f4e170 45592 "# mu = a[3] * mp\n\t"
wolfSSL 14:167253f4e170 45593 "movq %%r15, %%rdx\n\t"
wolfSSL 14:167253f4e170 45594 "mulxq %[mp], %%rdx, %%rcx\n\t"
wolfSSL 14:167253f4e170 45595 "# a[3] += m[0] * mu\n\t"
wolfSSL 14:167253f4e170 45596 "mulx 0(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45597 "adcxq %%r8, %%r15\n\t"
wolfSSL 14:167253f4e170 45598 "# a[4] += m[1] * mu\n\t"
wolfSSL 14:167253f4e170 45599 "mulx 8(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45600 "adoxq %%r9, %%rax\n\t"
wolfSSL 14:167253f4e170 45601 "adcxq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 45602 "# a[5] += m[2] * mu\n\t"
wolfSSL 14:167253f4e170 45603 "mulx 16(%[m]), %%r8, %%r9\n\t"
wolfSSL 14:167253f4e170 45604 "adoxq %%rcx, %%r12\n\t"
wolfSSL 14:167253f4e170 45605 "adcxq %%r8, %%r12\n\t"
wolfSSL 14:167253f4e170 45606 "# a[6] += m[3] * mu\n\t"
wolfSSL 14:167253f4e170 45607 "mulx 24(%[m]), %%r8, %%rcx\n\t"
wolfSSL 14:167253f4e170 45608 "adoxq %%r9, %%r13\n\t"
wolfSSL 14:167253f4e170 45609 "adcxq %%r8, %%r13\n\t"
wolfSSL 14:167253f4e170 45610 "adoxq %%rcx, %%r14\n\t"
wolfSSL 14:167253f4e170 45611 "adcxq %%r10, %%r14\n\t"
wolfSSL 14:167253f4e170 45612 "movq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45613 "adoxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45614 "adcxq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45615 "# Subtract mod if carry\n\t"
wolfSSL 14:167253f4e170 45616 "subq %%r10, %%r11\n\t"
wolfSSL 14:167253f4e170 45617 "movq 0(%[m]), %%r8\n\t"
wolfSSL 14:167253f4e170 45618 "movq 8(%[m]), %%r9\n\t"
wolfSSL 14:167253f4e170 45619 "movq 16(%[m]), %%r10\n\t"
wolfSSL 14:167253f4e170 45620 "movq 24(%[m]), %%rdx\n\t"
wolfSSL 14:167253f4e170 45621 "andq %%r11, %%r8\n\t"
wolfSSL 14:167253f4e170 45622 "andq %%r11, %%r9\n\t"
wolfSSL 14:167253f4e170 45623 "andq %%r11, %%r10\n\t"
wolfSSL 14:167253f4e170 45624 "andq %%r11, %%rdx\n\t"
wolfSSL 14:167253f4e170 45625 "subq %%r8, %%rax\n\t"
wolfSSL 14:167253f4e170 45626 "sbbq %%r9, %%r12\n\t"
wolfSSL 14:167253f4e170 45627 "sbbq %%r10, %%r13\n\t"
wolfSSL 14:167253f4e170 45628 "sbbq %%rdx, %%r14\n\t"
wolfSSL 14:167253f4e170 45629 "movq %%rax, (%[a])\n\t"
wolfSSL 14:167253f4e170 45630 "movq %%r12, 8(%[a])\n\t"
wolfSSL 14:167253f4e170 45631 "movq %%r13, 16(%[a])\n\t"
wolfSSL 14:167253f4e170 45632 "movq %%r14, 24(%[a])\n\t"
wolfSSL 14:167253f4e170 45633 :
wolfSSL 14:167253f4e170 45634 : [a] "r" (a), [m] "r" (m), [mp] "r" (mp)
wolfSSL 14:167253f4e170 45635 : "memory", "rax", "rcx", "rdx", "r8", "r9", "r10", "r11",
wolfSSL 14:167253f4e170 45636 "r12", "r13", "r14", "r15"
wolfSSL 14:167253f4e170 45637 );
wolfSSL 14:167253f4e170 45638 }
wolfSSL 14:167253f4e170 45639
wolfSSL 14:167253f4e170 45640 /* Multiply two number mod the order of P256 curve. (r = a * b mod order)
wolfSSL 14:167253f4e170 45641 *
wolfSSL 14:167253f4e170 45642 * r Result of the multiplication.
wolfSSL 14:167253f4e170 45643 * a First operand of the multiplication.
wolfSSL 14:167253f4e170 45644 * b Second operand of the multiplication.
wolfSSL 14:167253f4e170 45645 */
wolfSSL 14:167253f4e170 45646 static void sp_256_mont_mul_order_avx2_4(sp_digit* r, sp_digit* a, sp_digit* b)
wolfSSL 14:167253f4e170 45647 {
wolfSSL 14:167253f4e170 45648 sp_256_mul_avx2_4(r, a, b);
wolfSSL 14:167253f4e170 45649 sp_256_mont_reduce_avx2_4(r, p256_order, p256_mp_order);
wolfSSL 14:167253f4e170 45650 }
wolfSSL 14:167253f4e170 45651
wolfSSL 14:167253f4e170 45652 /* Square number mod the order of P256 curve. (r = a * a mod order)
wolfSSL 14:167253f4e170 45653 *
wolfSSL 14:167253f4e170 45654 * r Result of the squaring.
wolfSSL 14:167253f4e170 45655 * a Number to square.
wolfSSL 14:167253f4e170 45656 */
wolfSSL 14:167253f4e170 45657 static void sp_256_mont_sqr_order_avx2_4(sp_digit* r, sp_digit* a)
wolfSSL 14:167253f4e170 45658 {
wolfSSL 14:167253f4e170 45659 sp_256_sqr_avx2_4(r, a);
wolfSSL 14:167253f4e170 45660 sp_256_mont_reduce_avx2_4(r, p256_order, p256_mp_order);
wolfSSL 14:167253f4e170 45661 }
wolfSSL 14:167253f4e170 45662
wolfSSL 14:167253f4e170 45663 #ifndef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45664 /* Square number mod the order of P256 curve a number of times.
wolfSSL 14:167253f4e170 45665 * (r = a ^ n mod order)
wolfSSL 14:167253f4e170 45666 *
wolfSSL 14:167253f4e170 45667 * r Result of the squaring.
wolfSSL 14:167253f4e170 45668 * a Number to square.
wolfSSL 14:167253f4e170 45669 */
wolfSSL 14:167253f4e170 45670 static void sp_256_mont_sqr_n_order_avx2_4(sp_digit* r, sp_digit* a, int n)
wolfSSL 14:167253f4e170 45671 {
wolfSSL 14:167253f4e170 45672 int i;
wolfSSL 14:167253f4e170 45673
wolfSSL 14:167253f4e170 45674 sp_256_mont_sqr_order_avx2_4(r, a);
wolfSSL 14:167253f4e170 45675 for (i=1; i<n; i++)
wolfSSL 14:167253f4e170 45676 sp_256_mont_sqr_order_avx2_4(r, r);
wolfSSL 14:167253f4e170 45677 }
wolfSSL 14:167253f4e170 45678 #endif /* !WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 45679
wolfSSL 14:167253f4e170 45680 /* Invert the number, in Montgomery form, modulo the order of the P256 curve.
wolfSSL 14:167253f4e170 45681 * (r = 1 / a mod order)
wolfSSL 14:167253f4e170 45682 *
wolfSSL 14:167253f4e170 45683 * r Inverse result.
wolfSSL 14:167253f4e170 45684 * a Number to invert.
wolfSSL 14:167253f4e170 45685 * td Temporary data.
wolfSSL 14:167253f4e170 45686 */
wolfSSL 14:167253f4e170 45687 static void sp_256_mont_inv_order_avx2_4(sp_digit* r, sp_digit* a,
wolfSSL 14:167253f4e170 45688 sp_digit* td)
wolfSSL 14:167253f4e170 45689 {
wolfSSL 14:167253f4e170 45690 #ifdef WOLFSSL_SP_SMALL
wolfSSL 14:167253f4e170 45691 sp_digit* t = td;
wolfSSL 14:167253f4e170 45692 int i;
wolfSSL 14:167253f4e170 45693
wolfSSL 14:167253f4e170 45694 XMEMCPY(t, a, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 45695 for (i=254; i>=0; i--) {
wolfSSL 14:167253f4e170 45696 sp_256_mont_sqr_order_avx2_4(t, t);
wolfSSL 14:167253f4e170 45697 if (p256_order_2[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45698 sp_256_mont_mul_order_avx2_4(t, t, a);
wolfSSL 14:167253f4e170 45699 }
wolfSSL 14:167253f4e170 45700 XMEMCPY(r, t, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 45701 #else
wolfSSL 14:167253f4e170 45702 sp_digit* t = td;
wolfSSL 14:167253f4e170 45703 sp_digit* t2 = td + 2 * 4;
wolfSSL 14:167253f4e170 45704 sp_digit* t3 = td + 4 * 4;
wolfSSL 14:167253f4e170 45705 int i;
wolfSSL 14:167253f4e170 45706
wolfSSL 14:167253f4e170 45707 /* t = a^2 */
wolfSSL 14:167253f4e170 45708 sp_256_mont_sqr_order_avx2_4(t, a);
wolfSSL 14:167253f4e170 45709 /* t = a^3 = t * a */
wolfSSL 14:167253f4e170 45710 sp_256_mont_mul_order_avx2_4(t, t, a);
wolfSSL 14:167253f4e170 45711 /* t2= a^c = t ^ 2 ^ 2 */
wolfSSL 14:167253f4e170 45712 sp_256_mont_sqr_n_order_avx2_4(t2, t, 2);
wolfSSL 14:167253f4e170 45713 /* t3= a^f = t2 * t */
wolfSSL 14:167253f4e170 45714 sp_256_mont_mul_order_avx2_4(t3, t2, t);
wolfSSL 14:167253f4e170 45715 /* t2= a^f0 = t3 ^ 2 ^ 4 */
wolfSSL 14:167253f4e170 45716 sp_256_mont_sqr_n_order_avx2_4(t2, t3, 4);
wolfSSL 14:167253f4e170 45717 /* t = a^ff = t2 * t3 */
wolfSSL 14:167253f4e170 45718 sp_256_mont_mul_order_avx2_4(t, t2, t3);
wolfSSL 14:167253f4e170 45719 /* t3= a^ff00 = t ^ 2 ^ 8 */
wolfSSL 14:167253f4e170 45720 sp_256_mont_sqr_n_order_avx2_4(t2, t, 8);
wolfSSL 14:167253f4e170 45721 /* t = a^ffff = t2 * t */
wolfSSL 14:167253f4e170 45722 sp_256_mont_mul_order_avx2_4(t, t2, t);
wolfSSL 14:167253f4e170 45723 /* t2= a^ffff0000 = t ^ 2 ^ 16 */
wolfSSL 14:167253f4e170 45724 sp_256_mont_sqr_n_order_avx2_4(t2, t, 16);
wolfSSL 14:167253f4e170 45725 /* t = a^ffffffff = t2 * t */
wolfSSL 14:167253f4e170 45726 sp_256_mont_mul_order_avx2_4(t, t2, t);
wolfSSL 14:167253f4e170 45727 /* t2= a^ffffffff0000000000000000 = t ^ 2 ^ 64 */
wolfSSL 14:167253f4e170 45728 sp_256_mont_sqr_n_order_avx2_4(t2, t, 64);
wolfSSL 14:167253f4e170 45729 /* t2= a^ffffffff00000000ffffffff = t2 * t */
wolfSSL 14:167253f4e170 45730 sp_256_mont_mul_order_avx2_4(t2, t2, t);
wolfSSL 14:167253f4e170 45731 /* t2= a^ffffffff00000000ffffffff00000000 = t2 ^ 2 ^ 32 */
wolfSSL 14:167253f4e170 45732 sp_256_mont_sqr_n_order_avx2_4(t2, t2, 32);
wolfSSL 14:167253f4e170 45733 /* t2= a^ffffffff00000000ffffffffffffffff = t2 * t */
wolfSSL 14:167253f4e170 45734 sp_256_mont_mul_order_avx2_4(t2, t2, t);
wolfSSL 14:167253f4e170 45735 /* t2= a^ffffffff00000000ffffffffffffffffbce6 */
wolfSSL 14:167253f4e170 45736 for (i=127; i>=112; i--) {
wolfSSL 14:167253f4e170 45737 sp_256_mont_sqr_order_avx2_4(t2, t2);
wolfSSL 14:167253f4e170 45738 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45739 sp_256_mont_mul_order_avx2_4(t2, t2, a);
wolfSSL 14:167253f4e170 45740 }
wolfSSL 14:167253f4e170 45741 /* t2= a^ffffffff00000000ffffffffffffffffbce6f */
wolfSSL 14:167253f4e170 45742 sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45743 sp_256_mont_mul_order_avx2_4(t2, t2, t3);
wolfSSL 14:167253f4e170 45744 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84 */
wolfSSL 14:167253f4e170 45745 for (i=107; i>=64; i--) {
wolfSSL 14:167253f4e170 45746 sp_256_mont_sqr_order_avx2_4(t2, t2);
wolfSSL 14:167253f4e170 45747 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45748 sp_256_mont_mul_order_avx2_4(t2, t2, a);
wolfSSL 14:167253f4e170 45749 }
wolfSSL 14:167253f4e170 45750 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f */
wolfSSL 14:167253f4e170 45751 sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45752 sp_256_mont_mul_order_avx2_4(t2, t2, t3);
wolfSSL 14:167253f4e170 45753 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2 */
wolfSSL 14:167253f4e170 45754 for (i=59; i>=32; i--) {
wolfSSL 14:167253f4e170 45755 sp_256_mont_sqr_order_avx2_4(t2, t2);
wolfSSL 14:167253f4e170 45756 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45757 sp_256_mont_mul_order_avx2_4(t2, t2, a);
wolfSSL 14:167253f4e170 45758 }
wolfSSL 14:167253f4e170 45759 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2f */
wolfSSL 14:167253f4e170 45760 sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45761 sp_256_mont_mul_order_avx2_4(t2, t2, t3);
wolfSSL 14:167253f4e170 45762 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254 */
wolfSSL 14:167253f4e170 45763 for (i=27; i>=0; i--) {
wolfSSL 14:167253f4e170 45764 sp_256_mont_sqr_order_avx2_4(t2, t2);
wolfSSL 14:167253f4e170 45765 if (p256_order_low[i / 64] & ((sp_digit)1 << (i % 64)))
wolfSSL 14:167253f4e170 45766 sp_256_mont_mul_order_avx2_4(t2, t2, a);
wolfSSL 14:167253f4e170 45767 }
wolfSSL 14:167253f4e170 45768 /* t2= a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632540 */
wolfSSL 14:167253f4e170 45769 sp_256_mont_sqr_n_order_avx2_4(t2, t2, 4);
wolfSSL 14:167253f4e170 45770 /* r = a^ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f */
wolfSSL 14:167253f4e170 45771 sp_256_mont_mul_order_avx2_4(r, t2, t3);
wolfSSL 14:167253f4e170 45772 #endif /* WOLFSSL_SP_SMALL */
wolfSSL 14:167253f4e170 45773 }
wolfSSL 14:167253f4e170 45774
wolfSSL 14:167253f4e170 45775 #endif /* HAVE_INTEL_AVX2 */
wolfSSL 14:167253f4e170 45776 #endif /* HAVE_ECC_SIGN || HAVE_ECC_VERIFY */
wolfSSL 14:167253f4e170 45777 #ifdef HAVE_ECC_SIGN
wolfSSL 14:167253f4e170 45778 #ifndef SP_ECC_MAX_SIG_GEN
wolfSSL 14:167253f4e170 45779 #define SP_ECC_MAX_SIG_GEN 64
wolfSSL 14:167253f4e170 45780 #endif
wolfSSL 14:167253f4e170 45781
wolfSSL 14:167253f4e170 45782 /* Sign the hash using the private key.
wolfSSL 14:167253f4e170 45783 * e = [hash, 256 bits] from binary
wolfSSL 14:167253f4e170 45784 * r = (k.G)->x mod order
wolfSSL 14:167253f4e170 45785 * s = (r * x + e) / k mod order
wolfSSL 14:167253f4e170 45786 * The hash is truncated to the first 256 bits.
wolfSSL 14:167253f4e170 45787 *
wolfSSL 14:167253f4e170 45788 * hash Hash to sign.
wolfSSL 14:167253f4e170 45789 * hashLen Length of the hash data.
wolfSSL 14:167253f4e170 45790 * rng Random number generator.
wolfSSL 14:167253f4e170 45791 * priv Private part of key - scalar.
wolfSSL 14:167253f4e170 45792 * rm First part of result as an mp_int.
wolfSSL 14:167253f4e170 45793 * sm Sirst part of result as an mp_int.
wolfSSL 14:167253f4e170 45794 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 45795 * returns RNG failures, MEMORY_E when memory allocation fails and
wolfSSL 14:167253f4e170 45796 * MP_OKAY on success.
wolfSSL 14:167253f4e170 45797 */
wolfSSL 14:167253f4e170 45798 int sp_ecc_sign_256(const byte* hash, word32 hashLen, WC_RNG* rng, mp_int* priv,
wolfSSL 14:167253f4e170 45799 mp_int* rm, mp_int* sm, void* heap)
wolfSSL 14:167253f4e170 45800 {
wolfSSL 14:167253f4e170 45801 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 45802 sp_digit* d;
wolfSSL 14:167253f4e170 45803 #else
wolfSSL 14:167253f4e170 45804 sp_digit ed[2*4];
wolfSSL 14:167253f4e170 45805 sp_digit xd[2*4];
wolfSSL 14:167253f4e170 45806 sp_digit kd[2*4];
wolfSSL 14:167253f4e170 45807 sp_digit rd[2*4];
wolfSSL 14:167253f4e170 45808 sp_digit td[3 * 2*4];
wolfSSL 14:167253f4e170 45809 sp_point p;
wolfSSL 14:167253f4e170 45810 #endif
wolfSSL 14:167253f4e170 45811 sp_digit* e = NULL;
wolfSSL 14:167253f4e170 45812 sp_digit* x = NULL;
wolfSSL 14:167253f4e170 45813 sp_digit* k = NULL;
wolfSSL 14:167253f4e170 45814 sp_digit* r = NULL;
wolfSSL 14:167253f4e170 45815 sp_digit* tmp = NULL;
wolfSSL 14:167253f4e170 45816 sp_point* point = NULL;
wolfSSL 14:167253f4e170 45817 sp_digit carry;
wolfSSL 14:167253f4e170 45818 sp_digit* s;
wolfSSL 14:167253f4e170 45819 sp_digit* kInv;
wolfSSL 14:167253f4e170 45820 int err = MP_OKAY;
wolfSSL 14:167253f4e170 45821 int64_t c;
wolfSSL 14:167253f4e170 45822 int i;
wolfSSL 14:167253f4e170 45823 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45824 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 45825 #endif
wolfSSL 14:167253f4e170 45826
wolfSSL 14:167253f4e170 45827 (void)heap;
wolfSSL 14:167253f4e170 45828
wolfSSL 14:167253f4e170 45829 err = sp_ecc_point_new(heap, p, point);
wolfSSL 14:167253f4e170 45830 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 45831 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 45832 d = XMALLOC(sizeof(sp_digit) * 7 * 2 * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 45833 if (d != NULL) {
wolfSSL 14:167253f4e170 45834 e = d + 0 * 4;
wolfSSL 14:167253f4e170 45835 x = d + 2 * 4;
wolfSSL 14:167253f4e170 45836 k = d + 4 * 4;
wolfSSL 14:167253f4e170 45837 r = d + 6 * 4;
wolfSSL 14:167253f4e170 45838 tmp = d + 8 * 4;
wolfSSL 14:167253f4e170 45839 }
wolfSSL 14:167253f4e170 45840 else
wolfSSL 14:167253f4e170 45841 err = MEMORY_E;
wolfSSL 14:167253f4e170 45842 }
wolfSSL 14:167253f4e170 45843 #else
wolfSSL 14:167253f4e170 45844 e = ed;
wolfSSL 14:167253f4e170 45845 x = xd;
wolfSSL 14:167253f4e170 45846 k = kd;
wolfSSL 14:167253f4e170 45847 r = rd;
wolfSSL 14:167253f4e170 45848 tmp = td;
wolfSSL 14:167253f4e170 45849 #endif
wolfSSL 14:167253f4e170 45850 s = e;
wolfSSL 14:167253f4e170 45851 kInv = k;
wolfSSL 14:167253f4e170 45852
wolfSSL 14:167253f4e170 45853 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 45854 if (hashLen > 32)
wolfSSL 14:167253f4e170 45855 hashLen = 32;
wolfSSL 14:167253f4e170 45856
wolfSSL 14:167253f4e170 45857 sp_256_from_bin(e, 4, hash, hashLen);
wolfSSL 14:167253f4e170 45858 sp_256_from_mp(x, 4, priv);
wolfSSL 14:167253f4e170 45859 }
wolfSSL 14:167253f4e170 45860
wolfSSL 14:167253f4e170 45861 for (i = SP_ECC_MAX_SIG_GEN; err == MP_OKAY && i > 0; i--) {
wolfSSL 14:167253f4e170 45862 /* New random point. */
wolfSSL 14:167253f4e170 45863 err = sp_256_ecc_gen_k_4(rng, k);
wolfSSL 14:167253f4e170 45864 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 45865 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45866 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 45867 err = sp_256_ecc_mulmod_base_avx2_4(point, k, 1, heap);
wolfSSL 14:167253f4e170 45868 else
wolfSSL 14:167253f4e170 45869 #endif
wolfSSL 14:167253f4e170 45870 err = sp_256_ecc_mulmod_base_4(point, k, 1, NULL);
wolfSSL 14:167253f4e170 45871 }
wolfSSL 14:167253f4e170 45872
wolfSSL 14:167253f4e170 45873 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 45874 /* r = point->x mod order */
wolfSSL 14:167253f4e170 45875 XMEMCPY(r, point->x, sizeof(sp_digit) * 4);
wolfSSL 14:167253f4e170 45876 sp_256_norm_4(r);
wolfSSL 14:167253f4e170 45877 c = sp_256_cmp_4(r, p256_order);
wolfSSL 14:167253f4e170 45878 sp_256_cond_sub_4(r, r, p256_order, 0 - (c >= 0));
wolfSSL 14:167253f4e170 45879 sp_256_norm_4(r);
wolfSSL 14:167253f4e170 45880
wolfSSL 14:167253f4e170 45881 /* Conv k to Montgomery form (mod order) */
wolfSSL 14:167253f4e170 45882 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45883 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 45884 sp_256_mul_avx2_4(k, k, p256_norm_order);
wolfSSL 14:167253f4e170 45885 else
wolfSSL 14:167253f4e170 45886 #endif
wolfSSL 14:167253f4e170 45887 sp_256_mul_4(k, k, p256_norm_order);
wolfSSL 14:167253f4e170 45888 err = sp_256_mod_4(k, k, p256_order);
wolfSSL 14:167253f4e170 45889 }
wolfSSL 14:167253f4e170 45890 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 45891 sp_256_norm_4(k);
wolfSSL 14:167253f4e170 45892 /* kInv = 1/k mod order */
wolfSSL 14:167253f4e170 45893 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45894 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 45895 sp_256_mont_inv_order_avx2_4(kInv, k, tmp);
wolfSSL 14:167253f4e170 45896 else
wolfSSL 14:167253f4e170 45897 #endif
wolfSSL 14:167253f4e170 45898 sp_256_mont_inv_order_4(kInv, k, tmp);
wolfSSL 14:167253f4e170 45899 sp_256_norm_4(kInv);
wolfSSL 14:167253f4e170 45900
wolfSSL 14:167253f4e170 45901 /* s = r * x + e */
wolfSSL 14:167253f4e170 45902 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45903 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 45904 sp_256_mul_avx2_4(x, x, r);
wolfSSL 14:167253f4e170 45905 else
wolfSSL 14:167253f4e170 45906 #endif
wolfSSL 14:167253f4e170 45907 sp_256_mul_4(x, x, r);
wolfSSL 14:167253f4e170 45908 err = sp_256_mod_4(x, x, p256_order);
wolfSSL 14:167253f4e170 45909 }
wolfSSL 14:167253f4e170 45910 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 45911 sp_256_norm_4(x);
wolfSSL 14:167253f4e170 45912 carry = sp_256_add_4(s, e, x);
wolfSSL 14:167253f4e170 45913 sp_256_cond_sub_4(s, s, p256_order, 0 - carry);
wolfSSL 14:167253f4e170 45914 sp_256_norm_4(s);
wolfSSL 14:167253f4e170 45915 c = sp_256_cmp_4(s, p256_order);
wolfSSL 14:167253f4e170 45916 sp_256_cond_sub_4(s, s, p256_order, 0 - (c >= 0));
wolfSSL 14:167253f4e170 45917 sp_256_norm_4(s);
wolfSSL 14:167253f4e170 45918
wolfSSL 14:167253f4e170 45919 /* s = s * k^-1 mod order */
wolfSSL 14:167253f4e170 45920 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 45921 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 45922 sp_256_mont_mul_order_avx2_4(s, s, kInv);
wolfSSL 14:167253f4e170 45923 else
wolfSSL 14:167253f4e170 45924 #endif
wolfSSL 14:167253f4e170 45925 sp_256_mont_mul_order_4(s, s, kInv);
wolfSSL 14:167253f4e170 45926 sp_256_norm_4(s);
wolfSSL 14:167253f4e170 45927
wolfSSL 14:167253f4e170 45928 /* Check that signature is usable. */
wolfSSL 14:167253f4e170 45929 if (!sp_256_iszero_4(s))
wolfSSL 14:167253f4e170 45930 break;
wolfSSL 14:167253f4e170 45931 }
wolfSSL 14:167253f4e170 45932 }
wolfSSL 14:167253f4e170 45933
wolfSSL 14:167253f4e170 45934 if (i == 0)
wolfSSL 14:167253f4e170 45935 err = RNG_FAILURE_E;
wolfSSL 14:167253f4e170 45936
wolfSSL 14:167253f4e170 45937 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 45938 err = sp_256_to_mp(r, rm);
wolfSSL 14:167253f4e170 45939 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 45940 err = sp_256_to_mp(s, sm);
wolfSSL 14:167253f4e170 45941
wolfSSL 14:167253f4e170 45942 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 45943 if (d != NULL) {
wolfSSL 14:167253f4e170 45944 XMEMSET(d, 0, sizeof(sp_digit) * 8 * 4);
wolfSSL 14:167253f4e170 45945 XFREE(d, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 45946 }
wolfSSL 14:167253f4e170 45947 #else
wolfSSL 14:167253f4e170 45948 XMEMSET(e, 0, sizeof(sp_digit) * 2 * 4);
wolfSSL 14:167253f4e170 45949 XMEMSET(x, 0, sizeof(sp_digit) * 2 * 4);
wolfSSL 14:167253f4e170 45950 XMEMSET(k, 0, sizeof(sp_digit) * 2 * 4);
wolfSSL 14:167253f4e170 45951 XMEMSET(r, 0, sizeof(sp_digit) * 2 * 4);
wolfSSL 14:167253f4e170 45952 XMEMSET(r, 0, sizeof(sp_digit) * 2 * 4);
wolfSSL 14:167253f4e170 45953 XMEMSET(tmp, 0, sizeof(sp_digit) * 3 * 2*4);
wolfSSL 14:167253f4e170 45954 #endif
wolfSSL 14:167253f4e170 45955 sp_ecc_point_free(point, 1, heap);
wolfSSL 14:167253f4e170 45956
wolfSSL 14:167253f4e170 45957 return err;
wolfSSL 14:167253f4e170 45958 }
wolfSSL 14:167253f4e170 45959 #endif /* HAVE_ECC_SIGN */
wolfSSL 14:167253f4e170 45960
wolfSSL 14:167253f4e170 45961 #ifdef HAVE_ECC_VERIFY
wolfSSL 14:167253f4e170 45962 /* Verify the signature values with the hash and public key.
wolfSSL 14:167253f4e170 45963 * e = Truncate(hash, 256)
wolfSSL 14:167253f4e170 45964 * u1 = e/s mod order
wolfSSL 14:167253f4e170 45965 * u2 = r/s mod order
wolfSSL 14:167253f4e170 45966 * r == (u1.G + u2.Q)->x mod order
wolfSSL 14:167253f4e170 45967 * Optimization: Leave point in projective form.
wolfSSL 14:167253f4e170 45968 * (x, y, 1) == (x' / z'*z', y' / z'*z'*z', z' / z')
wolfSSL 14:167253f4e170 45969 * (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x'
wolfSSL 14:167253f4e170 45970 * The hash is truncated to the first 256 bits.
wolfSSL 14:167253f4e170 45971 *
wolfSSL 14:167253f4e170 45972 * hash Hash to sign.
wolfSSL 14:167253f4e170 45973 * hashLen Length of the hash data.
wolfSSL 14:167253f4e170 45974 * rng Random number generator.
wolfSSL 14:167253f4e170 45975 * priv Private part of key - scalar.
wolfSSL 14:167253f4e170 45976 * rm First part of result as an mp_int.
wolfSSL 14:167253f4e170 45977 * sm Sirst part of result as an mp_int.
wolfSSL 14:167253f4e170 45978 * heap Heap to use for allocation.
wolfSSL 14:167253f4e170 45979 * returns RNG failures, MEMORY_E when memory allocation fails and
wolfSSL 14:167253f4e170 45980 * MP_OKAY on success.
wolfSSL 14:167253f4e170 45981 */
wolfSSL 14:167253f4e170 45982 int sp_ecc_verify_256(const byte* hash, word32 hashLen, mp_int* pX,
wolfSSL 14:167253f4e170 45983 mp_int* pY, mp_int* pZ, mp_int* r, mp_int* sm, int* res, void* heap)
wolfSSL 14:167253f4e170 45984 {
wolfSSL 14:167253f4e170 45985 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 45986 sp_digit* d = NULL;
wolfSSL 14:167253f4e170 45987 #else
wolfSSL 14:167253f4e170 45988 sp_digit u1d[2*4];
wolfSSL 14:167253f4e170 45989 sp_digit u2d[2*4];
wolfSSL 14:167253f4e170 45990 sp_digit sd[2*4];
wolfSSL 14:167253f4e170 45991 sp_digit tmpd[2*4 * 5];
wolfSSL 14:167253f4e170 45992 sp_point p1d;
wolfSSL 14:167253f4e170 45993 sp_point p2d;
wolfSSL 14:167253f4e170 45994 #endif
wolfSSL 14:167253f4e170 45995 sp_digit* u1;
wolfSSL 14:167253f4e170 45996 sp_digit* u2;
wolfSSL 14:167253f4e170 45997 sp_digit* s;
wolfSSL 14:167253f4e170 45998 sp_digit* tmp;
wolfSSL 14:167253f4e170 45999 sp_point* p1;
wolfSSL 14:167253f4e170 46000 sp_point* p2 = NULL;
wolfSSL 14:167253f4e170 46001 sp_digit carry;
wolfSSL 14:167253f4e170 46002 int64_t c;
wolfSSL 14:167253f4e170 46003 int err;
wolfSSL 14:167253f4e170 46004 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46005 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 46006 #endif
wolfSSL 14:167253f4e170 46007
wolfSSL 14:167253f4e170 46008 err = sp_ecc_point_new(heap, p1d, p1);
wolfSSL 14:167253f4e170 46009 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46010 err = sp_ecc_point_new(heap, p2d, p2);
wolfSSL 14:167253f4e170 46011 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46012 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46013 d = XMALLOC(sizeof(sp_digit) * 16 * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46014 if (d != NULL) {
wolfSSL 14:167253f4e170 46015 u1 = d + 0 * 4;
wolfSSL 14:167253f4e170 46016 u2 = d + 2 * 4;
wolfSSL 14:167253f4e170 46017 s = d + 4 * 4;
wolfSSL 14:167253f4e170 46018 tmp = d + 6 * 4;
wolfSSL 14:167253f4e170 46019 }
wolfSSL 14:167253f4e170 46020 else
wolfSSL 14:167253f4e170 46021 err = MEMORY_E;
wolfSSL 14:167253f4e170 46022 }
wolfSSL 14:167253f4e170 46023 #else
wolfSSL 14:167253f4e170 46024 u1 = u1d;
wolfSSL 14:167253f4e170 46025 u2 = u2d;
wolfSSL 14:167253f4e170 46026 s = sd;
wolfSSL 14:167253f4e170 46027 tmp = tmpd;
wolfSSL 14:167253f4e170 46028 #endif
wolfSSL 14:167253f4e170 46029
wolfSSL 14:167253f4e170 46030 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46031 if (hashLen > 32)
wolfSSL 14:167253f4e170 46032 hashLen = 32;
wolfSSL 14:167253f4e170 46033
wolfSSL 14:167253f4e170 46034 sp_256_from_bin(u1, 4, hash, hashLen);
wolfSSL 14:167253f4e170 46035 sp_256_from_mp(u2, 4, r);
wolfSSL 14:167253f4e170 46036 sp_256_from_mp(s, 4, sm);
wolfSSL 14:167253f4e170 46037 sp_256_from_mp(p2->x, 4, pX);
wolfSSL 14:167253f4e170 46038 sp_256_from_mp(p2->y, 4, pY);
wolfSSL 14:167253f4e170 46039 sp_256_from_mp(p2->z, 4, pZ);
wolfSSL 14:167253f4e170 46040
wolfSSL 14:167253f4e170 46041 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46042 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46043 sp_256_mul_avx2_4(s, s, p256_norm_order);
wolfSSL 14:167253f4e170 46044 else
wolfSSL 14:167253f4e170 46045 #endif
wolfSSL 14:167253f4e170 46046 sp_256_mul_4(s, s, p256_norm_order);
wolfSSL 14:167253f4e170 46047 err = sp_256_mod_4(s, s, p256_order);
wolfSSL 14:167253f4e170 46048 }
wolfSSL 14:167253f4e170 46049 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46050 sp_256_norm_4(s);
wolfSSL 14:167253f4e170 46051 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46052 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 46053 sp_256_mont_inv_order_avx2_4(s, s, tmp);
wolfSSL 14:167253f4e170 46054 sp_256_mont_mul_order_avx2_4(u1, u1, s);
wolfSSL 14:167253f4e170 46055 sp_256_mont_mul_order_avx2_4(u2, u2, s);
wolfSSL 14:167253f4e170 46056 }
wolfSSL 14:167253f4e170 46057 else
wolfSSL 14:167253f4e170 46058 #endif
wolfSSL 14:167253f4e170 46059 {
wolfSSL 14:167253f4e170 46060 sp_256_mont_inv_order_4(s, s, tmp);
wolfSSL 14:167253f4e170 46061 sp_256_mont_mul_order_4(u1, u1, s);
wolfSSL 14:167253f4e170 46062 sp_256_mont_mul_order_4(u2, u2, s);
wolfSSL 14:167253f4e170 46063 }
wolfSSL 14:167253f4e170 46064
wolfSSL 14:167253f4e170 46065 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46066 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46067 err = sp_256_ecc_mulmod_base_avx2_4(p1, u1, 0, heap);
wolfSSL 14:167253f4e170 46068 else
wolfSSL 14:167253f4e170 46069 #endif
wolfSSL 14:167253f4e170 46070 err = sp_256_ecc_mulmod_base_4(p1, u1, 0, heap);
wolfSSL 14:167253f4e170 46071 }
wolfSSL 14:167253f4e170 46072 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46073 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46074 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46075 err = sp_256_ecc_mulmod_avx2_4(p2, p2, u2, 0, heap);
wolfSSL 14:167253f4e170 46076 else
wolfSSL 14:167253f4e170 46077 #endif
wolfSSL 14:167253f4e170 46078 err = sp_256_ecc_mulmod_4(p2, p2, u2, 0, heap);
wolfSSL 14:167253f4e170 46079 }
wolfSSL 14:167253f4e170 46080
wolfSSL 14:167253f4e170 46081 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46082 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46083 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46084 sp_256_proj_point_add_avx2_4(p1, p1, p2, tmp);
wolfSSL 14:167253f4e170 46085 else
wolfSSL 14:167253f4e170 46086 #endif
wolfSSL 14:167253f4e170 46087 sp_256_proj_point_add_4(p1, p1, p2, tmp);
wolfSSL 14:167253f4e170 46088
wolfSSL 14:167253f4e170 46089 /* (r + n*order).z'.z' mod prime == (u1.G + u2.Q)->x' */
wolfSSL 14:167253f4e170 46090 /* Reload r and convert to Montgomery form. */
wolfSSL 14:167253f4e170 46091 sp_256_from_mp(u2, 4, r);
wolfSSL 14:167253f4e170 46092 err = sp_256_mod_mul_norm_4(u2, u2, p256_mod);
wolfSSL 14:167253f4e170 46093 }
wolfSSL 14:167253f4e170 46094
wolfSSL 14:167253f4e170 46095 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46096 /* u1 = r.z'.z' mod prime */
wolfSSL 14:167253f4e170 46097 sp_256_mont_sqr_4(p1->z, p1->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46098 sp_256_mont_mul_4(u1, u2, p1->z, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46099 *res = sp_256_cmp_4(p1->x, u1) == 0;
wolfSSL 14:167253f4e170 46100 if (*res == 0) {
wolfSSL 14:167253f4e170 46101 /* Reload r and add order. */
wolfSSL 14:167253f4e170 46102 sp_256_from_mp(u2, 4, r);
wolfSSL 14:167253f4e170 46103 carry = sp_256_add_4(u2, u2, p256_order);
wolfSSL 14:167253f4e170 46104 /* Carry means result is greater than mod and is not valid. */
wolfSSL 14:167253f4e170 46105 if (!carry) {
wolfSSL 14:167253f4e170 46106 sp_256_norm_4(u2);
wolfSSL 14:167253f4e170 46107
wolfSSL 14:167253f4e170 46108 /* Compare with mod and if greater or equal then not valid. */
wolfSSL 14:167253f4e170 46109 c = sp_256_cmp_4(u2, p256_mod);
wolfSSL 14:167253f4e170 46110 if (c < 0) {
wolfSSL 14:167253f4e170 46111 /* Convert to Montogomery form */
wolfSSL 14:167253f4e170 46112 err = sp_256_mod_mul_norm_4(u2, u2, p256_mod);
wolfSSL 14:167253f4e170 46113 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46114 /* u1 = (r + 1*order).z'.z' mod prime */
wolfSSL 14:167253f4e170 46115 sp_256_mont_mul_4(u1, u2, p1->z, p256_mod,
wolfSSL 14:167253f4e170 46116 p256_mp_mod);
wolfSSL 14:167253f4e170 46117 *res = sp_256_cmp_4(p1->x, u2) == 0;
wolfSSL 14:167253f4e170 46118 }
wolfSSL 14:167253f4e170 46119 }
wolfSSL 14:167253f4e170 46120 }
wolfSSL 14:167253f4e170 46121 }
wolfSSL 14:167253f4e170 46122 }
wolfSSL 14:167253f4e170 46123
wolfSSL 14:167253f4e170 46124 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46125 if (d != NULL)
wolfSSL 14:167253f4e170 46126 XFREE(d, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46127 #endif
wolfSSL 14:167253f4e170 46128 sp_ecc_point_free(p1, 0, heap);
wolfSSL 14:167253f4e170 46129 sp_ecc_point_free(p2, 0, heap);
wolfSSL 14:167253f4e170 46130
wolfSSL 14:167253f4e170 46131 return err;
wolfSSL 14:167253f4e170 46132 }
wolfSSL 14:167253f4e170 46133 #endif /* HAVE_ECC_VERIFY */
wolfSSL 14:167253f4e170 46134
wolfSSL 14:167253f4e170 46135 #ifdef HAVE_ECC_CHECK_KEY
wolfSSL 14:167253f4e170 46136 /* Check that the x and y oridinates are a valid point on the curve.
wolfSSL 14:167253f4e170 46137 *
wolfSSL 14:167253f4e170 46138 * point EC point.
wolfSSL 14:167253f4e170 46139 * heap Heap to use if dynamically allocating.
wolfSSL 14:167253f4e170 46140 * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
wolfSSL 14:167253f4e170 46141 * not on the curve and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46142 */
wolfSSL 14:167253f4e170 46143 static int sp_256_ecc_is_point_4(sp_point* point, void* heap)
wolfSSL 14:167253f4e170 46144 {
wolfSSL 14:167253f4e170 46145 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46146 sp_digit* d = NULL;
wolfSSL 14:167253f4e170 46147 #else
wolfSSL 14:167253f4e170 46148 sp_digit t1d[2*4];
wolfSSL 14:167253f4e170 46149 sp_digit t2d[2*4];
wolfSSL 14:167253f4e170 46150 #endif
wolfSSL 14:167253f4e170 46151 sp_digit* t1;
wolfSSL 14:167253f4e170 46152 sp_digit* t2;
wolfSSL 14:167253f4e170 46153 int err = MP_OKAY;
wolfSSL 14:167253f4e170 46154
wolfSSL 14:167253f4e170 46155 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46156 d = XMALLOC(sizeof(sp_digit) * 4 * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46157 if (d != NULL) {
wolfSSL 14:167253f4e170 46158 t1 = d + 0 * 4;
wolfSSL 14:167253f4e170 46159 t2 = d + 2 * 4;
wolfSSL 14:167253f4e170 46160 }
wolfSSL 14:167253f4e170 46161 else
wolfSSL 14:167253f4e170 46162 err = MEMORY_E;
wolfSSL 14:167253f4e170 46163 #else
wolfSSL 14:167253f4e170 46164 (void)heap;
wolfSSL 14:167253f4e170 46165
wolfSSL 14:167253f4e170 46166 t1 = t1d;
wolfSSL 14:167253f4e170 46167 t2 = t2d;
wolfSSL 14:167253f4e170 46168 #endif
wolfSSL 14:167253f4e170 46169
wolfSSL 14:167253f4e170 46170 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46171 sp_256_sqr_4(t1, point->y);
wolfSSL 14:167253f4e170 46172 sp_256_mod_4(t1, t1, p256_mod);
wolfSSL 14:167253f4e170 46173 sp_256_sqr_4(t2, point->x);
wolfSSL 14:167253f4e170 46174 sp_256_mod_4(t2, t2, p256_mod);
wolfSSL 14:167253f4e170 46175 sp_256_mul_4(t2, t2, point->x);
wolfSSL 14:167253f4e170 46176 sp_256_mod_4(t2, t2, p256_mod);
wolfSSL 14:167253f4e170 46177 sp_256_sub_4(t2, p256_mod, t2);
wolfSSL 14:167253f4e170 46178 sp_256_mont_add_4(t1, t1, t2, p256_mod);
wolfSSL 14:167253f4e170 46179
wolfSSL 14:167253f4e170 46180 sp_256_mont_add_4(t1, t1, point->x, p256_mod);
wolfSSL 14:167253f4e170 46181 sp_256_mont_add_4(t1, t1, point->x, p256_mod);
wolfSSL 14:167253f4e170 46182 sp_256_mont_add_4(t1, t1, point->x, p256_mod);
wolfSSL 14:167253f4e170 46183
wolfSSL 14:167253f4e170 46184 if (sp_256_cmp_4(t1, p256_b) != 0)
wolfSSL 14:167253f4e170 46185 err = MP_VAL;
wolfSSL 14:167253f4e170 46186 }
wolfSSL 14:167253f4e170 46187
wolfSSL 14:167253f4e170 46188 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46189 if (d != NULL)
wolfSSL 14:167253f4e170 46190 XFREE(d, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46191 #endif
wolfSSL 14:167253f4e170 46192
wolfSSL 14:167253f4e170 46193 return err;
wolfSSL 14:167253f4e170 46194 }
wolfSSL 14:167253f4e170 46195
wolfSSL 14:167253f4e170 46196 /* Check that the x and y oridinates are a valid point on the curve.
wolfSSL 14:167253f4e170 46197 *
wolfSSL 14:167253f4e170 46198 * pX X ordinate of EC point.
wolfSSL 14:167253f4e170 46199 * pY Y ordinate of EC point.
wolfSSL 14:167253f4e170 46200 * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
wolfSSL 14:167253f4e170 46201 * not on the curve and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46202 */
wolfSSL 14:167253f4e170 46203 int sp_ecc_is_point_256(mp_int* pX, mp_int* pY)
wolfSSL 14:167253f4e170 46204 {
wolfSSL 14:167253f4e170 46205 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46206 sp_point pubd;
wolfSSL 14:167253f4e170 46207 #endif
wolfSSL 14:167253f4e170 46208 sp_point* pub;
wolfSSL 14:167253f4e170 46209 byte one[1] = { 1 };
wolfSSL 14:167253f4e170 46210 int err;
wolfSSL 14:167253f4e170 46211
wolfSSL 14:167253f4e170 46212 err = sp_ecc_point_new(NULL, pubd, pub);
wolfSSL 14:167253f4e170 46213 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46214 sp_256_from_mp(pub->x, 4, pX);
wolfSSL 14:167253f4e170 46215 sp_256_from_mp(pub->y, 4, pY);
wolfSSL 14:167253f4e170 46216 sp_256_from_bin(pub->z, 4, one, sizeof(one));
wolfSSL 14:167253f4e170 46217
wolfSSL 14:167253f4e170 46218 err = sp_256_ecc_is_point_4(pub, NULL);
wolfSSL 14:167253f4e170 46219 }
wolfSSL 14:167253f4e170 46220
wolfSSL 14:167253f4e170 46221 sp_ecc_point_free(pub, 0, NULL);
wolfSSL 14:167253f4e170 46222
wolfSSL 14:167253f4e170 46223 return err;
wolfSSL 14:167253f4e170 46224 }
wolfSSL 14:167253f4e170 46225
wolfSSL 14:167253f4e170 46226 /* Check that the private scalar generates the EC point (px, py), the point is
wolfSSL 14:167253f4e170 46227 * on the curve and the point has the correct order.
wolfSSL 14:167253f4e170 46228 *
wolfSSL 14:167253f4e170 46229 * pX X ordinate of EC point.
wolfSSL 14:167253f4e170 46230 * pY Y ordinate of EC point.
wolfSSL 14:167253f4e170 46231 * privm Private scalar that generates EC point.
wolfSSL 14:167253f4e170 46232 * returns MEMORY_E if dynamic memory allocation fails, MP_VAL if the point is
wolfSSL 14:167253f4e170 46233 * not on the curve, ECC_INF_E if the point does not have the correct order,
wolfSSL 14:167253f4e170 46234 * ECC_PRIV_KEY_E when the private scalar doesn't generate the EC point and
wolfSSL 14:167253f4e170 46235 * MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46236 */
wolfSSL 14:167253f4e170 46237 int sp_ecc_check_key_256(mp_int* pX, mp_int* pY, mp_int* privm, void* heap)
wolfSSL 14:167253f4e170 46238 {
wolfSSL 14:167253f4e170 46239 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46240 sp_digit privd[4];
wolfSSL 14:167253f4e170 46241 sp_point pubd;
wolfSSL 14:167253f4e170 46242 sp_point pd;
wolfSSL 14:167253f4e170 46243 #endif
wolfSSL 14:167253f4e170 46244 sp_digit* priv = NULL;
wolfSSL 14:167253f4e170 46245 sp_point* pub;
wolfSSL 14:167253f4e170 46246 sp_point* p = NULL;
wolfSSL 14:167253f4e170 46247 byte one[1] = { 1 };
wolfSSL 14:167253f4e170 46248 int err;
wolfSSL 14:167253f4e170 46249 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46250 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 46251 #endif
wolfSSL 14:167253f4e170 46252
wolfSSL 14:167253f4e170 46253 err = sp_ecc_point_new(heap, pubd, pub);
wolfSSL 14:167253f4e170 46254 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46255 err = sp_ecc_point_new(heap, pd, p);
wolfSSL 14:167253f4e170 46256 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46257 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46258 priv = XMALLOC(sizeof(sp_digit) * 4, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46259 if (priv == NULL)
wolfSSL 14:167253f4e170 46260 err = MEMORY_E;
wolfSSL 14:167253f4e170 46261 }
wolfSSL 14:167253f4e170 46262 #else
wolfSSL 14:167253f4e170 46263 priv = privd;
wolfSSL 14:167253f4e170 46264 #endif
wolfSSL 14:167253f4e170 46265
wolfSSL 14:167253f4e170 46266 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46267 sp_256_from_mp(pub->x, 4, pX);
wolfSSL 14:167253f4e170 46268 sp_256_from_mp(pub->y, 4, pY);
wolfSSL 14:167253f4e170 46269 sp_256_from_bin(pub->z, 4, one, sizeof(one));
wolfSSL 14:167253f4e170 46270 sp_256_from_mp(priv, 4, privm);
wolfSSL 14:167253f4e170 46271
wolfSSL 14:167253f4e170 46272 /* Check point at infinitiy. */
wolfSSL 14:167253f4e170 46273 if (sp_256_iszero_4(pub->x) &&
wolfSSL 14:167253f4e170 46274 sp_256_iszero_4(pub->y))
wolfSSL 14:167253f4e170 46275 err = ECC_INF_E;
wolfSSL 14:167253f4e170 46276 }
wolfSSL 14:167253f4e170 46277
wolfSSL 14:167253f4e170 46278 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46279 /* Check range of X and Y */
wolfSSL 14:167253f4e170 46280 if (sp_256_cmp_4(pub->x, p256_mod) >= 0 ||
wolfSSL 14:167253f4e170 46281 sp_256_cmp_4(pub->y, p256_mod) >= 0)
wolfSSL 14:167253f4e170 46282 err = ECC_OUT_OF_RANGE_E;
wolfSSL 14:167253f4e170 46283 }
wolfSSL 14:167253f4e170 46284
wolfSSL 14:167253f4e170 46285 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46286 /* Check point is on curve */
wolfSSL 14:167253f4e170 46287 err = sp_256_ecc_is_point_4(pub, heap);
wolfSSL 14:167253f4e170 46288 }
wolfSSL 14:167253f4e170 46289
wolfSSL 14:167253f4e170 46290 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46291 /* Point * order = infinity */
wolfSSL 14:167253f4e170 46292 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46293 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46294 err = sp_256_ecc_mulmod_avx2_4(p, pub, p256_order, 1, heap);
wolfSSL 14:167253f4e170 46295 else
wolfSSL 14:167253f4e170 46296 #endif
wolfSSL 14:167253f4e170 46297 err = sp_256_ecc_mulmod_4(p, pub, p256_order, 1, heap);
wolfSSL 14:167253f4e170 46298 }
wolfSSL 14:167253f4e170 46299 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46300 /* Check result is infinity */
wolfSSL 14:167253f4e170 46301 if (!sp_256_iszero_4(p->x) ||
wolfSSL 14:167253f4e170 46302 !sp_256_iszero_4(p->y)) {
wolfSSL 14:167253f4e170 46303 err = ECC_INF_E;
wolfSSL 14:167253f4e170 46304 }
wolfSSL 14:167253f4e170 46305 }
wolfSSL 14:167253f4e170 46306
wolfSSL 14:167253f4e170 46307 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46308 /* Base * private = point */
wolfSSL 14:167253f4e170 46309 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46310 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46311 err = sp_256_ecc_mulmod_base_avx2_4(p, priv, 1, heap);
wolfSSL 14:167253f4e170 46312 else
wolfSSL 14:167253f4e170 46313 #endif
wolfSSL 14:167253f4e170 46314 err = sp_256_ecc_mulmod_base_4(p, priv, 1, heap);
wolfSSL 14:167253f4e170 46315 }
wolfSSL 14:167253f4e170 46316 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46317 /* Check result is public key */
wolfSSL 14:167253f4e170 46318 if (sp_256_cmp_4(p->x, pub->x) != 0 ||
wolfSSL 14:167253f4e170 46319 sp_256_cmp_4(p->y, pub->y) != 0) {
wolfSSL 14:167253f4e170 46320 err = ECC_PRIV_KEY_E;
wolfSSL 14:167253f4e170 46321 }
wolfSSL 14:167253f4e170 46322 }
wolfSSL 14:167253f4e170 46323
wolfSSL 14:167253f4e170 46324 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46325 if (priv != NULL)
wolfSSL 14:167253f4e170 46326 XFREE(priv, heap, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46327 #endif
wolfSSL 14:167253f4e170 46328 sp_ecc_point_free(p, 0, heap);
wolfSSL 14:167253f4e170 46329 sp_ecc_point_free(pub, 0, heap);
wolfSSL 14:167253f4e170 46330
wolfSSL 14:167253f4e170 46331 return err;
wolfSSL 14:167253f4e170 46332 }
wolfSSL 14:167253f4e170 46333 #endif
wolfSSL 14:167253f4e170 46334 #ifdef WOLFSSL_PUBLIC_ECC_ADD_DBL
wolfSSL 14:167253f4e170 46335 /* Add two projective EC points together.
wolfSSL 14:167253f4e170 46336 * (pX, pY, pZ) + (qX, qY, qZ) = (rX, rY, rZ)
wolfSSL 14:167253f4e170 46337 *
wolfSSL 14:167253f4e170 46338 * pX First EC point's X ordinate.
wolfSSL 14:167253f4e170 46339 * pY First EC point's Y ordinate.
wolfSSL 14:167253f4e170 46340 * pZ First EC point's Z ordinate.
wolfSSL 14:167253f4e170 46341 * qX Second EC point's X ordinate.
wolfSSL 14:167253f4e170 46342 * qY Second EC point's Y ordinate.
wolfSSL 14:167253f4e170 46343 * qZ Second EC point's Z ordinate.
wolfSSL 14:167253f4e170 46344 * rX Resultant EC point's X ordinate.
wolfSSL 14:167253f4e170 46345 * rY Resultant EC point's Y ordinate.
wolfSSL 14:167253f4e170 46346 * rZ Resultant EC point's Z ordinate.
wolfSSL 14:167253f4e170 46347 * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46348 */
wolfSSL 14:167253f4e170 46349 int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ,
wolfSSL 14:167253f4e170 46350 mp_int* qX, mp_int* qY, mp_int* qZ,
wolfSSL 14:167253f4e170 46351 mp_int* rX, mp_int* rY, mp_int* rZ)
wolfSSL 14:167253f4e170 46352 {
wolfSSL 14:167253f4e170 46353 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46354 sp_digit tmpd[2 * 4 * 5];
wolfSSL 14:167253f4e170 46355 sp_point pd;
wolfSSL 14:167253f4e170 46356 sp_point qd;
wolfSSL 14:167253f4e170 46357 #endif
wolfSSL 14:167253f4e170 46358 sp_digit* tmp;
wolfSSL 14:167253f4e170 46359 sp_point* p;
wolfSSL 14:167253f4e170 46360 sp_point* q = NULL;
wolfSSL 14:167253f4e170 46361 int err;
wolfSSL 14:167253f4e170 46362 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46363 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 46364 #endif
wolfSSL 14:167253f4e170 46365
wolfSSL 14:167253f4e170 46366 err = sp_ecc_point_new(NULL, pd, p);
wolfSSL 14:167253f4e170 46367 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46368 err = sp_ecc_point_new(NULL, qd, q);
wolfSSL 14:167253f4e170 46369 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46370 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46371 tmp = XMALLOC(sizeof(sp_digit) * 2 * 4 * 5, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46372 if (tmp == NULL)
wolfSSL 14:167253f4e170 46373 err = MEMORY_E;
wolfSSL 14:167253f4e170 46374 }
wolfSSL 14:167253f4e170 46375 #else
wolfSSL 14:167253f4e170 46376 tmp = tmpd;
wolfSSL 14:167253f4e170 46377 #endif
wolfSSL 14:167253f4e170 46378
wolfSSL 14:167253f4e170 46379 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46380 sp_256_from_mp(p->x, 4, pX);
wolfSSL 14:167253f4e170 46381 sp_256_from_mp(p->y, 4, pY);
wolfSSL 14:167253f4e170 46382 sp_256_from_mp(p->z, 4, pZ);
wolfSSL 14:167253f4e170 46383 sp_256_from_mp(q->x, 4, qX);
wolfSSL 14:167253f4e170 46384 sp_256_from_mp(q->y, 4, qY);
wolfSSL 14:167253f4e170 46385 sp_256_from_mp(q->z, 4, qZ);
wolfSSL 14:167253f4e170 46386
wolfSSL 14:167253f4e170 46387 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46388 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46389 sp_256_proj_point_add_avx2_4(p, p, q, tmp);
wolfSSL 14:167253f4e170 46390 else
wolfSSL 14:167253f4e170 46391 #endif
wolfSSL 14:167253f4e170 46392 sp_256_proj_point_add_4(p, p, q, tmp);
wolfSSL 14:167253f4e170 46393 }
wolfSSL 14:167253f4e170 46394
wolfSSL 14:167253f4e170 46395 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46396 err = sp_256_to_mp(p->x, rX);
wolfSSL 14:167253f4e170 46397 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46398 err = sp_256_to_mp(p->y, rY);
wolfSSL 14:167253f4e170 46399 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46400 err = sp_256_to_mp(p->z, rZ);
wolfSSL 14:167253f4e170 46401
wolfSSL 14:167253f4e170 46402 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46403 if (tmp != NULL)
wolfSSL 14:167253f4e170 46404 XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46405 #endif
wolfSSL 14:167253f4e170 46406 sp_ecc_point_free(q, 0, NULL);
wolfSSL 14:167253f4e170 46407 sp_ecc_point_free(p, 0, NULL);
wolfSSL 14:167253f4e170 46408
wolfSSL 14:167253f4e170 46409 return err;
wolfSSL 14:167253f4e170 46410 }
wolfSSL 14:167253f4e170 46411
wolfSSL 14:167253f4e170 46412 /* Double a projective EC point.
wolfSSL 14:167253f4e170 46413 * (pX, pY, pZ) + (pX, pY, pZ) = (rX, rY, rZ)
wolfSSL 14:167253f4e170 46414 *
wolfSSL 14:167253f4e170 46415 * pX EC point's X ordinate.
wolfSSL 14:167253f4e170 46416 * pY EC point's Y ordinate.
wolfSSL 14:167253f4e170 46417 * pZ EC point's Z ordinate.
wolfSSL 14:167253f4e170 46418 * rX Resultant EC point's X ordinate.
wolfSSL 14:167253f4e170 46419 * rY Resultant EC point's Y ordinate.
wolfSSL 14:167253f4e170 46420 * rZ Resultant EC point's Z ordinate.
wolfSSL 14:167253f4e170 46421 * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46422 */
wolfSSL 14:167253f4e170 46423 int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ,
wolfSSL 14:167253f4e170 46424 mp_int* rX, mp_int* rY, mp_int* rZ)
wolfSSL 14:167253f4e170 46425 {
wolfSSL 14:167253f4e170 46426 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46427 sp_digit tmpd[2 * 4 * 2];
wolfSSL 14:167253f4e170 46428 sp_point pd;
wolfSSL 14:167253f4e170 46429 #endif
wolfSSL 14:167253f4e170 46430 sp_digit* tmp;
wolfSSL 14:167253f4e170 46431 sp_point* p;
wolfSSL 14:167253f4e170 46432 int err;
wolfSSL 14:167253f4e170 46433 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46434 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 46435 #endif
wolfSSL 14:167253f4e170 46436
wolfSSL 14:167253f4e170 46437 err = sp_ecc_point_new(NULL, pd, p);
wolfSSL 14:167253f4e170 46438 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46439 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46440 tmp = XMALLOC(sizeof(sp_digit) * 2 * 4 * 2, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46441 if (tmp == NULL)
wolfSSL 14:167253f4e170 46442 err = MEMORY_E;
wolfSSL 14:167253f4e170 46443 }
wolfSSL 14:167253f4e170 46444 #else
wolfSSL 14:167253f4e170 46445 tmp = tmpd;
wolfSSL 14:167253f4e170 46446 #endif
wolfSSL 14:167253f4e170 46447
wolfSSL 14:167253f4e170 46448 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46449 sp_256_from_mp(p->x, 4, pX);
wolfSSL 14:167253f4e170 46450 sp_256_from_mp(p->y, 4, pY);
wolfSSL 14:167253f4e170 46451 sp_256_from_mp(p->z, 4, pZ);
wolfSSL 14:167253f4e170 46452
wolfSSL 14:167253f4e170 46453 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46454 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags))
wolfSSL 14:167253f4e170 46455 sp_256_proj_point_dbl_avx2_4(p, p, tmp);
wolfSSL 14:167253f4e170 46456 else
wolfSSL 14:167253f4e170 46457 #endif
wolfSSL 14:167253f4e170 46458 sp_256_proj_point_dbl_4(p, p, tmp);
wolfSSL 14:167253f4e170 46459 }
wolfSSL 14:167253f4e170 46460
wolfSSL 14:167253f4e170 46461 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46462 err = sp_256_to_mp(p->x, rX);
wolfSSL 14:167253f4e170 46463 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46464 err = sp_256_to_mp(p->y, rY);
wolfSSL 14:167253f4e170 46465 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46466 err = sp_256_to_mp(p->z, rZ);
wolfSSL 14:167253f4e170 46467
wolfSSL 14:167253f4e170 46468 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46469 if (tmp != NULL)
wolfSSL 14:167253f4e170 46470 XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46471 #endif
wolfSSL 14:167253f4e170 46472 sp_ecc_point_free(p, 0, NULL);
wolfSSL 14:167253f4e170 46473
wolfSSL 14:167253f4e170 46474 return err;
wolfSSL 14:167253f4e170 46475 }
wolfSSL 14:167253f4e170 46476
wolfSSL 14:167253f4e170 46477 /* Map a projective EC point to affine in place.
wolfSSL 14:167253f4e170 46478 * pZ will be one.
wolfSSL 14:167253f4e170 46479 *
wolfSSL 14:167253f4e170 46480 * pX EC point's X ordinate.
wolfSSL 14:167253f4e170 46481 * pY EC point's Y ordinate.
wolfSSL 14:167253f4e170 46482 * pZ EC point's Z ordinate.
wolfSSL 14:167253f4e170 46483 * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46484 */
wolfSSL 14:167253f4e170 46485 int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ)
wolfSSL 14:167253f4e170 46486 {
wolfSSL 14:167253f4e170 46487 #if !defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46488 sp_digit tmpd[2 * 4 * 4];
wolfSSL 14:167253f4e170 46489 sp_point pd;
wolfSSL 14:167253f4e170 46490 #endif
wolfSSL 14:167253f4e170 46491 sp_digit* tmp;
wolfSSL 14:167253f4e170 46492 sp_point* p;
wolfSSL 14:167253f4e170 46493 int err;
wolfSSL 14:167253f4e170 46494
wolfSSL 14:167253f4e170 46495 err = sp_ecc_point_new(NULL, pd, p);
wolfSSL 14:167253f4e170 46496 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46497 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46498 tmp = XMALLOC(sizeof(sp_digit) * 2 * 4 * 4, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46499 if (tmp == NULL)
wolfSSL 14:167253f4e170 46500 err = MEMORY_E;
wolfSSL 14:167253f4e170 46501 }
wolfSSL 14:167253f4e170 46502 #else
wolfSSL 14:167253f4e170 46503 tmp = tmpd;
wolfSSL 14:167253f4e170 46504 #endif
wolfSSL 14:167253f4e170 46505 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46506 sp_256_from_mp(p->x, 4, pX);
wolfSSL 14:167253f4e170 46507 sp_256_from_mp(p->y, 4, pY);
wolfSSL 14:167253f4e170 46508 sp_256_from_mp(p->z, 4, pZ);
wolfSSL 14:167253f4e170 46509
wolfSSL 14:167253f4e170 46510 sp_256_map_4(p, p, tmp);
wolfSSL 14:167253f4e170 46511 }
wolfSSL 14:167253f4e170 46512
wolfSSL 14:167253f4e170 46513 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46514 err = sp_256_to_mp(p->x, pX);
wolfSSL 14:167253f4e170 46515 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46516 err = sp_256_to_mp(p->y, pY);
wolfSSL 14:167253f4e170 46517 if (err == MP_OKAY)
wolfSSL 14:167253f4e170 46518 err = sp_256_to_mp(p->z, pZ);
wolfSSL 14:167253f4e170 46519
wolfSSL 14:167253f4e170 46520 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46521 if (tmp != NULL)
wolfSSL 14:167253f4e170 46522 XFREE(tmp, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46523 #endif
wolfSSL 14:167253f4e170 46524 sp_ecc_point_free(p, 0, NULL);
wolfSSL 14:167253f4e170 46525
wolfSSL 14:167253f4e170 46526 return err;
wolfSSL 14:167253f4e170 46527 }
wolfSSL 14:167253f4e170 46528 #endif /* WOLFSSL_PUBLIC_ECC_ADD_DBL */
wolfSSL 14:167253f4e170 46529 #ifdef HAVE_COMP_KEY
wolfSSL 14:167253f4e170 46530 /* Find the square root of a number mod the prime of the curve.
wolfSSL 14:167253f4e170 46531 *
wolfSSL 14:167253f4e170 46532 * y The number to operate on and the result.
wolfSSL 14:167253f4e170 46533 * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46534 */
wolfSSL 14:167253f4e170 46535 static int sp_256_mont_sqrt_4(sp_digit* y)
wolfSSL 14:167253f4e170 46536 {
wolfSSL 14:167253f4e170 46537 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46538 sp_digit* d;
wolfSSL 14:167253f4e170 46539 #else
wolfSSL 14:167253f4e170 46540 sp_digit t1d[2 * 4];
wolfSSL 14:167253f4e170 46541 sp_digit t2d[2 * 4];
wolfSSL 14:167253f4e170 46542 #endif
wolfSSL 14:167253f4e170 46543 sp_digit* t1;
wolfSSL 14:167253f4e170 46544 sp_digit* t2;
wolfSSL 14:167253f4e170 46545 int err = MP_OKAY;
wolfSSL 14:167253f4e170 46546 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46547 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 46548 #endif
wolfSSL 14:167253f4e170 46549
wolfSSL 14:167253f4e170 46550 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46551 d = XMALLOC(sizeof(sp_digit) * 4 * 4, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46552 if (d != NULL) {
wolfSSL 14:167253f4e170 46553 t1 = d + 0 * 4;
wolfSSL 14:167253f4e170 46554 t2 = d + 2 * 4;
wolfSSL 14:167253f4e170 46555 }
wolfSSL 14:167253f4e170 46556 else
wolfSSL 14:167253f4e170 46557 err = MEMORY_E;
wolfSSL 14:167253f4e170 46558 #else
wolfSSL 14:167253f4e170 46559 t1 = t1d;
wolfSSL 14:167253f4e170 46560 t2 = t2d;
wolfSSL 14:167253f4e170 46561 #endif
wolfSSL 14:167253f4e170 46562
wolfSSL 14:167253f4e170 46563 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46564 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46565 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 46566 /* t2 = y ^ 0x2 */
wolfSSL 14:167253f4e170 46567 sp_256_mont_sqr_avx2_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46568 /* t1 = y ^ 0x3 */
wolfSSL 14:167253f4e170 46569 sp_256_mont_mul_avx2_4(t1, t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46570 /* t2 = y ^ 0xc */
wolfSSL 14:167253f4e170 46571 sp_256_mont_sqr_n_avx2_4(t2, t1, 2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46572 /* t1 = y ^ 0xf */
wolfSSL 14:167253f4e170 46573 sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46574 /* t2 = y ^ 0xf0 */
wolfSSL 14:167253f4e170 46575 sp_256_mont_sqr_n_avx2_4(t2, t1, 4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46576 /* t1 = y ^ 0xff */
wolfSSL 14:167253f4e170 46577 sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46578 /* t2 = y ^ 0xff00 */
wolfSSL 14:167253f4e170 46579 sp_256_mont_sqr_n_avx2_4(t2, t1, 8, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46580 /* t1 = y ^ 0xffff */
wolfSSL 14:167253f4e170 46581 sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46582 /* t2 = y ^ 0xffff0000 */
wolfSSL 14:167253f4e170 46583 sp_256_mont_sqr_n_avx2_4(t2, t1, 16, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46584 /* t1 = y ^ 0xffffffff */
wolfSSL 14:167253f4e170 46585 sp_256_mont_mul_avx2_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46586 /* t1 = y ^ 0xffffffff00000000 */
wolfSSL 14:167253f4e170 46587 sp_256_mont_sqr_n_avx2_4(t1, t1, 32, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46588 /* t1 = y ^ 0xffffffff00000001 */
wolfSSL 14:167253f4e170 46589 sp_256_mont_mul_avx2_4(t1, t1, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46590 /* t1 = y ^ 0xffffffff00000001000000000000000000000000 */
wolfSSL 14:167253f4e170 46591 sp_256_mont_sqr_n_avx2_4(t1, t1, 96, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46592 /* t1 = y ^ 0xffffffff00000001000000000000000000000001 */
wolfSSL 14:167253f4e170 46593 sp_256_mont_mul_avx2_4(t1, t1, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46594 sp_256_mont_sqr_n_avx2_4(y, t1, 94, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46595 }
wolfSSL 14:167253f4e170 46596 else
wolfSSL 14:167253f4e170 46597 #endif
wolfSSL 14:167253f4e170 46598 {
wolfSSL 14:167253f4e170 46599 /* t2 = y ^ 0x2 */
wolfSSL 14:167253f4e170 46600 sp_256_mont_sqr_4(t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46601 /* t1 = y ^ 0x3 */
wolfSSL 14:167253f4e170 46602 sp_256_mont_mul_4(t1, t2, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46603 /* t2 = y ^ 0xc */
wolfSSL 14:167253f4e170 46604 sp_256_mont_sqr_n_4(t2, t1, 2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46605 /* t1 = y ^ 0xf */
wolfSSL 14:167253f4e170 46606 sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46607 /* t2 = y ^ 0xf0 */
wolfSSL 14:167253f4e170 46608 sp_256_mont_sqr_n_4(t2, t1, 4, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46609 /* t1 = y ^ 0xff */
wolfSSL 14:167253f4e170 46610 sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46611 /* t2 = y ^ 0xff00 */
wolfSSL 14:167253f4e170 46612 sp_256_mont_sqr_n_4(t2, t1, 8, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46613 /* t1 = y ^ 0xffff */
wolfSSL 14:167253f4e170 46614 sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46615 /* t2 = y ^ 0xffff0000 */
wolfSSL 14:167253f4e170 46616 sp_256_mont_sqr_n_4(t2, t1, 16, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46617 /* t1 = y ^ 0xffffffff */
wolfSSL 14:167253f4e170 46618 sp_256_mont_mul_4(t1, t1, t2, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46619 /* t1 = y ^ 0xffffffff00000000 */
wolfSSL 14:167253f4e170 46620 sp_256_mont_sqr_n_4(t1, t1, 32, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46621 /* t1 = y ^ 0xffffffff00000001 */
wolfSSL 14:167253f4e170 46622 sp_256_mont_mul_4(t1, t1, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46623 /* t1 = y ^ 0xffffffff00000001000000000000000000000000 */
wolfSSL 14:167253f4e170 46624 sp_256_mont_sqr_n_4(t1, t1, 96, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46625 /* t1 = y ^ 0xffffffff00000001000000000000000000000001 */
wolfSSL 14:167253f4e170 46626 sp_256_mont_mul_4(t1, t1, y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46627 sp_256_mont_sqr_n_4(y, t1, 94, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46628 }
wolfSSL 14:167253f4e170 46629 }
wolfSSL 14:167253f4e170 46630
wolfSSL 14:167253f4e170 46631 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46632 if (d != NULL)
wolfSSL 14:167253f4e170 46633 XFREE(d, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46634 #endif
wolfSSL 14:167253f4e170 46635
wolfSSL 14:167253f4e170 46636 return err;
wolfSSL 14:167253f4e170 46637 }
wolfSSL 14:167253f4e170 46638
wolfSSL 14:167253f4e170 46639 /* Uncompress the point given the X ordinate.
wolfSSL 14:167253f4e170 46640 *
wolfSSL 14:167253f4e170 46641 * xm X ordinate.
wolfSSL 14:167253f4e170 46642 * odd Whether the Y ordinate is odd.
wolfSSL 14:167253f4e170 46643 * ym Calculated Y ordinate.
wolfSSL 14:167253f4e170 46644 * returns MEMORY_E if dynamic memory allocation fails and MP_OKAY otherwise.
wolfSSL 14:167253f4e170 46645 */
wolfSSL 14:167253f4e170 46646 int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym)
wolfSSL 14:167253f4e170 46647 {
wolfSSL 14:167253f4e170 46648 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46649 sp_digit* d;
wolfSSL 14:167253f4e170 46650 #else
wolfSSL 14:167253f4e170 46651 sp_digit xd[2 * 4];
wolfSSL 14:167253f4e170 46652 sp_digit yd[2 * 4];
wolfSSL 14:167253f4e170 46653 #endif
wolfSSL 14:167253f4e170 46654 sp_digit* x;
wolfSSL 14:167253f4e170 46655 sp_digit* y;
wolfSSL 14:167253f4e170 46656 int err = MP_OKAY;
wolfSSL 14:167253f4e170 46657 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46658 word32 cpuid_flags = cpuid_get_flags();
wolfSSL 14:167253f4e170 46659 #endif
wolfSSL 14:167253f4e170 46660
wolfSSL 14:167253f4e170 46661 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46662 d = XMALLOC(sizeof(sp_digit) * 4 * 4, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46663 if (d != NULL) {
wolfSSL 14:167253f4e170 46664 x = d + 0 * 4;
wolfSSL 14:167253f4e170 46665 y = d + 2 * 4;
wolfSSL 14:167253f4e170 46666 }
wolfSSL 14:167253f4e170 46667 else
wolfSSL 14:167253f4e170 46668 err = MEMORY_E;
wolfSSL 14:167253f4e170 46669 #else
wolfSSL 14:167253f4e170 46670 x = xd;
wolfSSL 14:167253f4e170 46671 y = yd;
wolfSSL 14:167253f4e170 46672 #endif
wolfSSL 14:167253f4e170 46673
wolfSSL 14:167253f4e170 46674 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46675 sp_256_from_mp(x, 4, xm);
wolfSSL 14:167253f4e170 46676
wolfSSL 14:167253f4e170 46677 err = sp_256_mod_mul_norm_4(x, x, p256_mod);
wolfSSL 14:167253f4e170 46678 }
wolfSSL 14:167253f4e170 46679
wolfSSL 14:167253f4e170 46680 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46681 /* y = x^3 */
wolfSSL 14:167253f4e170 46682 #ifdef HAVE_INTEL_AVX2
wolfSSL 14:167253f4e170 46683 if (IS_INTEL_BMI2(cpuid_flags) && IS_INTEL_ADX(cpuid_flags)) {
wolfSSL 14:167253f4e170 46684 sp_256_mont_sqr_avx2_4(y, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46685 sp_256_mont_mul_avx2_4(y, y, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46686 }
wolfSSL 14:167253f4e170 46687 else
wolfSSL 14:167253f4e170 46688 #endif
wolfSSL 14:167253f4e170 46689 {
wolfSSL 14:167253f4e170 46690 sp_256_mont_sqr_4(y, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46691 sp_256_mont_mul_4(y, y, x, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46692 }
wolfSSL 14:167253f4e170 46693 /* y = x^3 - 3x */
wolfSSL 14:167253f4e170 46694 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 46695 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 46696 sp_256_mont_sub_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 46697 /* y = x^3 - 3x + b */
wolfSSL 14:167253f4e170 46698 err = sp_256_mod_mul_norm_4(x, p256_b, p256_mod);
wolfSSL 14:167253f4e170 46699 }
wolfSSL 14:167253f4e170 46700 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46701 sp_256_mont_add_4(y, y, x, p256_mod);
wolfSSL 14:167253f4e170 46702 /* y = sqrt(x^3 - 3x + b) */
wolfSSL 14:167253f4e170 46703 err = sp_256_mont_sqrt_4(y);
wolfSSL 14:167253f4e170 46704 }
wolfSSL 14:167253f4e170 46705 if (err == MP_OKAY) {
wolfSSL 14:167253f4e170 46706 XMEMSET(y + 4, 0, 4 * sizeof(sp_digit));
wolfSSL 14:167253f4e170 46707 sp_256_mont_reduce_4(y, p256_mod, p256_mp_mod);
wolfSSL 14:167253f4e170 46708 if (((y[0] ^ odd) & 1) != 0)
wolfSSL 14:167253f4e170 46709 sp_256_mont_sub_4(y, p256_mod, y, p256_mod);
wolfSSL 14:167253f4e170 46710
wolfSSL 14:167253f4e170 46711 err = sp_256_to_mp(y, ym);
wolfSSL 14:167253f4e170 46712 }
wolfSSL 14:167253f4e170 46713
wolfSSL 14:167253f4e170 46714 #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK)
wolfSSL 14:167253f4e170 46715 if (d != NULL)
wolfSSL 14:167253f4e170 46716 XFREE(d, NULL, DYNAMIC_TYPE_ECC);
wolfSSL 14:167253f4e170 46717 #endif
wolfSSL 14:167253f4e170 46718
wolfSSL 14:167253f4e170 46719 return err;
wolfSSL 14:167253f4e170 46720 }
wolfSSL 14:167253f4e170 46721 #endif
wolfSSL 14:167253f4e170 46722 #endif /* WOLFSSL_SP_NO_256 */
wolfSSL 14:167253f4e170 46723 #endif /* WOLFSSL_HAVE_SP_ECC */
wolfSSL 14:167253f4e170 46724 #endif /* WOLFSSL_SP_X86_64_ASM */
wolfSSL 14:167253f4e170 46725 #endif /* WOLFSSL_HAVE_SP_RSA || WOLFSSL_HAVE_SP_DH || WOLFSSL_HAVE_SP_ECC */
wolfSSL 14:167253f4e170 46726