Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qauthenticator.cpp File Reference
#include <qauthenticator.h>
#include <qauthenticator_p.h>
#include <qdebug.h>
#include <qloggingcategory.h>
#include <qhash.h>
#include <qbytearray.h>
#include <qcryptographichash.h>
#include <qiodevice.h>
#include <qdatastream.h>
#include <qendian.h>
#include <qstring.h>
#include <qdatetime.h>
#include <qrandom.h>
+ Include dependency graph for qauthenticator.cpp:

Go to the source code of this file.

Classes

class  QNtlmBuffer
 
class  QNtlmPhase1BlockBase
 
class  QNtlmPhase2BlockBase
 
class  QNtlmPhase3BlockBase
 
class  QNtlmPhase1Block
 
class  QNtlmPhase2Block
 
class  QNtlmPhase3Block
 

Macros

#define NTLMSSP_NEGOTIATE_UNICODE   0x00000001
 
#define NTLMSSP_NEGOTIATE_OEM   0x00000002
 
#define NTLMSSP_REQUEST_TARGET   0x00000004
 
#define NTLMSSP_NEGOTIATE_SIGN   0x00000010
 
#define NTLMSSP_NEGOTIATE_SEAL   0x00000020
 
#define NTLMSSP_NEGOTIATE_DATAGRAM   0x00000040
 
#define NTLMSSP_NEGOTIATE_LM_KEY   0x00000080
 
#define NTLMSSP_NEGOTIATE_NTLM   0x00000200
 
#define NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED   0x00001000
 
#define NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED   0x00002000
 
#define NTLMSSP_NEGOTIATE_LOCAL_CALL   0x00004000
 
#define NTLMSSP_NEGOTIATE_ALWAYS_SIGN   0x00008000
 
#define NTLMSSP_TARGET_TYPE_DOMAIN   0x00010000
 
#define NTLMSSP_TARGET_TYPE_SERVER   0x00020000
 
#define NTLMSSP_TARGET_TYPE_SHARE   0x00040000
 
#define NTLMSSP_NEGOTIATE_NTLM2   0x00080000
 
#define NTLMSSP_NEGOTIATE_TARGET_INFO   0x00800000
 
#define NTLMSSP_NEGOTIATE_128   0x20000000
 
#define NTLMSSP_NEGOTIATE_KEY_EXCHANGE   0x40000000
 
#define NTLMSSP_NEGOTIATE_56   0x80000000
 
#define AVTIMESTAMP   7
 

Functions

 Q_DECLARE_LOGGING_CATEGORY (lcAuthenticator)
 
 Q_LOGGING_CATEGORY (lcAuthenticator, "qt.network.authenticator")
 
static QByteArray qNtlmPhase1 ()
 
static QByteArray qNtlmPhase3 (QAuthenticatorPrivate *ctx, const QByteArray &phase2data)
 
static bool verifyDigestMD5 (QByteArrayView value)
 
static QByteArray digestMd5ResponseHelper (QByteArrayView alg, QByteArrayView userName, QByteArrayView realm, QByteArrayView password, QByteArrayView nonce, QByteArrayView nonceCount, QByteArrayView cNonce, QByteArrayView qop, QByteArrayView method, QByteArrayView digestUri, QByteArrayView hEntity)
 
static void qStreamNtlmBuffer (QDataStream &ds, const QByteArray &s)
 
static void qStreamNtlmString (QDataStream &ds, const QString &s, bool unicode)
 
static int qEncodeNtlmBuffer (QNtlmBuffer &buf, int offset, const QByteArray &s)
 
static int qEncodeNtlmString (QNtlmBuffer &buf, int offset, const QString &s, bool unicode)
 
static QDataStreamoperator<< (QDataStream &s, const QNtlmBuffer &b)
 
static QDataStreamoperator>> (QDataStream &s, QNtlmBuffer &b)
 
static QDataStreamoperator<< (QDataStream &s, const QNtlmPhase1Block &b)
 
static QDataStreamoperator<< (QDataStream &s, const QNtlmPhase3Block &b)
 
static QByteArray qStringAsUcs2Le (const QString &src)
 
static QString qStringFromUcs2Le (QByteArray src)
 
