CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
botan_block_transform.h
1
2#ifndef _security_details_botan_block_transform_h_
3#define _security_details_botan_block_transform_h_
4
5#include <security/cryptography/i_crypto_transform.h>
6#include <system/array.h>
7#include <memory>
8
9
10namespace System { namespace Security { namespace Cryptography { namespace Details {
11
17template<typename botan_type_traits>
19{
21 typedef typename botan_type_traits::Cipher_Mode Cipher_Mode;
23 typedef typename botan_type_traits::byte byte;
25 template<typename T> using secure_vector = typename botan_type_traits::template secure_vector<T>;
26
27public:
30 BotanBlockTransform(std::unique_ptr<Cipher_Mode> cipher) : m_cipher(std::move(cipher))
31 {}
32
40 int TransformBlock(ArrayPtr<uint8_t> inputBuffer, int inputOffset, int inputCount, ArrayPtr<uint8_t> outputBuffer, int outputOffset) override
41 {
42 secure_vector<byte> buffer(inputCount);
43 botan_type_traits::copy_mem(buffer.data(), &inputBuffer->data()[inputOffset], buffer.size());
44
45 m_cipher->update(buffer);
46
47 botan_type_traits::copy_mem(&outputBuffer->data()[outputOffset], buffer.data(), buffer.size());
48
49 return ASPOSECPP_CHECKED_CAST(int, buffer.size());
50 }
51
57 ArrayPtr<uint8_t> TransformFinalBlock(ArrayPtr<uint8_t> inputBuffer, int inputOffset, int inputCount) override
58 {
59 secure_vector<byte> buffer(inputCount);
60 botan_type_traits::copy_mem(buffer.data(), &inputBuffer->data()[inputOffset], buffer.size());
61
62 m_cipher->finish(buffer);
63
64 ArrayPtr<uint8_t> result = MakeObject<Array<uint8_t>>(ASPOSECPP_CHECKED_CAST(int, buffer.size()));
65 botan_type_traits::copy_mem(&result->data()[0], buffer.data(), buffer.size());
66 return result;
67 }
68
71 int get_InputBlockSize() override
72 {
73 int size = ASPOSECPP_CHECKED_CAST(int, m_cipher->minimum_final_size());
74 return size ? size : 16;
75 }
78 int get_OutputBlockSize() override
79 {
80 return ASPOSECPP_CHECKED_CAST(int, m_cipher->output_length(get_InputBlockSize()));
81 }
82
83private:
85 std::unique_ptr<Cipher_Mode> m_cipher;
86};
87
88}}}}
89
90#endif
Adapter allowing to use Botan-like ciphers via ICryptoTransform interface.
Definition: botan_block_transform.h:19
ArrayPtr< uint8_t > TransformFinalBlock(ArrayPtr< uint8_t > inputBuffer, int inputOffset, int inputCount) override
Processes last block of data and calculates output value.
Definition: botan_block_transform.h:57
int get_OutputBlockSize() override
Output block size.
Definition: botan_block_transform.h:78
int TransformBlock(ArrayPtr< uint8_t > inputBuffer, int inputOffset, int inputCount, ArrayPtr< uint8_t > outputBuffer, int outputOffset) override
Processes block of data and copies data to output array.
Definition: botan_block_transform.h:40
BotanBlockTransform(std::unique_ptr< Cipher_Mode > cipher)
Constructor.
Definition: botan_block_transform.h:30
int get_InputBlockSize() override
Input block size.
Definition: botan_block_transform.h:71
Base class of cryptographic transformer. Objects of this class should only be allocated using System:...
Definition: i_crypto_transform.h:14
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
Definition: db_command.h:9