mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-13 18:45:10 +01:00
remove raw pointer interfaces
This commit is contained in:
parent
9350ee13a2
commit
0f49493d0e
@ -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
|
||||||
@ -75,10 +73,10 @@ class Crypto_API Cipher: public Poco::RefCountedObject
|
|||||||
/// // and write pass it to the underlying file stream.
|
/// // and write pass it to the underlying file stream.
|
||||||
/// Poco::FileOutputStream sink("encrypted.dat");
|
/// Poco::FileOutputStream sink("encrypted.dat");
|
||||||
/// CryptoOutputStream encryptor(sink, pCipher->createEncryptor());
|
/// CryptoOutputStream encryptor(sink, pCipher->createEncryptor());
|
||||||
///
|
///
|
||||||
/// Poco::FileInputStream source("source.txt");
|
/// Poco::FileInputStream source("source.txt");
|
||||||
/// Poco::StreamCopier::copyStream(source, encryptor);
|
/// Poco::StreamCopier::copyStream(source, encryptor);
|
||||||
///
|
///
|
||||||
/// // Always close output streams to flush all internal buffers
|
/// // Always close output streams to flush all internal buffers
|
||||||
/// encryptor.close();
|
/// encryptor.close();
|
||||||
/// sink.close();
|
/// sink.close();
|
||||||
@ -95,7 +93,7 @@ public:
|
|||||||
ENC_BINHEX = 0x02, /// BinHex-encoded output
|
ENC_BINHEX = 0x02, /// BinHex-encoded output
|
||||||
ENC_BASE64_NO_LF = 0x81, /// Base64-encoded output, no linefeeds
|
ENC_BASE64_NO_LF = 0x81, /// Base64-encoded output, no linefeeds
|
||||||
ENC_BINHEX_NO_LF = 0x82 /// BinHex-encoded output, no linefeeds
|
ENC_BINHEX_NO_LF = 0x82 /// BinHex-encoded output, no linefeeds
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual ~Cipher();
|
virtual ~Cipher();
|
||||||
@ -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);
|
||||||
|
@ -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:
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
@ -30,9 +30,9 @@ namespace Crypto {
|
|||||||
|
|
||||||
|
|
||||||
class RSACipherImpl: public Cipher
|
class RSACipherImpl: public Cipher
|
||||||
/// An implementation of the Cipher class for
|
/// An implementation of the Cipher class for
|
||||||
/// asymmetric (public-private key) encryption
|
/// asymmetric (public-private key) encryption
|
||||||
/// based on the the RSA algorithm in OpenSSL's
|
/// based on the the RSA algorithm in OpenSSL's
|
||||||
/// crypto library.
|
/// crypto library.
|
||||||
///
|
///
|
||||||
/// Encryption is using the public key, decryption
|
/// Encryption is using the public key, decryption
|
||||||
@ -48,11 +48,11 @@ 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:
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -86,10 +85,10 @@ void CryptoStreamBuf::close()
|
|||||||
// thrown.
|
// thrown.
|
||||||
std::ostream* pOstr = _pOstr;
|
std::ostream* pOstr = _pOstr;
|
||||||
_pOstr = 0;
|
_pOstr = 0;
|
||||||
|
|
||||||
// Finalize transformation.
|
// Finalize transformation.
|
||||||
std::streamsize n = _pTransform->finalize(_buffer.begin(), static_cast<std::streamsize>(_buffer.size()));
|
std::streamsize n = _pTransform->finalize(_buffer.begin(), static_cast<std::streamsize>(_buffer.size()));
|
||||||
|
|
||||||
if (n > 0)
|
if (n > 0)
|
||||||
{
|
{
|
||||||
pOstr->write(reinterpret_cast<char*>(_buffer.begin()), n);
|
pOstr->write(reinterpret_cast<char*>(_buffer.begin()), n);
|
||||||
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
@ -318,7 +318,7 @@ void CryptoTest::testStreams()
|
|||||||
DecryptingInputStream decryptor(sstr, *pCipher);
|
DecryptingInputStream decryptor(sstr, *pCipher);
|
||||||
std::string result;
|
std::string result;
|
||||||
Poco::StreamCopier::copyToString(decryptor, result);
|
Poco::StreamCopier::copyToString(decryptor, result);
|
||||||
|
|
||||||
assertTrue (result == SECRET_MESSAGE);
|
assertTrue (result == SECRET_MESSAGE);
|
||||||
assertTrue (decryptor.eof());
|
assertTrue (decryptor.eof());
|
||||||
assertTrue (!decryptor.bad());
|
assertTrue (!decryptor.bad());
|
||||||
|
Loading…
Reference in New Issue
Block a user