MCPcopy
hub / github.com/fortra/impacket / deriveKey

Method deriveKey

impacket/dpapi.py:285–300  ·  view source on GitHub ↗
(self, passphrase, salt, keylen, count, hashFunction)

Source from the content-addressed store, hash-verified

283 print()
284
285 def deriveKey(self, passphrase, salt, keylen, count, hashFunction):
286 keyMaterial = b""
287 i = 1
288 while len(keyMaterial) < keylen:
289 U = salt + pack("!L", i)
290 i += 1
291 derived = bytearray(hashFunction(passphrase, U))
292 for r in range(count - 1):
293 actual = bytearray(hashFunction(passphrase, derived))
294 if PY3:
295 derived = (int.from_bytes(derived, sys.byteorder) ^ int.from_bytes(actual, sys.byteorder)).to_bytes(len(actual), sys.byteorder)
296 else:
297 derived = bytearray([ chr((a) ^ (b)) for (a,b) in zip(derived, actual) ])
298 keyMaterial += derived
299
300 return keyMaterial[:keylen]
301
302 def decrypt(self, key):
303 if self['HashAlgo'] == ALGORITHMS.CALG_HMAC.value:

Callers 1

decryptMethod · 0.95

Calls 2

to_bytesMethod · 0.80
from_bytesMethod · 0.80

Tested by

no test coverage detected