59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
import binascii
|
|
|
|
from cryptography.hazmat.backends.openssl.backend import backend
|
|
from cryptography.hazmat.primitives.ciphers import algorithms, base, modes
|
|
|
|
|
|
def encrypt(mode, key, iv, plaintext):
|
|
cipher = base.Cipher(
|
|
algorithms.SEED(binascii.unhexlify(key)),
|
|
mode(binascii.unhexlify(iv)),
|
|
backend
|
|
)
|
|
encryptor = cipher.encryptor()
|
|
ct = encryptor.update(binascii.unhexlify(plaintext))
|
|
ct += encryptor.finalize()
|
|
return binascii.hexlify(ct)
|
|
|
|
|
|
def build_vectors(mode, filename):
|
|
with open(filename, "r") as f:
|
|
vector_file = f.read().splitlines()
|
|
|
|
count = 0
|
|
output = []
|
|
key = None
|
|
iv = None
|
|
plaintext = None
|
|
for line in vector_file:
|
|
line = line.strip()
|
|
if line.startswith("KEY"):
|
|
if count != 0:
|
|
output.append("CIPHERTEXT = {0}".format(
|
|
encrypt(mode, key, iv, plaintext))
|
|
)
|
|
output.append("\nCOUNT = {0}".format(count))
|
|
count += 1
|
|
name, key = line.split(" = ")
|
|
output.append("KEY = {0}".format(key))
|
|
elif line.startswith("IV"):
|
|
name, iv = line.split(" = ")
|
|
output.append("IV = {0}".format(iv))
|
|
elif line.startswith("PLAINTEXT"):
|
|
name, plaintext = line.split(" = ")
|
|
output.append("PLAINTEXT = {0}".format(plaintext))
|
|
|
|
output.append("CIPHERTEXT = {0}".format(encrypt(mode, key, iv, plaintext)))
|
|
return "\n".join(output)
|
|
|
|
|
|
def write_file(data, filename):
|
|
with open(filename, "w") as f:
|
|
f.write(data)
|
|
|
|
|
|
OFB_PATH = "vectors/cryptography_vectors/ciphers/AES/OFB/OFBMMT128.rsp"
|
|
write_file(build_vectors(modes.OFB, OFB_PATH), "seed-ofb.txt")
|
|
CFB_PATH = "vectors/cryptography_vectors/ciphers/AES/CFB/CFB128MMT128.rsp"
|
|
write_file(build_vectors(modes.CFB, CFB_PATH), "seed-cfb.txt")
|