remove raw pointer interfaces

This commit is contained in:
Günter Obiltschnig 2020-01-23 09:50:36 +01:00
parent 9350ee13a2
commit 0f49493d0e
9 changed files with 39 additions and 38 deletions

View File

@ -19,6 +19,7 @@
#include "Poco/Crypto/Crypto.h" #include "Poco/Crypto/Crypto.h"
#include "Poco/Crypto/CryptoTransform.h"
#include "Poco/RefCountedObject.h" #include "Poco/RefCountedObject.h"
#include "Poco/AutoPtr.h" #include "Poco/AutoPtr.h"
#include <istream> #include <istream>
@ -30,9 +31,6 @@ namespace Poco {
namespace Crypto { namespace Crypto {
class CryptoTransform;
class Crypto_API Cipher: public Poco::RefCountedObject class Crypto_API Cipher: public Poco::RefCountedObject
/// Represents the abstract base class from which all implementations of /// Represents the abstract base class from which all implementations of
/// symmetric/asymmetric encryption algorithms must inherit. Use the CipherFactory /// symmetric/asymmetric encryption algorithms must inherit. Use the CipherFactory
@ -104,10 +102,10 @@ public:
virtual const std::string& name() const = 0; virtual const std::string& name() const = 0;
/// Returns the name of the Cipher. /// Returns the name of the Cipher.
virtual CryptoTransform* createEncryptor() = 0; virtual CryptoTransform::Ptr createEncryptor() = 0;
/// Creates an encryptor object to be used with a CryptoStream. /// Creates an encryptor object to be used with a CryptoStream.
virtual CryptoTransform* createDecryptor() = 0; virtual CryptoTransform::Ptr createDecryptor() = 0;
/// Creates a decryptor object to be used with a CryptoStream. /// Creates a decryptor object to be used with a CryptoStream.
virtual std::string encryptString(const std::string& str, Encoding encoding = ENC_NONE); virtual std::string encryptString(const std::string& str, Encoding encoding = ENC_NONE);

View File

@ -42,10 +42,10 @@ public:
const std::string& name() const; const std::string& name() const;
/// Returns the name of the cipher. /// Returns the name of the cipher.
CryptoTransform* createEncryptor(); CryptoTransform::Ptr createEncryptor();
/// Creates an encryptor object. /// Creates an encryptor object.
CryptoTransform* createDecryptor(); CryptoTransform::Ptr createDecryptor();
/// Creates a decryptor object. /// Creates a decryptor object.
private: private:

View File

@ -20,6 +20,7 @@
#include "Poco/Crypto/Crypto.h" #include "Poco/Crypto/Crypto.h"
#include "Poco/Crypto/CryptoTransform.h"
#include "Poco/BufferedStreamBuf.h" #include "Poco/BufferedStreamBuf.h"
#include "Poco/Buffer.h" #include "Poco/Buffer.h"
#include <iostream> #include <iostream>
@ -38,8 +39,8 @@ class Crypto_API CryptoStreamBuf: public Poco::BufferedStreamBuf
/// going through it. /// going through it.
{ {
public: public:
CryptoStreamBuf(std::istream& istr, CryptoTransform* pTransform, std::streamsize bufferSize = 8192); CryptoStreamBuf(std::istream& istr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize = 8192);
CryptoStreamBuf(std::ostream& ostr, CryptoTransform* pTransform, std::streamsize bufferSize = 8192); CryptoStreamBuf(std::ostream& ostr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize = 8192);
virtual ~CryptoStreamBuf(); virtual ~CryptoStreamBuf();
@ -51,7 +52,7 @@ protected:
int writeToDevice(const char* buffer, std::streamsize length); int writeToDevice(const char* buffer, std::streamsize length);
private: private:
CryptoTransform* _pTransform; CryptoTransform::Ptr _pTransform;
std::istream* _pIstr; std::istream* _pIstr;
std::ostream* _pOstr; std::ostream* _pOstr;
bool _eof; bool _eof;
@ -70,8 +71,8 @@ class Crypto_API CryptoIOS: public virtual std::ios
/// stream buffer and base classes. /// stream buffer and base classes.
{ {
public: public:
CryptoIOS(std::istream& istr, CryptoTransform* pTransform, std::streamsize bufferSize = 8192); CryptoIOS(std::istream& istr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize = 8192);
CryptoIOS(std::ostream& ostr, CryptoTransform* pTransform, std::streamsize bufferSize = 8192); CryptoIOS(std::ostream& ostr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize = 8192);
~CryptoIOS(); ~CryptoIOS();
CryptoStreamBuf* rdbuf(); CryptoStreamBuf* rdbuf();
@ -89,7 +90,7 @@ class Crypto_API CryptoInputStream: public CryptoIOS, public std::istream
/// respectively. /// respectively.
{ {
public: public:
CryptoInputStream(std::istream& istr, CryptoTransform* pTransform, std::streamsize bufferSize = 8192); CryptoInputStream(std::istream& istr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize = 8192);
/// Create a new CryptoInputStream object. The CryptoInputStream takes the /// Create a new CryptoInputStream object. The CryptoInputStream takes the
/// ownership of the given CryptoTransform object. /// ownership of the given CryptoTransform object.
@ -113,7 +114,7 @@ class Crypto_API CryptoOutputStream: public CryptoIOS, public std::ostream
/// to ensure completion of cryptographic transformation. /// to ensure completion of cryptographic transformation.
{ {
public: public:
CryptoOutputStream(std::ostream& ostr, CryptoTransform* pTransform, std::streamsize bufferSize = 8192); CryptoOutputStream(std::ostream& ostr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize = 8192);
/// Create a new CryptoOutputStream object. The CryptoOutputStream takes the /// Create a new CryptoOutputStream object. The CryptoOutputStream takes the
/// ownership of the given CryptoTransform object. /// ownership of the given CryptoTransform object.

View File

@ -19,6 +19,7 @@
#include "Poco/Crypto/Crypto.h" #include "Poco/Crypto/Crypto.h"
#include "Poco/SharedPtr.h"
#include <ios> #include <ios>
@ -35,6 +36,8 @@ class Crypto_API CryptoTransform
/// perform encryption or decryption of data. /// perform encryption or decryption of data.
{ {
public: public:
using Ptr = Poco::SharedPtr<CryptoTransform>;
CryptoTransform(); CryptoTransform();
/// Creates a new CryptoTransform object. /// Creates a new CryptoTransform object.

View File

@ -49,10 +49,10 @@ public:
const std::string& name() const; const std::string& name() const;
/// Returns the name of the Cipher. /// Returns the name of the Cipher.
CryptoTransform* createEncryptor(); CryptoTransform::Ptr createEncryptor();
/// Creates an encryptor object. /// Creates an encryptor object.
CryptoTransform* createDecryptor(); CryptoTransform::Ptr createDecryptor();
/// Creates a decryptor object. /// Creates a decryptor object.
private: private:

View File

@ -255,14 +255,14 @@ CipherImpl::~CipherImpl()
} }
CryptoTransform* CipherImpl::createEncryptor() CryptoTransform::Ptr CipherImpl::createEncryptor()
{ {
CipherKeyImpl::Ptr p = _key.impl(); CipherKeyImpl::Ptr p = _key.impl();
return new CryptoTransformImpl(p->cipher(), p->getKey(), p->getIV(), CryptoTransformImpl::DIR_ENCRYPT); return new CryptoTransformImpl(p->cipher(), p->getKey(), p->getIV(), CryptoTransformImpl::DIR_ENCRYPT);
} }
CryptoTransform* CipherImpl::createDecryptor() CryptoTransform::Ptr CipherImpl::createDecryptor()
{ {
CipherKeyImpl::Ptr p = _key.impl(); CipherKeyImpl::Ptr p = _key.impl();
return new CryptoTransformImpl(p->cipher(), p->getKey(), p->getIV(), CryptoTransformImpl::DIR_DECRYPT); return new CryptoTransformImpl(p->cipher(), p->getKey(), p->getIV(), CryptoTransformImpl::DIR_DECRYPT);

View File

@ -32,7 +32,7 @@ namespace Crypto {
// //
CryptoStreamBuf::CryptoStreamBuf(std::istream& istr, CryptoTransform* pTransform, std::streamsize bufferSize): CryptoStreamBuf::CryptoStreamBuf(std::istream& istr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize):
Poco::BufferedStreamBuf(bufferSize, std::ios::in), Poco::BufferedStreamBuf(bufferSize, std::ios::in),
_pTransform(pTransform), _pTransform(pTransform),
_pIstr(&istr), _pIstr(&istr),
@ -45,7 +45,7 @@ CryptoStreamBuf::CryptoStreamBuf(std::istream& istr, CryptoTransform* pTransform
} }
CryptoStreamBuf::CryptoStreamBuf(std::ostream& ostr, CryptoTransform* pTransform, std::streamsize bufferSize): CryptoStreamBuf::CryptoStreamBuf(std::ostream& ostr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize):
Poco::BufferedStreamBuf(bufferSize, std::ios::out), Poco::BufferedStreamBuf(bufferSize, std::ios::out),
_pTransform(pTransform), _pTransform(pTransform),
_pIstr(0), _pIstr(0),
@ -67,7 +67,6 @@ CryptoStreamBuf::~CryptoStreamBuf()
catch (...) catch (...)
{ {
} }
delete _pTransform;
} }
@ -193,14 +192,14 @@ int CryptoStreamBuf::writeToDevice(const char* buffer, std::streamsize length)
// //
CryptoIOS::CryptoIOS(std::istream& istr, CryptoTransform* pTransform, std::streamsize bufferSize): CryptoIOS::CryptoIOS(std::istream& istr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize):
_buf(istr, pTransform, bufferSize) _buf(istr, pTransform, bufferSize)
{ {
poco_ios_init(&_buf); poco_ios_init(&_buf);
} }
CryptoIOS::CryptoIOS(std::ostream& ostr, CryptoTransform* pTransform, std::streamsize bufferSize): CryptoIOS::CryptoIOS(std::ostream& ostr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize):
_buf(ostr, pTransform, bufferSize) _buf(ostr, pTransform, bufferSize)
{ {
poco_ios_init(&_buf); poco_ios_init(&_buf);
@ -223,7 +222,7 @@ CryptoStreamBuf* CryptoIOS::rdbuf()
// //
CryptoInputStream::CryptoInputStream(std::istream& istr, CryptoTransform* pTransform, std::streamsize bufferSize): CryptoInputStream::CryptoInputStream(std::istream& istr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize):
CryptoIOS(istr, pTransform, bufferSize), CryptoIOS(istr, pTransform, bufferSize),
std::istream(&_buf) std::istream(&_buf)
{ {
@ -247,7 +246,7 @@ CryptoInputStream::~CryptoInputStream()
// //
CryptoOutputStream::CryptoOutputStream(std::ostream& ostr, CryptoTransform* pTransform, std::streamsize bufferSize): CryptoOutputStream::CryptoOutputStream(std::ostream& ostr, CryptoTransform::Ptr pTransform, std::streamsize bufferSize):
CryptoIOS(ostr, pTransform, bufferSize), CryptoIOS(ostr, pTransform, bufferSize),
std::ostream(&_buf) std::ostream(&_buf)
{ {

View File

@ -329,13 +329,13 @@ RSACipherImpl::~RSACipherImpl()
} }
CryptoTransform* RSACipherImpl::createEncryptor() CryptoTransform::Ptr RSACipherImpl::createEncryptor()
{ {
return new RSAEncryptImpl(_key.impl()->getRSA(), _paddingMode); return new RSAEncryptImpl(_key.impl()->getRSA(), _paddingMode);
} }
CryptoTransform* RSACipherImpl::createDecryptor() CryptoTransform::Ptr RSACipherImpl::createDecryptor()
{ {
return new RSADecryptImpl(_key.impl()->getRSA(), _paddingMode); return new RSADecryptImpl(_key.impl()->getRSA(), _paddingMode);
} }

View File

@ -222,7 +222,7 @@ void CryptoTest::testEncryptDecryptGCM()
for (std::size_t n = 1; n < MAX_DATA_SIZE; n++) for (std::size_t n = 1; n < MAX_DATA_SIZE; n++)
{ {
std::stringstream str; std::stringstream str;
CryptoTransform* pEncryptor = pCipher->createEncryptor(); CryptoTransform::Ptr pEncryptor = pCipher->createEncryptor();
CryptoOutputStream encryptorStream(str, pEncryptor); CryptoOutputStream encryptorStream(str, pEncryptor);
std::string in(n, 'x'); std::string in(n, 'x');
encryptorStream << in; encryptorStream << in;
@ -231,7 +231,7 @@ void CryptoTest::testEncryptDecryptGCM()
std::string tag = pEncryptor->getTag(); std::string tag = pEncryptor->getTag();
CryptoTransform* pDecryptor = pCipher->createDecryptor(); CryptoTransform::Ptr pDecryptor = pCipher->createDecryptor();
pDecryptor->setTag(tag); pDecryptor->setTag(tag);
CryptoInputStream decryptorStream(str, pDecryptor); CryptoInputStream decryptorStream(str, pDecryptor);
std::string out; std::string out;