/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
*/

/* NewHope API implementation. Constant time.

	LOOK - no if statements!

   M.Scott 21/07/2017
*/

#include "newhope.h"

const sign16 roots[] ={0x2ac8,0x2baf,0x299b,0x685,0x2f04,0x158d,0x2d49,0x24b5,0x1edc,0xab3,0x2a95,0x24d,0x3cb,0x6a8,0x12f9,0x15ba,0x1861,0x2a89,0x1c5c,0xbe6,0xc1e,0x2024,0x207,0x19ce,0x2710,0x1744,0x18bc,0x2cd7,0x396,0x18d5,0x1c45,0xc4,0x21a6,0xe03,0x2b3c,0x2d91,0xc5d,0x432,0x1fbc,0xcae,0x2512,0x2979,0x3b2,0x714,0xb2e,0x1a97,0x1a03,0x1bcd,0x2216,0x2701,0xa,0x263c,0x1179,0x200c,0x2d08,0x1c34,0x291,0x2c99,0x2a5a,0x723,0xb1d,0x1ccc,0x1fb6,0x2f58,0x2bfe,0x1cda,0x2a0,0x5f1,0x2de,0x1fc7,0x1ea8,0x1719,0x2fa7,0x27ec,0x20ff,0x12c0,0x1ac1,0x2232,0x2f9b,0xd3e,0x2aed,0x15f0,0x11e8,0xed0,0x26a,0x1de5,0xa3f,0xf43,0xebf,0x204e,0xac7,0x2d9c,0x5ea,0x25d1,0xb6,0x49c,0x995,0x2555,0x26e2,0x100,0x1878,0x5aa,0x2e10,0x271c,0xcb,0x1b4c,0x2fb8,0x25b7,0x1543,0x2c7b,0x241a,0x2223,0x20ca,0x24ed,0x137,0x1b65,0x1dc2,0x7c7,0x2ec3,0xd0c,0x1169,0x1c7a,0x1ea1,0xf89,0x2199,0x291d,0x1088,0x2046,0x256d,0x2bc7,0x2e9b,0x41f,0x1b55,0x2b38,0xd0,0x2e6a,0x1755,0x6bc,0x2724,0x3ba,0x222e,0x2c5c,0x2da5,0x213c,0x10fe,0x169a,0x1552,0x5d3,0x300,0x1b5d,0x1342,0x2004,0x256f,0x2039,0x667,0x23b5,0x1123,0xdb,0x2da0,0xe1e,0x2f54,0x2767,0x154a,0x40a,0x11d3,0x2821,0xc09,0x974,0x694,0xfbf,0x27ba,0x132,0x83f,0x2d06,0x10e,0x183f,0x29ae,0x28c3,0x2dc9,0x1144,0x2c70,0x2a4a,0xf3c,0x1e32,0x1171,0x1e43,0xdd4,0x2ddf,0x28d2,0xfac,0x3c4,0x2f19,0x10a6,0x2f7,0xe1d,0x828,0x138f,0x1332,0xfab,0xcf6,0x13f8,0x24a0,0x112d,0x2717,0x6e7,0x1044,0x36e,0xfe8,0x6a,0xba7,0x1d69,0x29ec,0x23b2,0xaee,0x16df,0x1068,0x1a7e,0x253f,0x24c,0xb33,0x2683,0x15ce,0x1ad3,0x1a36,0xc96,0xaea,0x260a,0xce,0x28b1,0xe4f,0x2b11,0x5f8,0x1fc4,0xe77,0x2366,0x11f9,0x153c,0x24eb,0x20cd,0x1398,0x22,0x2b97,0x249b,0x8eb,0x12b2,0x2fe3,0x29c1,0x1b00,0x2663,0xeaa,0x2e06,0xe0,0x1569,0x10f5,0x284e,0xa38,0x201d,0x1c53,0x1681,0x1f6f,0x2f95,0x2fe8,0xacb,0x1680,0x17fd,0x2c39,0x165a,0x10bb,0x29d8,0x2622,0x1196,0x884,0x2a79,0x140e,0x2d80,0x6fa,0x11b2,0x26c4,0x355,0x1054,0x29e9,0x23ed,0xbe3,0x24fa,0x1fb3,0x10ac,0x2919,0x2584,0x10a4,0xe85,0x650,0x1893,0x1dc1,0xd8e,0x12dc,0x2d42,0x284d,0xfff,0x250f,0xacd,0x13c3,0x6cc,0x1a79,0x1221,0x2614,0x270a,0x1ea,0x155,0x2818,0x222c,0x2e5b,0x25d8,0x1dbf,0x191c,0xb0f,0xdac,0x1082,0x12ef,0x11b6,0xfa8,0x2b72,0x159d,0x209e,0x31b,0x2c7c,0x14f7,0xe09,0x1bb2,0x1ec7,0x2404,0x20ae,0x6ad,0xed6,0x2b70,0x1c7b,0x18d1,0x2732,0x12da,0xd56,0x5c1,0x1648,0x18b7,0x1605,0x1bc4,0x280,0x2ece,0xc,0x1aae,0x1c4,0x1cdb,0x22d6,0x21d8,0x257c,0x51f,0x211b,0xff,0x2ee0,0x2585,0xe1,0x2c35,0x26db,0x2971,0x2208,0x17e1,0x21be,0x135e,0x28d6,0x2891,0x1689,0x2138,0xb86,0x2e3a,0x1204,0x2d10,0x2324,0xf3f,0x2508,0x33d,0xcb2,0x292a,0xe27,0x2e64,0x29f8,0x2d46,0x9b7,0x20eb,0x1b7c,0x9eb,0x2b2a,0x58c,0x27d0,0x121b,0x272e,0x29f6,0x2dbd,0x2697,0x2aac,0xd6f,0x1c67,0x2c5b,0x108d,0x363,0x249d,0x2d5e,0x2fd,0x2cb2,0x1f8f,0x20a4,0xa19,0x2ac9,0x19b1,0x1581,0x17a2,0x29eb,0x1b72,0x13b0,0xee4,0xa8f,0x2315,0x5e6,0x951,0x2e29,0xdad,0x1f2b,0x224e,0x37f,0x1a72,0xa91,0x1407,0x2df9,0x3ad,0x23f7,0x1a24,0x1d2a,0x234b,0x1df3,0x1143,0x7ff,0x1a6d,0x2774,0x2690,0x2ab5,0x586,0x2781,0x2009,0x2fdd,0x2881,0x399,0x2fb6,0x144,0x137f,0xfa0,0x2e4c,0x1c7f,0x2fac,0xb09,0x1264,0x127b,0x198c,0x2b40,0x230,0x1cf4,0x180b,0xb58,0x144a,0x2aec,0xfb,0x2602,0x14ee,0x783,0x1098,0x23d8,0x203,0xe9,0x108a,0x14b8,0xeec,0xc58,0x1248,0x243c,0x28aa,0x6bf,0x27c4,0x276e,0x19b8,0x1d11,0x2e16,0x472,0x1464,0x24b9,0x662,0x1097,0x2067,0x20d6,0x171c,0x4,0x682,0x17bb,0x1186,0x4f2,0x3ff,0x2a43,0x1dc7,0x1ae5,0x8cc,0x2e7c,0x2ef8,0x2ae0,0x2904,0xed4,0x6c5,0x14ae,0xb72,0x11c3,0x337,0x2da3,0x2916,0x6d8,0x1cf9,0x10ee,0x1800,0x1ae4,0xa0d,0x101b,0x1a8d,0x2e98,0x24cd,0x813,0x1aa4,0x9b9,0x680,0x2349,0x24d1,0x20f8,0xe31,0x249f,0x216b,0x12d9,0x1d21,0x19db,0x191a,0x1dd0,0x5df,0x55c,0x2b86,0x213,0xe9e,0x1ef1,0x268a,0x1d5e,0x1e20,0x28c1,0x1379,0x249,0x19de,0x18b,0x1e41,0x2a1e,0x2612,0x297,0x2e96,0x2102,0x46,0x1b9f,0x1a4d,0x2050,0x1b32,0x568,0x11f7,0x1829,0x870,0x1f4,0x1dca,0x990,0x1df6,0x2b62,0x13ec,0x9f2,0x1260,0x2997,0x1412,0x1e6d,0x1694,0x11ac,0x2d8b,0x276f,0x26f5,0x233e,0x2b44,0x2f5a,0x2d37,0x2cb1,0xc75,0x98d,0x1d56,0x7ae,0x10e6,0x113f,0x17b8,0xad3,0x737,0x221e,0x1b70,0x1f3e,0x2966,0x18b2,0x4fa,0x2044,0x1312,0x154e,0x2029,0x700,0x1b45,0x27a6,0x226a,0x21bf,0x58d,0x2f11,0x2e02,0x17fc,0x4d2,0x1757,0xcb1,0x2ef1,0x2582,0x1276,0x881,0x2fc0,0x104a,0x670,0x274f,0x2b53,0x19dd,0x752,0x1663,0xcbd,0x2b2b,0x2fc6,0x13b6,0x21e6,0x15f6,0x126b,0x2637,0x1cd9,0x2f50,0xe82,0x5b0,0x24e0,0x1350,0x2f24,0x21f7,0x1a16,0x2f3e,0x167e,0x1f7d,0x28a0,0x16f0,0xe33,0x53b,0x28c5,0x1500,0x2f88,0x26cc,0x2018,0x1604,0x218b,0x2cd1,0x9ee,0x17f3,0x5fd,0x1f5a,0x2d0,0x2b46,0x23cc,0x503,0x1c46,0x1cc3,0x28e2,0x243e,0x122b,0x2e0c,0xe37,0x2611,0x85e,0x9b8,0x1b24,0x762,0x19b6,0x3bc,0x2d50,0x2079,0x18da,0x170a,0x800,0xaa2,0x135a,0x1a15,0x13d1,0xca,0x2113,0x2db9,0xdb2,0x1a5c,0x29a9,0x1488,0x14c1,0x2c9,0x917,0x28e7,0x265c,0xdab,0x2ab9,0x2bc6,0x105b,0x1839,0x219c,0x50,0x11da,0x1802,0xf56,0x2e6,0x2190,0xddb,0x56e,0x9d9,0x1c81,0x1016,0x12d6,0x296f,0x14b4,0x1014,0x1e64,0x1d90,0x89f,0x2bc2,0x2777,0x2819,0x1c65,0x1a41,0x5a2,0x2cd2,0x427,0xd71,0x29c8,0x1e58,0x53f,0x7c5,0x1dcd,0x4a1,0x1268,0x2597,0x2926,0xee,0x111b,0x1038,0xe6c,0x22dc,0x2f2f,0x441,0x2cfd,0x1cb0,0x6a4,0x2224,0x620,0x5dc,0x16b1,0x2a1d,0x1787,0x20c7,0x641,0xd84,0x1c05,0x2d0d,0x2f52,0x1b8c,0xd7d,0x17e8,0x1589,0xc73,0x151b,0x4e2,0x1ae9,0x1b18,0xb9b,0x949,0x2c60,0x1e7a,0xd5,0x1bdc,0x1f57,0x1753,0x124a,0x559,0xb76,0x2334,0x12d1,0x1de1,0x14b2,0x2faa,0x1697,0x147a,0x5a1,0x2c30,0x1c02,0x1043,0x2ee1,0x2402,0x1cc8,0x2a16,0xff7,0x1364,0x1b9a,0x2a53,0x2f94,0x294c,0x1ee5,0x1a87,0x2141,0xd66,0x953,0x28a3,0x2f30,0x2477,0x18e3,0x1035,0x1fc1,0x1d68,0x2fb3,0x138c,0x2487,0x1bf8,0xd96,0x1018,0x748,0x244e,0x15bd,0x175e,0x2be,0x23d,0x1da,0x176d,0xc17,0x24be,0x2ebb,0x7d8,0x100a,0x759,0x1db4,0x2259,0x23f4,0x2d59,0x2847,0xbf5,0x1cfe,0xa20,0x258,0x1180,0x279c,0x54,0x2abf,0xc5c,0x9f9,0x3d5,0x2ce4,0x165f,0x23d9,0x27b9,0x6f9,0x281a,0x169e,0x627,0x156d,0x1ff8,0x211,0x2e34,0x1724,0x2c2e,0x2790,0x2dd5,0x2bf2,0xdbc,0x2884,0x20a9,0x2390,0x1e1a,0x1b6a,0x5f7,0xab7,0x1333,0x16ab,0x28dd,0x20,0x30f,0x24b6,0x5c2,0x1ce4,0x1400,0x2669,0x60,0x156c,0xe20,0x26d4,0x26ab,0x1ebb,0x223d,0x5b4,0x2025,0x1e1c,0xaae,0x2e08,0x6cd,0x1677,0x13d9,0x17b5,0x1046,0x1d8c,0x14eb,0x18d8,0x1ce5,0x2478,0x16ae,0xb79,0x23d4,0x684,0x156b,0x567,0x1a,0x29ce,0x83a,0x19e8,0x58e,0x294a,0x1136,0x2319,0x2fba,0x1a29,0x1d,0x1879,0x291b,0x19f6,0x2c2f,0x21c9,0x19bb,0xbbc,0x26f9,0xc22,0x708,0x11a1,0x18d3,0x7f8,0x28f8,0x2427,0x1deb,0xaed,0x26aa,0x2482,0x203b,0x2f05,0x2b82,0x192f,0x2df4,0x8dc,0x2877,0xd5e,0x240e,0x775,0x2dae,0x1d3e,0x20ba,0x215b,0x22d1,0xeba,0xf50,0xaa8,0x184a,0x1f67,0x2e04,0xc6e,0x6dd,0x1a09,0x27f,0x494,0x1426,0xae3,0xe15,0x65f,0x13c4,0x105,0x872,0x2667,0x1ff6,0xd9f,0x2ca1,0x2f39,0x2657,0x23fd,0x2405,0xb73,0x2294,0x1f1e,0x2eba,0x110a,0x2cae,0x141f,0x22cd,0x25d6,0x11c1,0x1c,0x2d8e,0x161a,0x1aa8,0x229e,0x1bf9,0x7cf,0x106d,0x2c40,0xd93,0x255e,0x28c2,0xc1a,0x2f17,0x7ca,0x2f63,0xbf};
const sign16 iroots[]= {0x2ac8,0x452,0x297c,0x666,0xb4c,0x2b8,0x1a74,0xfd,0x1a47,0x1d08,0x2959,0x2c36,0x2db4,0x56c,0x254e,0x1125,0x2f3d,0x13bc,0x172c,0x2c6b,0x32a,0x1745,0x18bd,0x8f1,0x1633,0x2dfa,0xfdd,0x23e3,0x241b,0x13a5,0x578,0x17a0,0xa9,0x104b,0x1335,0x24e4,0x28de,0x5a7,0x368,0x2d70,0x13cd,0x2f9,0xff5,0x1e88,0x9c5,0x2ff7,0x900,0xdeb,0x1434,0x15fe,0x156a,0x24d3,0x28ed,0x2c4f,0x688,0xaef,0x2353,0x1045,0x2bcf,0x23a4,0x270,0x4c5,0x21fe,0xe5b,0xfbb,0x1f79,0x6e4,0xe68,0x2078,0x1160,0x1387,0x1e98,0x22f5,0x13e,0x283a,0x123f,0x149c,0x2eca,0xb14,0xf37,0xdde,0xbe7,0x386,0x1abe,0xa4a,0x49,0x14b5,0x2f36,0x8e5,0x1f1,0x2a57,0x1789,0x2f01,0x91f,0xaac,0x266c,0x2b65,0x2f4b,0xa30,0x2a17,0x265,0x253a,0xfb3,0x2142,0x20be,0x25c2,0x121c,0x2d97,0x2131,0x1e19,0x1a11,0x514,0x22c3,0x66,0xdcf,0x1540,0x1d41,0xf02,0x815,0x5a,0x18e8,0x1159,0x103a,0x2d23,0x2a10,0x2d61,0x1327,0x403,0x25c9,0x7b3,0x1f0c,0x1a98,0x2f21,0x1fb,0x2157,0x99e,0x1501,0x640,0x1e,0x1d4f,0x2716,0xb66,0x46a,0x2fdf,0x1c69,0xf34,0xb16,0x1ac5,0x1e08,0xc9b,0x218a,0x103d,0x2a09,0x4f0,0x21b2,0x750,0x2f33,0x9f7,0x2517,0x236b,0x15cb,0x152e,0x1a33,0x97e,0x24ce,0x2db5,0xac2,0x1583,0x1f99,0x1922,0x2513,0xc4f,0x615,0x1298,0x245a,0x2f97,0x2019,0x2c93,0x1fbd,0x291a,0x8ea,0x1ed4,0xb61,0x1c09,0x230b,0x2056,0x1ccf,0x1c72,0x27d9,0x21e4,0x2d0a,0x1f5b,0xe8,0x2c3d,0x2055,0x72f,0x222,0x222d,0x11be,0x1e90,0x11cf,0x20c5,0x5b7,0x391,0x1ebd,0x238,0x73e,0x653,0x17c2,0x2ef3,0x2fb,0x27c2,0x2ecf,0x847,0x2042,0x296d,0x268d,0x23f8,0x7e0,0x1e2e,0x2bf7,0x1ab7,0x89a,0xad,0x21e3,0x261,0x2f26,0x1ede,0xc4c,0x299a,0xfc8,0xa92,0xffd,0x1cbf,0x14a4,0x2d01,0x2a2e,0x1aaf,0x1967,0x1f03,0xec5,0x25c,0x3a5,0xdd3,0x2c47,0x8dd,0x2945,0x18ac,0x197,0x2f31,0x4c9,0x14ac,0x2be2,0x166,0x43a,0xa94,0x1b53,0x293c,0x212d,0x6fd,0x521,0x109,0x185,0x2735,0x151c,0x123a,0x5be,0x2c02,0x2b0f,0x1e7b,0x1846,0x297f,0x2ffd,0x18e5,0xf2b,0xf9a,0x1f6a,0x299f,0xb48,0x1b9d,0x2b8f,0x1eb,0x12f0,0x1649,0x893,0x83d,0x2942,0x757,0xbc5,0x1db9,0x23a9,0x2115,0x1b49,0x1f77,0x2f18,0x2dfe,0xc29,0x1f69,0x287e,0x1b13,0x9ff,0x2f06,0x515,0x1bb7,0x24a9,0x17f6,0x130d,0x2dd1,0x4c1,0x1675,0x1d86,0x1d9d,0x24f8,0x55,0x1382,0x1b5,0x2061,0x1c82,0x2ebd,0x4b,0x2c68,0x780,0x24,0xff8,0x880,0x2a7b,0x54c,0x971,0x88d,0x1594,0x2802,0x1ebe,0x120e,0xcb6,0x12d7,0x15dd,0xc0a,0x2c54,0x208,0x1bfa,0x2570,0x158f,0x2c82,0xdb3,0x10d6,0x2254,0x1d8,0x26b0,0x2a1b,0xcec,0x2572,0x211d,0x1c51,0x148f,0x616,0x185f,0x1a80,0x1650,0x538,0x25e8,0xf5d,0x1072,0x34f,0x2d04,0x2a3,0xb64,0x2c9e,0x1f74,0x3a6,0x139a,0x2292,0x555,0x96a,0x244,0x60b,0x8d3,0x1de6,0x831,0x2a75,0x4d7,0x2616,0x1485,0xf16,0x264a,0x2bb,0x609,0x19d,0x21da,0x6d7,0x234f,0x2cc4,0xaf9,0x20c2,0xcdd,0x2f1,0x1dfd,0x1c7,0x247b,0xec9,0x1978,0x770,0x72b,0x1ca3,0xe43,0x1820,0xdf9,0x690,0x926,0x3cc,0x2f20,0xa7c,0x121,0x2f02,0xee6,0x2ae2,0xa85,0xe29,0xd2b,0x1326,0x2e3d,0x1553,0x2ff5,0x133,0x2d81,0x143d,0x19fc,0x174a,0x19b9,0x2a40,0x22ab,0x1d27,0x8cf,0x1730,0x1386,0x491,0x212b,0x2954,0xf53,0xbfd,0x113a,0x144f,0x21f8,0x1b0a,0x385,0x2ce6,0xf63,0x1a64,0x48f,0x2059,0x1e4b,0x1d12,0x1f7f,0x2255,0x24f2,0x16e5,0x1242,0xa29,0x1a6,0xdd5,0x7e9,0x2eac,0x2e17,0x8f7,0x9ed,0x1de0,0x1588,0x2935,0x1c3e,0x2534,0xaf2,0x2002,0x7b4,0x2bf,0x1d25,0x2273,0x1240,0x176e,0x29b1,0x217c,0x1f5d,0xa7d,0x6e8,0x1f55,0x104e,0xb07,0x241e,0xc14,0x618,0x1fad,0x2cac,0x93d,0x1e4f,0x2907,0x281,0x1bf3,0x588,0x277d,0x1e6b,0x9df,0x629,0x1f46,0x19a7,0x3c8,0x1804,0x1981,0x2536,0x19,0x6c,0x1092,0x1980,0x13ae,0xfe4,0x2f42,0x9e,0x2837,0xea,0x23e7,0x73f,0xaa3,0x226e,0x3c1,0x1f94,0x2832,0x1408,0xd63,0x1559,0x19e7,0x273,0x2fe5,0x1e40,0xa2b,0xd34,0x1be2,0x353,0x1ef7,0x147,0x10e3,0xd6d,0x248e,0xbfc,0xc04,0x9aa,0xc8,0x360,0x2262,0x100b,0x99a,0x278f,0x2efc,0x1c3d,0x29a2,0x21ec,0x251e,0x1bdb,0x2b6d,0x2d82,0x15f8,0x2924,0x2393,0x1fd,0x109a,0x17b7,0x2559,0x20b1,0x2147,0xd30,0xea6,0xf47,0x12c3,0x253,0x288c,0xbf3,0x22a3,0x78a,0x2725,0x20d,0x16d2,0x47f,0xfc,0xfc6,0xb7f,0x957,0x2514,0x1216,0xbda,0x709,0x2809,0x172e,0x1e60,0x28f9,0x23df,0x908,0x2445,0x1646,0xe38,0x3d2,0x160b,0x6e6,0x1788,0x2fe4,0x15d8,0x47,0xce8,0x1ecb,0x6b7,0x2a73,0x1619,0x27c7,0x633,0x2fe7,0x2a9a,0x1a96,0x297d,0xc2d,0x2488,0x1953,0xb89,0x131c,0x1729,0x1b16,0x1275,0x1fbb,0x184c,0x1c28,0x198a,0x2934,0x1f9,0x2553,0x11e5,0xfdc,0x2a4d,0xdc4,0x1146,0x956,0x92d,0x21e1,0x1a95,0x2fa1,0x998,0x1c01,0x131d,0x2a3f,0xb4b,0x2cf2,0x2fe1,0x724,0x1956,0x1cce,0x254a,0x2a0a,0x1497,0x11e7,0xc71,0xf58,0x77d,0x2245,0x40f,0x22c,0x871,0x3d3,0x18dd,0x1cd,0x2df0,0x1009,0x1a94,0x29da,0x1963,0x7e7,0x2908,0x848,0xc28,0x19a2,0x31d,0x2c2c,0x2608,0x23a5,0x542,0x2fad,0x865,0x1e81,0x2da9,0x25e1,0x1303,0x240c,0x7ba,0x2a8,0xc0d,0xda8,0x124d,0x28a8,0x1ff7,0x2829,0x146,0xb43,0x23ea,0x1894,0x2e27,0x2dc4,0x2d43,0x18a3,0x1a44,0xbb3,0x28b9,0x1fe9,0x226b,0x1409,0xb7a,0x1c75,0x4e,0x1299,0x1040,0x1fcc,0x171e,0xb8a,0xd1,0x75e,0x26ae,0x229b,0xec0,0x157a,0x111c,0x6b5,0x6d,0x5ae,0x1467,0x1c9d,0x200a,0x5eb,0x1339,0xbff,0x120,0x1fbe,0x13ff,0x3d1,0x2a60,0x1b87,0x196a,0x57,0x1b4f,0x1220,0x1d30,0xccd,0x248b,0x2aa8,0x1db7,0x18ae,0x10aa,0x1425,0x2f2c,0x1187,0x3a1,0x26b8,0x2466,0x14e9,0x1518,0x2b1f,0x1ae6,0x238e,0x1a78,0x1819,0x2284,0x1475,0xaf,0x2f4,0x13fc,0x227d,0x29c0,0xf3a,0x187a,0x5e4,0x1950,0x2a25,0x29e1,0xddd,0x295d,0x1351,0x304,0x2bc0,0xd2,0xd25,0x2195,0x1fc9,0x1ee6,0x2f13,0x6db,0xa6a,0x1d99,0x2b60,0x1234,0x283c,0x2ac2,0x11a9,0x639,0x2290,0x2bda,0x32f,0x2a5f,0x15c0,0x139c,0x7e8,0x88a,0x43f,0x2762,0x1271,0x119d,0x1fed,0x1b4d,0x692,0x1d2b,0x1feb,0x1380,0x2628,0x2a93,0x2226,0xe71,0x2d1b,0x20ab,0x17ff,0x1e27,0x2fb1,0xe65,0x17c8,0x1fa6,0x43b,0x548,0x2256,0x9a5,0x71a,0x26ea,0x2d38,0x1b40,0x1b79,0x658,0x15a5,0x224f,0x248,0xeee,0x2f37,0x1c30,0x15ec,0x1ca7,0x255f,0x2801,0x18f7,0x1727,0xf88,0x2b1,0x2c45,0x164b,0x289f,0x14dd,0x2649,0x27a3,0x9f0,0x21ca,0x1f5,0x1dd6,0xbc3,0x71f,0x133e,0x13bb,0x2afe,0xc35,0x4bb,0x2d31,0x10a7,0x2a04,0x180e,0x2613,0x330,0xe76,0x19fd,0xfe9,0x935,0x79,0x1b01,0x73c,0x2ac6,0x21ce,0x1911,0x761,0x1084,0x1983,0xc3,0x15eb,0xe0a,0xdd,0x1cb1,0xb21,0x2a51,0x217f,0xb1,0x1328,0x9ca,0x1d96,0x1a0b,0xe1b,0x1c4b,0x3b,0x4d6,0x2344,0x199e,0x28af,0x1624,0x4ae,0x8b2,0x2991,0x1fb7,0x41,0x2780,0x1d8b,0xa7f,0x110,0x2350,0x18aa,0x2b2f,0x1805,0x1ff,0xf0,0x2a74,0xe42,0xd97,0x85b,0x14bc,0x2901,0xfd8,0x1ab3,0x1cef,0xfbd,0x2b07,0x174f,0x69b,0x10c3,0x1491,0xde3,0x28ca,0x252e,0x1849,0x1ec2,0x1f1b,0x2853,0x12ab,0x2674,0x238c,0x350,0x2ca,0xa7,0x4bd,0xcc3,0x90c,0x892,0x276,0x1e55,0x196d,0x1194,0x1bef,0x66a,0x1da1,0x260f,0x1c15,0x49f,0x120b,0x2671,0x1237,0x2e0d,0x2791,0x17d8,0x1e0a,0x2a99,0x14cf,0xfb1,0x15b4,0x1462,0x2fbb,0xeff,0x16b,0x2d6a,0x9ef,0x5e3,0x11c0,0x2e76,0x1623,0x2db8,0x1c88,0x740,0x11e1,0x12a3,0x977,0x1110,0x2163,0x2dee,0x47b,0x2aa5,0x2a22,0x1231,0x16e7,0x1626,0x12e0,0x1d28,0xe96,0xb62,0x21d0,0xf09,0xb30,0xcb8,0x2981,0x2648,0x155d,0x27ee,0xb34,0x169,0x1574,0x1fe6,0x25f4,0x151d,0x1801,0x1f13,0x1308,0x2929,0x6eb,0x25e,0x2cca,0x1e3e,0x248f};
const sign16 inv= 0xeab;
const sign16 invpr= 0x2c2a;

