1234567891011121314151617181920212223242526272829 |
- def _calc_checksum(self, secret):
- if isinstance(secret, unicode):
- secret = secret.encode("utf-8")
- # check for truncation (during .hash() calls only)
- if self.use_defaults:
- self._check_truncate_policy(secret)
- # parse salt value
- try:
- salt_value = h64.decode_int12(self.salt.encode("ascii"))
- except ValueError: # pragma: no cover - caught by class
- raise suppress_cause(ValueError("invalid chars in salt"))
- # convert first 8 byts of secret string into an integer,
- key1 = _crypt_secret_to_key(secret)
- # run data through des using input of 0
- result1 = des_encrypt_int_block(key1, 0, salt_value, 20)
- # convert next 8 bytes of secret string into integer (key=0 if secret < 8 chars)
- key2 = _crypt_secret_to_key(secret[8:16])
- # run data through des using input of 0
- result2 = des_encrypt_int_block(key2, 0, salt_value, 5)
- # done
- chk = h64big.encode_int64(result1) + h64big.encode_int64(result2)
- return chk.decode("ascii")
|