Security Scol plugin
rsa.h
Go to the documentation of this file.
1// rsa.h - originally written and placed in the public domain by Wei Dai
2
7
8#ifndef CRYPTOPP_RSA_H
9#define CRYPTOPP_RSA_H
10
11#include "cryptlib.h"
12#include "pubkey.h"
13#include "integer.h"
14#include "pkcspad.h"
15#include "oaep.h"
16#include "emsa2.h"
17#include "asn.h"
18
19NAMESPACE_BEGIN(CryptoPP)
20
21
23class CRYPTOPP_DLL RSAFunction : public TrapdoorFunction, public X509PublicKey
24{
25 typedef RSAFunction ThisClass;
26
27public:
31 void Initialize(const Integer &n, const Integer &e)
32 {m_n = n; m_e = e;}
33
34 // X509PublicKey
35 OID GetAlgorithmID() const;
36 void BERDecodePublicKey(BufferedTransformation &bt, bool parametersPresent, size_t size);
37 void DEREncodePublicKey(BufferedTransformation &bt) const;
38
39 // CryptoMaterial
40 bool Validate(RandomNumberGenerator &rng, unsigned int level) const;
41 bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;
42 void AssignFrom(const NameValuePairs &source);
43
44 // TrapdoorFunction
45 Integer ApplyFunction(const Integer &x) const;
46 Integer PreimageBound() const {return m_n;}
47 Integer ImageBound() const {return m_n;}
48
49 // non-derived
50 const Integer & GetModulus() const {return m_n;}
51 const Integer & GetPublicExponent() const {return m_e;}
52
53 void SetModulus(const Integer &n) {m_n = n;}
54 void SetPublicExponent(const Integer &e) {m_e = e;}
55
56protected:
57 Integer m_n, m_e;
58};
59
63{
65
66public:
75 void Initialize(RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &e = 17);
76
87 void Initialize(const Integer &n, const Integer &e, const Integer &d, const Integer &p, const Integer &q, const Integer &dp, const Integer &dq, const Integer &u)
88 {m_n = n; m_e = e; m_d = d; m_p = p; m_q = q; m_dp = dp; m_dq = dq; m_u = u;}
89
96 void Initialize(const Integer &n, const Integer &e, const Integer &d);
97
98 // PKCS8PrivateKey
108 void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size);
110
111 // TrapdoorFunctionInverse
113
114 // GeneratableCryptoMaterial
115 bool Validate(RandomNumberGenerator &rng, unsigned int level) const;
116 // parameters: (ModulusSize, PublicExponent (default 17))
118 bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const;
119 void AssignFrom(const NameValuePairs &source);
120
121 // non-derived interface
122 const Integer& GetPrime1() const {return m_p;}
123 const Integer& GetPrime2() const {return m_q;}
124 const Integer& GetPrivateExponent() const {return m_d;}
125 const Integer& GetModPrime1PrivateExponent() const {return m_dp;}
126 const Integer& GetModPrime2PrivateExponent() const {return m_dq;}
127 const Integer& GetMultiplicativeInverseOfPrime2ModPrime1() const {return m_u;}
128
129 void SetPrime1(const Integer &p) {m_p = p;}
130 void SetPrime2(const Integer &q) {m_q = q;}
131 void SetPrivateExponent(const Integer &d) {m_d = d;}
132 void SetModPrime1PrivateExponent(const Integer &dp) {m_dp = dp;}
133 void SetModPrime2PrivateExponent(const Integer &dq) {m_dq = dq;}
134 void SetMultiplicativeInverseOfPrime2ModPrime1(const Integer &u) {m_u = u;}
135
136protected:
137 Integer m_d, m_p, m_q, m_dp, m_dq, m_u;
138};
139
142class CRYPTOPP_DLL RSAFunction_ISO : public RSAFunction
143{
144public:
145 Integer ApplyFunction(const Integer &x) const;
146 Integer PreimageBound() const {return ++(m_n>>1);}
147};
148
152{
153public:
155 Integer PreimageBound() const {return ++(m_n>>1);}
156};
157
160struct CRYPTOPP_DLL RSA
161{
162 CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "RSA";}
163 typedef RSAFunction PublicKey;
165};
166
171template <class STANDARD>
172struct RSAES : public TF_ES<RSA, STANDARD>
173{
174};
175
182template <class STANDARD, class H>
183struct RSASS : public TF_SS<RSA, STANDARD, H>
184{
185};
186
189struct CRYPTOPP_DLL RSA_ISO
190{
191 CRYPTOPP_STATIC_CONSTEXPR const char* CRYPTOPP_API StaticAlgorithmName() {return "RSA-ISO";}
194};
195
199template <class H>
200struct RSASS_ISO : public TF_SS<RSA_ISO, P1363_EMSA2, H>
201{
202};
203
206DOCUMENTED_TYPEDEF(RSAES<PKCS1v15>::Decryptor, RSAES_PKCS1v15_Decryptor);
209DOCUMENTED_TYPEDEF(RSAES<PKCS1v15>::Encryptor, RSAES_PKCS1v15_Encryptor);
210
213DOCUMENTED_TYPEDEF(RSAES<OAEP<SHA1> >::Decryptor, RSAES_OAEP_SHA_Decryptor);
216DOCUMENTED_TYPEDEF(RSAES<OAEP<SHA1> >::Encryptor, RSAES_OAEP_SHA_Encryptor);
217
218#ifdef CRYPTOPP_DOXYGEN_PROCESSING
222class RSASSA_PKCS1v15_SHA_Signer : public RSASS<PKCS1v15,SHA1>::Signer {};
226class RSASSA_PKCS1v15_SHA_Verifier : public RSASS<PKCS1v15,SHA1>::Verifier {};
227
228namespace Weak {
229
233class RSASSA_PKCS1v15_MD2_Signer : public RSASS<PKCS1v15, Weak1::MD2>::Signer {};
237class RSASSA_PKCS1v15_MD2_Verifier : public RSASS<PKCS1v15, Weak1::MD2>::Verifier {};
238
242class RSASSA_PKCS1v15_MD5_Signer : public RSASS<PKCS1v15, Weak1::MD5>::Signer {};
246class RSASSA_PKCS1v15_MD5_Verifier : public RSASS<PKCS1v15, Weak1::MD5>::Verifier {};
247}
248
249#else
252
253namespace Weak {
254 typedef RSASS<PKCS1v15, Weak1::MD2>::Signer RSASSA_PKCS1v15_MD2_Signer;
255 typedef RSASS<PKCS1v15, Weak1::MD2>::Verifier RSASSA_PKCS1v15_MD2_Verifier;
256 typedef RSASS<PKCS1v15, Weak1::MD5>::Signer RSASSA_PKCS1v15_MD5_Signer;
257 typedef RSASS<PKCS1v15, Weak1::MD5>::Verifier RSASSA_PKCS1v15_MD5_Verifier;
258}
259#endif // CRYPTOPP_DOXYGEN_PROCESSING
260
261NAMESPACE_END
262
263#endif
Classes and functions for working with ANS.1 objects.
Interface for buffered transformations.
Definition cryptlib.h:1652
virtual void GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &params=g_nullNameValuePairs)
Generate a random key or crypto parameters.
Definition cryptlib.h:2520
Multiple precision integer with arithmetic operations.
Definition integer.h:50
RSA trapdoor function using the private key.
Definition rsa.h:152
Integer PreimageBound() const
Returns the maximum size of a message before the trapdoor function is applied.
Definition rsa.h:155
RSA trapdoor function using the private key.
Definition rsa.h:63
void BERDecode(BufferedTransformation &bt)
Decode this object from a BufferedTransformation.
Definition rsa.h:99
void DEREncode(BufferedTransformation &bt) const
Encode this object into a BufferedTransformation.
Definition rsa.h:101
void Initialize(const Integer &n, const Integer &e, const Integer &d, const Integer &p, const Integer &q, const Integer &dp, const Integer &dq, const Integer &u)
Initialize a RSA private key.
Definition rsa.h:87
void Save(BufferedTransformation &bt) const
DER encode ASN.1 object.
Definition rsa.h:105
OID GetAlgorithmID() const
Retrieves the OID of the algorithm.
Definition rsa.h:107
void Load(BufferedTransformation &bt)
BER decode ASN.1 object.
Definition rsa.h:103
Interface for retrieving values given their names.
Definition cryptlib.h:322
OAEP padding.
Definition oaep.h:39
Object Identifier.
Definition asn.h:265
Template implementing constructors for public key algorithm classes.
Definition pubkey.h:2198
Encodes and Decodes privateKeyInfo.
Definition asn.h:748
virtual void DEREncodePrivateKey(BufferedTransformation &bt) const =0
Encode privateKey part of privateKeyInfo.
void DEREncode(BufferedTransformation &bt) const
Encode this object into a BufferedTransformation.
Definition asn.cpp:687
void BERDecode(BufferedTransformation &bt)
Decode this object from a BufferedTransformation.
Definition asn.cpp:667
virtual void BERDecodePrivateKey(BufferedTransformation &bt, bool parametersPresent, size_t size)=0
Decode privateKey part of privateKeyInfo.
RSA trapdoor function using the public key.
Definition rsa.h:143
Integer PreimageBound() const
Returns the maximum size of a message before the trapdoor function is applied.
Definition rsa.h:146
RSA trapdoor function using the public key.
Definition rsa.h:24
Integer ImageBound() const
Returns the maximum size of a representation after the trapdoor function is applied.
Definition rsa.h:47
bool Validate(RandomNumberGenerator &rng, unsigned int level) const
Check this object for errors.
Definition rsa.cpp:76
OID GetAlgorithmID() const
Retrieves the OID of the algorithm.
Definition rsa.cpp:49
Integer PreimageBound() const
Returns the maximum size of a message before the trapdoor function is applied.
Definition rsa.h:46
Integer ApplyFunction(const Integer &x) const
Applies the trapdoor.
Definition rsa.cpp:70
void Initialize(const Integer &n, const Integer &e)
Initialize a RSA public key.
Definition rsa.h:31
bool GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
Get a named value.
Definition rsa.cpp:88
void AssignFrom(const NameValuePairs &source)
Assign values to this object.
Definition rsa.cpp:96
Interface for random number generators.
Definition cryptlib.h:1435
Trapdoor Function (TF) encryption scheme.
Definition pubkey.h:2290
Trapdoor Function (TF) Signature Scheme.
Definition pubkey.h:2316
Applies the trapdoor function.
Definition pubkey.h:126
Applies the inverse of the trapdoor function.
Definition pubkey.h:179
virtual Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const =0
Calculates the inverse of an element.
Encodes and decodes subjectPublicKeyInfo.
Definition asn.h:702
Abstract base classes that provide a uniform interface to this library.
Classes and functions for various padding schemes used in public key algorithms.
Multiple precision integer with arithmetic operations.
Classes for optimal asymmetric encryption padding.
Classes for PKCS padding schemes.
This file contains helper classes/functions for implementing public key algorithms.
RSA algorithm.
Definition rsa.h:190
RSA encryption algorithm.
Definition rsa.h:173
RSA algorithm.
Definition rsa.h:161
RSA signature algorithm.
Definition rsa.h:201
RSA signature algorithm.
Definition rsa.h:184