#define DEGREE (1<<RLWE_LGN)
#define WL 32

#define round(a,b) (((a)+((b)/2))/(b))

/* constant time absolute vaue */
static sign32 nabs(sign32 x)
{
	sign32 mask=(x>>31);
	return (x+mask)^mask;
}

/* Montgomery stuff */

static sign32 redc(unsign64 T)
{
	unsign32 m=(unsign32)T*(unsign32)RLWE_ND;
	return ((unsign64)m*RLWE_PRIME+T)>>WL;
}

static sign32 nres(unsign32 x)
{
	return redc((unsign64)x*RLWE_R2MODP);
}

static sign32 modmul(unsign32 a,unsign32 b)
{
	return redc((unsign64)a*b);
}

/* NTT code */
/* Cooley-Tukey NTT */

static void ntt(sign32 *x)
{
	int m,i,j,k,t=DEGREE/2;
	sign32 S,U,V,W,q=RLWE_PRIME;

/* Convert to Montgomery form */
	for (j=0;j<DEGREE;j++)
		x[j]=nres(x[j]);

	m=1;
	while (m<DEGREE)
	{
		k=0;
		for (i=0;i<m;i++)
		{
			S=roots[m+i];
			for (j=k;j<k+t;j++)
			{
				U=x[j];   
				V=modmul(x[j+t],S);
				x[j]=U+V;
				x[j+t]=U+2*q-V;
			}
			k+=2*t;
		}
		t/=2;
		m*=2;
	}
}

