| # ------------------------------------------------------------------------------ |
| # SHA-512-BASED FEISTEL CIPHER |
| # Feistel Function: SHA-512(Block || Key) |
| # Key Size: Fully Dynamic |
| # ------------------------------------------------------------------------------ |
| from hashlib import sha512 |
| def enc_block(block, key, rounds = 16): |
| h = sha512(x + key).digest() |
| y = ''.join([chr(ord(y[k]) ^ ord(h[k])) for k in BPOS]) |
| h = sha512(y + key).digest() |
| x = ''.join([chr(ord(x[k]) ^ ord(h[k])) for k in BPOS]) |
| def dec_block(block, key, rounds = 16): |
| h = sha512(y + key).digest() |
| x = ''.join([chr(ord(x[k]) ^ ord(h[k])) for k in BPOS]) |
| h = sha512(x + key).digest() |
| y = ''.join([chr(ord(y[k]) ^ ord(h[k])) for k in BPOS]) |