summaryrefslogtreecommitdiff
path: root/docs/development
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2020-07-20 14:06:29 -0400
committerGitHub <noreply@github.com>2020-07-20 13:06:29 -0500
commit60aa04481fb187334a783c2d9facc3fe814af5d1 (patch)
treed8098c0c30f89c768cbcda42d27974abb8bab89d /docs/development
parent4a245a657a071dff959d30eff1d214c7ff88eada (diff)
downloadcryptography-60aa04481fb187334a783c2d9facc3fe814af5d1.tar.gz
Paint it Black by the Rolling Stones (#5324)
Diffstat (limited to 'docs/development')
-rw-r--r--docs/development/custom-vectors/arc4/generate_arc4.py51
-rw-r--r--docs/development/custom-vectors/cast5/generate_cast5.py8
-rw-r--r--docs/development/custom-vectors/hkdf/generate_hkdf.py16
-rw-r--r--docs/development/custom-vectors/idea/generate_idea.py8
-rw-r--r--docs/development/custom-vectors/idea/verify_idea.py17
-rw-r--r--docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py20
-rw-r--r--docs/development/custom-vectors/secp256k1/generate_secp256k1.py21
-rw-r--r--docs/development/custom-vectors/secp256k1/verify_secp256k1.py29
-rw-r--r--docs/development/custom-vectors/seed/generate_seed.py8
-rw-r--r--docs/development/custom-vectors/seed/verify_seed.py17
10 files changed, 97 insertions, 98 deletions
diff --git a/docs/development/custom-vectors/arc4/generate_arc4.py b/docs/development/custom-vectors/arc4/generate_arc4.py
index 3dee44a30..2ca85c98d 100644
--- a/docs/development/custom-vectors/arc4/generate_arc4.py
+++ b/docs/development/custom-vectors/arc4/generate_arc4.py
@@ -12,10 +12,14 @@ from cryptography.hazmat.primitives.ciphers import algorithms
_RFC6229_KEY_MATERIALS = [
- (True,
- 8 * '0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20'),
- (False,
- 8 * '1ada31d5cf688221c109163908ebe51debb46227c6cc8b37641910833222772a')
+ (
+ True,
+ 8 * "0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+ ),
+ (
+ False,
+ 8 * "1ada31d5cf688221c109163908ebe51debb46227c6cc8b37641910833222772a",
+ ),
]
@@ -37,42 +41,43 @@ _RFC6229_OFFSETS = [
3056,
3072,
4080,
- 4096
+ 4096,
]
-_SIZES_TO_GENERATE = [
- 160
-]
+_SIZES_TO_GENERATE = [160]
def _key_for_size(size, keyinfo):
msb, key = keyinfo
if msb:
- return key[:size // 4]
+ return key[: size // 4]
else:
- return key[-size // 4:]
+ return key[-size // 4 :]
def _build_vectors():
count = 0
output = []
key = None
- plaintext = binascii.unhexlify(32 * '0')
+ plaintext = binascii.unhexlify(32 * "0")
for size in _SIZES_TO_GENERATE:
for keyinfo in _RFC6229_KEY_MATERIALS:
key = _key_for_size(size, keyinfo)
cipher = ciphers.Cipher(
algorithms.ARC4(binascii.unhexlify(key)),
None,
- default_backend())
+ default_backend(),
+ )
encryptor = cipher.encryptor()
current_offset = 0
for offset in _RFC6229_OFFSETS:
if offset % 16 != 0:
raise ValueError(
- "Offset {} is not evenly divisible by 16"
- .format(offset))
+ "Offset {} is not evenly divisible by 16".format(
+ offset
+ )
+ )
while current_offset < offset:
encryptor.update(plaintext)
current_offset += len(plaintext)
@@ -80,19 +85,23 @@ def _build_vectors():
count += 1
output.append("KEY = {}".format(key))
output.append("OFFSET = {}".format(offset))
- output.append("PLAINTEXT = {}".format(
- binascii.hexlify(plaintext)))
- output.append("CIPHERTEXT = {}".format(
- binascii.hexlify(encryptor.update(plaintext))))
+ output.append(
+ "PLAINTEXT = {}".format(binascii.hexlify(plaintext))
+ )
+ output.append(
+ "CIPHERTEXT = {}".format(
+ binascii.hexlify(encryptor.update(plaintext))
+ )
+ )
current_offset += len(plaintext)
assert not encryptor.finalize()
return "\n".join(output)
def _write_file(data, filename):
- with open(filename, 'w') as f:
+ with open(filename, "w") as f:
f.write(data)
-if __name__ == '__main__':
- _write_file(_build_vectors(), 'arc4.txt')
+if __name__ == "__main__":
+ _write_file(_build_vectors(), "arc4.txt")
diff --git a/docs/development/custom-vectors/cast5/generate_cast5.py b/docs/development/custom-vectors/cast5/generate_cast5.py
index ce046b0f0..5208b90d8 100644
--- a/docs/development/custom-vectors/cast5/generate_cast5.py
+++ b/docs/development/custom-vectors/cast5/generate_cast5.py
@@ -14,7 +14,7 @@ def encrypt(mode, key, iv, plaintext):
cipher = base.Cipher(
algorithms.CAST5(binascii.unhexlify(key)),
mode(binascii.unhexlify(iv)),
- default_backend()
+ default_backend(),
)
encryptor = cipher.encryptor()
ct = encryptor.update(binascii.unhexlify(plaintext))
@@ -34,8 +34,10 @@ def build_vectors(mode, filename):
line = line.strip()
if line.startswith("KEY"):
if count != 0:
- output.append("CIPHERTEXT = {}".format(
- encrypt(mode, key, iv, plaintext))
+ output.append(
+ "CIPHERTEXT = {}".format(
+ encrypt(mode, key, iv, plaintext)
+ )
)
output.append("\nCOUNT = {}".format(count))
count += 1
diff --git a/docs/development/custom-vectors/hkdf/generate_hkdf.py b/docs/development/custom-vectors/hkdf/generate_hkdf.py
index 8976effdd..aa2fc274f 100644
--- a/docs/development/custom-vectors/hkdf/generate_hkdf.py
+++ b/docs/development/custom-vectors/hkdf/generate_hkdf.py
@@ -13,8 +13,11 @@ from cryptography.hazmat.primitives.kdf.hkdf import HKDF
IKM = binascii.unhexlify(b"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b")
L = 1200
OKM = HKDF(
- algorithm=hashes.SHA256(), length=L, salt=None, info=None,
- backend=default_backend()
+ algorithm=hashes.SHA256(),
+ length=L,
+ salt=None,
+ info=None,
+ backend=default_backend(),
).derive(IKM)
@@ -23,7 +26,8 @@ def _build_vectors():
"COUNT = 0",
"Hash = SHA-256",
"IKM = " + binascii.hexlify(IKM).decode("ascii"),
- "salt = ", "info = ",
+ "salt = ",
+ "info = ",
"L = {}".format(L),
"OKM = " + binascii.hexlify(OKM).decode("ascii"),
]
@@ -31,9 +35,9 @@ def _build_vectors():
def _write_file(data, filename):
- with open(filename, 'w') as f:
+ with open(filename, "w") as f:
f.write(data)
-if __name__ == '__main__':
- _write_file(_build_vectors(), 'hkdf.txt')
+if __name__ == "__main__":
+ _write_file(_build_vectors(), "hkdf.txt")
diff --git a/docs/development/custom-vectors/idea/generate_idea.py b/docs/development/custom-vectors/idea/generate_idea.py
index 2eb6996ef..00309567b 100644
--- a/docs/development/custom-vectors/idea/generate_idea.py
+++ b/docs/development/custom-vectors/idea/generate_idea.py
@@ -8,7 +8,7 @@ def encrypt(mode, key, iv, plaintext):
cipher = base.Cipher(
algorithms.IDEA(binascii.unhexlify(key)),
mode(binascii.unhexlify(iv)),
- backend
+ backend,
)
encryptor = cipher.encryptor()
ct = encryptor.update(binascii.unhexlify(plaintext))
@@ -29,8 +29,10 @@ def build_vectors(mode, filename):
line = line.strip()
if line.startswith("KEY"):
if count != 0:
- output.append("CIPHERTEXT = {0}".format(
- encrypt(mode, key, iv, plaintext))
+ output.append(
+ "CIPHERTEXT = {0}".format(
+ encrypt(mode, key, iv, plaintext)
+ )
)
output.append("\nCOUNT = {0}".format(count))
count += 1
diff --git a/docs/development/custom-vectors/idea/verify_idea.py b/docs/development/custom-vectors/idea/verify_idea.py
index 89713c801..d356de0ba 100644
--- a/docs/development/custom-vectors/idea/verify_idea.py
+++ b/docs/development/custom-vectors/idea/verify_idea.py
@@ -8,11 +8,13 @@ BLOCK_SIZE = 64
def encrypt(mode, key, iv, plaintext):
- encryptor = botan.Cipher("IDEA/{0}/NoPadding".format(mode), "encrypt",
- binascii.unhexlify(key))
+ encryptor = botan.Cipher(
+ "IDEA/{0}/NoPadding".format(mode), "encrypt", binascii.unhexlify(key)
+ )
- cipher_text = encryptor.cipher(binascii.unhexlify(plaintext),
- binascii.unhexlify(iv))
+ cipher_text = encryptor.cipher(
+ binascii.unhexlify(plaintext), binascii.unhexlify(iv)
+ )
return binascii.hexlify(cipher_text)
@@ -22,12 +24,7 @@ def verify_vectors(mode, filename):
vectors = load_nist_vectors(vector_file)
for vector in vectors:
- ct = encrypt(
- mode,
- vector["key"],
- vector["iv"],
- vector["plaintext"]
- )
+ ct = encrypt(mode, vector["key"], vector["iv"], vector["plaintext"])
assert ct == vector["ciphertext"]
diff --git a/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py b/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py
index bd5148f54..a43e1506d 100644
--- a/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py
+++ b/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py
@@ -62,9 +62,8 @@ def build_vectors(mgf1alg, hashalg, filename):
dmq1=private["dmq1"],
iqmp=private["iqmp"],
public_numbers=rsa.RSAPublicNumbers(
- e=private["public_exponent"],
- n=private["modulus"]
- )
+ e=private["public_exponent"], n=private["modulus"]
+ ),
).private_key(backend)
count = 1
@@ -74,8 +73,8 @@ def build_vectors(mgf1alg, hashalg, filename):
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
- label=None
- )
+ label=None,
+ ),
)
assert message == binascii.unhexlify(example["message"])
ct = pkey.encrypt(
@@ -83,8 +82,8 @@ def build_vectors(mgf1alg, hashalg, filename):
padding.OAEP(
mgf=padding.MGF1(algorithm=mgf1alg),
algorithm=hashalg,
- label=None
- )
+ label=None,
+ ),
)
output.append(
b"# OAEP Example {0} alg={1} mgf1={2}".format(
@@ -116,13 +115,12 @@ hashalgs = [
hashes.SHA512(),
]
for hashtuple in itertools.product(hashalgs, hashalgs):
- if (
- isinstance(hashtuple[0], hashes.SHA1) and
- isinstance(hashtuple[1], hashes.SHA1)
+ if isinstance(hashtuple[0], hashes.SHA1) and isinstance(
+ hashtuple[1], hashes.SHA1
):
continue
write_file(
build_vectors(hashtuple[0], hashtuple[1], oaep_path),
- "oaep-{0}-{1}.txt".format(hashtuple[0].name, hashtuple[1].name)
+ "oaep-{0}-{1}.txt".format(hashtuple[0].name, hashtuple[1].name),
)
diff --git a/docs/development/custom-vectors/secp256k1/generate_secp256k1.py b/docs/development/custom-vectors/secp256k1/generate_secp256k1.py
index d6a2071ac..bfb150ba6 100644
--- a/docs/development/custom-vectors/secp256k1/generate_secp256k1.py
+++ b/docs/development/custom-vectors/secp256k1/generate_secp256k1.py
@@ -10,9 +10,7 @@ from ecdsa.util import sigdecode_der, sigencode_der
from cryptography_vectors import open_vector_file
-from tests.utils import (
- load_fips_ecdsa_signing_vectors, load_vectors_from_file
-)
+from tests.utils import load_fips_ecdsa_signing_vectors, load_vectors_from_file
HASHLIB_HASH_TYPES = {
"SHA-1": hashlib.sha1,
@@ -32,13 +30,13 @@ class TruncatedHash(object):
return self
def digest(self):
- return self.hasher.digest()[:256 // 8]
+ return self.hasher.digest()[: 256 // 8]
def build_vectors(fips_vectors):
vectors = defaultdict(list)
for vector in fips_vectors:
- vectors[vector['digest_algorithm']].append(vector['message'])
+ vectors[vector["digest_algorithm"]].append(vector["message"])
for digest_algorithm, messages in vectors.items():
if digest_algorithm not in HASHLIB_HASH_TYPES:
@@ -55,8 +53,9 @@ def build_vectors(fips_vectors):
# Sign the message using warner/ecdsa
secret_key = SigningKey.generate(curve=SECP256k1)
public_key = secret_key.get_verifying_key()
- signature = secret_key.sign(message, hashfunc=hash_func,
- sigencode=sigencode_der)
+ signature = secret_key.sign(
+ message, hashfunc=hash_func, sigencode=sigencode_der
+ )
r, s = sigdecode_der(signature, None)
@@ -79,12 +78,8 @@ source_path = os.path.join("asymmetric", "ECDSA", "FIPS_186-3", "SigGen.txt")
dest_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt")
fips_vectors = load_vectors_from_file(
- source_path,
- load_fips_ecdsa_signing_vectors
+ source_path, load_fips_ecdsa_signing_vectors
)
with open_vector_file(dest_path, "w") as dest_file:
- write_file(
- build_vectors(fips_vectors),
- dest_file
- )
+ write_file(build_vectors(fips_vectors), dest_file)
diff --git a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py
index b236d77fc..485f0718b 100644
--- a/docs/development/custom-vectors/secp256k1/verify_secp256k1.py
+++ b/docs/development/custom-vectors/secp256k1/verify_secp256k1.py
@@ -6,12 +6,10 @@ from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.asymmetric.utils import (
- encode_dss_signature
+ encode_dss_signature,
)
-from tests.utils import (
- load_fips_ecdsa_signing_vectors, load_vectors_from_file
-)
+from tests.utils import load_fips_ecdsa_signing_vectors, load_vectors_from_file
CRYPTOGRAPHY_HASH_TYPES = {
"SHA-1": hashes.SHA1,
@@ -23,22 +21,18 @@ CRYPTOGRAPHY_HASH_TYPES = {
def verify_one_vector(vector):
- digest_algorithm = vector['digest_algorithm']
- message = vector['message']
- x = vector['x']
- y = vector['y']
- signature = encode_dss_signature(vector['r'], vector['s'])
-
- numbers = ec.EllipticCurvePublicNumbers(
- x, y,
- ec.SECP256K1()
- )
+ digest_algorithm = vector["digest_algorithm"]
+ message = vector["message"]
+ x = vector["x"]
+ y = vector["y"]
+ signature = encode_dss_signature(vector["r"], vector["s"])
+
+ numbers = ec.EllipticCurvePublicNumbers(x, y, ec.SECP256K1())
key = numbers.public_key(default_backend())
verifier = key.verifier(
- signature,
- ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]())
+ signature, ec.ECDSA(CRYPTOGRAPHY_HASH_TYPES[digest_algorithm]())
)
verifier.update(message)
return verifier.verify()
@@ -52,8 +46,7 @@ def verify_vectors(vectors):
vector_path = os.path.join("asymmetric", "ECDSA", "SECP256K1", "SigGen.txt")
secp256k1_vectors = load_vectors_from_file(
- vector_path,
- load_fips_ecdsa_signing_vectors
+ vector_path, load_fips_ecdsa_signing_vectors
)
verify_vectors(secp256k1_vectors)
diff --git a/docs/development/custom-vectors/seed/generate_seed.py b/docs/development/custom-vectors/seed/generate_seed.py
index 5c62d6713..046fcfb87 100644
--- a/docs/development/custom-vectors/seed/generate_seed.py
+++ b/docs/development/custom-vectors/seed/generate_seed.py
@@ -8,7 +8,7 @@ def encrypt(mode, key, iv, plaintext):
cipher = base.Cipher(
algorithms.SEED(binascii.unhexlify(key)),
mode(binascii.unhexlify(iv)),
- backend
+ backend,
)
encryptor = cipher.encryptor()
ct = encryptor.update(binascii.unhexlify(plaintext))
@@ -29,8 +29,10 @@ def build_vectors(mode, filename):
line = line.strip()
if line.startswith("KEY"):
if count != 0:
- output.append("CIPHERTEXT = {0}".format(
- encrypt(mode, key, iv, plaintext))
+ output.append(
+ "CIPHERTEXT = {0}".format(
+ encrypt(mode, key, iv, plaintext)
+ )
)
output.append("\nCOUNT = {0}".format(count))
count += 1
diff --git a/docs/development/custom-vectors/seed/verify_seed.py b/docs/development/custom-vectors/seed/verify_seed.py
index e626428cb..252088d08 100644
--- a/docs/development/custom-vectors/seed/verify_seed.py
+++ b/docs/development/custom-vectors/seed/verify_seed.py
@@ -6,11 +6,13 @@ from tests.utils import load_nist_vectors
def encrypt(mode, key, iv, plaintext):
- encryptor = botan.Cipher("SEED/{0}/NoPadding".format(mode), "encrypt",
- binascii.unhexlify(key))
+ encryptor = botan.Cipher(
+ "SEED/{0}/NoPadding".format(mode), "encrypt", binascii.unhexlify(key)
+ )
- cipher_text = encryptor.cipher(binascii.unhexlify(plaintext),
- binascii.unhexlify(iv))
+ cipher_text = encryptor.cipher(
+ binascii.unhexlify(plaintext), binascii.unhexlify(iv)
+ )
return binascii.hexlify(cipher_text)
@@ -20,12 +22,7 @@ def verify_vectors(mode, filename):
vectors = load_nist_vectors(vector_file)
for vector in vectors:
- ct = encrypt(
- mode,
- vector["key"],
- vector["iv"],
- vector["plaintext"]
- )
+ ct = encrypt(mode, vector["key"], vector["iv"], vector["plaintext"])
assert ct == vector["ciphertext"]