QByteArray qEncodeHmacMd5 (QByteArray &key, QByteArrayView message)
 
static QByteArray qCreatev2Hash (const QAuthenticatorPrivate *ctx, QNtlmPhase3Block *phase3)
 
static QByteArray clientChallenge (const QAuthenticatorPrivate *ctx)
 
static QByteArray qExtractServerTime (const QByteArray &targetInfoBuff)
 
static QByteArray qEncodeNtlmv2Response (const QAuthenticatorPrivate *ctx, const QNtlmPhase2Block &ch, QNtlmPhase3Block *phase3)
 
static QByteArray qEncodeLmv2Response (const QAuthenticatorPrivate *ctx, const QNtlmPhase2Block &ch, QNtlmPhase3Block *phase3)
 
static bool qNtlmDecodePhase2 (const QByteArray &data, QNtlmPhase2Block &ch)
 

Variables

const int blockSize = 64
 
const quint8 respversion = 1
 
const quint8 hirespversion = 1
 

Macro Definition Documentation

◆ AVTIMESTAMP

#define AVTIMESTAMP   7

Definition at line 976 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_128

#define NTLMSSP_NEGOTIATE_128   0x20000000

Definition at line 958 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_56

#define NTLMSSP_NEGOTIATE_56   0x80000000

Definition at line 971 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_ALWAYS_SIGN

#define NTLMSSP_NEGOTIATE_ALWAYS_SIGN   0x00008000

Definition at line 919 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_DATAGRAM

#define NTLMSSP_NEGOTIATE_DATAGRAM   0x00000040

Definition at line 880 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED

#define NTLMSSP_NEGOTIATE_DOMAIN_SUPPLIED   0x00001000

Definition at line 899 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_KEY_EXCHANGE

#define NTLMSSP_NEGOTIATE_KEY_EXCHANGE   0x40000000

Definition at line 966 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_LM_KEY

#define NTLMSSP_NEGOTIATE_LM_KEY   0x00000080

Definition at line 886 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_LOCAL_CALL

#define NTLMSSP_NEGOTIATE_LOCAL_CALL   0x00004000

Definition at line 913 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_NTLM

#define NTLMSSP_NEGOTIATE_NTLM   0x00000200

Definition at line 891 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_NTLM2

#define NTLMSSP_NEGOTIATE_NTLM2   0x00080000

Definition at line 946 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_OEM

#define NTLMSSP_NEGOTIATE_OEM   0x00000002

Definition at line 857 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_SEAL

#define NTLMSSP_NEGOTIATE_SEAL   0x00000020

Definition at line 875 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_SIGN

#define NTLMSSP_NEGOTIATE_SIGN   0x00000010

Definition at line 869 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_TARGET_INFO

#define NTLMSSP_NEGOTIATE_TARGET_INFO   0x00800000

Definition at line 953 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_UNICODE

#define NTLMSSP_NEGOTIATE_UNICODE   0x00000001

Definition at line 852 of file qauthenticator.cpp.

◆ NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED

#define NTLMSSP_NEGOTIATE_WORKSTATION_SUPPLIED   0x00002000

Definition at line 906 of file qauthenticator.cpp.

◆ NTLMSSP_REQUEST_TARGET

#define NTLMSSP_REQUEST_TARGET   0x00000004

Definition at line 863 of file qauthenticator.cpp.

◆ NTLMSSP_TARGET_TYPE_DOMAIN

#define NTLMSSP_TARGET_TYPE_DOMAIN   0x00010000

Definition at line 925 of file qauthenticator.cpp.

◆ NTLMSSP_TARGET_TYPE_SERVER

#define NTLMSSP_TARGET_TYPE_SERVER   0x00020000

Definition at line 931 of file qauthenticator.cpp.

◆ NTLMSSP_TARGET_TYPE_SHARE

#define NTLMSSP_TARGET_TYPE_SHARE   0x00040000

Definition at line 938 of file qauthenticator.cpp.

Function Documentation

◆ clientChallenge()

static QByteArray clientChallenge ( const QAuthenticatorPrivate ctx)
static

Definition at line 1328 of file qauthenticator.cpp.

References Q_ASSERT, and QByteArray::right().