/* Gentleman-Sande INTT */

static void intt(sign32 *x)
{
	int m,i,j,k,t=1;
	sign32 S,U,V,W,q=RLWE_PRIME;

	m=DEGREE/2;
	while (m>1)
	{
		k=0;
		for (i=0;i<m;i++)
		{
			S=iroots[m+i];
			for (j=k;j<k+t;j++)
			{	
				U=x[j]; 
				V=x[j+t];
				x[j]=U+V;	
				W=U+DEGREE*q-V; 
				x[j+t]=modmul(W,S); 
			}
			k+=2*t;
		}
		t*=2;
		m/=2;
	}

/* Last iteration merged with n^-1 */

	t=DEGREE/2;
	for (j=0;j<t;j++)
	{
		U=x[j];
		V=x[j+t];
		W=U+DEGREE*q-V; 
		x[j+t]=modmul(W,(sign32)invpr); 
		x[j]=modmul(U+V,(sign32)inv);
	}
/* convert back from Montgomery to "normal" form */
	for (j=0;j<DEGREE;j++)
	{
		x[j]=redc(x[j]);  
		x[j]-=q;
		x[j]+=(x[j]>>(WL-1))&q;
	} 
}

/* See https://eprint.iacr.org/2016/1157.pdf */ 

static void NHSEncode(byte *key,sign32 *poly)
{
	int i,j,b,k,kj,q2;

	q2=RLWE_PRIME/2;
	for (i=j=0;i<256;)
	{
		kj=key[j++];
		for (k=0;k<8;k++)
		{
			b=kj&1;
			poly[i]=b*q2;
			poly[i+256]=b*q2;
			poly[i+512]=b*q2;
			poly[i+768]=b*q2;
			kj>>=1;
			i++;
		}
	}		
}

