qcryptographichash.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/corelib/tools/qcryptographichash.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Copyright (C) 2013 Richard J. Moore <rich@kde.org>.-
5** Contact: https://www.qt.io/licensing/-
6**-
7** This file is part of the QtCore module of the Qt Toolkit.-
8**-
9** $QT_BEGIN_LICENSE:LGPL$-
10** Commercial License Usage-
11** Licensees holding valid commercial Qt licenses may use this file in-
12** accordance with the commercial license agreement provided with the-
13** Software or, alternatively, in accordance with the terms contained in-
14** a written agreement between you and The Qt Company. For licensing terms-
15** and conditions see https://www.qt.io/terms-conditions. For further-
16** information use the contact form at https://www.qt.io/contact-us.-
17**-
18** GNU Lesser General Public License Usage-
19** Alternatively, this file may be used under the terms of the GNU Lesser-
20** General Public License version 3 as published by the Free Software-
21** Foundation and appearing in the file LICENSE.LGPL3 included in the-
22** packaging of this file. Please review the following information to-
23** ensure the GNU Lesser General Public License version 3 requirements-
24** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
25**-
26** GNU General Public License Usage-
27** Alternatively, this file may be used under the terms of the GNU-
28** General Public License version 2.0 or (at your option) the GNU General-
29** Public license version 3 or any later version approved by the KDE Free-
30** Qt Foundation. The licenses are as published by the Free Software-
31** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
32** included in the packaging of this file. Please review the following-
33** information to ensure the GNU General Public License requirements will-
34** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
35** https://www.gnu.org/licenses/gpl-3.0.html.-
36**-
37** $QT_END_LICENSE$-
38**-
39****************************************************************************/-
40-
41#include <qcryptographichash.h>-
42#include <qiodevice.h>-
43-
44#include "../../3rdparty/sha1/sha1.cpp"-
45-
46#if defined(QT_BOOTSTRAPPED) && !defined(QT_CRYPTOGRAPHICHASH_ONLY_SHA1)-
47# error "Are you sure you need the other hashing algorithms besides SHA-1?"-
48#endif-
49-
50#ifndef QT_CRYPTOGRAPHICHASH_ONLY_SHA1-
51// qdoc and qmake only need SHA-1-
52#include "../../3rdparty/md5/md5.h"-
53#include "../../3rdparty/md5/md5.cpp"-
54#include "../../3rdparty/md4/md4.h"-
55#include "../../3rdparty/md4/md4.cpp"-
56-
57typedef unsigned char BitSequence;-
58typedef unsigned long long DataLength;-
59typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHLEN = 2 } HashReturn;-
60-
61#include "../../3rdparty/sha3/KeccakSponge.c"-
62typedef spongeState hashState;-
63-
64#include "../../3rdparty/sha3/KeccakNISTInterface.c"-
65-
66/*-
67 This lets us choose between SHA3 implementations at build time.-
68 */-
69typedef spongeState SHA3Context;-
70typedef HashReturn (SHA3Init)(hashState *state, int hashbitlen);-
71typedef HashReturn (SHA3Update)(hashState *state, const BitSequence *data, DataLength databitlen);-
72typedef HashReturn (SHA3Final)(hashState *state, BitSequence *hashval);-
73-
74#if Q_PROCESSOR_WORDSIZE == 8 // 64 bit version-
75-
76#include "../../3rdparty/sha3/KeccakF-1600-opt64.c"-
77-
78static SHA3Init * const sha3Init = Init;-
79static SHA3Update * const sha3Update = Update;-
80static SHA3Final * const sha3Final = Final;-
81-
82#else // 32 bit optimised fallback-
83-
84#include "../../3rdparty/sha3/KeccakF-1600-opt32.c"-
85-
86static SHA3Init * const sha3Init = Init;-
87static SHA3Update * const sha3Update = Update;-
88static SHA3Final * const sha3Final = Final;-
89-
90#endif-
91-
92/*-
93 These #defines replace the typedefs needed by the RFC6234 code. Normally-
94 the typedefs would come from from stdint.h, but since this header is not-
95 available on all platforms (MSVC 2008, for example), we #define them to the-
96 Qt equivalents.-
97*/-
98-
99#ifdef uint64_t-
100#undef uint64_t-
101#endif-
102-
103#define uint64_t QT_PREPEND_NAMESPACE(quint64)-
104-
105#ifdef uint32_t-
106#undef uint32_t-
107#endif-
108-
109#define uint32_t QT_PREPEND_NAMESPACE(quint32)-
110-
111#ifdef uint8_t-
112#undef uint8_t-
113#endif-
114-
115#define uint8_t QT_PREPEND_NAMESPACE(quint8)-
116-
117#ifdef int_least16_t-
118#undef int_least16_t-
119#endif-
120-
121#define int_least16_t QT_PREPEND_NAMESPACE(qint16)-
122-
123// Header from rfc6234 with 1 modification:-
124// sha1.h - commented out '#include <stdint.h>' on line 74-
125#include "../../3rdparty/rfc6234/sha.h"-
126-
127/*-
128 These 2 functions replace macros of the same name in sha224-256.c and-
129 sha384-512.c. Originally, these macros relied on a global static 'addTemp'-
130 variable. We do not want this for 2 reasons:-
131-
132 1. since we are including the sources directly, the declaration of the 2 conflict-
133-
134 2. static variables are not thread-safe, we do not want multiple threads-
135 computing a hash to corrupt one another-
136*/-
137static int SHA224_256AddLength(SHA256Context *context, unsigned int length);-
138static int SHA384_512AddLength(SHA512Context *context, unsigned int length);-
139-
140// Sources from rfc6234, with 4 modifications:-
141// sha224-256.c - commented out 'static uint32_t addTemp;' on line 68-
142// sha224-256.c - appended 'M' to the SHA224_256AddLength macro on line 70-
143#include "../../3rdparty/rfc6234/sha224-256.c"-
144// sha384-512.c - commented out 'static uint64_t addTemp;' on line 302-
145// sha384-512.c - appended 'M' to the SHA224_256AddLength macro on line 304-
146#include "../../3rdparty/rfc6234/sha384-512.c"-
147-
148#undef uint64_t-
149#undef uint32_t-
150#undef uint68_t-
151#undef int_least16_t-
152-
153static inline int SHA224_256AddLength(SHA256Context *context, unsigned int length)-
154{-
155 QT_PREPEND_NAMESPACE(quint32) addTemp;-
156 return SHA224_256AddLengthM(context, length);
executed 750 times by 2 tests: return (addTemp = (context)->Length_Low, (context)->Corrupted = (((context)->Length_Low += (length)) < addTemp) && (++(context)->Length_High == 0) ? shaInputTooLong : (context)->Corrupted );
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
750
157}-
158static inline int SHA384_512AddLength(SHA512Context *context, unsigned int length)-
159{-
160 QT_PREPEND_NAMESPACE(quint64) addTemp;-
161 return SHA384_512AddLengthM(context, length);
executed 24 times by 1 test: return (addTemp = context->Length_Low, context->Corrupted = ((context->Length_Low += length) < addTemp) && (++context->Length_High == 0) ? shaInputTooLong : (context)->Corrupted);
Executed by:
  • tst_QCryptographicHash
24
162}-
163#endif // QT_CRYPTOGRAPHICHASH_ONLY_SHA1-
164-
165QT_BEGIN_NAMESPACE-
166-
167class QCryptographicHashPrivate-
168{-
169public:-
170 QCryptographicHash::Algorithm method;-
171 union {-
172 Sha1State sha1Context;-
173#ifndef QT_CRYPTOGRAPHICHASH_ONLY_SHA1-
174 MD5Context md5Context;-
175 md4_context md4Context;-
176 SHA224Context sha224Context;-
177 SHA256Context sha256Context;-
178 SHA384Context sha384Context;-
179 SHA512Context sha512Context;-
180 SHA3Context sha3Context;-
181#endif-
182 };-
183 QByteArray result;-
184};-
185-
186/*!-
187 \class QCryptographicHash-
188 \inmodule QtCore-
189-
190 \brief The QCryptographicHash class provides a way to generate cryptographic hashes.-
191-
192 \since 4.3-
193-
194 \ingroup tools-
195 \reentrant-
196-
197 QCryptographicHash can be used to generate cryptographic hashes of binary or text data.-
198-
199 Currently MD4, MD5, SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512 are supported.-
200*/-
201-
202/*!-
203 \enum QCryptographicHash::Algorithm-
204-
205 \value Md4 Generate an MD4 hash sum-
206 \value Md5 Generate an MD5 hash sum-
207 \value Sha1 Generate an SHA-1 hash sum-
208 \value Sha224 Generate an SHA-224 hash sum (SHA-2). Introduced in Qt 5.0-
209 \value Sha256 Generate an SHA-256 hash sum (SHA-2). Introduced in Qt 5.0-
210 \value Sha384 Generate an SHA-384 hash sum (SHA-2). Introduced in Qt 5.0-
211 \value Sha512 Generate an SHA-512 hash sum (SHA-2). Introduced in Qt 5.0-
212 \value Sha3_224 Generate an SHA3-224 hash sum. Introduced in Qt 5.1-
213 \value Sha3_256 Generate an SHA3-256 hash sum. Introduced in Qt 5.1-
214 \value Sha3_384 Generate an SHA3-384 hash sum. Introduced in Qt 5.1-
215 \value Sha3_512 Generate an SHA3-512 hash sum. Introduced in Qt 5.1-
216*/-
217-
218/*!-
219 Constructs an object that can be used to create a cryptographic hash from data using \a method.-
220*/-
221QCryptographicHash::QCryptographicHash(Algorithm method)-
222 : d(new QCryptographicHashPrivate)-
223{-
224 d->method = method;-
225 reset();-
226}
executed 10730 times by 24 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
10730
227-
228/*!-
229 Destroys the object.-
230*/-
231QCryptographicHash::~QCryptographicHash()-
232{-
233 delete d;-
234}
executed 10730 times by 24 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
10730
235-
236/*!-
237 Resets the object.-
238*/-
239void QCryptographicHash::reset()-
240{-
241 switch (d->method) {-
242 case Sha1:
executed 7726 times by 12 tests: case Sha1:
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSslCertificate
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QUuid
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
7726
243 sha1InitState(&d->sha1Context);-
244 break;
executed 7726 times by 12 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSslCertificate
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QUuid
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
7726
245#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1-
246 default:-
247 Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in");-
248 Q_UNREACHABLE();-
249 break;-
250#else-
251 case Md4:
executed 8 times by 2 tests: case Md4:
Executed by:
  • tst_QAuthenticator
  • tst_QCryptographicHash
8
252 md4_init(&d->md4Context);-
253 break;
executed 8 times by 2 tests: break;
Executed by:
  • tst_QAuthenticator
  • tst_QCryptographicHash
8
254 case Md5:
executed 3078 times by 19 tests: case Md5:
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
3078
255 MD5Init(&d->md5Context);-
256 break;
executed 3078 times by 19 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
3078
257 case Sha224:
executed 4 times by 1 test: case Sha224:
Executed by:
  • tst_QCryptographicHash
4
258 SHA224Reset(&d->sha224Context);-
259 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
260 case Sha256:
executed 16 times by 2 tests: case Sha256:
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
16
261 SHA256Reset(&d->sha256Context);-
262 break;
executed 16 times by 2 tests: break;
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
16
263 case Sha384:
executed 4 times by 1 test: case Sha384:
Executed by:
  • tst_QCryptographicHash
4
264 SHA384Reset(&d->sha384Context);-
265 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
266 case Sha512:
executed 4 times by 1 test: case Sha512:
Executed by:
  • tst_QCryptographicHash
4
267 SHA512Reset(&d->sha512Context);-
268 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
269 case Sha3_224:
executed 6 times by 1 test: case Sha3_224:
Executed by:
  • tst_QCryptographicHash
6
270 sha3Init(&d->sha3Context, 224);-
271 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
272 case Sha3_256:
executed 6 times by 1 test: case Sha3_256:
Executed by:
  • tst_QCryptographicHash
6
273 sha3Init(&d->sha3Context, 256);-
274 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
275 case Sha3_384:
executed 6 times by 1 test: case Sha3_384:
Executed by:
  • tst_QCryptographicHash
6
276 sha3Init(&d->sha3Context, 384);-
277 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
278 case Sha3_512:
executed 6 times by 1 test: case Sha3_512:
Executed by:
  • tst_QCryptographicHash
6
279 sha3Init(&d->sha3Context, 512);-
280 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
281#endif-
282 }-
283 d->result.clear();-
284}
executed 10864 times by 24 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
10864
285-
286/*!-
287 Adds the first \a length chars of \a data to the cryptographic-
288 hash.-
289*/-
290void QCryptographicHash::addData(const char *data, int length)-
291{-
292 switch (d->method) {-
293 case Sha1:
executed 7734 times by 12 tests: case Sha1:
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSslCertificate
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QUuid
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
7734
294 sha1Update(&d->sha1Context, (const unsigned char *)data, length);-
295 break;
executed 7734 times by 12 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSslCertificate
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QUuid
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
7734
296#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1-
297 default:-
298 Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in");-
299 Q_UNREACHABLE();-
300 break;-
301#else-
302 case Md4:
executed 8 times by 2 tests: case Md4:
Executed by:
  • tst_QAuthenticator
  • tst_QCryptographicHash
8
303 md4_update(&d->md4Context, (const unsigned char *)data, length);-
304 break;
executed 8 times by 2 tests: break;
Executed by:
  • tst_QAuthenticator
  • tst_QCryptographicHash
8
305 case Md5:
executed 3646 times by 19 tests: case Md5:
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
3646
306 MD5Update(&d->md5Context, (const unsigned char *)data, length);-
307 break;
executed 3646 times by 19 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
3646
308 case Sha224:
executed 4 times by 1 test: case Sha224:
Executed by:
  • tst_QCryptographicHash
4
309 SHA224Input(&d->sha224Context, reinterpret_cast<const unsigned char *>(data), length);-
310 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
311 case Sha256:
executed 22 times by 2 tests: case Sha256:
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
22
312 SHA256Input(&d->sha256Context, reinterpret_cast<const unsigned char *>(data), length);-
313 break;
executed 22 times by 2 tests: break;
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
22
314 case Sha384:
executed 4 times by 1 test: case Sha384:
Executed by:
  • tst_QCryptographicHash
4
315 SHA384Input(&d->sha384Context, reinterpret_cast<const unsigned char *>(data), length);-
316 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
317 case Sha512:
executed 4 times by 1 test: case Sha512:
Executed by:
  • tst_QCryptographicHash
4
318 SHA512Input(&d->sha512Context, reinterpret_cast<const unsigned char *>(data), length);-
319 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
320 case Sha3_224:
executed 6 times by 1 test: case Sha3_224:
Executed by:
  • tst_QCryptographicHash
6
321 sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8);-
322 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
323 case Sha3_256:
executed 6 times by 1 test: case Sha3_256:
Executed by:
  • tst_QCryptographicHash
6
324 sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8);-
325 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
326 case Sha3_384:
executed 6 times by 1 test: case Sha3_384:
Executed by:
  • tst_QCryptographicHash
