MastersThesis/TIIGER_TLS/PQ_TIIGER_TLS/sal/miracl-ubuntu22-11-04-24/includes/rsa.h

139 lines
4.0 KiB
C
Raw Normal View History

2024-04-15 09:53:30 +00:00
/*
* 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.
*/
/**
* @file rsa.h
* @author Mike Scott and Kealan McCusker
* @date 2nd June 2015
* @brief RSA Header file for implementation of RSA protocol
*
* declares functions
*
*/
#ifndef RSA_WWW_H
#define RSA_WWW_H
#include "ff_WWW.h"
//#include "rsa_support.h"
using namespace core;
/*** START OF USER CONFIGURABLE SECTION - ***/
#define HASH_TYPE_RSA_WWW SHA256 /**< Chosen Hash algorithm */
/*** END OF USER CONFIGURABLE SECTION ***/
#define RFS_WWW MODBYTES_XXX*FFLEN_WWW /**< RSA Public Key Size in bytes */
namespace WWW {
/**
@brief Integer Factorisation Public Key
*/
typedef struct
{
sign32 e; /**< RSA exponent (typically 65537) */
XXX::BIG n[FFLEN_WWW]; /**< An array of BIGs to store public key */
} rsa_public_key;
/**
@brief Integer Factorisation Private Key
*/
typedef struct
{
XXX::BIG p[FFLEN_WWW / 2]; /**< secret prime p */
XXX::BIG q[FFLEN_WWW / 2]; /**< secret prime q */
XXX::BIG dp[FFLEN_WWW / 2]; /**< decrypting exponent mod (p-1) */
XXX::BIG dq[FFLEN_WWW / 2]; /**< decrypting exponent mod (q-1) */
XXX::BIG c[FFLEN_WWW / 2]; /**< 1/p mod q */
} rsa_private_key;
/** @brief RSA Private KEy from OpenSSL
*
@param P Input prime number
@param Q Input prime number
@param DP Input 1/e mod p-1
@param DQ Input 1/e mod q-1
@param C Input 1/p mod q
@param PRIV the output RSA private key
*/
extern void RSA_PRIVATE_KEY_FROM_OPENSSL(octet *P,octet* Q,octet *DP,octet *DQ,octet *C,rsa_private_key *PRIV);
/** @brief RSA Key Pair from OpenSSL
*
@param e the encryption exponent
@param P Input prime number
@param Q Input prime number
@param DP Input 1/e mod p-1
@param DQ Input 1/e mod q-1
@param C Input 1/p mod q
@param PRIV the output RSA private key
@param PUB the output RSA public key
*/
extern void RSA_KEY_PAIR_FROM_OPENSSL(sign32 e,octet *P,octet* Q,octet *DP,octet *DQ,octet *C,rsa_private_key *PRIV,rsa_public_key *PUB);
/** @brief RSA Key Pair Generator
*
@param R is a pointer to a cryptographically secure random number generator
@param e the encryption exponent
@param PRIV the output RSA private key
@param PUB the output RSA public key
@param P Input prime number. Used when R is equal to NULL for testing
@param Q Input prime number. Used when R is equal to NULL for testing
*/
extern void RSA_KEY_PAIR(csprng *R, sign32 e, rsa_private_key* PRIV, rsa_public_key* PUB, octet *P, octet* Q);
/** @brief RSA encryption of suitably padded plaintext
*
@param PUB the input RSA public key
@param F is input padded message
@param G is the output ciphertext
*/
extern void RSA_ENCRYPT(rsa_public_key* PUB, octet *F, octet *G);
/** @brief RSA decryption of ciphertext
*
@param PRIV the input RSA private key
@param G is the input ciphertext
@param F is output plaintext (requires unpadding)
*/
extern void RSA_DECRYPT(rsa_private_key* PRIV, octet *G, octet *F);
/** @brief Destroy an RSA private Key
*
@param PRIV the input RSA private key. Destroyed on output.
*/
extern void RSA_PRIVATE_KEY_KILL(rsa_private_key *PRIV);
/** @brief Populates an RSA public key from an octet string
*
Creates RSA public key from big-endian base 256 form.
@param x FF instance to be created from an octet string
@param S input octet string
*/
extern void RSA_fromOctet(XXX::BIG *x, octet *S);
}
#endif