MastersThesis/PQ_TIIGER_TLS/sal/miracl-ubuntu22-11-04-24/includes/dilithium.h
2024-04-19 14:16:07 +02:00

152 lines
3.9 KiB
C++

/*
* 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.
*/
/* Dilithium API */
#ifndef DILITHIUM_H
#define DILITHIUM_H
#include "core.h"
/* DILITHIUM parameters */
//q= 8380417
#define DL_LGN 8
#define DL_DEGREE (1 << DL_LGN)
#define DL_PRIME 0x7fe001
#define DL_D 13
#define DL_TD (23-DL_D)
#define DL_ONE 0x3FFE00 // R mod Q
#define DL_COMBO 0xA3FA // ONE*inv mod Q
#define DL_R2MODP 0x2419FF // R^2 mod Q
#define DL_ND 0xFC7FDFFF // 1/(R-Q) mod R
#define DL_MAXLG 19
#define DL_MAXK 8 // could reduce these if not using highest security
#define DL_MAXL 7
#define DL_YBYTES (((DL_MAXLG+1)*DL_DEGREE)/8)
#define DL_SK_SIZE_2 (32*3+DL_DEGREE*(4*13+4*3+4*3)/8)
#define DL_PK_SIZE_2 ((4*DL_DEGREE*DL_TD)/8+32)
#define DL_SIG_SIZE_2 ((DL_DEGREE*4*(17+1))/8+80+4+32)
#define DL_SK_SIZE_3 (32*3+DL_DEGREE*(6*13+5*4+6*4)/8)
#define DL_PK_SIZE_3 ((6*DL_DEGREE*DL_TD)/8+32)
#define DL_SIG_SIZE_3 ((DL_DEGREE*5*(19+1))/8+55+6+32)
#define DL_SK_SIZE_5 (32*3+DL_DEGREE*(8*13+7*3+8*3)/8)
#define DL_PK_SIZE_5 ((8*DL_DEGREE*DL_TD)/8+32)
#define DL_SIG_SIZE_5 ((DL_DEGREE*7*(19+1))/8+75+8+32)
namespace core {
/** @brief Dilithium signature key pair generation
*
@param tau Random Numbers
@param SK secret key
@param PK public key
*/
extern void DLTHM_keypair_2(byte *tau,octet *SK,octet *PK);
/** @brief Dilithium create signature on a message
*
@param SK secret key
@param M the message to be signed
@param SIG the output signature
@return numbers of attempts needed to create signature
*/
extern int DLTHM_signature_2(octet *SK,octet *M, octet *SIG);
/** @brief Dilithium verify signature on a message
*
@param PK public key key
@param M the signed message
@param SIG the signature
@return true if signature is good, else false
*/
extern bool DLTHM_verify_2(octet *PK,octet *M,octet *SIG);
/** @brief Dilithium signature key pair generation
*
@param tau Random Numbers
@param SK secret key
@param PK public key
*/
extern void DLTHM_keypair_3(byte *tau,octet *SK,octet *PK);
/** @brief Dilithium create signature on a message
*
@param SK secret key
@param M the message to be signed
@param SIG the output signature
@return numbers of attempts needed to create signature
*/
extern int DLTHM_signature_3(octet *SK,octet *M, octet *SIG);
/** @brief Dilithium verify signature on a message
*
@param PK public key key
@param M the signed message
@param SIG the signature
@return true if signature is good, else false
*/
extern bool DLTHM_verify_3(octet *PK,octet *M,octet *SIG);
/** @brief Dilithium signature key pair generation
*
@param tau Random Numbers
@param SK secret key
@param PK public key
*/
extern void DLTHM_keypair_5(byte *tau,octet *SK,octet *PK);
/** @brief Dilithium create signature on a message
*
@param SK secret key
@param M the message to be signed
@param SIG the output signature
@return numbers of attempts needed to create signature
*/
extern int DLTHM_signature_5(octet *SK,octet *M, octet *SIG);
/** @brief Dilithium verify signature on a message
*
@param PK public key key
@param M the signed message
@param SIG the signature
@return true if signature is good, else false
*/
extern bool DLTHM_verify_5(octet *PK,octet *M,octet *SIG);
}
#endif