CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
rsa_crypto_service_provider.h
1
2#pragma once
3
4#include <system/io/stream.h>
5
6#include <security/cryptography/rsa.h>
7#include <security/cryptography/i_csp_asymmetric_algorithm.h>
8#include <security/cryptography/hash_algorithm.h>
9
10namespace System { namespace Security { namespace Cryptography {
11
12namespace Details {
13 struct RSACryptoServiceProviderPimpl;
14 struct RSAPKCS1SignatureFormatterPimpl;
15 struct RSAPKCS1SignatureDeformatterPimpl;
16}
17
22class ASPOSECPP_SHARED_CLASS RSACryptoServiceProvider final : public RSA, public ICspAsymmetricAlgorithm
23{
25 friend struct Details::RSAPKCS1SignatureFormatterPimpl;
27 friend struct Details::RSAPKCS1SignatureDeformatterPimpl;
28
32 typedef RSA BaseType;
36 typedef System::BaseTypesInfo<BaseType, BaseType1> ThisBaseTypesInfo;
38 ASPOSECPP_SHARED_RTTI_INFO_DECL();
39
40public:
42 ASPOSECPP_SHARED_API RSACryptoServiceProvider();
43
46 ASPOSECPP_SHARED_API RSACryptoServiceProvider(const SharedPtr<CspParameters>& parameters);
47
50 ASPOSECPP_SHARED_API RSACryptoServiceProvider(const RSAParameters& parameters);
51
54 ASPOSECPP_SHARED_API RSACryptoServiceProvider(int32_t key_size);
55
59 ASPOSECPP_SHARED_API RSACryptoServiceProvider(int32_t key_size, const SharedPtr<CspParameters>& parameters);
60
63
66 ASPOSECPP_SHARED_API String get_KeyExchangeAlgorithm() override;
67
70 ASPOSECPP_SHARED_API int32_t get_KeySize() override;
71
74 ASPOSECPP_SHARED_API bool get_PersistKeyInCsp() const;
75
78 ASPOSECPP_SHARED_API void set_PersistKeyInCsp(bool value);
79
82 ASPOSECPP_SHARED_API bool get_PublicOnly() const;
83
86 ASPOSECPP_SHARED_API String get_SignatureAlgorithm() override;
87
90 static ASPOSECPP_SHARED_API bool get_UseMachineKeyStore();
91
94 static ASPOSECPP_SHARED_API void set_UseMachineKeyStore(bool value);
95
100 ASPOSECPP_SHARED_API ByteArrayPtr Decrypt(const ByteArrayPtr& rgb, bool use_oaep);
101
106 ASPOSECPP_SHARED_API ByteArrayPtr Decrypt(ByteArrayPtr data, SharedPtr<RSAEncryptionPadding> padding) override;
107
112 ASPOSECPP_SHARED_API ByteArrayPtr Encrypt(const ByteArrayPtr& rgb, bool use_oaep);
113
118 ASPOSECPP_SHARED_API ByteArrayPtr Encrypt(ByteArrayPtr data, SharedPtr<RSAEncryptionPadding> padding) override;
119
123 ASPOSECPP_SHARED_API ByteArrayPtr ExportCspBlob(bool include_private_parameters) override;
124
128 ASPOSECPP_SHARED_API RSAParameters ExportParameters(bool include_private_parameters) override;
129
132 ASPOSECPP_SHARED_API void ImportCspBlob(ByteArrayPtr key_blob) override;
133
136 ASPOSECPP_SHARED_API void ImportParameters(RSAParameters parameters) override;
137
142 ASPOSECPP_SHARED_API ByteArrayPtr SignData(const ByteArrayPtr& buffer, const SharedPtr<Object>& halg);
143
148 ASPOSECPP_SHARED_API ByteArrayPtr SignData(const SharedPtr<IO::Stream>& input_stream, const SharedPtr<Object>& halg);
149
156 ASPOSECPP_SHARED_API ByteArrayPtr SignData(const ByteArrayPtr& buffer, int32_t offset, int32_t count, const SharedPtr<Object>& halg);
157
163 ASPOSECPP_SHARED_API ByteArrayPtr SignHash(ByteArrayPtr hash, HashAlgorithmName hash_algorithm,
164 SharedPtr<RSASignaturePadding> padding) override;
165
170 ASPOSECPP_SHARED_API ByteArrayPtr SignHash(const ByteArrayPtr& rgb_hash, const String& str);
171
177 ASPOSECPP_SHARED_API bool VerifyData(const ByteArrayPtr& buffer, const SharedPtr<Object>& halg, const ByteArrayPtr& signature);
178
184 ASPOSECPP_SHARED_API bool VerifyHash(const ByteArrayPtr& rgb_hash, const String& str, const ByteArrayPtr& rgb_signature);
185
192 ASPOSECPP_SHARED_API bool VerifyHash(ByteArrayPtr hash, ByteArrayPtr signature, const HashAlgorithmName& hash_algorithm,
193 SharedPtr<RSASignaturePadding> padding) override;
194
196 ASPOSECPP_SHARED_API void Dispose() override;
197
198protected:
205 ASPOSECPP_SHARED_API ByteArrayPtr HashData(ByteArrayPtr data, int32_t offset, int32_t count, HashAlgorithmName hash_algorithm) override;
206
211 ASPOSECPP_SHARED_API ByteArrayPtr HashData(StreamPtr stream, HashAlgorithmName hash_algorithm) override;
212
213private:
215 int32_t m_key_size;
217 bool m_persist_key_in_csp;
219 static bool s_use_machine_key_store;
221 std::unique_ptr<Details::RSACryptoServiceProviderPimpl> m_pimpl;
222
223 void VerifyNotDisposed() const;
224 void VerifyPrivateKeyExists() const;
225 void SetupLegalKeySizesValue();
226
227 ByteArrayPtr SignHash(const ByteArrayPtr& hash_value, const SharedPtr<HashAlgorithm>& hash_algorithm);
228 bool VerifyHash(const ByteArrayPtr& rgb_hash, const SharedPtr<HashAlgorithm>& hash_algorithm, const ByteArrayPtr& rgb_signature);
229};
230
231}}} // namespace System::Security::Cryptography
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:62
Abstract base class for asymmetric encryption algorithms. Objects of this class should only be alloca...
Definition: asymmetric_algorithm.h:19
Asymmetric algorithm base class. Objects of this class should only be allocated using System::MakeObj...
Definition: i_csp_asymmetric_algorithm.h:14
RSA algorithm in CSP form. Objects of this class should only be allocated using System::MakeObject() ...
Definition: rsa_crypto_service_provider.h:23
RSAParameters ExportParameters(bool include_private_parameters) override
Exports CSP parameters.
RSACryptoServiceProvider(const RSAParameters &parameters)
Constructor.
ByteArrayPtr SignHash(const ByteArrayPtr &rgb_hash, const String &str)
Computes the signature of specified input value. Not implemented.
bool get_PersistKeyInCsp() const
Checks whether key is persisted in CSP object.
bool VerifyHash(const ByteArrayPtr &rgb_hash, const String &str, const ByteArrayPtr &rgb_signature)
Checks data signature.
ByteArrayPtr HashData(ByteArrayPtr data, int32_t offset, int32_t count, HashAlgorithmName hash_algorithm) override
Computes the hash value of the specified data array using the specified hash algorithm.
ByteArrayPtr Encrypt(ByteArrayPtr data, SharedPtr< RSAEncryptionPadding > padding) override
Encrypts input data using the specified padding mode.
ByteArrayPtr Decrypt(ByteArrayPtr data, SharedPtr< RSAEncryptionPadding > padding) override
Decrypts input data using the specified padding mode.
String get_SignatureAlgorithm() override
Gets signature algorithm associated with CSP object.
ByteArrayPtr SignData(const ByteArrayPtr &buffer, const SharedPtr< Object > &halg)
Computes the signature of specified input value.
bool VerifyData(const ByteArrayPtr &buffer, const SharedPtr< Object > &halg, const ByteArrayPtr &signature)
Checks data signature.
int32_t get_KeySize() override
Gets key size used by algorithm.
ByteArrayPtr ExportCspBlob(bool include_private_parameters) override
Exports blob with information on key. Not implemented.
RSACryptoServiceProvider(const SharedPtr< CspParameters > &parameters)
Constructor. Not implemented.
static void set_UseMachineKeyStore(bool value)
Defines whether the key persists in machine store instead of user store.
SharedPtr< CspKeyContainerInfo > get_CspKeyContainerInfo() override
Gets a CspKeyContainerInfo object.
static bool get_UseMachineKeyStore()
Checks whether the key persists in machine store instead of user store.
ByteArrayPtr Encrypt(const ByteArrayPtr &rgb, bool use_oaep)
Encrypts message. Not implemented.
ByteArrayPtr HashData(StreamPtr stream, HashAlgorithmName hash_algorithm) override
Computes the hash value of the specified binary stream using the specified hash algorithm.
String get_KeyExchangeAlgorithm() override
Checks key exchange algorithm associated with object.
ByteArrayPtr SignData(const ByteArrayPtr &buffer, int32_t offset, int32_t count, const SharedPtr< Object > &halg)
Computes the signature of specified input value.
ByteArrayPtr SignHash(ByteArrayPtr hash, HashAlgorithmName hash_algorithm, SharedPtr< RSASignaturePadding > padding) override
Computes the signature for the specified hash value.
void ImportParameters(RSAParameters parameters) override
Imports CSP parameters.
void Dispose() override
Frees data associated with object.
void set_PersistKeyInCsp(bool value)
Defines whether key is persisted in CSP object.
ByteArrayPtr Decrypt(const ByteArrayPtr &rgb, bool use_oaep)
Decrypts message. Not implemented.
void ImportCspBlob(ByteArrayPtr key_blob) override
Imports blob with information on key. Not implemented.
RSACryptoServiceProvider()
Constructor. Uses default parameters.
bool VerifyHash(ByteArrayPtr hash, ByteArrayPtr signature, const HashAlgorithmName &hash_algorithm, SharedPtr< RSASignaturePadding > padding) override
Verifies that the signature of the specified hash is valid.
bool get_PublicOnly() const
Checks if public key only is present in CSP object.
RSACryptoServiceProvider(int32_t key_size, const SharedPtr< CspParameters > &parameters)
Constructor. Not implemented.
ByteArrayPtr SignData(const SharedPtr< IO::Stream > &input_stream, const SharedPtr< Object > &halg)
Computes the signature of specified input value.
Base class for implementations of RSA algorithm. Objects of this class should only be allocated using...
Definition: rsa.h:17
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
String class used across the library. Is a substitute for C# System.String when translating code....
Definition: string.h:122
Definition: db_command.h:9
String representing the name of a hash algorithm. This type should be allocated on stack and passed t...
Definition: hash_algorithm_name.h:13
Data structure of RSA algorithm parameters. This type should be allocated on stack and passed to func...
Definition: rsa_parameters.h:13