8#include <QtNetwork/private/qsslkey_p.h>
10#include <QtCore/qbytearray.h>
12#include <CommonCrypto/CommonCrypto.h>
22QByteArray wrapCCCrypt(CCOperation ccOp, QSslKeyPrivate::Cipher cipher,
23 const QByteArray &data,
const QByteArray &key,
27 CCAlgorithm ccAlgorithm = {};
30 blockSize = kCCBlockSizeDES;
31 ccAlgorithm = kCCAlgorithmDES;
33 case Cipher::DesEde3Cbc:
34 blockSize = kCCBlockSize3DES;
35 ccAlgorithm = kCCAlgorithm3DES;
38 blockSize = kCCBlockSizeRC2;
39 ccAlgorithm = kCCAlgorithmRC2;
41 case Cipher::Aes128Cbc:
42 case Cipher::Aes192Cbc:
43 case Cipher::Aes256Cbc:
44 blockSize = kCCBlockSizeAES128;
45 ccAlgorithm = kCCAlgorithmAES;
48 std::size_t plainLength = 0;
49 QByteArray plain(data.size() + blockSize, 0);
50 CCCryptorStatus status = CCCrypt(ccOp, ccAlgorithm, kCCOptionPKCS7Padding,
51 key.constData(), std::size_t(key.size()),
52 iv.constData(), data.constData(), std::size_t(data.size()),
53 plain.data(), std::size_t(plain.size()), &plainLength);
54 if (status == kCCSuccess)
55 return plain.left(
int(plainLength));
63 const QByteArray &key,
const QByteArray &iv)
const
65 return wrapCCCrypt(kCCDecrypt, cipher, data, key, iv);
69 const QByteArray &key,
const QByteArray &iv)
const
71 return wrapCCCrypt(kCCEncrypt, cipher, data, key, iv);
QByteArray decrypt(Cipher cipher, const QByteArray &data, const QByteArray &key, const QByteArray &iv) const override
QByteArray encrypt(Cipher cipher, const QByteArray &data, const QByteArray &key, const QByteArray &iv) const override
Namespace containing onternal types that TLS backends implement.