(self, passphrase, salt, keylen, count, hashFunction)
| 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: |
no test coverage detected