16#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__))
18#define WIN32_NO_STATUS
41 BCRYPT_ALG_HANDLE m_algHandle;
44 class BCryptHashContext;
80 HashResult HashData(
const BCryptHashContext& context, PBYTE data, ULONG dataLength);
83 void* m_algorithmHandle;
86 DWORD m_hashBufferLength;
89 DWORD m_hashObjectLength;
94 std::mutex m_algorithmMutex;
118 virtual void Update(
unsigned char*
buffer,
size_t bufferSize)
override;
137 virtual void Update(
unsigned char*
buffer,
size_t bufferSize)
override;
166 virtual void Update(
unsigned char*
buffer,
size_t bufferSize)
override;
322 static size_t BlockSizeBytes;
323 static size_t KeyLengthBits;
373 static size_t BlockSizeBytes;
374 static size_t KeyLengthBits;
414 BCryptSymmetricCipher(std::move(toMove)), m_macBuffer(std::move(toMove.m_macBuffer)), m_finalBuffer(std::move(toMove.m_finalBuffer)),
415 m_authInfo(std::move(toMove.m_authInfo)) {}
432 static size_t BlockSizeBytes;
433 static size_t IVLengthBytes;
434 static size_t KeyLengthBits;
435 static size_t TagLengthBytes;
440 BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO m_authInfo;
476 static size_t BlockSizeBytes;
477 static size_t KeyLengthBits;
CryptoBuffer EncryptBuffer(const CryptoBuffer &unEncryptedData) override
AES_CBC_Cipher_BCrypt(const CryptoBuffer &key, const CryptoBuffer &initializationVector)
size_t GetBlockSizeBytes() const override
CryptoBuffer FinalizeEncryption() override
CryptoBuffer DecryptBuffer(const CryptoBuffer &encryptedData) override
AES_CBC_Cipher_BCrypt(AES_CBC_Cipher_BCrypt &&toMove)
AES_CBC_Cipher_BCrypt & operator=(const AES_CBC_Cipher_BCrypt &)=delete
AES_CBC_Cipher_BCrypt(const AES_CBC_Cipher_BCrypt &)=delete
AES_CBC_Cipher_BCrypt(CryptoBuffer &&key, CryptoBuffer &&initializationVector)
CryptoBuffer FinalizeDecryption() override
size_t GetKeyLengthBits() const override
AES_CBC_Cipher_BCrypt(const CryptoBuffer &key)
CryptoBuffer EncryptBuffer(const CryptoBuffer &unEncryptedData) override
AES_CTR_Cipher_BCrypt(CryptoBuffer &&key, CryptoBuffer &&initializationVector)
AES_CTR_Cipher_BCrypt & operator=(const AES_CTR_Cipher_BCrypt &)=delete
AES_CTR_Cipher_BCrypt(const AES_CTR_Cipher_BCrypt &)=delete
CryptoBuffer DecryptBuffer(const CryptoBuffer &encryptedData) override
size_t GetBlockSizeBytes() const override
AES_CTR_Cipher_BCrypt(AES_CTR_Cipher_BCrypt &&toMove)
CryptoBuffer FinalizeDecryption() override
AES_CTR_Cipher_BCrypt(const CryptoBuffer &key)
size_t GetKeyLengthBits() const override
CryptoBuffer FinalizeEncryption() override
AES_CTR_Cipher_BCrypt(const CryptoBuffer &key, const CryptoBuffer &initializationVector)
AES_GCM_Cipher_BCrypt(const CryptoBuffer &key, const CryptoBuffer *aad)
size_t GetTagLengthBytes() const
size_t GetKeyLengthBits() const override
CryptoBuffer FinalizeDecryption() override
CryptoBuffer FinalizeEncryption() override
AES_GCM_Cipher_BCrypt & operator=(const AES_GCM_Cipher_BCrypt &)=delete
AES_GCM_Cipher_BCrypt(const CryptoBuffer &key, const CryptoBuffer &initializationVector, const CryptoBuffer &tag=CryptoBuffer(0), const CryptoBuffer &aad=CryptoBuffer(0))
AES_GCM_Cipher_BCrypt(AES_GCM_Cipher_BCrypt &&toMove)
AES_GCM_Cipher_BCrypt(const CryptoBuffer &key)
AES_GCM_Cipher_BCrypt(CryptoBuffer &&key, CryptoBuffer &&initializationVector, CryptoBuffer &&tag=CryptoBuffer(0), CryptoBuffer &&aad=CryptoBuffer(0))
AES_GCM_Cipher_BCrypt(const AES_GCM_Cipher_BCrypt &)=delete
CryptoBuffer EncryptBuffer(const CryptoBuffer &) override
CryptoBuffer DecryptBuffer(const CryptoBuffer &) override
size_t GetBlockSizeBytes() const override
size_t GetKeyLengthBits() const override
AES_KeyWrap_Cipher_BCrypt(const AES_KeyWrap_Cipher_BCrypt &)=delete
AES_KeyWrap_Cipher_BCrypt & operator=(const AES_KeyWrap_Cipher_BCrypt &)=delete
AES_KeyWrap_Cipher_BCrypt(const CryptoBuffer &key)
CryptoBuffer DecryptBuffer(const CryptoBuffer &encryptedData) override
CryptoBuffer FinalizeEncryption() override
size_t GetBlockSizeBytes() const override
AES_KeyWrap_Cipher_BCrypt(AES_CTR_Cipher_BCrypt &&toMove)
CryptoBuffer FinalizeDecryption() override
CryptoBuffer EncryptBuffer(const CryptoBuffer &unEncryptedData) override
void Update(unsigned char *buffer, size_t bufferSize)
HashResult Calculate(const ByteBuffer &toHash, const ByteBuffer &secret)
BCryptHashImpl(LPCWSTR algorithmName, bool isHMAC)
HashResult Calculate(const Aws::String &str)
HashResult Calculate(Aws::IStream &stream)
BCryptSymmetricCipher(CryptoBuffer &&key, CryptoBuffer &&initializationVector, CryptoBuffer &&tag=std::move(CryptoBuffer(0)))
virtual ~BCryptSymmetricCipher()
virtual size_t GetKeyLengthBits() const =0
virtual size_t GetBlockSizeBytes() const =0
BCryptSymmetricCipher & operator=(BCryptSymmetricCipher &&toMove)
BCRYPT_ALG_HANDLE m_algHandle
CryptoBuffer FinalizeEncryption() override
CryptoBuffer FinalizeDecryption() override
BCryptSymmetricCipher(BCryptSymmetricCipher &&toMove)
BCryptSymmetricCipher(const CryptoBuffer &key, size_t ivSize, bool ctrMode=false)
CryptoBuffer DecryptBuffer(const CryptoBuffer &encryptedData) override
BCryptSymmetricCipher(const BCryptSymmetricCipher &)=delete
CryptoBuffer EncryptBuffer(const CryptoBuffer &unEncryptedData) override
bool m_encryptDecryptCalled
BCryptSymmetricCipher & operator=(const BCryptSymmetricCipher &)=delete
BCryptSymmetricCipher(const CryptoBuffer &key, const CryptoBuffer &initializationVector, const CryptoBuffer &tag=CryptoBuffer(0))
BCRYPT_KEY_HANDLE m_keyHandle
PBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO m_authInfoPtr
static BCRYPT_KEY_HANDLE ImportKeyBlob(BCRYPT_ALG_HANDLE handle, CryptoBuffer &key)
bool CheckKeyAndIVLength(size_t expectedKeyLength, size_t expectedIVLength)
virtual HashResult Calculate(Aws::IStream &stream) override
virtual HashResult GetHash() override
virtual HashResult Calculate(const Aws::String &str) override
virtual void Update(unsigned char *buffer, size_t bufferSize) override
void GetBytes(unsigned char *buffer, size_t bufferSize) override
~SecureRandomBytes_BCrypt()
SecureRandomBytes_BCrypt()
virtual HashResult GetHash() override
virtual HashResult Calculate(const Aws::String &str) override
virtual ~Sha1BcryptImpl()
virtual HashResult Calculate(Aws::IStream &stream) override
virtual void Update(unsigned char *buffer, size_t bufferSize) override
virtual HashResult GetHash() override
virtual ~Sha256BcryptImpl()
virtual void Update(unsigned char *buffer, size_t bufferSize) override
virtual HashResult Calculate(Aws::IStream &stream) override
virtual HashResult Calculate(const Aws::String &str) override
virtual ~Sha256HMACBcryptImpl()
virtual HashResult Calculate(const ByteBuffer &toSign, const ByteBuffer &secret) override
static const char * SecureRandom_BCrypt_Tag
std::basic_istream< char, std::char_traits< char > > IStream
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
std::vector< T, Aws::Allocator< T > > Vector