static void NHSDecode(sign32 *poly,byte *key)
{
	int i,j,k;
	sign32 b,t,q2;
	q2=RLWE_PRIME/2;
	for (i=0;i<32;i++)
		key[i]=0;

	for (i=j=0;i<256;)
	{
		for (k=0;k<8;k++)
		{
			t=nabs(poly[i]-q2)+nabs(poly[i+256]-q2)+nabs(poly[i+512]-q2)+nabs(poly[i+768]-q2);

			b=t-RLWE_PRIME;
			b=(b>>31)&1;
			key[j]=(key[j]>>1)+(b<<7);
			i++;
		}
		j++;
	}
}

/* convert 32-byte seed to random polynomial */

static void parse(byte *seed,sign32 *poly)
{
	int i,j;
	sign32 n;
	byte hash[4*DEGREE];
	sha3 sh;

	SHA3_init(&sh,SHAKE128);
	for (i=0;i<32;i++)
		SHA3_process(&sh,seed[i]);
	SHA3_shake(&sh,(char *)hash,4*DEGREE);

	for (i=j=0;i<DEGREE;i++)
	{

		n=hash[j]&0x7f; n<<=8;
		n+=hash[j+1]; n<<=8;
		n+=hash[j+2]; n<<=8;
		n+=hash[j+3]; j+=4;
		poly[i]=nres(n);
		//poly[i]=modmul(n,RLWE_ONE); // reduce 31-bit random number mod q
	}
} 

