azure-protected-vm-secrets/AesWrapper.h (33 lines of code) (raw):
#pragma once
#include <vector>
#include <memory>
// Chaining mode for AES encryption and decryption
// Currently only GCM is supported
enum ChainingMode
{
CBC,
GCM
};
class AesChainingInfo
{
public:
virtual ~AesChainingInfo() = default;
virtual void SetNonce(const std::vector<unsigned char> &nonce) = 0;
virtual std::vector<unsigned char> GetNonce() = 0;
virtual void SetInitVector(const std::vector<unsigned char> &initVector) = 0;
virtual std::vector<unsigned char> GetInitVector() = 0;
};
#ifndef PLATFORM_UNIX
#endif
class AesWrapper
{
public:
virtual ~AesWrapper() = default;
virtual void SetKey(std::vector<unsigned char> &key) = 0;
virtual std::unique_ptr<AesChainingInfo> SetChainingInfo(const std::vector<unsigned char> &nonce) = 0;
virtual std::vector<unsigned char> Encrypt(const std::vector<unsigned char> &data, AesChainingInfo *chainingInfo) const = 0;
virtual std::vector<unsigned char> Decrypt(const std::vector<unsigned char> &ciphertext, AesChainingInfo *chainingInfo) const = 0;
};
// Factory class for creating AES wrappers
class AesCreator {
public:
virtual ~AesCreator() = default;
virtual std::unique_ptr<AesWrapper> CreateAesWrapper() const = 0;
};