/******************************************************************************* * Copyright 2013-2018 Intel Corporation * All Rights Reserved. * * If this software was obtained under the Intel Simplified Software License, * the following terms apply: * * The source code, information and material ("Material") contained herein is * owned by Intel Corporation or its suppliers or licensors, and title to such * Material remains with Intel Corporation or its suppliers or licensors. The * Material contains proprietary information of Intel or its suppliers and * licensors. The Material is protected by worldwide copyright laws and treaty * provisions. No part of the Material may be used, copied, reproduced, * modified, published, uploaded, posted, transmitted, distributed or disclosed * in any way without Intel's prior express written permission. No license under * any patent, copyright or other intellectual property rights in the Material * is granted to or conferred upon you, either expressly, by implication, * inducement, estoppel or otherwise. Any license under such intellectual * property rights must be express and approved by Intel in writing. * * Unless otherwise agreed by Intel in writing, you may not remove or alter this * notice or any other notice embedded in Materials by Intel or Intel's * suppliers or licensors in any way. * * * If this software was obtained under the Apache License, Version 2.0 (the * "License"), the following terms apply: * * 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. *******************************************************************************/ /* // // Purpose: // Cryptography Primitive. // Internal Definitions and // Internal ng RSA Function Prototypes // // */ #if !defined(_CP_NG_RSA_H) #define _CP_NG_RSA_H #include "pcpbn.h" #include "pcpmontgomery.h" #include "pcpngmontexpstuff.h" struct _cpRSA_public_key { IppCtxId id; /* key ID */ int maxbitSizeN; int maxbitSizeE; int bitSizeN; /* RSA modulus bitsize */ int bitSizeE; /* RSA public exp bitsize */ BNU_CHUNK_T* pDataE; /* public exp */ gsModEngine* pMontN; /* montgomery engine (N) */ }; /* access */ #define RSA_PUB_KEY_MAXSIZE_N(x) ((x)->maxbitSizeN) #define RSA_PUB_KEY_MAXSIZE_E(x) ((x)->maxbitSizeE) #define RSA_PUB_KEY_ID(x) ((x)->id) #define RSA_PUB_KEY_BITSIZE_N(x) ((x)->bitSizeN) #define RSA_PUB_KEY_BITSIZE_E(x) ((x)->bitSizeE) #define RSA_PUB_KEY_E(x) ((x)->pDataE) #define RSA_PUB_KEY_NMONT(x) ((x)->pMontN) #define RSA_PUB_KEY_VALID_ID(x) (RSA_PUB_KEY_ID((x))==idCtxRSA_PubKey) #define RSA_PUB_KEY_IS_SET(x) (RSA_PUB_KEY_BITSIZE_N((x))>0) /* alignment */ #define RSA_PUBLIC_KEY_ALIGNMENT ((int)(sizeof(void*))) struct _cpRSA_private_key { IppCtxId id; /* key ID */ int maxbitSizeN; int maxbitSizeD; int bitSizeN; /* RSA modulus bitsize */ int bitSizeD; /* RSA private exp bitsize */ int bitSizeP; /* RSA p-factor bitsize */ int bitSizeQ; /* RSA q-factor bitsize */ BNU_CHUNK_T* pDataD; /* private exp */ BNU_CHUNK_T* pDataDp; /* dp private exp */ BNU_CHUNK_T* pDataDq; /* dq private exp */ BNU_CHUNK_T* pDataQinv; /* qinv coeff */ gsModEngine* pMontP; /* montgomery engine (P) */ gsModEngine* pMontQ; /* montgomery engine (Q) */ gsModEngine* pMontN; /* montgomery engine (N) */ }; /* access */ #define RSA_PRV_KEY_MAXSIZE_N(x) ((x)->maxbitSizeN) #define RSA_PRV_KEY_MAXSIZE_D(x) ((x)->maxbitSizeD) #define RSA_PRV_KEY_ID(x) ((x)->id) #define RSA_PRV_KEY_BITSIZE_N(x) ((x)->bitSizeN) #define RSA_PRV_KEY_BITSIZE_D(x) ((x)->bitSizeD) #define RSA_PRV_KEY_BITSIZE_P(x) ((x)->bitSizeP) #define RSA_PRV_KEY_BITSIZE_Q(x) ((x)->bitSizeQ) #define RSA_PRV_KEY_D(x) ((x)->pDataD) #define RSA_PRV_KEY_DP(x) ((x)->pDataDp) #define RSA_PRV_KEY_DQ(x) ((x)->pDataDq) #define RSA_PRV_KEY_INVQ(x) ((x)->pDataQinv) #define RSA_PRV_KEY_PMONT(x) ((x)->pMontP) #define RSA_PRV_KEY_QMONT(x) ((x)->pMontQ) #define RSA_PRV_KEY_NMONT(x) ((x)->pMontN) #define RSA_PRV_KEY1_VALID_ID(x) (RSA_PRV_KEY_ID((x))==idCtxRSA_PrvKey1) #define RSA_PRV_KEY2_VALID_ID(x) (RSA_PRV_KEY_ID((x))==idCtxRSA_PrvKey2) #define RSA_PRV_KEY_VALID_ID(x) (RSA_PRV_KEY1_VALID_ID((x)) || RSA_PRV_KEY2_VALID_ID((x))) #define RSA_PRV_KEY_IS_SET(x) (RSA_PRV_KEY_BITSIZE_N((x))>0) /* alignment */ #define RSA_PRIVATE_KEY_ALIGNMENT ((int)(sizeof(void*))) #define MOD_ENGINE_RSA_POOL_SIZE (2) /* // Montgomery engine preparation (GetSize/init/Set) */ #define rsaMontExpGetSize OWNAPI(rsaMontExpGetSize) void rsaMontExpGetSize(int length, int* pSize); /* // pubic and private key operations */ #define gsRSApub_cipher OWNAPI(gsRSApub_cipher) void gsRSApub_cipher(IppsBigNumState* pY, const IppsBigNumState* pX, const IppsRSAPublicKeyState* pKey, BNU_CHUNK_T* pScratchBuffer); #define gsRSAprv_cipher OWNAPI(gsRSAprv_cipher) void gsRSAprv_cipher(IppsBigNumState* pY, const IppsBigNumState* pX, const IppsRSAPrivateKeyState* pKey, BNU_CHUNK_T* pScratchBuffer); #define gsRSAprv_cipher_crt OWNAPI(gsRSAprv_cipher_crt) void gsRSAprv_cipher_crt(IppsBigNumState* pY, const IppsBigNumState* pX, const IppsRSAPrivateKeyState* pKey, BNU_CHUNK_T* pScratchBuffer); #endif /* _CP_NG_RSA_H */