/* Compress 14 bits polynomial coefficients into byte array */
/* 7 bytes is 3x14 */

static void NHSpack(sign32 *poly,byte *array)
{
	int i,j;
	sign32 a,b,c,d;

	for (i=j=0;i<DEGREE; )
	{
		a=poly[i++]; b=poly[i++]; c=poly[i++]; d=poly[i++];
		array[j++]=(byte)(a&0xff);
		array[j++]=(byte)(((a>>8)|(b<<6))&0xff);
		array[j++]=(byte)((b>>2)&0xff);
		array[j++]=(byte)(((b>>10)|(c<<4))&0xff);
		array[j++]=(byte)((c>>4)&0xff);
		array[j++]=(byte)(((c>>12)|(d<<2))&0xff);
		array[j++]=(byte)(d>>6);
	}
}

static void NHSunpack(byte *array,sign32 *poly)
{
	int i,j;
	sign32 a,b,c,d,e,f,g;

	for (i=j=0;i<DEGREE; )
	{
		a=((sign32)array[j++])&0xff; b=((sign32)array[j++])&0xff; c=((sign32)array[j++])&0xff; d=((sign32)array[j++])&0xff; e=((sign32)array[j++])&0xff; f=((sign32)array[j++])&0xff; g=((sign32)array[j++])&0xff;
		poly[i++]=a|((b&0x3f)<<8);
		poly[i++]=(b>>6)|(c<<2)|((d&0xf)<<10);
		poly[i++]=(d>>4)|(e<<4)|((f&3)<<12);
		poly[i++]=(f>>2)|(g<<6);
	}
}