Referenced by qEncodeLmv2Response(), and qEncodeNtlmv2Response().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ digestMd5ResponseHelper()

static QByteArray digestMd5ResponseHelper ( QByteArrayView  alg,
QByteArrayView  userName,
QByteArrayView  realm,
QByteArrayView  password,
QByteArrayView  nonce,
QByteArrayView  nonceCount,
QByteArrayView  cNonce,
QByteArrayView  qop,
QByteArrayView  method,
QByteArrayView  digestUri,
QByteArrayView  hEntity 
)
static

Definition at line 729 of file qauthenticator.cpp.

References Qt::CaseInsensitive, QByteArrayView::compare(), hash, QByteArrayView::isNull(), QCryptographicHash::Md5, method, and QByteArray::toHex().

Referenced by QAuthenticatorPrivate::digestMd5Response().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator<<() [1/3]

static QDataStream & operator<< ( QDataStream s,
const QNtlmBuffer b 
)
static

Definition at line 1089 of file qauthenticator.cpp.

◆ operator<<() [2/3]

static QDataStream & operator<< ( QDataStream s,
const QNtlmPhase1Block b 
)
static

Definition at line 1146 of file qauthenticator.cpp.

References NTLMSSP_NEGOTIATE_UNICODE, qStreamNtlmString(), and QDataStream::writeRawData().

+ Here is the call graph for this function:

◆ operator<<() [3/3]

static QDataStream & operator<< ( QDataStream s,
const QNtlmPhase3Block b 
)
static

Definition at line 1162 of file qauthenticator.cpp.

References NTLMSSP_NEGOTIATE_UNICODE, qStreamNtlmBuffer(), qStreamNtlmString(), and QDataStream::writeRawData().

+ Here is the call graph for this function:

◆ operator>>()

static QDataStream & operator>> ( QDataStream s,
QNtlmBuffer b 
)
static

Definition at line 1095 of file qauthenticator.cpp.

◆ Q_DECLARE_LOGGING_CATEGORY()

Q_DECLARE_LOGGING_CATEGORY ( lcAuthenticator  )

◆ Q_LOGGING_CATEGORY()

Q_LOGGING_CATEGORY ( lcAuthenticator  ,
"qt.network.authenticator"   
)

◆ qCreatev2Hash()

static QByteArray qCreatev2Hash ( const QAuthenticatorPrivate ctx,
QNtlmPhase3Block phase3 
)
static

Definition at line 1305 of file qauthenticator.cpp.

References QCryptographicHash::addData(), QNtlmPhase3Block::domainStr, QCryptographicHash::Md4, Q_ASSERT, qEncodeHmacMd5(), qStringAsUcs2Le(), QCryptographicHash::result(), QByteArray::size(), and QNtlmPhase3Block::v2Hash.

Referenced by qEncodeLmv2Response(), and qEncodeNtlmv2Response().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qEncodeHmacMd5()

QByteArray qEncodeHmacMd5 ( QByteArray key,
QByteArrayView  message 
)

Definition at line 1246 of file qauthenticator.cpp.

References QByteArray::append(), blockSize, hash, i, QCryptographicHash::Md5, and Q_ASSERT_X.

Referenced by qCreatev2Hash(), qEncodeLmv2Response(), and qEncodeNtlmv2Response().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qEncodeLmv2Response()

static QByteArray qEncodeLmv2Response ( const QAuthenticatorPrivate ctx,
const QNtlmPhase2Block ch,
QNtlmPhase3Block phase3 
)
static

Definition at line 1428 of file qauthenticator.cpp.

References QByteArray::append(), ch, clientChallenge(), Q_ASSERT, qCreatev2Hash(), qEncodeHmacMd5(), and QNtlmPhase3Block::v2Hash.

Referenced by qNtlmPhase3().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qEncodeNtlmBuffer()

static int qEncodeNtlmBuffer ( QNtlmBuffer buf,
int  offset,
const QByteArray s 
)
static

Definition at line 1069 of file qauthenticator.cpp.

Referenced by qEncodeNtlmString(), and qNtlmPhase3().

+ Here is the caller graph for this function:

◆ qEncodeNtlmString()

