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

139 lines
4.2 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.
*/
/**
* @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_RSA3072_H
#define RSA_RSA3072_H
#include "ff_RSA3072.h"
//#include "rsa_support.h"
using namespace core;
/*** START OF USER CONFIGURABLE SECTION - ***/
#define HASH_TYPE_RSA_RSA3072 SHA256 /**< Chosen Hash algorithm */
/*** END OF USER CONFIGURABLE SECTION ***/
#define RFS_RSA3072 MODBYTES_B384_28*FFLEN_RSA3072 /**< RSA Public Key Size in bytes */
namespace RSA3072 {
/**
@brief Integer Factorisation Public Key
*/
typedef struct
{
sign32 e; /**< RSA exponent (typically 65537) */
B384_28::BIG n[FFLEN_RSA3072]; /**< An array of BIGs to store public key */
} rsa_public_key;
/**
@brief Integer Factorisation Private Key
*/
typedef struct
{
B384_28::BIG p[FFLEN_RSA3072 / 2]; /**< secret prime p */
B384_28::BIG q[FFLEN_RSA3072 / 2]; /**< secret prime q */
B384_28::BIG dp[FFLEN_RSA3072 / 2]; /**< decrypting exponent mod (p-1) */
B384_28::BIG dq[FFLEN_RSA3072 / 2]; /**< decrypting exponent mod (q-1) */
B384_28::BIG c[FFLEN_RSA3072 / 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(B384_28::BIG *x, octet *S);
}
#endif