/* See https://eprint.iacr.org/2016/1157.pdf */ 

static void NHSCompress(sign32 *poly,byte *array)
{
	int i,j,k,b;
	unsign32 col=0;

	for (i=j=0;i<DEGREE;)
	{
		for (k=0;k<8;k++)
		{
			b=round((poly[i]*8),RLWE_PRIME)&7; 
			col=(col<<3)+b;
			i++;
		}
		array[j]=col&0xff;
		array[j+1]=(col>>8)&0xff;
		array[j+2]=(col>>16)&0xff;
		j+=3; col=0;
	}
}

static void NHSDecompress(byte *array,sign32 *poly)
{
	int i,j,k,b;
	unsign32 col=0;

	for (i=j=0;i<DEGREE;)
	{
		col=array[j+2];
		col=(col<<8)+array[j+1];
		col=(col<<8)+array[j];
		j+=3;
		for (k=0;k<8;k++)
		{
			b=(col&0xe00000)>>21; col<<=3;
			poly[i]=round((b*RLWE_PRIME),8);
			i++;
		}
	}
}

/* generate centered binomial distribution */ 

static void NHSError(csprng *RNG,sign32 *poly)
{
	int i,j;
	sign32 n1,n2,r;
	for (i=0;i<DEGREE;i++)
	{
		n1=RAND_byte(RNG)+(RAND_byte(RNG)<<8);
		n2=RAND_byte(RNG)+(RAND_byte(RNG)<<8);
		r=0;
		for (j=0;j<16;j++)
		{
			r+=(n1&1)-(n2&1);
			n1>>=1; n2>>=1;
		}
		poly[i]=(r+RLWE_PRIME);
	}
}

