mirror of
https://github.com/qpdf/qpdf.git
synced 2025-01-09 09:50:28 +00:00
9044a24097
Use get() and use_count() instead. Add #define NO_POINTERHOLDER_DEPRECATION to remove deprecation markers for these only. This commit also removes all deprecated PointerHolder API calls from qpdf's code except in PointerHolder's test suite, which must continue to test the deprecated APIs.
50 lines
1.0 KiB
C++
50 lines
1.0 KiB
C++
#include <qpdf/Pl_RC4.hh>
|
|
#include <qpdf/QUtil.hh>
|
|
|
|
Pl_RC4::Pl_RC4(char const* identifier, Pipeline* next,
|
|
unsigned char const* key_data, int key_len,
|
|
size_t out_bufsize) :
|
|
Pipeline(identifier, next),
|
|
out_bufsize(out_bufsize),
|
|
rc4(key_data, key_len)
|
|
{
|
|
this->outbuf = PointerHolder<unsigned char>(
|
|
true, new unsigned char[out_bufsize]);
|
|
}
|
|
|
|
Pl_RC4::~Pl_RC4()
|
|
{
|
|
}
|
|
|
|
void
|
|
Pl_RC4::write(unsigned char* data, size_t len)
|
|
{
|
|
if (this->outbuf.get() == 0)
|
|
{
|
|
throw std::logic_error(
|
|
this->identifier +
|
|
": Pl_RC4: write() called after finish() called");
|
|
}
|
|
|
|
size_t bytes_left = len;
|
|
unsigned char* p = data;
|
|
|
|
while (bytes_left > 0)
|
|
{
|
|
size_t bytes =
|
|
(bytes_left < this->out_bufsize ? bytes_left : out_bufsize);
|
|
bytes_left -= bytes;
|
|
// lgtm[cpp/weak-cryptographic-algorithm]
|
|
rc4.process(p, bytes, outbuf.get());
|
|
p += bytes;
|
|
getNext()->write(outbuf.get(), bytes);
|
|
}
|
|
}
|
|
|
|
void
|
|
Pl_RC4::finish()
|
|
{
|
|
this->outbuf = 0;
|
|
this->getNext()->finish();
|
|
}
|