mirror of
https://github.com/Basilisk-Development-Team/UXP-mirror.git
synced 2026-11-05 01:10:14 -05:00
2to3 . --fix xrange -wpn range takes the place of Py2 xrange. Py2 range was a list. Mechanical, did it by hand several times... Ref: https://docs.python.org/3/whatsnew/3.0.html#range
39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
# ------------------------------------------------------------------------------
|
|
#
|
|
# SHA-512-BASED FEISTEL CIPHER
|
|
# by Toni Mattis
|
|
#
|
|
# Feistel Function: SHA-512(Block || Key)
|
|
# Key Size: Fully Dynamic
|
|
# Block Size: 1024 Bits
|
|
# Rounds: User-Specified
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
|
|
from hashlib import sha512
|
|
|
|
BPOS = tuple(range(64))
|
|
|
|
def enc_block(block, key, rounds = 16):
|
|
x = block[:64]
|
|
y = block[64:]
|
|
for i in range(rounds):
|
|
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])
|
|
return x + y
|
|
|
|
def dec_block(block, key, rounds = 16):
|
|
x = block[:64]
|
|
y = block[64:]
|
|
for i in range(rounds):
|
|
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])
|
|
return x + y
|
|
|
|
|
|
|