6
327 sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8);-
328 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
329 case Sha3_512:
executed 6 times by 1 test: case Sha3_512:
Executed by:
  • tst_QCryptographicHash
6
330 sha3Update(&d->sha3Context, reinterpret_cast<const BitSequence *>(data), length*8);-
331 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
332#endif-
333 }-
334 d->result.clear();-
335}
executed 11446 times by 24 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
11446
336-
337/*!-
338 \overload addData()-
339*/-
340void QCryptographicHash::addData(const QByteArray &data)-
341{-
342 addData(data.constData(), data.length());-
343}
executed 11117 times by 24 tests: end of block
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
11117
344-
345/*!-
346 Reads the data from the open QIODevice \a device until it ends-
347 and hashes it. Returns \c true if reading was successful.-
348 \since 5.0-
349 */-
350bool QCryptographicHash::addData(QIODevice* device)-
351{-
352 if (!device->isReadable())
!device->isReadable()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • tst_QCryptographicHash
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QCryptographicHash
2
353 return false;
executed 2 times by 1 test: return false;
Executed by:
  • tst_QCryptographicHash
2
354-
355 if (!device->isOpen())
!device->isOpen()Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QCryptographicHash
0-2
356 return false;
never executed: return false;
0
357-
358 char buffer[1024];-
359 int length;-
360-
361 while ((length = device->read(buffer,sizeof(buffer))) > 0)
(length = devi...(buffer))) > 0Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • tst_QCryptographicHash
FALSEevaluated 2 times by 1 test
Evaluated by:
  • tst_QCryptographicHash
