10 #include "../Hash/cHashWrap.h"
11 #include "../Key/cKeyTypeDef.h"
12 #include "../File/cASNReader.h"
13 #include "../File/cASNWriterRev.h"
14 #include "../Math/cBigUnsigned.h"
40 : m_eHashTypeMGF1(eHashType)
41 , m_nSizeSaltExpected((
int)nSizeSalt)
54 static const int k_nSizeSaltAny = -1;
86 bool IsValidPrivateKey()
const;
91 return this->m_nSizeBlock;
107 virtual void SetZeroKey()
override;
110 HRESULT DoRSAPublic(BYTE* pOutput,
const BYTE* pInput)
const;
115 HRESULT EncryptWithKeyV15(BYTE* pOutput,
const BYTE* pInput,
size_t nSizeIn,
IRandomNoise* pRandom);
117 HRESULT EncryptWithKeyV21(BYTE* pOutput,
const BYTE* pInput,
size_t nSizeIn,
IRandomNoise* pRandom,
const BYTE* pLabel =
nullptr,
size_t nSizeLabel = 0);
119 HRESULT DecryptWithKeyV15(BYTE* pOutput,
size_t output_max_len,
const BYTE* pInput,
IRandomNoise* pRandom);
120 HRESULT DecryptWithKeyV21(BYTE* pOutput,
size_t output_max_len,
const BYTE* pInput,
IRandomNoise* pRandom,
const BYTE* pLabel =
nullptr,
size_t nSizeLabel = 0);
126 HRESULT VerifySignatureV15(
SSL_Hash_TYPE eHashType,
const BYTE* pHash,
size_t nSizeHash,
const BYTE* pSig)
const;
127 HRESULT VerifySignatureV21(
SSL_Hash_TYPE eHashType,
const BYTE* pHash,
size_t nSizeHash,
const BYTE* pSig,
SSL_Hash_TYPE mgf1_hash_id,
int expected_salt_len)
const;
130 virtual HRESULT CheckPublicPrivatePair(
const cKeyBase* pKeyPrivate)
const override;
131 virtual HRESULT VerifySignature(
SSL_Hash_TYPE eHashType,
const BYTE* pHash,
size_t nSizeHash,
const BYTE* pSig,
size_t nSizeSig)
const override;
134 HRESULT DecryptWithKey(BYTE* pOutput,
size_t nSizeOut,
const BYTE* pInput,
size_t nSizeIn,
IRandomNoise* pRandom);
135 HRESULT EncryptWithKey(BYTE* pOutput,
size_t nSizeOut,
const BYTE* pInput,
size_t nSizeIn,
IRandomNoise* pRandom);
137 bool UpdateReadPrivate();
143 this->m_nSizeBlock = this->m_N.get_BinarySize();
151 HRESULT ReadPrivateKeyPVK(
const BYTE* pKeyData,
int nSize);
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cASNReader.h:22
Definition: cASNWriterRev.h:22
Definition: cBigUnsigned.h:22
Definition: cKeyBase.h:56
@ VALTYPE_RSA
cBigUnsigned* for cKeyRSA
Definition: cKeyBase.h:67
Definition: cKeyRSA1.h:27
HRESULT WritePublicKey(cASNWriterRev &w) const
Definition: cKeyRSA1.cpp:266
HRESULT ReadPublicKey(cASNReader &r)
Definition: cKeyRSA1.cpp:292
cKeyRSASignOptions(SSL_Hash_TYPE eHashType=SSL_Hash_SHA1, size_t nSizeSalt=20) noexcept
Definition: cKeyRSA.h:39
SSL_Hash_TYPE m_eHashTypeMGF1
Definition: cKeyRSA.h:36
int m_nSizeSaltExpected
Definition: cKeyRSA.h:37
VAL_t m_RP
cached R^2 mod P for DoRSAPrivate
Definition: cKeyRSA.h:73
VAL_t m_BlindRemove
cached un-blinding value for DoRSAPrivate
Definition: cKeyRSA.h:77
VAL_t m_DQ
D % (Q - 1) const derived value.
Definition: cKeyRSA.h:66
virtual HRESULT ReadPublicKey(cASNReader &r, cASNBuf *pAlgParams) override
Definition: cKeyRSA.h:139
VAL_t m_QP
1 / (Q % P) const derived value.
Definition: cKeyRSA.h:67
SSL_Hash_TYPE m_eHashType
Hash identifier for the EME-OAEP and EMSA-PSS encoding. MGF1.
Definition: cKeyRSA.h:58
virtual int GetKeyValues(cValue *items) const override
Interface with the debug module. get debug values.
Definition: cKeyRSA.h:93
PKCS1_VER_TYPE m_ePadding
PKCS1_VER_15 for 1.5 padding and PKCS1_VER_21 for OAEP/PSS.
Definition: cKeyRSA.h:57
VAL_t m_BlindAdd
cached blinding value for DoRSAPrivate
Definition: cKeyRSA.h:76
size_t m_nSizeBlock
sizeof(N) in bytes. Block size for DecryptWithKey
Definition: cKeyRSA.h:56
virtual size_t get_KeySize() const override
Get key size in bytes.
Definition: cKeyRSA.h:88
VAL_t m_D
private exponent
Definition: cKeyRSA.h:61
VAL_t m_Q
2nd prime factor (private)
Definition: cKeyRSA.h:63
VAL_t m_RN
cached R^2 mod N (for public)
Definition: cKeyRSA.h:72
VAL_t m_RQ
cached R^2 mod Q for DoRSAPrivate
Definition: cKeyRSA.h:74
virtual HRESULT WritePublicKey(cASNWriterRev &w) const override
Definition: cKeyRSA.h:146
VAL_t m_P
1st prime factor (private) (r)
Definition: cKeyRSA.h:62
cThreadLockMutex m_Mutex
Thread-safety mutex for mutable cached stuff.
Definition: cKeyRSA.h:70
VAL_t m_DP
D % (P - 1) const derived value.
Definition: cKeyRSA.h:65
Definition: cKeyTypeDef.h:22
Definition: cKeyRSA.h:161
cKeyTypeRSA() noexcept
Definition: cKeyRSA.h:165
virtual cKeyBase * AllocKey(void) const override
Allocate a new context.
Definition: cKeyRSA.h:174
virtual bool HasKeyType(SSL_Key_TYPE eKeyType) const noexcept override
Tell if the context implements this type (e.g. ECKEY can do ECDSA)
Definition: cKeyRSA.h:169
Definition: cThreadLock.h:252
UNITTEST2_PREDEF(cQuadtree)
PKCS1_VER_TYPE
Definition: cKeyRSA.h:21
@ PKCS1_VER_15
Definition: cKeyRSA.h:26
@ PKCS1_VER_21
Definition: cKeyRSA.h:27
SSL_Key_TYPE
Definition: cKeyBase.h:24
@ SSL_Key_RSASSA_PSS
OID_RSASSA_PSS "RSASSA-PSS" used for signing.
Definition: cKeyBase.h:34
@ SSL_Key_RSA
SSL_KeyExchange_RSA = "PRIVATE KEY" = k_pszPEM_PK.
Definition: cKeyBase.h:29
SSL_Hash_TYPE
Definition: cHashCode.h:23
@ SSL_Hash_NONE
Definition: cHashCode.h:30
@ SSL_Hash_SHA1
Definition: cHashCode.h:32
unsigned int BIT_ENUM_t
Enumerate number of bits or address a single bit in some array of bits.
Definition: cBits.h:20
Definition: cKeyBase.h:74
const char * m_pszName
Definition: cKeyBase.h:78
const void * m_pValue
e.g. const cBigInt* if VALTYPE_RSA
Definition: cKeyBase.h:79
VALTYPE_TYPE m_eValueType
type of value.
Definition: cKeyBase.h:77
Definition: cDebugAssert.h:29