def getbytes(self, request_bytes): """Return random bytestring of length `request_bytes`.""" self.digest_size = 64 + request_bytes self.update(words2bytes(self.tf.key)) output = self.final() self.tf.key = bytes2words(output[0:64]) return output[64:]
def __init__(self, msg='', digest_bits=512, key=None, block_type='msg'): self.tf = Threefish512() if key: self.digest_bits = 512 self._start_new_type('key') self.update(key) self.tf.key = bytes2words(self.final(False)) self.digest_bits = digest_bits self.digest_size = (digest_bits + 7) >> 3 self._start_new_type('cfg_final') b = words2bytes((0x133414853, digest_bits, 0, 0, 0, 0, 0, 0)) self._process_block(b, 32) self._start_new_type(block_type) if msg: self.update(msg)
def _process_block(self, block, byte_count_add): """Encrypt internal state using Threefish. Primarily for internal use. """ block_len = len(block) for i in xrange(0, block_len, 64): w = bytes2words(block[i:i + 64]) self.tf.tweak[0] = add64(self.tf.tweak[0], byte_count_add) self.tf.prepare_tweak() self.tf.prepare_key() self.tf.key = self.tf.encrypt_block(w) self.tf._feed_forward(self.tf.key, w) # set second tweak value to ~SKEIN_T1_FLAG_FIRST: self.tf.tweak[1] &= bigint(0xbfffffffffffffff)
def _process_block(self, block, byte_count_add): """Encrypt internal state using Threefish. Primarily for internal use. """ block_len = len(block) for i in xrange(0,block_len,64): w = bytes2words(block[i:i+64]) self.tf.tweak[0] = add64(self.tf.tweak[0], byte_count_add) self.tf.prepare_tweak() self.tf.prepare_key() self.tf.key = self.tf.encrypt_block(w) self.tf._feed_forward(self.tf.key, w) # set second tweak value to ~SKEIN_T1_FLAG_FIRST: self.tf.tweak[1] &= bigint(0xbfffffffffffffff)
def __init__(self, msg='', digest_bits=512, key=None, block_type='msg'): self.tf = Threefish512() if key: self.digest_bits = 512 self._start_new_type('key') self.update(key) self.tf.key = bytes2words(self.final(False)) self.digest_bits = digest_bits self.digest_size = (digest_bits + 7) >> 3 self._start_new_type('cfg_final') b = words2bytes((0x133414853,digest_bits,0,0,0,0,0,0)) self._process_block(b,32) self._start_new_type(block_type) if msg: self.update(msg)
def reseed(self, seed): """(Re)seed the generator.""" self.digest_size = 64 self.update(words2bytes(self.tf.key) + seed) self.tf.key = bytes2words(self.final())