Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qtlskey_st.cpp
Go to the documentation of this file.
1
// Copyright (C) 2021 The Qt Company Ltd.
2
// Copyright (C) 2014 Jeremy Lainé <jeremy.laine@m4x.org>
3
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
// Qt-Security score:critical reason:cryptography
5
6
#
include
"qtlskey_st_p.h"
7
8
#
include
<
QtNetwork
/
private
/
qsslkey_p
.
h
>
9
10
#
include
<
QtCore
/
qbytearray
.
h
>
11
12
#
include
<
CommonCrypto
/
CommonCrypto
.
h
>
13
14
#
include
<
cstddef
>
15
16
QT_BEGIN_NAMESPACE
17
18
namespace
QTlsPrivate
{
19
namespace
{
20
21
// Before this code was located in qsslkey_mac.cpp.
22
QByteArray wrapCCCrypt(CCOperation ccOp, QSslKeyPrivate::Cipher cipher,
23
const
QByteArray &data,
const
QByteArray &key,
24
const
QByteArray &iv)
25
{
26
int
blockSize = {};
27
CCAlgorithm ccAlgorithm = {};
28
switch
(cipher) {
29
case
Cipher::DesCbc:
30
blockSize = kCCBlockSizeDES;
31
ccAlgorithm = kCCAlgorithmDES;
32
break
;
33
case
Cipher::DesEde3Cbc:
34
blockSize = kCCBlockSize3DES;
35
ccAlgorithm = kCCAlgorithm3DES;
36
break
;
37
case
Cipher::Rc2Cbc:
38
blockSize = kCCBlockSizeRC2;
39
ccAlgorithm = kCCAlgorithmRC2;
40
break
;
41
case
Cipher::Aes128Cbc:
42
case
Cipher::Aes192Cbc:
43
case
Cipher::Aes256Cbc:
44
blockSize = kCCBlockSizeAES128;
45
ccAlgorithm = kCCAlgorithmAES;
46
break
;
47
}
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));
56
57
return
{};
58
}
59
60
}
// Unnamed namespace.
61
62
QByteArray
TlsKeySecureTransport::
decrypt
(Cipher cipher,
const
QByteArray &data,
63
const
QByteArray &key,
const
QByteArray &iv)
const
64
{
65
return
wrapCCCrypt(kCCDecrypt, cipher, data, key, iv);
66
}
67
68
QByteArray
TlsKeySecureTransport::
encrypt
(Cipher cipher,
const
QByteArray &data,
69
const
QByteArray &key,
const
QByteArray &iv)
const
70
{
71
return
wrapCCCrypt(kCCEncrypt, cipher, data, key, iv);
72
}
73
74
}
// namespace QTlsPrivate
75
76
QT_END_NAMESPACE
QTlsPrivate::TlsKeySecureTransport::decrypt
QByteArray decrypt(Cipher cipher, const QByteArray &data, const QByteArray &key, const QByteArray &iv) const override
Definition
qtlskey_st.cpp:62
QTlsPrivate::TlsKeySecureTransport::encrypt
QByteArray encrypt(Cipher cipher, const QByteArray &data, const QByteArray &key, const QByteArray &iv) const override
Definition
qtlskey_st.cpp:68
QTlsPrivate
Namespace containing onternal types that TLS backends implement.
Definition
qocspresponse.h:41
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qtbase
src
plugins
tls
securetransport
qtlskey_st.cpp
Generated on
for Qt by
1.18.0