static int qEncodeNtlmString ( QNtlmBuffer buf,
int  offset,
const QString s,
bool  unicode 
)
static

Definition at line 1078 of file qauthenticator.cpp.

References qEncodeNtlmBuffer().

Referenced by qNtlmPhase3().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qEncodeNtlmv2Response()

static QByteArray qEncodeNtlmv2Response ( const QAuthenticatorPrivate ctx,
const QNtlmPhase2Block ch,
QNtlmPhase3Block phase3 
)
static

Definition at line 1361 of file qauthenticator.cpp.

References QByteArray::append(), ch, clientChallenge(), QByteArray::constData(), QDateTime::currentSecsSinceEpoch(), hirespversion, QDataStream::LittleEndian, Q_ASSERT, Q_UINT64_C, qCreatev2Hash(), qEncodeHmacMd5(), qExtractServerTime(), respversion, QDataStream::setByteOrder(), QByteArray::size(), time, QNtlmPhase3Block::v2Hash, QIODeviceBase::WriteOnly, and QDataStream::writeRawData().

Referenced by qNtlmPhase3().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qExtractServerTime()

static QByteArray qExtractServerTime ( const QByteArray targetInfoBuff)
static

Definition at line 1336 of file qauthenticator.cpp.

References AVTIMESTAMP, QByteArray::data(), QDataStream::LittleEndian, QDataStream::readRawData(), QByteArray::resize(), QDataStream::setByteOrder(), and QDataStream::skipRawData().

Referenced by qEncodeNtlmv2Response().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qNtlmDecodePhase2()

static bool qNtlmDecodePhase2 ( const QByteArray data,
QNtlmPhase2Block ch 
)
static

Definition at line 1447 of file qauthenticator.cpp.

References ch, QDataStream::LittleEndian, Q_ASSERT, qStringFromUcs2Le(), QDataStream::readRawData(), QDataStream::setByteOrder(), and QNtlmPhase2BlockBase::Size.

Referenced by qNtlmPhase3().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qNtlmPhase1()

static QByteArray qNtlmPhase1 ( )
static

Definition at line 1191 of file qauthenticator.cpp.

References QDataStream::LittleEndian, QDataStream::setByteOrder(), and QIODeviceBase::WriteOnly.

Referenced by QAuthenticatorPrivate::calculateResponse().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qNtlmPhase3()

◆ qStreamNtlmBuffer()

static void qStreamNtlmBuffer ( QDataStream ds,
const QByteArray s 
)
static

Definition at line 1050 of file qauthenticator.cpp.

References QDataStream::writeRawData().

Referenced by operator<<(), and qStreamNtlmString().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qStreamNtlmString()

static void qStreamNtlmString ( QDataStream ds,
const QString s,
bool  unicode 
)
static

Definition at line 1056 of file qauthenticator.cpp.

References ch, and qStreamNtlmBuffer().

Referenced by operator<<(), and operator<<().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qStringAsUcs2Le()

static QByteArray qStringAsUcs2Le ( const QString src)
static

Definition at line 1202 of file qauthenticator.cpp.

References ch, d, QByteArray::data(), and qToLittleEndian().

Referenced by qCreatev2Hash().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ qStringFromUcs2Le()

static QString qStringFromUcs2Le ( QByteArray  src)
static

Definition at line 1213 of file qauthenticator.cpp.

References d, i, Q_ASSERT, and qFromLittleEndian().

Referenced by qNtlmDecodePhase2().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ verifyDigestMD5()

static bool verifyDigestMD5 ( QByteArrayView  value)
static

Definition at line 432 of file qauthenticator.cpp.

References Qt::CaseInsensitive, QSet< T >::cend(), QSet< T >::constFind(), QByteArrayView::first(), it, QAuthenticatorPrivate::parseDigestAuthenticationChallenge(), QByteArray::size(), and view.

Referenced by QAuthenticatorPrivate::parseHttpResponse().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ blockSize

◆ hirespversion

const quint8 hirespversion = 1

Definition at line 983 of file qauthenticator.cpp.

Referenced by qEncodeNtlmv2Response().

◆ respversion

const quint8 respversion = 1

Definition at line 982 of file qauthenticator.cpp.

Referenced by qEncodeNtlmv2Response().