static void redc_it(sign32 *p)
{
	int i;
	for (i=0;i<DEGREE;i++)
		p[i]=redc(p[i]);
}

static void nres_it(sign32 *p)
{
	int i;
	for (i=0;i<DEGREE;i++)
		p[i]=nres(p[i]);
}

static void poly_mul(sign32 *p1,sign32 *p2,sign32 *p3)
{
	int i;
	for (i=0;i<DEGREE;i++)
		p1[i]=modmul(p2[i],p3[i]);
}

static void poly_add(sign32 *p1,sign32 *p2,sign32 *p3)
{
	int i;
	for (i=0;i<DEGREE;i++)
		p1[i]=(p2[i]+p3[i]);
}

static void poly_sub(sign32 *p1,sign32 *p2,sign32 *p3)
{
	int i;
	for (i=0;i<DEGREE;i++)
		p1[i]=(p2[i]+RLWE_PRIME-p3[i]);
}

/* reduces inputs < 2q */
static void poly_soft_reduce(sign32 *poly)
{
	int i;
	sign32 e;
	for (i=0;i<DEGREE;i++)
	{
		e=poly[i]-RLWE_PRIME;
		poly[i]=e+((e>>(WL-1))&RLWE_PRIME);
	}
}

/* fully reduces modulo q */
static void poly_hard_reduce(sign32 *poly)
{
	int i;
	sign32 e;
	for (i=0;i<DEGREE;i++)
	{
		e=modmul(poly[i],RLWE_ONE);
		e=e-RLWE_PRIME;
		poly[i]=e+((e>>(WL-1))&RLWE_PRIME);
	}
}

