1a8e1175bSopenharmony_ci"""Base values and datasets for bignum generated tests and helper functions that 2a8e1175bSopenharmony_ciproduced them.""" 3a8e1175bSopenharmony_ci# Copyright The Mbed TLS Contributors 4a8e1175bSopenharmony_ci# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 5a8e1175bSopenharmony_ci# 6a8e1175bSopenharmony_ci 7a8e1175bSopenharmony_ciimport random 8a8e1175bSopenharmony_ci 9a8e1175bSopenharmony_ci# Functions calling these were used to produce test data and are here only for 10a8e1175bSopenharmony_ci# reproducibility, they are not used by the test generation framework/classes 11a8e1175bSopenharmony_citry: 12a8e1175bSopenharmony_ci from Cryptodome.Util.number import isPrime, getPrime #type: ignore #pylint: disable=import-error 13a8e1175bSopenharmony_ciexcept ImportError: 14a8e1175bSopenharmony_ci pass 15a8e1175bSopenharmony_ci 16a8e1175bSopenharmony_ci# Generated by bignum_common.gen_safe_prime(192,1) 17a8e1175bSopenharmony_ciSAFE_PRIME_192_BIT_SEED_1 = "d1c127a667786703830500038ebaef20e5a3e2dc378fb75b" 18a8e1175bSopenharmony_ci 19a8e1175bSopenharmony_ci# First number generated by random.getrandbits(192) - seed(2,2), not a prime 20a8e1175bSopenharmony_ciRANDOM_192_BIT_SEED_2_NO1 = "177219d30e7a269fd95bafc8f2a4d27bdcf4bb99f4bea973" 21a8e1175bSopenharmony_ci 22a8e1175bSopenharmony_ci# Second number generated by random.getrandbits(192) - seed(2,2), not a prime 23a8e1175bSopenharmony_ciRANDOM_192_BIT_SEED_2_NO2 = "cf1822ffbc6887782b491044d5e341245c6e433715ba2bdd" 24a8e1175bSopenharmony_ci 25a8e1175bSopenharmony_ci# Third number generated by random.getrandbits(192) - seed(2,2), not a prime 26a8e1175bSopenharmony_ciRANDOM_192_BIT_SEED_2_NO3 = "3653f8dd9b1f282e4067c3584ee207f8da94e3e8ab73738f" 27a8e1175bSopenharmony_ci 28a8e1175bSopenharmony_ci# Fourth number generated by random.getrandbits(192) - seed(2,2), not a prime 29a8e1175bSopenharmony_ciRANDOM_192_BIT_SEED_2_NO4 = "ffed9235288bc781ae66267594c9c9500925e4749b575bd1" 30a8e1175bSopenharmony_ci 31a8e1175bSopenharmony_ci# Ninth number generated by random.getrandbits(192) - seed(2,2), not a prime 32a8e1175bSopenharmony_ciRANDOM_192_BIT_SEED_2_NO9 = "2a1be9cd8697bbd0e2520e33e44c50556c71c4a66148a86f" 33a8e1175bSopenharmony_ci 34a8e1175bSopenharmony_ci# Generated by bignum_common.gen_safe_prime(1024,3) 35a8e1175bSopenharmony_ciSAFE_PRIME_1024_BIT_SEED_3 = ("c93ba7ec74d96f411ba008bdb78e63ff11bb5df46a51e16b" 36a8e1175bSopenharmony_ci "2c9d156f8e4e18abf5e052cb01f47d0d1925a77f60991577" 37a8e1175bSopenharmony_ci "e128fb6f52f34a27950a594baadd3d8057abeb222cf3cca9" 38a8e1175bSopenharmony_ci "62db16abf79f2ada5bd29ab2f51244bf295eff9f6aaba130" 39a8e1175bSopenharmony_ci "2efc449b128be75eeaca04bc3c1a155d11d14e8be32a2c82" 40a8e1175bSopenharmony_ci "87b3996cf6ad5223") 41a8e1175bSopenharmony_ci 42a8e1175bSopenharmony_ci# First number generated by random.getrandbits(1024) - seed(4,2), not a prime 43a8e1175bSopenharmony_ciRANDOM_1024_BIT_SEED_4_NO1 = ("6905269ed6f0b09f165c8ce36e2f24b43000de01b2ed40ed" 44a8e1175bSopenharmony_ci "3addccb2c33be0ac79d679346d4ac7a5c3902b38963dc6e8" 45a8e1175bSopenharmony_ci "534f45738d048ec0f1099c6c3e1b258fd724452ccea71ff4" 46a8e1175bSopenharmony_ci "a14876aeaff1a098ca5996666ceab360512bd13110722311" 47a8e1175bSopenharmony_ci "710cf5327ac435a7a97c643656412a9b8a1abcd1a6916c74" 48a8e1175bSopenharmony_ci "da4f9fc3c6da5d7") 49a8e1175bSopenharmony_ci 50a8e1175bSopenharmony_ci# Second number generated by random.getrandbits(1024) - seed(4,2), not a prime 51a8e1175bSopenharmony_ciRANDOM_1024_BIT_SEED_4_NO2 = ("f1cfd99216df648647adec26793d0e453f5082492d83a823" 52a8e1175bSopenharmony_ci "3fb62d2c81862fc9634f806fabf4a07c566002249b191bf4" 53a8e1175bSopenharmony_ci "d8441b5616332aca5f552773e14b0190d93936e1daca3c06" 54a8e1175bSopenharmony_ci "f5ff0c03bb5d7385de08caa1a08179104a25e4664f5253a0" 55a8e1175bSopenharmony_ci "2a3187853184ff27459142deccea264542a00403ce80c4b0" 56a8e1175bSopenharmony_ci "a4042bb3d4341aad") 57a8e1175bSopenharmony_ci 58a8e1175bSopenharmony_ci# Third number generated by random.getrandbits(1024) - seed(4,2), not a prime 59a8e1175bSopenharmony_ciRANDOM_1024_BIT_SEED_4_NO3 = ("14c15c910b11ad28cc21ce88d0060cc54278c2614e1bcb38" 60a8e1175bSopenharmony_ci "3bb4a570294c4ea3738d243a6e58d5ca49c7b59b995253fd" 61a8e1175bSopenharmony_ci "6c79a3de69f85e3131f3b9238224b122c3e4a892d9196ada" 62a8e1175bSopenharmony_ci "4fcfa583e1df8af9b474c7e89286a1754abcb06ae8abb93f" 63a8e1175bSopenharmony_ci "01d89a024cdce7a6d7288ff68c320f89f1347e0cdd905ecf" 64a8e1175bSopenharmony_ci "d160c5d0ef412ed6") 65a8e1175bSopenharmony_ci 66a8e1175bSopenharmony_ci# Fourth number generated by random.getrandbits(1024) - seed(4,2), not a prime 67a8e1175bSopenharmony_ciRANDOM_1024_BIT_SEED_4_NO4 = ("32decd6b8efbc170a26a25c852175b7a96b98b5fbf37a2be" 68a8e1175bSopenharmony_ci "6f98bca35b17b9662f0733c846bbe9e870ef55b1a1f65507" 69a8e1175bSopenharmony_ci "a2909cb633e238b4e9dd38b869ace91311021c9e32111ac1" 70a8e1175bSopenharmony_ci "ac7cc4a4ff4dab102522d53857c49391b36cc9aa78a330a1" 71a8e1175bSopenharmony_ci "a5e333cb88dcf94384d4cd1f47ca7883ff5a52f1a05885ac" 72a8e1175bSopenharmony_ci "7671863c0bdbc23a") 73a8e1175bSopenharmony_ci 74a8e1175bSopenharmony_ci# Fifth number generated by random.getrandbits(1024) - seed(4,2), not a prime 75a8e1175bSopenharmony_ciRANDOM_1024_BIT_SEED_4_NO5 = ("53be4721f5b9e1f5acdac615bc20f6264922b9ccf469aef8" 76a8e1175bSopenharmony_ci "f6e7d078e55b85dd1525f363b281b8885b69dc230af5ac87" 77a8e1175bSopenharmony_ci "0692b534758240df4a7a03052d733dcdef40af2e54c0ce68" 78a8e1175bSopenharmony_ci "1f44ebd13cc75f3edcb285f89d8cf4d4950b16ffc3e1ac3b" 79a8e1175bSopenharmony_ci "4708d9893a973000b54a23020fc5b043d6e4a51519d9c9cc" 80a8e1175bSopenharmony_ci "52d32377e78131c1") 81a8e1175bSopenharmony_ci 82a8e1175bSopenharmony_ci# Adding 192 bit and 1024 bit numbers because these are the shortest required 83a8e1175bSopenharmony_ci# for ECC and RSA respectively. 84a8e1175bSopenharmony_ciINPUTS_DEFAULT = [ 85a8e1175bSopenharmony_ci "0", "1", # corner cases 86a8e1175bSopenharmony_ci "2", "3", # small primes 87a8e1175bSopenharmony_ci "4", # non-prime even 88a8e1175bSopenharmony_ci "38", # small random 89a8e1175bSopenharmony_ci SAFE_PRIME_192_BIT_SEED_1, # prime 90a8e1175bSopenharmony_ci RANDOM_192_BIT_SEED_2_NO1, # not a prime 91a8e1175bSopenharmony_ci RANDOM_192_BIT_SEED_2_NO2, # not a prime 92a8e1175bSopenharmony_ci SAFE_PRIME_1024_BIT_SEED_3, # prime 93a8e1175bSopenharmony_ci RANDOM_1024_BIT_SEED_4_NO1, # not a prime 94a8e1175bSopenharmony_ci RANDOM_1024_BIT_SEED_4_NO3, # not a prime 95a8e1175bSopenharmony_ci RANDOM_1024_BIT_SEED_4_NO2, # largest (not a prime) 96a8e1175bSopenharmony_ci ] 97a8e1175bSopenharmony_ci 98a8e1175bSopenharmony_ciADD_SUB_DATA = [ 99a8e1175bSopenharmony_ci "0", "1", "3", "f", "fe", "ff", "100", "ff00", 100a8e1175bSopenharmony_ci "fffe", "ffff", "10000", # 2^16 - 1, 2^16, 2^16 + 1 101a8e1175bSopenharmony_ci "fffffffe", "ffffffff", "100000000", # 2^32 - 1, 2^32, 2^32 + 1 102a8e1175bSopenharmony_ci "1f7f7f7f7f7f7f", 103a8e1175bSopenharmony_ci "8000000000000000", "fefefefefefefefe", 104a8e1175bSopenharmony_ci "fffffffffffffffe", "ffffffffffffffff", "10000000000000000", # 2^64 - 1, 2^64, 2^64 + 1 105a8e1175bSopenharmony_ci "1234567890abcdef0", 106a8e1175bSopenharmony_ci "fffffffffffffffffffffffe", 107a8e1175bSopenharmony_ci "ffffffffffffffffffffffff", 108a8e1175bSopenharmony_ci "1000000000000000000000000", 109a8e1175bSopenharmony_ci "fffffffffffffffffefefefefefefefe", 110a8e1175bSopenharmony_ci "fffffffffffffffffffffffffffffffe", 111a8e1175bSopenharmony_ci "ffffffffffffffffffffffffffffffff", 112a8e1175bSopenharmony_ci "100000000000000000000000000000000", 113a8e1175bSopenharmony_ci "1234567890abcdef01234567890abcdef0", 114a8e1175bSopenharmony_ci "fffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefe", 115a8e1175bSopenharmony_ci "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", 116a8e1175bSopenharmony_ci "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 117a8e1175bSopenharmony_ci "10000000000000000000000000000000000000000000000000000000000000000", 118a8e1175bSopenharmony_ci "1234567890abcdef01234567890abcdef01234567890abcdef01234567890abcdef0", 119a8e1175bSopenharmony_ci ] 120a8e1175bSopenharmony_ci 121a8e1175bSopenharmony_ci# Only odd moduli are present as in the new bignum code only odd moduli are 122a8e1175bSopenharmony_ci# supported for now. 123a8e1175bSopenharmony_ciMODULI_DEFAULT = [ 124a8e1175bSopenharmony_ci "53", # safe prime 125a8e1175bSopenharmony_ci "45", # non-prime 126a8e1175bSopenharmony_ci SAFE_PRIME_192_BIT_SEED_1, # safe prime 127a8e1175bSopenharmony_ci RANDOM_192_BIT_SEED_2_NO4, # not a prime 128a8e1175bSopenharmony_ci SAFE_PRIME_1024_BIT_SEED_3, # safe prime 129a8e1175bSopenharmony_ci RANDOM_1024_BIT_SEED_4_NO5, # not a prime 130a8e1175bSopenharmony_ci ] 131a8e1175bSopenharmony_ci 132a8e1175bSopenharmony_ci# Some functions, e.g. mbedtls_mpi_mod_raw_inv_prime(), only support prime moduli. 133a8e1175bSopenharmony_ciONLY_PRIME_MODULI = [ 134a8e1175bSopenharmony_ci "53", # safe prime 135a8e1175bSopenharmony_ci "8ac72304057392b5", # 9999999997777777333 (longer, not safe, prime) 136a8e1175bSopenharmony_ci # The next prime has a different R in Montgomery form depending on 137a8e1175bSopenharmony_ci # whether 32- or 64-bit MPIs are used. 138a8e1175bSopenharmony_ci "152d02c7e14af67fe0bf", # 99999999999999999991999 139a8e1175bSopenharmony_ci SAFE_PRIME_192_BIT_SEED_1, # safe prime 140a8e1175bSopenharmony_ci SAFE_PRIME_1024_BIT_SEED_3, # safe prime 141a8e1175bSopenharmony_ci ] 142a8e1175bSopenharmony_ci 143a8e1175bSopenharmony_cidef __gen_safe_prime(bits, seed): 144a8e1175bSopenharmony_ci ''' 145a8e1175bSopenharmony_ci Generate a safe prime. 146a8e1175bSopenharmony_ci 147a8e1175bSopenharmony_ci This function is intended for generating constants offline and shouldn't be 148a8e1175bSopenharmony_ci used in test generation classes. 149a8e1175bSopenharmony_ci 150a8e1175bSopenharmony_ci Requires pycryptodomex for getPrime and isPrime and python 3.9 or later for 151a8e1175bSopenharmony_ci randbytes. 152a8e1175bSopenharmony_ci ''' 153a8e1175bSopenharmony_ci rng = random.Random() 154a8e1175bSopenharmony_ci # We want reproducibility across python versions 155a8e1175bSopenharmony_ci rng.seed(seed, version=2) 156a8e1175bSopenharmony_ci while True: 157a8e1175bSopenharmony_ci prime = 2*getPrime(bits-1, rng.randbytes)+1 #pylint: disable=no-member 158a8e1175bSopenharmony_ci if isPrime(prime, 1e-30): 159a8e1175bSopenharmony_ci return prime 160