def test_verifyHTTPDigest(self): expectations = ( (u"zehcnasw", True), # Correct ("wrong", False) # Incorrect ) record = ( yield self.client.recordWithShortName( RecordType.user, u"wsanchez" ) ) realm = "host.example.com" nonce = "128446648710842461101646794502" algorithm = "md5" uri = "http://host.example.com" method = "GET" for password, answer in expectations: for qop, nc, cnonce in ( ("", "", ""), ("auth", "00000001", "/rrD6TqPA3lHRmg+fw/vyU6oWoQgzK7h9yWrsCmv/lE="), ): response = calcResponse( calcHA1(algorithm, u"wsanchez", realm, password, nonce, cnonce), calcHA2(algorithm, method, uri, qop, None), algorithm, nonce, nc, cnonce, qop) authenticated = ( yield record.verifyHTTPDigest( u"wsanchez", realm, uri, nonce, cnonce, algorithm, nc, qop, response, method ) ) self.assertEquals(authenticated, answer)
def test_verifyHTTPDigest(self): expectations = ( (u"zehcnasw", True), # Correct ("wrong", False) # Incorrect ) record = (yield self.client.recordWithShortName(RecordType.user, u"wsanchez")) realm = "host.example.com" nonce = "128446648710842461101646794502" algorithm = "md5" uri = "http://host.example.com" method = "GET" for password, answer in expectations: for qop, nc, cnonce in ( ("", "", ""), ("auth", "00000001", "/rrD6TqPA3lHRmg+fw/vyU6oWoQgzK7h9yWrsCmv/lE="), ): response = calcResponse( calcHA1(algorithm, u"wsanchez", realm, password, nonce, cnonce), calcHA2(algorithm, method, uri, qop, None), algorithm, nonce, nc, cnonce, qop) authenticated = (yield record.verifyHTTPDigest( u"wsanchez", realm, uri, nonce, cnonce, algorithm, nc, qop, response, method)) self.assertEquals(authenticated, answer)
def getDigestResponse(self, challenge, ncount): """ Calculate the response for the given challenge """ nonce = challenge.get('nonce') algo = challenge.get('algorithm').lower() qop = challenge.get('qop') ha1 = calcHA1( algo, self.username, self.realm, self.password, nonce, self.cnonce) ha2 = calcHA2(algo, "GET", self.uri, qop, None) expected = calcResponse(ha1, ha2, algo, nonce, ncount, self.cnonce, qop) return expected
def test_MD5HashResponse(self, _algorithm='md5', _hash=md5): """ L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash of its parameters, excluding the nonce count, client nonce, and QoP value if the nonce count and client nonce are C{None} """ hashA1 = 'abc123' hashA2 = '789xyz' nonce = 'lmnopq' response = '%s:%s:%s' % (hashA1, nonce, hashA2) expected = _hash(response).hexdigest() digest = calcResponse(hashA1, hashA2, _algorithm, nonce, None, None, None) self.assertEqual(expected, digest)
def test_MD5HashResponse(self, _algorithm=b'md5', _hash=md5): """ L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash of its parameters, excluding the nonce count, client nonce, and QoP value if the nonce count and client nonce are L{None} """ hashA1 = b'abc123' hashA2 = b'789xyz' nonce = b'lmnopq' response = hashA1 + b':' + nonce + b':' + hashA2 expected = hexlify(_hash(response).digest()) digest = calcResponse(hashA1, hashA2, _algorithm, nonce, None, None, None) self.assertEqual(expected, digest)
def test_MD5HashResponseExtra(self, _algorithm='md5', _hash=md5): """ L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash of its parameters, including the nonce count, client nonce, and QoP value if they are specified. """ hashA1 = 'abc123' hashA2 = '789xyz' nonce = 'lmnopq' nonceCount = '00000004' clientNonce = 'abcxyz123' qop = 'auth' response = '%s:%s:%s:%s:%s:%s' % ( hashA1, nonce, nonceCount, clientNonce, qop, hashA2) expected = _hash(response).hexdigest() digest = calcResponse( hashA1, hashA2, _algorithm, nonce, nonceCount, clientNonce, qop) self.assertEqual(expected, digest)
def test_MD5HashResponseExtra(self, _algorithm=b'md5', _hash=md5): """ L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash of its parameters, including the nonce count, client nonce, and QoP value if they are specified. """ hashA1 = b'abc123' hashA2 = b'789xyz' nonce = b'lmnopq' nonceCount = b'00000004' clientNonce = b'abcxyz123' qop = b'auth' response = hashA1 + b':' + nonce + b':' + nonceCount + b':' +\ clientNonce + b':' + qop + b':' + hashA2 expected = hexlify(_hash(response).digest()) digest = calcResponse(hashA1, hashA2, _algorithm, nonce, nonceCount, clientNonce, qop) self.assertEqual(expected, digest)
def test_MD5HashResponseExtra(self, _algorithm=b"md5", _hash=md5): """ L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash of its parameters, including the nonce count, client nonce, and QoP value if they are specified. """ hashA1 = b"abc123" hashA2 = b"789xyz" nonce = b"lmnopq" nonceCount = b"00000004" clientNonce = b"abcxyz123" qop = b"auth" response = (hashA1 + b":" + nonce + b":" + nonceCount + b":" + clientNonce + b":" + qop + b":" + hashA2) expected = hexlify(_hash(response).digest()) digest = calcResponse(hashA1, hashA2, _algorithm, nonce, nonceCount, clientNonce, qop) self.assertEqual(expected, digest)
def test_MD5HashResponseExtra(self, _algorithm=b'md5', _hash=md5): """ L{calcResponse} accepts the C{'md5'} algorithm and returns an MD5 hash of its parameters, including the nonce count, client nonce, and QoP value if they are specified. """ hashA1 = b'abc123' hashA2 = b'789xyz' nonce = b'lmnopq' nonceCount = b'00000004' clientNonce = b'abcxyz123' qop = b'auth' response = hashA1 + b':' + nonce + b':' + nonceCount + b':' +\ clientNonce + b':' + qop + b':' + hashA2 expected = hexlify(_hash(response).digest()) digest = calcResponse( hashA1, hashA2, _algorithm, nonce, nonceCount, clientNonce, qop) self.assertEqual(expected, digest)