From b16e10f6abbec3d6a44f735ceb57ab2ba6f097c6 Mon Sep 17 00:00:00 2001 From: B Stack Date: Mon, 15 Jul 2019 10:48:05 -0400 Subject: add zen/open_ssl.cpp from upstream Upstream added this file which was a hard dependency that should be bundled. See https://freefilesync.org/forum/viewtopic.php?t=6486. --- zen/open_ssl.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 zen/open_ssl.h (limited to 'zen/open_ssl.h') diff --git a/zen/open_ssl.h b/zen/open_ssl.h new file mode 100644 index 00000000..5bf4e9ce --- /dev/null +++ b/zen/open_ssl.h @@ -0,0 +1,49 @@ +// ***************************************************************************** +// * This file is part of the FreeFileSync project. It is distributed under * +// * GNU General Public License: https://www.gnu.org/licenses/gpl-3.0 * +// * Copyright (C) Zenju (zenju AT freefilesync DOT org) - All Rights Reserved * +// ***************************************************************************** + +#ifndef OPEN_SSL_H_801974580936508934568792347506 +#define OPEN_SSL_H_801974580936508934568792347506 + +#include +#include + + +namespace zen //init OpenSSL before use! +{ +enum class RsaStreamType +{ + pkix, //base-64-encoded SubjectPublicKeyInfo structure ("BEGIN PUBLIC KEY") + pkcs1, //base-64-encoded RSA number and exponent ("BEGIN RSA PUBLIC KEY") + pkcs1_raw +}; + +//verify signatures produced with: "openssl dgst -sha256 -sign private.pem -out file.sig file.txt" +void verifySignature(const std::string& message, + const std::string& signature, + const std::string& publicKeyStream, + RsaStreamType streamType); //throw SysError + +std::string convertRsaKey(const std::string& keyStream, RsaStreamType typeFrom, RsaStreamType typeTo, bool publicKey); //throw SysError + + +class TlsContext +{ +public: + TlsContext(int socket, //throw SysError + const Zstring& server, + const Zstring* caCertFilePath /*optional: enable certificate validation*/); + ~TlsContext(); + + size_t tryRead( void* buffer, size_t bytesToRead ); //throw SysError; may return short, only 0 means EOF! + size_t tryWrite(const void* buffer, size_t bytesToWrite); //throw SysError; may return short! CONTRACT: bytesToWrite > 0 + +private: + class Impl; + const std::unique_ptr pimpl_; +}; +} + +#endif //OPEN_SSL_H_801974580936508934568792347506 -- cgit