Skip to content

Commit

Permalink
feat(Cipher): No access to padding in Cipher #3374
Browse files Browse the repository at this point in the history
  • Loading branch information
aleks-f committed Jun 23, 2022
1 parent c8e6602 commit 0903810
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
8 changes: 4 additions & 4 deletions Crypto/include/Poco/Crypto/Cipher.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,16 +107,16 @@ class Crypto_API Cipher: public Poco::RefCountedObject
virtual CryptoTransform::Ptr createDecryptor() = 0;
/// 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, bool padding = true);
/// Directly encrypt a string and encode it using the given encoding.

virtual std::string decryptString(const std::string& str, Encoding encoding = ENC_NONE);
virtual std::string decryptString(const std::string& str, Encoding encoding = ENC_NONE, bool padding = true);
/// Directly decrypt a string that is encoded with the given encoding.

virtual void encrypt(std::istream& source, std::ostream& sink, Encoding encoding = ENC_NONE);
virtual void encrypt(std::istream& source, std::ostream& sink, Encoding encoding = ENC_NONE, bool padding = true);
/// Directly encrypts an input stream and encodes it using the given encoding.

virtual void decrypt(std::istream& source, std::ostream& sink, Encoding encoding = ENC_NONE);
virtual void decrypt(std::istream& source, std::ostream& sink, Encoding encoding = ENC_NONE, bool padding = true);
/// Directly decrypt an input stream that is encoded with the given encoding.

protected:
Expand Down
20 changes: 12 additions & 8 deletions Crypto/src/Cipher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,30 +39,32 @@ Cipher::~Cipher()
}


std::string Cipher::encryptString(const std::string& str, Encoding encoding)
std::string Cipher::encryptString(const std::string& str, Encoding encoding, bool padding)
{
std::istringstream source(str);
std::ostringstream sink;

encrypt(source, sink, encoding);
encrypt(source, sink, encoding, padding);

return sink.str();
}


std::string Cipher::decryptString(const std::string& str, Encoding encoding)
std::string Cipher::decryptString(const std::string& str, Encoding encoding, bool padding)
{
std::istringstream source(str);
std::ostringstream sink;

decrypt(source, sink, encoding);
decrypt(source, sink, encoding, padding);
return sink.str();
}


void Cipher::encrypt(std::istream& source, std::ostream& sink, Encoding encoding)
void Cipher::encrypt(std::istream& source, std::ostream& sink, Encoding encoding, bool padding)
{
CryptoInputStream encryptor(source, createEncryptor());
CryptoTransform::Ptr p = createEncryptor();
if (!padding) p->setPadding(0);
CryptoInputStream encryptor(source, p);

switch (encoding)
{
Expand Down Expand Up @@ -102,9 +104,11 @@ void Cipher::encrypt(std::istream& source, std::ostream& sink, Encoding encoding
}


void Cipher::decrypt(std::istream& source, std::ostream& sink, Encoding encoding)
void Cipher::decrypt(std::istream& source, std::ostream& sink, Encoding encoding, bool padding)
{
CryptoOutputStream decryptor(sink, createDecryptor());
CryptoTransform::Ptr p = createDecryptor();
if (!padding) p->setPadding(0);
CryptoOutputStream decryptor(sink, p);

switch (encoding)
{
Expand Down

0 comments on commit 0903810

Please sign in to comment.