#pragma once #include #include #include #include #include #include #include #include #include #include #include // RAII struct PKEYDeleter { void operator()(EVP_PKEY* p) const { EVP_PKEY_free(p); } }; struct CTXDeleter { void operator()(EVP_PKEY_CTX* p) const { EVP_PKEY_CTX_free(p); } }; struct CipherDeleter { void operator()(EVP_CIPHER_CTX* ctx) const { EVP_CIPHER_CTX_free(ctx); } }; struct BIODeleter { void operator()(BIO* b) const { BIO_free_all(b); } };