/* API files */

void NHS_SERVER_1(csprng *RNG,octet *SB,octet *S)
{
	int i;
	byte seed[32],array[1792];
	sign32 s[DEGREE],e[DEGREE],b[DEGREE];

	for (i=0;i<32;i++)
		seed[i]=RAND_byte(RNG);

	parse(seed,b);
	
	NHSError(RNG,e);
	NHSError(RNG,s);

	ntt(s);
	ntt(e);
	poly_mul(b,b,s);
	poly_add(b,b,e);
	poly_hard_reduce(b);

	redc_it(b);
	NHSpack(b,array);

	OCT_empty(SB);
	OCT_jbytes(SB,(char *)seed,32);
	OCT_jbytes(SB,(char *)array,1792);

	poly_hard_reduce(s);

	NHSpack(s,array);
	OCT_empty(S);
	OCT_jbytes(S,(char *)array,1792);

}

void NHS_CLIENT(csprng *RNG,octet *SB,octet *UC,octet *KEY)
{
	int i;
	sha3 sh;
	byte seed[32],array[1792],key[32],cc[384];
	sign32 sd[DEGREE],ed[DEGREE],u[DEGREE],k[DEGREE],c[DEGREE];
	NHSError(RNG,sd);
	NHSError(RNG,ed);

	ntt(sd);
	ntt(ed);

	for (i=0;i<32;i++)
		seed[i]=SB->val[i];

	for (i=0;i<1792;i++)
		array[i]=SB->val[i+32];

	parse(seed,u);

	poly_mul(u,u,sd);
	poly_add(u,u,ed);
	poly_hard_reduce(u);

	for (i=0;i<32;i++)
		key[i]=RAND_byte(RNG);

	SHA3_init(&sh,SHA3_HASH256);
	for (i=0;i<32;i++)
		SHA3_process(&sh,key[i]);
	SHA3_hash(&sh,(char *)key);

	NHSEncode(key,k);

	NHSunpack(array,c);
	nres_it(c);

	poly_mul(c,c,sd);
	intt(c);
	NHSError(RNG,ed);
	poly_add(c,c,ed);
	poly_add(c,c,k);

	NHSCompress(c,cc);

	SHA3_init(&sh,SHA3_HASH256);
	for (i=0;i<32;i++)
		SHA3_process(&sh,key[i]);
	SHA3_hash(&sh,(char *)key);

	OCT_empty(KEY);
	OCT_jbytes(KEY,(char *)key,32);

	redc_it(u);
	NHSpack(u,array);

	OCT_empty(UC);
	OCT_jbytes(UC,(char *)array,1792);
	OCT_jbytes(UC,(char *)cc,384);
}

void NHS_SERVER_2(octet *S,octet *UC,octet *KEY)
{
	int i;
	sha3 sh;
	sign32 c[DEGREE],s[DEGREE],k[DEGREE];
	byte array[1792],key[32],cc[384];

	for (i=0;i<1792;i++)
		array[i]=UC->val[i];

	NHSunpack(array,k);
	nres_it(k);

	for (i=0;i<384;i++)
		cc[i]=UC->val[i+1792];

	NHSDecompress(cc,c);

	for (i=0;i<1792;i++)
		array[i]=S->val[i];

	NHSunpack(array,s);

	poly_mul(k,k,s);
	intt(k);
	poly_sub(k,c,k);
	poly_soft_reduce(k);

	NHSDecode(k,key);

	SHA3_init(&sh,SHA3_HASH256);
	for (i=0;i<32;i++)
		SHA3_process(&sh,key[i]);
	SHA3_hash(&sh,(char *)key);

	OCT_empty(KEY);
	OCT_jbytes(KEY,(char *)key,32);
}

