#pragma once #include #include #include #include class TOpenSslClientIO: public IInputStream, public IOutputStream { public: struct TOptions { struct TVerifyCert { // Uses builtin certs. // Also uses default CA path /etc/ssl/certs/ - can be provided with debian package: ca-certificates.deb. // It can be expanded with ENV: SSL_CERT_DIR. TString Hostname_; }; struct TClientCert { TString CertificateFile_; TString PrivateKeyFile_; TString PrivateKeyPassword_; }; TMaybe VerifyCert_; TMaybe ClientCert_; // TODO - keys, cyphers, etc }; TOpenSslClientIO(IInputStream* in, IOutputStream* out); TOpenSslClientIO(IInputStream* in, IOutputStream* out, const TOptions& options); ~TOpenSslClientIO() override; private: void DoWrite(const void* buf, size_t len) override; size_t DoRead(void* buf, size_t len) override; private: struct TImpl; THolder Impl_; }; struct x509_store_st; namespace NPrivate { struct TSslDestroy { static void Destroy(x509_store_st* x509) noexcept; }; } using TOpenSslX509StorePtr = THolder; TOpenSslX509StorePtr GetBuiltinOpenSslX509Store();