/* * Copyright (c) 2012-2020 MIRACL UK Ltd. * * This file is part of MIRACL Core * (see https://github.com/miracl/core). * * Licensed 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 Simple API */ #ifndef NHS_H #define NHS_H #include "core.h" /* NewHope parameters */ //q= 12289 #define RLWE_PRIME 0x3001 // q in Hex #define RLWE_LGN 10 // Degree n=2^LGN #define RLWE_ND 0xF7002FFF // 1/(R-q) mod R #define RLWE_ONE 0x2AC8 // R mod q #define RLWE_R2MODP 0x1620 // R^2 mod q namespace core { /** @brief NHS server first pass * @param RNG Random Number Generator handle @param SB seed and polynomial B concatenated - output @param S server secret - output */ extern void NHS_SERVER_1(csprng *RNG, octet *SB, octet *S); /** @brief NHS client pass * @param RNG Random Number Generator handle @param SB seed and polynomial B concatenated - input @param UC polynomial U and compressed polynomial c - output @param KEY client key */ extern void NHS_CLIENT(csprng *RNG, octet *SB, octet *UC, octet *KEY); /** @brief NHS server second pass * @param S server secret - input @param UC polynomial U and compressed polynomial c - input @param KEY server key */ extern void NHS_SERVER_2(octet *S, octet *UC, octet *KEY); } #endif