#ifndef __VEREIGN_NCRYPT_RSA_HH #define __VEREIGN_NCRYPT_RSA_HH #include <vereign/ncrypt/unique_ptr.hh> #include <vereign/bytes/buffer.hh> #include <windows.h> #include <ncrypt.h> #include <string> #include <optional> namespace vereign::ncrypt::rsa { struct KeyUIPolicy { std::string_view CreationTitle; std::string_view Description; std::string_view FriendlyName; }; auto OpenStorageProvider() -> UniquePtr; auto LoadKey(NCRYPT_PROV_HANDLE provider, const std::string& key_name) -> UniquePtr; auto CreateKey( NCRYPT_PROV_HANDLE provider, int bits, const std::string& key_name, std::optional<KeyUIPolicy> ui_policy ) -> UniquePtr; void DeleteKey(NCRYPT_KEY_HANDLE key); void PublicKeyEncrypt(NCRYPT_KEY_HANDLE key, bytes::View src, bytes::Buffer& encrypted); void PrivateKeyDecrypt(NCRYPT_KEY_HANDLE key, bytes::View src, bytes::Buffer& decrypted); } // vereign::ncrypt::rsa #endif // __VEREIGN_NCRYPT_RSA_HH