2-9
362 addData(buffer,length);
executed 9 times by 1 test: addData(buffer,length);
Executed by:
  • tst_QCryptographicHash
9
363-
364 return device->atEnd();
executed 2 times by 1 test: return device->atEnd();
Executed by:
  • tst_QCryptographicHash
2
365}-
366-
367-
368/*!-
369 Returns the final hash value.-
370-
371 \sa QByteArray::toHex()-
372*/-
373QByteArray QCryptographicHash::result() const-
374{-
375 if (!d->result.isEmpty())
!d->result.isEmpty()Description
TRUEevaluated 22 times by 1 test
Evaluated by:
  • tst_QCryptographicHash
FALSEevaluated 10830 times by 24 tests
Evaluated by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
22-10830
376 return d->result;
executed 22 times by 1 test: return d->result;
Executed by:
  • tst_QCryptographicHash
22
377-
378 switch (d->method) {-
379 case Sha1: {
executed 7722 times by 12 tests: case Sha1:
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSslCertificate
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QUuid
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
7722
380 Sha1State copy = d->sha1Context;-
381 d->result.resize(20);-
382 sha1FinalizeState(&copy);-
383 sha1ToHash(&copy, (unsigned char *)d->result.data());-
384 break;
executed 7722 times by 12 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
  • tst_QNetworkDiskCache
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSslCertificate
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QUuid
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
7722
385 }-
386#ifdef QT_CRYPTOGRAPHICHASH_ONLY_SHA1-
387 default:-
388 Q_ASSERT_X(false, "QCryptographicHash", "Method not compiled in");-
389 Q_UNREACHABLE();-
390 break;-
391#else-
392 case Md4: {
executed 8 times by 2 tests: case Md4:
Executed by:
  • tst_QAuthenticator
  • tst_QCryptographicHash
8
393 md4_context copy = d->md4Context;-
394 d->result.resize(MD4_RESULTLEN);-
395 md4_final(&copy, (unsigned char *)d->result.data());-
396 break;
executed 8 times by 2 tests: break;
Executed by:
  • tst_QAuthenticator
  • tst_QCryptographicHash
8
397 }-
398 case Md5: {
executed 3052 times by 19 tests: case Md5:
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
3052
399 MD5Context copy = d->md5Context;-
400 d->result.resize(16);-
401 MD5Final(&copy, (unsigned char *)d->result.data());-
402 break;
executed 3052 times by 19 tests: break;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
3052
403 }-
404 case Sha224: {
executed 4 times by 1 test: case Sha224:
Executed by:
  • tst_QCryptographicHash
4
405 SHA224Context copy = d->sha224Context;-
406 d->result.resize(SHA224HashSize);-
407 SHA224Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));-
408 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
409 }-
410 case Sha256:{
executed 12 times by 2 tests: case Sha256:
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
12
411 SHA256Context copy = d->sha256Context;-
412 d->result.resize(SHA256HashSize);-
413 SHA256Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));-
414 break;
executed 12 times by 2 tests: break;
Executed by:
  • tst_QCryptographicHash
  • tst_QMessageAuthenticationCode
12
415 }-
416 case Sha384:{
executed 4 times by 1 test: case Sha384:
Executed by:
  • tst_QCryptographicHash
4
417 SHA384Context copy = d->sha384Context;-
418 d->result.resize(SHA384HashSize);-
419 SHA384Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));-
420 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
421 }-
422 case Sha512:{
executed 4 times by 1 test: case Sha512:
Executed by:
  • tst_QCryptographicHash
4
423 SHA512Context copy = d->sha512Context;-
424 d->result.resize(SHA512HashSize);-
425 SHA512Result(&copy, reinterpret_cast<unsigned char *>(d->result.data()));-
426 break;
executed 4 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
4
427 }-
428 case Sha3_224: {
executed 6 times by 1 test: case Sha3_224:
Executed by:
  • tst_QCryptographicHash
6
429 SHA3Context copy = d->sha3Context;-
430 d->result.resize(224/8);-
431 sha3Final(&copy, reinterpret_cast<BitSequence *>(d->result.data()));-
432 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
433 }-
434 case Sha3_256: {
executed 6 times by 1 test: case Sha3_256:
Executed by:
  • tst_QCryptographicHash
6
435 SHA3Context copy = d->sha3Context;-
436 d->result.resize(256/8);-
437 sha3Final(&copy, reinterpret_cast<BitSequence *>(d->result.data()));-
438 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
439 }-
440 case Sha3_384: {
executed 6 times by 1 test: case Sha3_384:
Executed by:
  • tst_QCryptographicHash
6
441 SHA3Context copy = d->sha3Context;-
442 d->result.resize(384/8);-
443 sha3Final(&copy, reinterpret_cast<BitSequence *>(d->result.data()));-
444 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
445 }-
446 case Sha3_512: {
executed 6 times by 1 test: case Sha3_512:
Executed by:
  • tst_QCryptographicHash
6
447 SHA3Context copy = d->sha3Context;-
448 d->result.resize(512/8);-
449 sha3Final(&copy, reinterpret_cast<BitSequence *>(d->result.data()));-
450 break;
executed 6 times by 1 test: break;
Executed by:
  • tst_QCryptographicHash
6
451 }-
452#endif-
453 }-
454 return d->result;
executed 10830 times by 24 tests: return d->result;
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QMessageAuthenticationCode
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QUuid
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
10830
455}-
456-
457/*!-
458 Returns the hash of \a data using \a method.-
459*/-
460QByteArray QCryptographicHash::hash(const QByteArray &data, Algorithm method)-
461{-
462 QCryptographicHash hash(method);-
463 hash.addData(data);-
464 return hash.result();
executed 10309 times by 22 tests: return hash.result();
Executed by:
  • tst_QAbstractNetworkCache
  • tst_QAuthenticator
  • tst_QCryptographicHash
  • tst_QHttpNetworkConnection
  • tst_QHttpSocketEngine
  • tst_QNetworkAccessManager_And_QProgressDialog
  • tst_QNetworkDiskCache
  • tst_QNetworkProxyFactory
  • tst_QNetworkReply
  • tst_QSharedMemory
  • tst_QSocks5SocketEngine
  • tst_QSslCertificate
  • tst_QSslSocket
  • tst_QSslSocket_onDemandCertificates_member
  • tst_QSslSocket_onDemandCertificates_static
  • tst_QStyleSheetStyle
  • tst_QSystemSemaphore
  • tst_QTcpSocket
  • tst_QXmlInputSource
  • tst_Spdy
  • tst_qsharedmemory - unknown status
  • tst_qsystemsemaphore - unknown status
10309
465}-
466-
467QT_END_NAMESPACE-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9