diff --git a/tests/test_vectors.py b/tests/test_vectors.py new file mode 100644 index 00000000..967c9359 --- /dev/null +++ b/tests/test_vectors.py @@ -0,0 +1,167 @@ +import json +import os + +from umbral import ( + Capsule, KeyFrag, CapsuleFrag, SecretKey, PublicKey, encrypt, generate_kfrags, reencrypt) +from umbral.curve_scalar import CurveScalar +from umbral.curve_point import CurvePoint +from umbral.hashing import Hash, unsafe_hash_to_point +from umbral.dem import DEM, kdf + + +def test_scalar_operations(): + + vector_file = os.path.join('vectors', 'vectors_scalar_operations.json') + try: + with open(vector_file) as f: + vector_suite = json.load(f) + except OSError: + raise + + bn1 = CurveScalar.from_bytes(bytes.fromhex(vector_suite['first operand'])) + bn2 = CurveScalar.from_bytes(bytes.fromhex(vector_suite['second operand'])) + + expected = dict() + for op_result in vector_suite['vectors']: + result = bytes.fromhex(op_result['result']) + expected[op_result['operation']] = CurveScalar.from_bytes(result) + + test = [('Addition', bn1 + bn2), + ('Subtraction', bn1 - bn2), + ('Multiplication', bn1 * bn2), + ('Inverse', bn1.invert()), + ] + + for (operation, result) in test: + assert result == expected[operation], 'Error in {}'.format(operation) + +def test_scalar_hash(): + + vector_file = os.path.join('vectors', 'vectors_scalar_from_digest.json') + try: + with open(vector_file) as f: + vector_suite = json.load(f) + except OSError: + raise + + for vector in vector_suite['vectors']: + hash_input = [bytes.fromhex(item['bytes']) for item in vector['input']] + expected = CurveScalar.from_bytes(bytes.fromhex(vector['output'])) + + digest = Hash(b'some_dst') + for input_ in hash_input: + digest.update(input_) + scalar = CurveScalar.from_digest(digest) + assert scalar == expected + + +def test_point_operations(): + + vector_file = os.path.join('vectors', 'vectors_point_operations.json') + try: + with open(vector_file) as f: + vector_suite = json.load(f) + except OSError: + raise + + point1 = CurvePoint.from_bytes(bytes.fromhex(vector_suite['first CurvePoint operand'])) + point2 = CurvePoint.from_bytes(bytes.fromhex(vector_suite['second CurvePoint operand'])) + bn1 = CurveScalar.from_bytes(bytes.fromhex(vector_suite['CurveScalar operand'])) + + expected = dict() + for op_result in vector_suite['vectors']: + expected[op_result['operation']] = bytes.fromhex(op_result['result']) + + test = [('Addition', point1 + point2), + ('Subtraction', point1 - point2), + ('Multiplication', point1 * bn1), + ('Inversion', -point1), + ] + + for (operation, result) in test: + assert result == CurvePoint.from_bytes(expected[operation]), 'Error in {}'.format(operation) + + test = [('To_affine.X', point1.to_affine()[0]), + ('To_affine.Y', point1.to_affine()[1]), + ] + + for (operation, result) in test: + assert result == int.from_bytes(expected[operation], 'big'), 'Error in {}'.format(operation) + + assert kdf(bytes(point1), DEM.KEY_SIZE) == expected['kdf'] + + +def test_unsafe_hash_to_point(): + + vector_file = os.path.join('vectors', 'vectors_unsafe_hash_to_point.json') + try: + with open(vector_file) as f: + vector_suite = json.load(f) + except OSError: + raise + + for item in vector_suite['vectors']: + data = bytes.fromhex(item['data']) + dst = bytes.fromhex(item['dst']) + expected = CurvePoint.from_bytes(bytes.fromhex(item['point'])) + assert expected == unsafe_hash_to_point(dst=dst, data=data) + + +def test_kfrags(): + + vector_file = os.path.join('vectors', 'vectors_kfrags.json') + try: + with open(vector_file) as f: + vector_suite = json.load(f) + except OSError: + raise + + verifying_pk = PublicKey.from_bytes(bytes.fromhex(vector_suite['verifying_pk'])) + delegating_pk = PublicKey.from_bytes(bytes.fromhex(vector_suite['delegating_pk'])) + receiving_pk = PublicKey.from_bytes(bytes.fromhex(vector_suite['receiving_pk'])) + + for json_kfrag in vector_suite['vectors']: + kfrag = KeyFrag.from_bytes(bytes.fromhex(json_kfrag['kfrag'])) + assert kfrag.verify(signing_pk=verifying_pk, + delegating_pk=delegating_pk, + receiving_pk=receiving_pk), \ + 'Invalid KeyFrag {}'.format(bytes(kfrag).hex()) + + +def test_cfrags(): + + vector_file = os.path.join('vectors', 'vectors_cfrags.json') + try: + with open(vector_file) as f: + vector_suite = json.load(f) + except OSError: + raise + + capsule = Capsule.from_bytes(bytes.fromhex(vector_suite['capsule'])) + + verifying_pk = PublicKey.from_bytes(bytes.fromhex(vector_suite['verifying_pk'])) + delegating_pk = PublicKey.from_bytes(bytes.fromhex(vector_suite['delegating_pk'])) + receiving_pk = PublicKey.from_bytes(bytes.fromhex(vector_suite['receiving_pk'])) + + kfrags_n_cfrags = [(KeyFrag.from_bytes(bytes.fromhex(json_kfrag['kfrag'])), + CapsuleFrag.from_bytes(bytes.fromhex(json_kfrag['cfrag']))) + for json_kfrag in vector_suite['vectors']] + + metadata = bytes.fromhex(vector_suite['metadata']) + + for kfrag, cfrag in kfrags_n_cfrags: + assert kfrag.verify(signing_pk=verifying_pk, + delegating_pk=delegating_pk, + receiving_pk=receiving_pk), \ + 'Invalid KeyFrag {}'.format(bytes(kfrag.to_bytes).hex()) + + new_cfrag = reencrypt(capsule, kfrag, metadata=metadata) + assert new_cfrag.point_e1 == cfrag.point_e1 + assert new_cfrag.point_v1 == cfrag.point_v1 + assert new_cfrag.kfrag_id == cfrag.kfrag_id + assert new_cfrag.precursor == cfrag.precursor + assert new_cfrag.verify(capsule, + signing_pk=verifying_pk, + delegating_pk=delegating_pk, + receiving_pk=receiving_pk, + metadata=metadata) diff --git a/vectors/generate_test_vectors.py b/vectors/generate_test_vectors.py index eb22071e..434cfb04 100644 --- a/vectors/generate_test_vectors.py +++ b/vectors/generate_test_vectors.py @@ -1,13 +1,11 @@ import json import os -from umbral import pre -from umbral.keys import UmbralPrivateKey -from umbral.signing import Signer -from umbral.curvebn import CurveBN -from umbral.point import Point -from umbral.random_oracles import hash_to_curvebn, unsafe_hash_to_point, kdf -from umbral.config import set_default_curve, default_params +from umbral import SecretKey, PublicKey, encrypt, generate_kfrags, reencrypt +from umbral.curve_scalar import CurveScalar +from umbral.curve_point import CurvePoint +from umbral.hashing import Hash, unsafe_hash_to_point +from umbral.dem import DEM, kdf ####################### @@ -35,90 +33,77 @@ def create_test_vector_file(vector, filename, generate_again=False): # If True, this will overwrite existing test vector files with new randomly generated instances -generate_again = False +generate_again = True ######### # SETUP # ######### -set_default_curve() -params = default_params() -curve = params.curve # We create also some Umbral objects for later -delegating_privkey = UmbralPrivateKey.gen_key(params=params) -receiving_privkey = UmbralPrivateKey.gen_key(params=params) -signing_privkey = UmbralPrivateKey.gen_key(params=params) +delegating_sk = SecretKey.random() +receiving_sk = SecretKey.random() +signing_sk = SecretKey.random() -verifying_key = signing_privkey.get_pubkey() -delegating_key = delegating_privkey.get_pubkey() -receiving_key = receiving_privkey.get_pubkey() +verifying_pk = PublicKey.from_secret_key(signing_sk) +delegating_pk = PublicKey.from_secret_key(delegating_sk) +receiving_pk = PublicKey.from_secret_key(receiving_sk) -signer = Signer(signing_privkey) - -kfrags = pre.generate_kfrags(delegating_privkey=delegating_privkey, - receiving_pubkey=receiving_key, - threshold=6, - N=10, - signer=signer, - ) +kfrags = generate_kfrags(delegating_sk=delegating_sk, + receiving_pk=receiving_pk, + signing_sk=signing_sk, + threshold=6, + num_kfrags=10, + ) plain_data = b'peace at dawn' -ciphertext, capsule = pre.encrypt(delegating_key, plain_data) - -capsule.set_correctness_keys(delegating=delegating_key, - receiving=receiving_key, - verifying=verifying_key) +capsule, ciphertext = encrypt(delegating_pk, plain_data) -cfrag = pre.reencrypt(kfrags[0], capsule) +cfrag = reencrypt(capsule, kfrags[0]) points = [capsule.point_e, cfrag.point_e1, cfrag.proof.point_e2, capsule.point_v, cfrag.point_v1, cfrag.proof.point_v2, - capsule.params.u, cfrag.proof.point_kfrag_commitment, cfrag.proof.point_kfrag_pok] + cfrag.proof.kfrag_commitment, cfrag.proof.kfrag_pok] -z = cfrag.proof.bn_sig +z = cfrag.proof.signature -####################### -# CurveBN arithmetics # -####################### +########################### +# CurveScalar arithmetics # +########################### -# Let's generate two random CurveBNs -bn1 = CurveBN.gen_rand(curve) -bn2 = CurveBN.gen_rand(curve) +# Let's generate two random CurveScalars +bn1 = CurveScalar.random_nonzero() +bn2 = CurveScalar.random_nonzero() # Expected results for some binary operations expected = [('Addition', bn1 + bn2), ('Subtraction', bn1 - bn2), ('Multiplication', bn1 * bn2), - ('Division', bn1 / bn2), - ('Pow', bn1 ** bn2), - ('Mod', bn1 % bn2), - ('Inverse', ~bn1), - ('Neg', -bn1), + ('Inverse', bn1.invert()), ] expected = [{'operation': op, 'result': hexlify(result)} for (op, result) in expected] # Definition of test vector vector_suite = { - 'name': 'Test vectors for CurveBN operations', + 'name': 'Test vectors for CurveScalar operations', 'params': 'default', 'first operand': hexlify(bn1), 'second operand': hexlify(bn2), 'vectors': expected } -json_file = 'vectors_curvebn_operations.json' +json_file = 'vectors_scalar_operations.json' create_test_vector_file(vector_suite, json_file, generate_again=generate_again) -################### -# hash_to_curvebn # -################### +############################### +# CurveScalar.from_digest() # +############################### -# Test vectors for different kinds of inputs (bytes, Points, CurveBNs, etc.) +# Test vectors for different kinds of inputs (bytes, CurvePoints, CurveScalars, etc.) inputs = ([b''], [b'abc'], [capsule.point_e], @@ -129,51 +114,54 @@ def create_test_vector_file(vector, filename, generate_again=False): vectors = list() for input_to_hash in inputs: - bn_output = hash_to_curvebn(*input_to_hash, params=params) + digest = Hash(b'some_dst') + for input_ in input_to_hash: + digest.update(input_) + scalar = CurveScalar.from_digest(digest) json_input = [{'class': data.__class__.__name__, 'bytes': hexlify(data), } for data in input_to_hash] - json_input = {'input': json_input, 'output': hexlify(bn_output) } + json_input = {'input': json_input, 'output': hexlify(scalar) } vectors.append(json_input) vector_suite = { - 'name' : 'Test vectors for umbral.curvebn.CurveBN.hash()', + 'name' : 'Test vectors for umbral.curvebn.CurveScalar.from_digest()', 'params' : 'default', 'vectors' : vectors } -create_test_vector_file(vector_suite, 'vectors_curvebn_hash.json', generate_again=generate_again) +create_test_vector_file(vector_suite, 'vectors_scalar_from_digest.json', generate_again=generate_again) #print(json.dumps(vector_suite, indent=2)) -########## -# Points # -########## +############### +# CurvePoints # +############### -point1 = Point.gen_rand(curve) -point2 = Point.gen_rand(curve) +point1 = CurvePoint.random() +point2 = CurvePoint.random() -# Expected results for some Point operations +# Expected results for some CurvePoint operations expected = [('Addition', point1 + point2), ('Subtraction', point1 - point2), - ('Multiplication', bn1 * point1), + ('Multiplication', point1 * bn1), ('Inversion', -point1), ('To_affine.X', point1.to_affine()[0]), ('To_affine.Y', point1.to_affine()[1]), - ('kdf', kdf(point1, pre.DEM_KEYSIZE)), + ('kdf', kdf(bytes(point1), DEM.KEY_SIZE)), ] expected = [{'operation': op, 'result': hexlify(result)} for (op, result) in expected] # Definition of test vector vector_suite = { - 'name': 'Test vectors for Point operations', + 'name': 'Test vectors for CurvePoint operations', 'params': 'default', - 'first Point operand': hexlify(point1), - 'second Point operand': hexlify(point2), - 'CurveBN operand': hexlify(bn1), + 'first CurvePoint operand': hexlify(point1), + 'second CurvePoint operand': hexlify(point2), + 'CurveScalar operand': hexlify(bn1), 'vectors': expected } @@ -194,17 +182,17 @@ def create_test_vector_file(vector, filename, generate_again=False): vectors = list() for data in inputs: - for label in inputs: - point = unsafe_hash_to_point(label=label, data=data, params=params) + for dst in inputs: + point = unsafe_hash_to_point(dst=dst, data=data) json_input = {'data': hexlify(data), - 'label': hexlify(label), + 'dst': hexlify(dst), 'point': hexlify(point), } vectors.append(json_input) vector_suite = { - 'name': 'Test vectors for umbral.point.Point.unsafe_hash_to_point', + 'name': 'Test vectors for unsafe_hash_to_point()', 'params': 'default', 'vectors': vectors } @@ -219,7 +207,7 @@ def create_test_vector_file(vector, filename, generate_again=False): vectors = list() for kfrag in kfrags: - assert kfrag.verify(verifying_key, delegating_key, receiving_key) + assert kfrag.verify(verifying_pk, delegating_pk, receiving_pk) json_input = {'kfrag': hexlify(kfrag)} @@ -232,9 +220,9 @@ def create_test_vector_file(vector, filename, generate_again=False): 'Each of them must deserialize correctly and the ' 'call to verify() must succeed.'), 'params': 'default', - 'verifying_key': hexlify(verifying_key), - 'delegating_key': hexlify(delegating_key), - 'receiving_key': hexlify(receiving_key), + 'verifying_pk': hexlify(verifying_pk), + 'delegating_pk': hexlify(delegating_pk), + 'receiving_pk': hexlify(receiving_pk), 'vectors': vectors } @@ -246,14 +234,11 @@ def create_test_vector_file(vector, filename, generate_again=False): # CFrags # ########## -capsule.set_correctness_keys(delegating=delegating_key, - receiving=receiving_key, - verifying=verifying_key) - vectors = list() +metadata = b'kfrag_metadata' for kfrag in kfrags: - cfrag = pre.reencrypt(kfrag, capsule, provide_proof=False) + cfrag = reencrypt(capsule, kfrag, metadata) json_input = {'kfrag': hexlify(kfrag), 'cfrag': hexlify(cfrag)} vectors.append(json_input) @@ -263,18 +248,15 @@ def create_test_vector_file(vector, filename, generate_again=False): 'enclosed Capsule, under the enclosed delegating, ' 'verifying and receiving keys. Each CFrag must deserialize ' 'correctly and can be replicated with a call to ' - '`pre.reencrypt(kfrag, capsule, provide_proof=False)`'), + '`reencrypt(kfrag, capsule, , b\'kfrag_metadata\')`'), 'params': 'default', 'capsule': hexlify(capsule), - 'verifying_key': hexlify(verifying_key), - 'delegating_key': hexlify(delegating_key), - 'receiving_key': hexlify(receiving_key), + 'metadata': hexlify(metadata), + 'verifying_pk': hexlify(verifying_pk), + 'delegating_pk': hexlify(delegating_pk), + 'receiving_pk': hexlify(receiving_pk), 'vectors': vectors } #print(json.dumps(vector_suite, indent=2)) create_test_vector_file(vector_suite, 'vectors_cfrags.json', generate_again=generate_again) - - - - diff --git a/vectors/vectors_cfrags.json b/vectors/vectors_cfrags.json index 5da3fc6b..996d045d 100644 --- a/vectors/vectors_cfrags.json +++ b/vectors/vectors_cfrags.json @@ -1,51 +1,52 @@ { "name": "Test vectors for CFrags", - "description": "This is a collection of CFrags, originated from the enclosed Capsule, under the enclosed delegating, verifying and receiving keys. Each CFrag must deserialize correctly and can be replicated with a call to `pre.reencrypt(kfrag, capsule, provide_proof=False)`", + "description": "This is a collection of CFrags, originated from the enclosed Capsule, under the enclosed delegating, verifying and receiving keys. Each CFrag must deserialize correctly and can be replicated with a call to `reencrypt(kfrag, capsule, , b'kfrag_metadata')`", "params": "default", - "capsule": "03cdaadd5e0493c8426fd65004ea1e10ddcd3fcb37ac87ce84d0ffdda36d8d60720278adf9ca33ea46b2c0fb7b5a14a2820b171a97f8c69846e9866194ed1315438a1a525f615e246d744b82f7283aeba923f38cff0181e9013cfefe4747e32dc076", - "verifying_key": "03714109aee5bded1ea98ced8660ad1d49697e14f2a1bbefd5944e4ce443493d08", - "delegating_key": "021c0e2868064f20441df0050bf501137ec84db6ca3596b88a967308e14bea2caa", - "receiving_key": "036285c48fbb7c38bccceb6e15959a33ed3dd5ab5c96daaff67636b8557d6885d4", + "capsule": "02a03893438c0502dd13818f65c039b2ef4fce33bfed150c6ad166554b4e8a51c2028da9ebf8cc0966bc010152fd3917a8f12dfff0af3b06e34e17f300d622893159367ce07602310c78fc65a8b6115d75f65d362abdf2fd799bebc55aa0cda44dbb", + "metadata": "6b667261675f6d65746164617461", + "verifying_pk": "03f24761ac8b02de08ad1622d023f669d6214c3bab81a33087ed3ec5505e4d43db", + "delegating_pk": "03a73623a2e72fd52b2d313214c7495580c14fe6cd8de7ad0d63bbfbfd6fb6bd4d", + "receiving_pk": "02952a1903b9c929f0d93d935b34b272ea25a84833a04e22d887f27bc3bf0cc409", "vectors": [ { - "kfrag": "417225b396fb91a82f0ed97b4dfb235200742a58d9632d46e352e507c5c716863b349c46905501861f950d11aefd2c69a1f4fe31ae91b4c8624c7556ec7d01ef026fa5450221297328a37043220b0f82a7fdf2a4ab01c9b30cd572181736390ad303b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103428244169c9d2d3cfefa6b88251e7600c4a6f9a4edb5e371a0af7bc5134bf68ce9ad3b8a1acbd66926687e2cf7a30762527a85d41b1eaee133866df9dc4fe49b43601bb4d9b496f59e44e2e172141f9480bad0cfda18e5dd6c8dd7a5e72b4bc59281ed11ba75b87f7f1919c30b56d7f0c522b77fd15d37f893fc784eb77d1493", - "cfrag": "02aa6a41b809ba8d2816444788d597e6af5b81c56f7645f67e8dde417fca052828027adba799a3cf3935abb5366b5ec3f132f05a9baa0647734e7be50952e3309bd2417225b396fb91a82f0ed97b4dfb235200742a58d9632d46e352e507c5c7168603b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "3f3453856117dedb3d7518d0435c04b10734700c8aca48fa5a8b85eded515cdffefbefddcd3cb728dcc6d05061b5e201aa1cef55ce89e94c34b6887b307d5ab2025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb7490374d2e59ea274c8011f6bf26ca8fe8eb8e7837cafed8547485e3fde6ffe0368e98d26b0d7e12095941daffae8ca429147d9686dc3285ea182c0d7b15db41c7afd3fae3c88100707ef28b53d7cf93961dc509864eb319f0cce274544306c96099b5792af0b820bf758f5c8f2a69cfc1e0a5f91fab96ab82c10c7740602f90efdd315ff5dbd07323526ca1c9a93132b4d008fdf1796a55b92e2fe75c544652256c80101", + "cfrag": "02ecbc4dc0aed60efa211c7bf0e238593d292a042373b891928bcee459151c2f440281171b7e330ebd097575dadb210e8a405bc162e293881457a301da03f7571c7a3f3453856117dedb3d7518d0435c04b10734700c8aca48fa5a8b85eded515cdf025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902889960dbc86c87e5a1275f2c1df31e43ed0b3e4616126845a7394b27a83f6d1e03f0b7c60a76c7c9f590c9ac2d1f0ebf6aecaa9d371e2dcd04e19caa134e9c1b530374d2e59ea274c8011f6bf26ca8fe8eb8e7837cafed8547485e3fde6ffe0368e902660d6c64d749050f027983ebd4631838373a47c887537bea95aa139d53bfe38ea532a6b7464b0b5f45522c495a2b8a772b98c4950aa2bb830f6602e7636a1bd95792af0b820bf758f5c8f2a69cfc1e0a5f91fab96ab82c10c7740602f90efdd315ff5dbd07323526ca1c9a93132b4d008fdf1796a55b92e2fe75c544652256c8" }, { - "kfrag": "fe11bce6ea1d451fbe396c6c7d00747264324eebc93bd6ca9e949c2970be214e56571ecd1c02064be2058043cbe5d7ddde90771c5709c1cb48f2a4866bef246b03cb7014d5978aba65b7849bc5756d0e94ce515cc31725ed86550e4e38424b63d903b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103adbaf6ef97a68ad61ca39b1ab244b5d1881b00fbf7e2f0eec06907a0078ec4fcb573d101c2d1976985fa7d6d7c96b327030333ac3c66fc0223b456a70e996e19a31822dea4781891b054e86ff34abbfcce05f7c613b7296133ad5b10455061368a102dff42a913edb8e5d248a8d979879a3cfca1f8d3fbf6b8a24ca5357ae057", - "cfrag": "03bfcdf5dafbc9482fab6da942ed7849869d92333a815e9e81116eeff31a97ac680243d1d352ea857eef383300d41f1e1df14d00beb54abd43bc112c2d8af98e4be7fe11bce6ea1d451fbe396c6c7d00747264324eebc93bd6ca9e949c2970be214e03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "d15ac028be9938b5e2d7a9fb9957b416db538a11d141d320a5f656ab4e3cb0cab3a2ddd2672f3514e7da2f29cbe3815c83b6d704e09d595a68fdd5aeff52ef8a025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749033d6984555d41614a2ba08c2182e27a7105cb60ed414c9732a156c3e44d196dd3507335e3781d6c9a4543e3ae81a4c7538cf280292c9c0d92e4f513e4e073721f2f72a1ea0e69912e21754e32edf9cefd3a96183f5501266bedb301f291709ffb25ed5213660db4c8bfc086e794650455bfde1251f92e1fe49f1feb016ad44fe859b342964db14dddfa6a33eba53021149d8663d306850b8907f9dabf4a5d3ecd0101", + "cfrag": "03a98cc0d807a4f2b6183dfb9b7ff589f376183b33f88ae07a50323edaac946d9b02fc04f97b7afa5c8664082e4433a24184d54724e9e18afd44922bd052bea87e49d15ac028be9938b5e2d7a9fb9957b416db538a11d141d320a5f656ab4e3cb0ca025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903bf5c856a6b918df7a70a10db9854d43009ee517e7fc4403185c99eb05f42638c0213c86d5b3f3816a4807bf797731b8b23ef2563e6698e9380a0ee4044755504a9033d6984555d41614a2ba08c2182e27a7105cb60ed414c9732a156c3e44d196dd303de157a0d01a46d89e57d5586bee352b17bb123ea52dea60ef283456fa50cb5a98eca7141ac4bd117511c10922216c69e548c5005e49571087fefb69d50cecc8225ed5213660db4c8bfc086e794650455bfde1251f92e1fe49f1feb016ad44fe859b342964db14dddfa6a33eba53021149d8663d306850b8907f9dabf4a5d3ecd" }, { - "kfrag": "4edffcacb49f5620c1cebd67f43366aa22dc380dd9fd0f4853ffbbd44e31986f4a99f953e5c553f08a83cb16c0b5c793a4f691d4d3d239e29f232d2b058970d903041b77b8891d845c240a8a12b71dfe9651de67ceb817b54eb578636fe8a9605103b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41035ba90e2a06117e205dd807c780b5687ff6dadf19454fffb367e7af6b3f9cadf03572dc3311c0e1706354ba3340d1b1f915afc82007f9e09ddd34ce07a038a7bb7ecc7343b1532b175e5b8c7d3c712e3eecb18ff69c22237ba9ab6b47b4572529a35b29c48874f396def9971c0230a51e26975a953ff87af8fdbfd53bf42aae07", - "cfrag": "02c6870bd1336ec336752ce7d6b99f36d3ae69983d7a06cb5a743f20c562c0b2ba037fb7d9db1faf763c49e257f906e3345e33df144eeba8b9794462a31a305459c44edffcacb49f5620c1cebd67f43366aa22dc380dd9fd0f4853ffbbd44e31986f03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "f780e25b78581e70d28f102264e1f04b482eb9ecd45c188f2f9cd90026627f904b903c6da7529805e1d91fbaebc384588083e2c5f235c31e7f768b8d0df43513025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749032f4d57c068c255281703ba6d449345e2f6240a4b8b3047209ff2aca5edec0ad2394020e796b7b9f9130c0ab02b4c8151d050f38f3d0ff5f38dc164e4d254ad2737758c4b67c0b54267b113692f11a410ffc5fe3e41c2f8ec9246854baa63dbfaebb58f0cc89c528e119788c521bbfa8dd33c69129c1a05ed454d7534224c9df35007ef11b38769ee8d2788c72745e50e14e32b0c2b9d988e2550dd3f89cbd6b50101", + "cfrag": "03ec5772868ec577fb8e054a7f0717dc56b7eded542a06c593ac7166093ae196c10394fc79d3d700a9536b10233ad1cf145a533a43d35c48028c7b2a6137a8d6097ff780e25b78581e70d28f102264e1f04b482eb9ecd45c188f2f9cd90026627f90025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903ad08b8333f7a44acf71a2738e7e6213d715d7cee759a825abce04b72ca8d56d0033eba87004940ec899c4eb593265e55138f2d17e8b4c712027009388c18724bd0032f4d57c068c255281703ba6d449345e2f6240a4b8b3047209ff2aca5edec0ad2037403376f5789c4d7c755e4a0b45541a88cd045c77fe61a615e9b6ab6af9e97bbd868593f2b973cd492439c4fdbc6351739e8e9e7f5ba501fb9bbc96605dcf144ebb58f0cc89c528e119788c521bbfa8dd33c69129c1a05ed454d7534224c9df35007ef11b38769ee8d2788c72745e50e14e32b0c2b9d988e2550dd3f89cbd6b5" }, { - "kfrag": "762a4ae9fdbb74de327a29d25c577c46521ee44a951c6e33739e5ceb2a340aefd2a93d8cbe37b9149dd26ce59b0b7ffcd9adf1ca822c5b477595ecba1933291503409c76b74f0f415f5b6a8421514c250f71a5c5b6c5b0d89148e03ba2a624a9a503b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41034f04b1666bc36ac5d3b7ba66420b660d19caf9a995b6cc7cc0aa7c9d0e739f25b1048e754ffd0703e16b453ae8279e5410eb16d2d53683f2d80c30c39918834d70970a09ae17c014fc939979c1e3659b92a40d8688ed77861407316a22d4a8e0b5628c5eec0a2123129ebdb627eae78f8c404f8e129dd407feb2e970b0ba5e39", - "cfrag": "038bbe8c32677553121c7b708c4266e85930ae38541fec43df9b4eb131fcda4b06036ab69b2d77584016302c8391a13bc821811fe8837bd28523ad04081faa6fc498762a4ae9fdbb74de327a29d25c577c46521ee44a951c6e33739e5ceb2a340aef03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "afdbd2183491cec86259c4e6785c9048f17e1f0c86df597983e78f50eb9e88ebfc725b6addb07ce67e5e33e404237dfd9baf15825329d780bbcf07952d899709025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902fbba98644ea41f7abbef7f0a80d645d428844eb6a08c848b73122057f02cc264f27b1b019d667b1a3c89e176b9203870c42dcf3bb6af9191a89db98b2cd1a1b82c61d188f2d2a5d8e1c92a64d3402e98ca09e4594dd67ad74a9583e47b5ee2fd0d38772f8dee198e6e7fa2f7acca079a90b280f98e880106bc337c314bdea20b1e8d1d43ed0912a4a55475c2587ba81a16b9775681774a8bc9d1af2395875e000101", + "cfrag": "02b6b320eb5ef6bb58adc6b0379b3052d7fe3ce290d62d8a9edc5d9560c7472f75036dd5f864310b2f9f7239bca239877edf63b42ac00637fb6cdcdcf944fb0ef2f2afdbd2183491cec86259c4e6785c9048f17e1f0c86df597983e78f50eb9e88eb025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749037b55bdc05a83cf07d672c695d0c57a961be2a7289d9386b6e86953d6abe90f17036e5e32b140cf076873542eb4551c328608c8f2d951a3d52083b7a2f6612c21d902fbba98644ea41f7abbef7f0a80d645d428844eb6a08c848b73122057f02cc264027ddbf0d8eec3118c1765eb0c636184375b5ce593c1fd83bfbf501d94687695954edccdff64dd78e9ae94aa137754c502c03cacbaeeb09b1dcb798bb8442476ba0d38772f8dee198e6e7fa2f7acca079a90b280f98e880106bc337c314bdea20b1e8d1d43ed0912a4a55475c2587ba81a16b9775681774a8bc9d1af2395875e00" }, { - "kfrag": "b40778198920434d132c4d3724a7b7422428c9921bd627710c3764a6c54376f6a03be8af10cb0f1c3b74d132dda5feeb4340a9f6213da859c05b6b57249e54e903e9198cc0e86b880251931ab162130f93242164a5b242015195290ba75b5a6bea03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103f27829a4798466ed68c2c53137e4e658e86faebfabf2556837b60b502a1721de3e073a98974686d1b847c27167f118eeea6a27029775800cb1618b393bca9cc35b341b546c8851395b3b68945b73b01fdbe94a9f6c400b22bfb5e3bebeee95887d888c49ccf99553a2941de1cbd3f845c5725d1b6b26017dea5cf161fadb5fda", - "cfrag": "020604cacae76ef0f2a81a582b2c642accc4bc9d29ea9b172211a3d8225cfc4975026ac1a78becd4be2f09b939b3bdac3901bbeec488ab1013965c40565034586824b40778198920434d132c4d3724a7b7422428c9921bd627710c3764a6c54376f603b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "831f7b7b14181746fcfd7e26e03e3fb63e7a8903acff3dd3c7ad0c2c94550d9abcced3aacb62fa59fd2847a2b18cc6a6f0a6f646e39ec94f05ef186186dfbe10025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749020db8647602d7401b47c556f25540bd45da99e69462ee8eef1b9c26a26a3757c77f90b015143d8516a5bf2ada51a24b8192e1326d38bf47c0f54591619db42c7c122fd0d955f788dfdeee8d762022887216a3de332632d44092f1f06793eb351fd6acaf0f2060ace737a11e1c1cec72ba361ce754c913765113e1695de323225f24c3f0bbf832c9062d004b69e40090930b40d5986eb9ede462e5d044083127450101", + "cfrag": "038a54e78c4dd408df7b242610d5c21bc6a34f7b16af21a059ee8e44eea24337c702d4584beebc883104f375e922aba70ad1449d54f6a835ba6716b36271bfae8e53831f7b7b14181746fcfd7e26e03e3fb63e7a8903acff3dd3c7ad0c2c94550d9a025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903c1d11486753d8d4b60a4e8a890007d021ea00aaed7d608b25475e69364e5f3120304ef459543d9482aa3b48c5605176e87bf55c0bef3f03244bac83446dd84fe3d020db8647602d7401b47c556f25540bd45da99e69462ee8eef1b9c26a26a3757c702182da47b2bef272ed9840eb2cff17f8f62d3e9544cfc699905e40e8ab061d4d17dc4e840d39308e81fae434b30ed124ce08f846a1a9ab73c926a6a222d15657ad6acaf0f2060ace737a11e1c1cec72ba361ce754c913765113e1695de323225f24c3f0bbf832c9062d004b69e40090930b40d5986eb9ede462e5d04408312745" }, { - "kfrag": "bb063b1ae2a2e2c804671a40571b5d9a7746a7b11b98fd1794207daf68e8d408e4ad0acf429b3e97d7d098766cf304fc43454a79d541a8e85cd95ee93b7bfb460242325b9a16de25bca5ce9225091b2d9eec4b98fa627f6c2fec591cfba3561bd303b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41034c2742c62c69c571623a751dc842998cc47a6d33c7e2d30e099bc10d2675fa8bed049ff1474d604eb97e6c1b997dc506bfcefd6aed3838db23fd08f0cebe176fad3a0c5734d986b506145f0770e6689eb1425eb2817d699be1c993d64b26f2dd59d3acf01c5372adabebaa04336ff03219eadf1fd085a6957bd5e90b83919774", - "cfrag": "022edd320a1560725a60c8116810ac0debf2595bdf274510477181e37e1ce9684c02b56d7468d8a29c5034602dd1960d4a09cc19edf11fd7b90b536a0463f465854bbb063b1ae2a2e2c804671a40571b5d9a7746a7b11b98fd1794207daf68e8d40803b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "c63acdf5fb6820df50354e74e65eefacaf75e7e22c780b2b5e2c49a0db9d353e7217ca6a942fce879bd4b596aabd489e0c5af75bd94b72aed37999799e9c8dc9025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902fcaa0a22aabe3b4564972a9368d6a752bc5e359b306cfaff1626b49911158cda599e662db88909f430575f44b3677a8161a5003519e48cf0da635cb20b15f18d632a1bf41eb525b9ee9fd47f196fdd15059d989f9166e5b437cbbd66459e03fad404248f1da8048a5bf9dd9650fbdd50d1afcbadabbcd7a5aca1882b5eeb803443cd4caff8c4b090bc263f56f496aca086bb6f1fedfd5a99e1715ebfe2c6b5010101", + "cfrag": "038caa0566b556fb81617617ee8d4a4808cfaac1fa65b1e1999b58bbefafb30623022a43ae7cd2595e155f3cc7cf5e716168f2b959d574e07f7037ba30329dc384dec63acdf5fb6820df50354e74e65eefacaf75e7e22c780b2b5e2c49a0db9d353e025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903361957fd737be52d9423a400e677264d8e57ffc1ab35f19aff29ac7d13275ece03a1b57ec36f35089242d2586be843853ce830f1fff20cea9e6a354598ec10c1e002fcaa0a22aabe3b4564972a9368d6a752bc5e359b306cfaff1626b49911158cda0300a120a88ee5994de9a4a5287dbb2e63bd1cd3fbca77740ddad0789dc4a40547a792377ec089eadb1771196797c6835cf01bd4307c6c33be4e61acdb6e05f583d404248f1da8048a5bf9dd9650fbdd50d1afcbadabbcd7a5aca1882b5eeb803443cd4caff8c4b090bc263f56f496aca086bb6f1fedfd5a99e1715ebfe2c6b501" }, { - "kfrag": "9a2d97e3bba40307b7c60f6f22c5965f6587206cef4d5d7980ad8d75f0f4ae69de90b3ac071a58a06c4d2d0895db9e71a4f36b86fd078dfce6e436514f70797d03d959ebb3d7ee2fd90f2a390da0d7377f7549877f7720739e7e84e0c488a6d16203b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f410394ba445cfe40a9ebf1bc6a6f9588b704b11b129a2a102e8c5bf892fbb695e2d37d396c1b34f8eed4f348ecb11a29fa2b68c3790ef2ddc169e6fa7dc86e03b1a7fd8faf67773903168ee5f9c2ac60468cd81c7ee389af0f03f3fed356c65e7f182faa22867aa4544554d235f78d28afe7d90fff1cf60184bb1ea947a343c13d07", - "cfrag": "035f87f2fecce4d4734a01d444e3614e2f32be3f9277373f1338ddb0044a4b79ae03a604f360df7cb23097d7b49826088bd3628d82f601f2b4ea9262931c3b4bc5809a2d97e3bba40307b7c60f6f22c5965f6587206cef4d5d7980ad8d75f0f4ae6903b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "1365f76b3cecb0d27cd839263d6e91e8a3e703cb10590fc4ee8c533caed2fcb4e390938ab2eb832d51d7436058182fb46fb4288c9409a2465c25e447919e61eb025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903ffe0345c282a9890aa6759dadd14afdd50a82c19123a110d37f4582a1549ce5d4308de0dbbc76897e910253bd1fdb10e65bbbe45cede7dcbf494eba5dee18f9c141cc095ff275208485abe81b229b730c11a1fd87de00756e3d705faff9e6f508cff3f81aec66079b4737c5d55ada03f7a749da2605e6b1bb57324528c373cac773526c02a0cf876744a5e7cd7dee1bad8ccf1e81a46d4c7049743cabca94dad0101", + "cfrag": "03e39b8d144411b2db704a4394b9291bc8897ce619df95e2a8355066a9da8fe91b02037fe5e553f4e7e711502abe59bff33fae5ed0eee63747252744701ad1c550f31365f76b3cecb0d27cd839263d6e91e8a3e703cb10590fc4ee8c533caed2fcb4025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903a0bf927bc8b75413f899b06ec3bb3ebba8b73f2a5d22c007e157440c2ec6496703be800d325be2e0d10d3cf81d9fe65e035a31d9f4b857b81af38d52d1a815a40b03ffe0345c282a9890aa6759dadd14afdd50a82c19123a110d37f4582a1549ce5d02518eea3159155d5ec2437907ae06a3bf0ece2e8747e13c1528ccffc62eedeebeb50690a4f2f1e5ebcec48789e7d08039ae4853de86a2a2fd991e70ba37e7dc1c8cff3f81aec66079b4737c5d55ada03f7a749da2605e6b1bb57324528c373cac773526c02a0cf876744a5e7cd7dee1bad8ccf1e81a46d4c7049743cabca94dad" }, { - "kfrag": "3d09cbb50ab9ff970c93a03976efaf5f13aef88fc4e1b8840cebad96d0469605b343d7f3d4297ada1fcc08009260250f29dbb64bfb6dd64c2dd72174be3d87a202f665886dabd4fd94513aa1082a403efcb9722115e7c44f8ce5394799e10c2ca203b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41037ec97969ef20834c753f460c1c29360ce535cb19e0dd0da3bc9c568157137c3f741dadb514586112bfa22c4aa64c28ba854f7393a04ce77a3c4b731e6eaa41e29f2d240b3adf5a973688c7691e8bde140647f4d2c4d0c06a0d690415a82f18f095fb69a084607734579a590c6d1e477d93716919c67d6627a890fa5a2250109a", - "cfrag": "0321674813fe3ba72c9164b7016299862ce1efdbf57c7eef83bd4d3f6535bc3eae03940fdcd41dfaeb7667a0d2a3e929944ea6a3c2c6d7e9f2fff4265ffb011169b53d09cbb50ab9ff970c93a03976efaf5f13aef88fc4e1b8840cebad96d046960503b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "d961d60a31b197ee26437b1ff6b484c63bcfd208f509af1225a8db8f65240e366f7924ae66d6cd64c25c74761067bcb3a388cf2d4d2e90738666252868e790b0025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749037c88f9bf80bb6a406843e339dcc8548b3f8bf16e525be9c94d5e3b8c243f466fbb19cf3eec376f9c46d9c52040555927c7eb506af29718ed9b728ac210d43b2b4958eae22852a1e3761a71cedff210a52f5d312e5cc1b12bdbb2edbe3f955f5535b8b1ce9e3e8b04a010a2dd227c9d906d7806fdf9df07d8ce379597bf7513c23db95d84e7774a3fe0de392cd7390c6ec7cab60ad22317d8c00de0865bd0ceb80101", + "cfrag": "03367a497f07271e9b505f58d762527cfd8b0bd30f4b925219b495c8ff825c8cef023b856c54ee517300280f9b9109ee6f8e260341c4013a0b74911fda9eac562b71d961d60a31b197ee26437b1ff6b484c63bcfd208f509af1225a8db8f65240e36025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902d5dd9d1d29e06800648c0b2b45a2755f5a36ed4e7179d17c5ed9506d1d455daf02fe8deea5266b7059e6bdf53cb4f23c3f27814e14f955eb6236ca911639c3d6f8037c88f9bf80bb6a406843e339dcc8548b3f8bf16e525be9c94d5e3b8c243f466f03bdd9ce48dbeafe54277c44c4cf3cb5d5eb10e036640180c0d0e197594f2bebe029f79a6eafcac19331d83eab043df3aa6486a70409c46c2509a4b03ead49666b35b8b1ce9e3e8b04a010a2dd227c9d906d7806fdf9df07d8ce379597bf7513c23db95d84e7774a3fe0de392cd7390c6ec7cab60ad22317d8c00de0865bd0ceb8" }, { - "kfrag": "71c39f563bdda903d8397370b077ba1348e07cf644eaffdfbca251f63d8e0c8377d0f143019bca10090a07c15ab9d6d71857451443e0e77ca6768b45b93892b802b54fd786330796eebd5df0a7d5dc26422177d5637028aaea293dfa223a72a56203b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103aaaf48203b37dc6152c0735493517a31284be4c46b57a21f01359572d1e1e3d1b0fd64fc82efb401f25dab88e48474450b274625c28e16cb51f31259206aba6fe4886083237bdb5f7da67c8e1e2da7fdef57789c919ccceae6b5453eaa22fb6dcb58a2f9f1f20f05d03326031d4817ec52cf3dc9eb37f2d3b014ba315f5b8c16", - "cfrag": "02b37b1fc91e5d99f8249e6c70d19ac9af80cfeab42d2c8b5dbb43b791e5818c480345339e46528e5f7f2d48ab5dd6ba50dc7a44ed7a99a9ef0cee902839076f13a671c39f563bdda903d8397370b077ba1348e07cf644eaffdfbca251f63d8e0c8303b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "8618ade86dd8b8f15c206274caba6955c30171e466e220ef2344af25f3ca5976ea2eb761d4e8d083e4bf30052c90f6fde525716bd19b5abe98d66bdd48745f85025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902bb441051315ea81c8d9d9cc4e63d3f66e6fe3ef52217e8639e0af421d5dbba1be604f5168408cc4bf118346126b9a105b57524b741e141d5cebca15c8964669858bed28994196a23e4f99706cdb8d912d9c53b7c58f98e6d5eb5a4ef3aa2b7b9e0a270af089c667647613c6abe1b7aba8103ee386a04df80341e51e132d6d35d28753fa65e7f8d8c8f3a10d8adc8499a174bcb8041cf6078520ef5e9e00853290101", + "cfrag": "03ae6db34ac0125757de78dc64cb563d32ef5ce3983b67f8053cbb9e3539f5240c03855d0862b9930d7fa36e5c60785352de497b84e6ca6d1712627a35fa49df79688618ade86dd8b8f15c206274caba6955c30171e466e220ef2344af25f3ca5976025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749021594688234f9a0ba6331cf6d341dcea4992d0354492247c528a011620fe7271a03ebb8652e960aa91511db011d16dc3f15df71d81b6e5555a41dc29480158fd8e302bb441051315ea81c8d9d9cc4e63d3f66e6fe3ef52217e8639e0af421d5dbba1b0398e26bb2caa42e1cc1f55f3688bfcaaadc7714a9f79f1910f5c158faa0d53b370668c081a5622181957a2af1fed562695ec390b01b8855411518f401638e185de0a270af089c667647613c6abe1b7aba8103ee386a04df80341e51e132d6d35d28753fa65e7f8d8c8f3a10d8adc8499a174bcb8041cf6078520ef5e9e0085329" }, { - "kfrag": "55faf9c9be6d59da90b2c2e9f09d85e3965e00629b31c3854367f86039725ecb5c560659b6dc7d16a5f3202da0489aa02cbbabb65d8e1107c3645ca7e5bf36c3020e06cdf7d03bafc42e77c86d07b76840ffa7db6a5c511f3530d44b34edb69aba03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103f5674cd594e92cace034b8b443a7aae0ae48ed57ca9eeca5ad6e2855334a989c0ea976c30e4f5eb2527b01caa468f150db4a19cae08ba6015df41fc07d4ea6bb33433a543608fd59cacba037daecf6e069f0954ce9a5f1651297c28cf31fdf76b655ed10284f5bb436c93934bb89b2434b7ff9f7bcb414b3e879a5571c88a0b1", - "cfrag": "03a48d0c6578a259efdebdf0b12ab6e1d29b472a520a1f14ecf628eb161a386ce2021ab6cafd3c7778bef9c199911306939ed679e7b4c09fbbd02c897f994417a81f55faf9c9be6d59da90b2c2e9f09d85e3965e00629b31c3854367f86039725ecb03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41" + "kfrag": "939cfdfc368ae2c011ade7b7d18543f66f6b2f5aea0ed6732830d8ab281ec492cd90cd1756a44414e51d741e99f9a7d46cbedbfc7bdb60f6b8d33ffb1d4d6b31025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749020d6a191832eed71367b495a514ee4ac442ce19040c00c4e6ab331f844b2fff11d1db98034e5ff8f86a5b2d015cfa439774dd83644adb80bcba1881f09bdb1b105e37329495d03775e99da0f1c99e753e6868fbe04766572a086ce8e1c575e0d253698578672fbfdcdf2607513d0d0c03f346cb8183506d179e9b999988c7ca317c10e8606e3f7a18ac9146dcc2f484dc6c46a149c371c7a22b17c14f0e3e84220101", + "cfrag": "03b45ef82c8e3439a698e3cc4383cd223d6ae84a6c1c7e6ea6b1e89fb501273ef1024e2b1a83a2e675e7f3e4f1d803f456dc83d6536bc33c07b01fc521380cec39a4939cfdfc368ae2c011ade7b7d18543f66f6b2f5aea0ed6732830d8ab281ec492025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903893bc5023c9da3e0acf0028256ae37fe1015e09b8fcaea89b3aff10a49b1ac5d03c295e648f0dc3df65314ce141ff21b04fcf53432300ff8994ba765d8205bd90d020d6a191832eed71367b495a514ee4ac442ce19040c00c4e6ab331f844b2fff110390d4511e87f7dee7091cbffb952da38c7efbf1ee5a6890ea8afcfa22ee425c0cecd183c8351af7f917ccaa9bd7771de0ef9cf240bc02a7dc32c10e0bd4ed725653698578672fbfdcdf2607513d0d0c03f346cb8183506d179e9b999988c7ca317c10e8606e3f7a18ac9146dcc2f484dc6c46a149c371c7a22b17c14f0e3e8422" } ] } \ No newline at end of file diff --git a/vectors/vectors_curvebn_hash.json b/vectors/vectors_curvebn_hash.json deleted file mode 100644 index 2a8b5f4b..00000000 --- a/vectors/vectors_curvebn_hash.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "name": "Test vectors for umbral.curvebn.CurveBN.hash()", - "params": "default", - "vectors": [ - { - "input": [ - { - "class": "bytes", - "bytes": "" - } - ], - "output": "fd307d78e9f94e1b76762b8efd1284067c4ddd49f64f95441d57784d05a6323d" - }, - { - "input": [ - { - "class": "bytes", - "bytes": "616263" - } - ], - "output": "26249427a90ff70e82597a97a80f62fd133038a1ddae58b446eddf1a08098da3" - }, - { - "input": [ - { - "class": "Point", - "bytes": "03cdaadd5e0493c8426fd65004ea1e10ddcd3fcb37ac87ce84d0ffdda36d8d6072" - } - ], - "output": "b8070774566dbc192f9aeb4e34eb94b39bacdee67f7c373ca1371dd4b8b1ab41" - }, - { - "input": [ - { - "class": "CurveBN", - "bytes": "b32e9abad43a3724ff37dd9d15253fe66339f978e7581dff5b34b4db970b7bf3" - } - ], - "output": "7d1978b2203d57abb5fe3383d7929ff8aec7b2ea08bc7f4120d12843792ceadb" - }, - { - "input": [ - { - "class": "Point", - "bytes": "03cdaadd5e0493c8426fd65004ea1e10ddcd3fcb37ac87ce84d0ffdda36d8d6072" - }, - { - "class": "CurveBN", - "bytes": "b32e9abad43a3724ff37dd9d15253fe66339f978e7581dff5b34b4db970b7bf3" - } - ], - "output": "57d604fa36e3acbe841c5367f29393868c57290fa7f411b1b9fbdbfe1c320c4f" - }, - { - "input": [ - { - "class": "Point", - "bytes": "03cdaadd5e0493c8426fd65004ea1e10ddcd3fcb37ac87ce84d0ffdda36d8d6072" - }, - { - "class": "Point", - "bytes": "02aa6a41b809ba8d2816444788d597e6af5b81c56f7645f67e8dde417fca052828" - }, - { - "class": "Point", - "bytes": "0336877b38451dd8baaa4830794091a38b7abb2c8187e1062cc2512e202739d5eb" - }, - { - "class": "Point", - "bytes": "0278adf9ca33ea46b2c0fb7b5a14a2820b171a97f8c69846e9866194ed1315438a" - }, - { - "class": "Point", - "bytes": "027adba799a3cf3935abb5366b5ec3f132f05a9baa0647734e7be50952e3309bd2" - }, - { - "class": "Point", - "bytes": "03ee94ece91a0091e3f2c132f348716b0ab01d4ec320ad408ff9308e092dfe1e1b" - }, - { - "class": "Point", - "bytes": "0203c98795773ff1c241fc0b1cced85e80f8366581dda5c9452175ebd41385fa1f" - }, - { - "class": "Point", - "bytes": "026fa5450221297328a37043220b0f82a7fdf2a4ab01c9b30cd572181736390ad3" - }, - { - "class": "Point", - "bytes": "038a295338304923b70a233778a1b93f869062a5d1663127a6e5a5a5b07739f21d" - } - ], - "output": "c384b9566bc17b5ae424862116c89f882374c5bb2ec2c5c54bbf7b4e2cc8e179" - } - ] -} \ No newline at end of file diff --git a/vectors/vectors_curvebn_operations.json b/vectors/vectors_curvebn_operations.json deleted file mode 100644 index f0e1660a..00000000 --- a/vectors/vectors_curvebn_operations.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Test vectors for CurveBN operations", - "params": "default", - "first operand": "42bd8598f460a2334e921feaa58a64700bdd5eeb4a6d5f59f7363f5d167a2830", - "second operand": "cead0bb7e8b078069664f7a4ec81945b9c3b2233a39097f0310670c29e1e34fc", - "vectors": [ - { - "operation": "Addition", - "result": "116a9150dd111a39e4f7178f920bf8cced69a4383eb5570e686a5192e4621beb" - }, - { - "operation": "Subtraction", - "result": "741079e10bb02a2cb82d2845b908d0132a51199e562567a586022d2748923475" - }, - { - "operation": "Multiplication", - "result": "14ae3ce9b69ed69bbd9fe81e50c9482afc72651b5a5f69b40e8b9235d6fd459b" - }, - { - "operation": "Division", - "result": "1ef7189cfb9918d4fdde0298e811631ccb147036fdc2557bcc6b81db7e3e7222" - }, - { - "operation": "Pow", - "result": "f558c003bc71493f8ebbe39b42316c514ccc610437f1b4f37c73f81fe903dad2" - }, - { - "operation": "Mod", - "result": "42bd8598f460a2334e921feaa58a64700bdd5eeb4a6d5f59f7363f5d167a2830" - }, - { - "operation": "Inverse", - "result": "6c6640d846d233a6c705c1c2c06bb1372d95bca81ea8cdbb6840ccb9a415dc3d" - }, - { - "operation": "Neg", - "result": "bd427a670b9f5dccb16de0155a759b8eaed17dfb64db40e1c89c1f2fb9bc1911" - } - ] -} \ No newline at end of file diff --git a/vectors/vectors_kfrags.json b/vectors/vectors_kfrags.json index 33b0eae4..e1f3a959 100644 --- a/vectors/vectors_kfrags.json +++ b/vectors/vectors_kfrags.json @@ -2,39 +2,39 @@ "name": "Test vectors for KFrags", "description": "This is a collection of KFrags generated under the enclosed delegating, verifying and receiving keys. Each of them must deserialize correctly and the call to verify() must succeed.", "params": "default", - "verifying_key": "03714109aee5bded1ea98ced8660ad1d49697e14f2a1bbefd5944e4ce443493d08", - "delegating_key": "021c0e2868064f20441df0050bf501137ec84db6ca3596b88a967308e14bea2caa", - "receiving_key": "036285c48fbb7c38bccceb6e15959a33ed3dd5ab5c96daaff67636b8557d6885d4", + "verifying_pk": "03f24761ac8b02de08ad1622d023f669d6214c3bab81a33087ed3ec5505e4d43db", + "delegating_pk": "03a73623a2e72fd52b2d313214c7495580c14fe6cd8de7ad0d63bbfbfd6fb6bd4d", + "receiving_pk": "02952a1903b9c929f0d93d935b34b272ea25a84833a04e22d887f27bc3bf0cc409", "vectors": [ { - "kfrag": "417225b396fb91a82f0ed97b4dfb235200742a58d9632d46e352e507c5c716863b349c46905501861f950d11aefd2c69a1f4fe31ae91b4c8624c7556ec7d01ef026fa5450221297328a37043220b0f82a7fdf2a4ab01c9b30cd572181736390ad303b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103428244169c9d2d3cfefa6b88251e7600c4a6f9a4edb5e371a0af7bc5134bf68ce9ad3b8a1acbd66926687e2cf7a30762527a85d41b1eaee133866df9dc4fe49b43601bb4d9b496f59e44e2e172141f9480bad0cfda18e5dd6c8dd7a5e72b4bc59281ed11ba75b87f7f1919c30b56d7f0c522b77fd15d37f893fc784eb77d1493" + "kfrag": "3f3453856117dedb3d7518d0435c04b10734700c8aca48fa5a8b85eded515cdffefbefddcd3cb728dcc6d05061b5e201aa1cef55ce89e94c34b6887b307d5ab2025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb7490374d2e59ea274c8011f6bf26ca8fe8eb8e7837cafed8547485e3fde6ffe0368e98d26b0d7e12095941daffae8ca429147d9686dc3285ea182c0d7b15db41c7afd3fae3c88100707ef28b53d7cf93961dc509864eb319f0cce274544306c96099b5792af0b820bf758f5c8f2a69cfc1e0a5f91fab96ab82c10c7740602f90efdd315ff5dbd07323526ca1c9a93132b4d008fdf1796a55b92e2fe75c544652256c80101" }, { - "kfrag": "fe11bce6ea1d451fbe396c6c7d00747264324eebc93bd6ca9e949c2970be214e56571ecd1c02064be2058043cbe5d7ddde90771c5709c1cb48f2a4866bef246b03cb7014d5978aba65b7849bc5756d0e94ce515cc31725ed86550e4e38424b63d903b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103adbaf6ef97a68ad61ca39b1ab244b5d1881b00fbf7e2f0eec06907a0078ec4fcb573d101c2d1976985fa7d6d7c96b327030333ac3c66fc0223b456a70e996e19a31822dea4781891b054e86ff34abbfcce05f7c613b7296133ad5b10455061368a102dff42a913edb8e5d248a8d979879a3cfca1f8d3fbf6b8a24ca5357ae057" + "kfrag": "d15ac028be9938b5e2d7a9fb9957b416db538a11d141d320a5f656ab4e3cb0cab3a2ddd2672f3514e7da2f29cbe3815c83b6d704e09d595a68fdd5aeff52ef8a025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749033d6984555d41614a2ba08c2182e27a7105cb60ed414c9732a156c3e44d196dd3507335e3781d6c9a4543e3ae81a4c7538cf280292c9c0d92e4f513e4e073721f2f72a1ea0e69912e21754e32edf9cefd3a96183f5501266bedb301f291709ffb25ed5213660db4c8bfc086e794650455bfde1251f92e1fe49f1feb016ad44fe859b342964db14dddfa6a33eba53021149d8663d306850b8907f9dabf4a5d3ecd0101" }, { - "kfrag": "4edffcacb49f5620c1cebd67f43366aa22dc380dd9fd0f4853ffbbd44e31986f4a99f953e5c553f08a83cb16c0b5c793a4f691d4d3d239e29f232d2b058970d903041b77b8891d845c240a8a12b71dfe9651de67ceb817b54eb578636fe8a9605103b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41035ba90e2a06117e205dd807c780b5687ff6dadf19454fffb367e7af6b3f9cadf03572dc3311c0e1706354ba3340d1b1f915afc82007f9e09ddd34ce07a038a7bb7ecc7343b1532b175e5b8c7d3c712e3eecb18ff69c22237ba9ab6b47b4572529a35b29c48874f396def9971c0230a51e26975a953ff87af8fdbfd53bf42aae07" + "kfrag": "f780e25b78581e70d28f102264e1f04b482eb9ecd45c188f2f9cd90026627f904b903c6da7529805e1d91fbaebc384588083e2c5f235c31e7f768b8d0df43513025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749032f4d57c068c255281703ba6d449345e2f6240a4b8b3047209ff2aca5edec0ad2394020e796b7b9f9130c0ab02b4c8151d050f38f3d0ff5f38dc164e4d254ad2737758c4b67c0b54267b113692f11a410ffc5fe3e41c2f8ec9246854baa63dbfaebb58f0cc89c528e119788c521bbfa8dd33c69129c1a05ed454d7534224c9df35007ef11b38769ee8d2788c72745e50e14e32b0c2b9d988e2550dd3f89cbd6b50101" }, { - "kfrag": "762a4ae9fdbb74de327a29d25c577c46521ee44a951c6e33739e5ceb2a340aefd2a93d8cbe37b9149dd26ce59b0b7ffcd9adf1ca822c5b477595ecba1933291503409c76b74f0f415f5b6a8421514c250f71a5c5b6c5b0d89148e03ba2a624a9a503b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41034f04b1666bc36ac5d3b7ba66420b660d19caf9a995b6cc7cc0aa7c9d0e739f25b1048e754ffd0703e16b453ae8279e5410eb16d2d53683f2d80c30c39918834d70970a09ae17c014fc939979c1e3659b92a40d8688ed77861407316a22d4a8e0b5628c5eec0a2123129ebdb627eae78f8c404f8e129dd407feb2e970b0ba5e39" + "kfrag": "afdbd2183491cec86259c4e6785c9048f17e1f0c86df597983e78f50eb9e88ebfc725b6addb07ce67e5e33e404237dfd9baf15825329d780bbcf07952d899709025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902fbba98644ea41f7abbef7f0a80d645d428844eb6a08c848b73122057f02cc264f27b1b019d667b1a3c89e176b9203870c42dcf3bb6af9191a89db98b2cd1a1b82c61d188f2d2a5d8e1c92a64d3402e98ca09e4594dd67ad74a9583e47b5ee2fd0d38772f8dee198e6e7fa2f7acca079a90b280f98e880106bc337c314bdea20b1e8d1d43ed0912a4a55475c2587ba81a16b9775681774a8bc9d1af2395875e000101" }, { - "kfrag": "b40778198920434d132c4d3724a7b7422428c9921bd627710c3764a6c54376f6a03be8af10cb0f1c3b74d132dda5feeb4340a9f6213da859c05b6b57249e54e903e9198cc0e86b880251931ab162130f93242164a5b242015195290ba75b5a6bea03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103f27829a4798466ed68c2c53137e4e658e86faebfabf2556837b60b502a1721de3e073a98974686d1b847c27167f118eeea6a27029775800cb1618b393bca9cc35b341b546c8851395b3b68945b73b01fdbe94a9f6c400b22bfb5e3bebeee95887d888c49ccf99553a2941de1cbd3f845c5725d1b6b26017dea5cf161fadb5fda" + "kfrag": "831f7b7b14181746fcfd7e26e03e3fb63e7a8903acff3dd3c7ad0c2c94550d9abcced3aacb62fa59fd2847a2b18cc6a6f0a6f646e39ec94f05ef186186dfbe10025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749020db8647602d7401b47c556f25540bd45da99e69462ee8eef1b9c26a26a3757c77f90b015143d8516a5bf2ada51a24b8192e1326d38bf47c0f54591619db42c7c122fd0d955f788dfdeee8d762022887216a3de332632d44092f1f06793eb351fd6acaf0f2060ace737a11e1c1cec72ba361ce754c913765113e1695de323225f24c3f0bbf832c9062d004b69e40090930b40d5986eb9ede462e5d044083127450101" }, { - "kfrag": "bb063b1ae2a2e2c804671a40571b5d9a7746a7b11b98fd1794207daf68e8d408e4ad0acf429b3e97d7d098766cf304fc43454a79d541a8e85cd95ee93b7bfb460242325b9a16de25bca5ce9225091b2d9eec4b98fa627f6c2fec591cfba3561bd303b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41034c2742c62c69c571623a751dc842998cc47a6d33c7e2d30e099bc10d2675fa8bed049ff1474d604eb97e6c1b997dc506bfcefd6aed3838db23fd08f0cebe176fad3a0c5734d986b506145f0770e6689eb1425eb2817d699be1c993d64b26f2dd59d3acf01c5372adabebaa04336ff03219eadf1fd085a6957bd5e90b83919774" + "kfrag": "c63acdf5fb6820df50354e74e65eefacaf75e7e22c780b2b5e2c49a0db9d353e7217ca6a942fce879bd4b596aabd489e0c5af75bd94b72aed37999799e9c8dc9025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902fcaa0a22aabe3b4564972a9368d6a752bc5e359b306cfaff1626b49911158cda599e662db88909f430575f44b3677a8161a5003519e48cf0da635cb20b15f18d632a1bf41eb525b9ee9fd47f196fdd15059d989f9166e5b437cbbd66459e03fad404248f1da8048a5bf9dd9650fbdd50d1afcbadabbcd7a5aca1882b5eeb803443cd4caff8c4b090bc263f56f496aca086bb6f1fedfd5a99e1715ebfe2c6b5010101" }, { - "kfrag": "9a2d97e3bba40307b7c60f6f22c5965f6587206cef4d5d7980ad8d75f0f4ae69de90b3ac071a58a06c4d2d0895db9e71a4f36b86fd078dfce6e436514f70797d03d959ebb3d7ee2fd90f2a390da0d7377f7549877f7720739e7e84e0c488a6d16203b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f410394ba445cfe40a9ebf1bc6a6f9588b704b11b129a2a102e8c5bf892fbb695e2d37d396c1b34f8eed4f348ecb11a29fa2b68c3790ef2ddc169e6fa7dc86e03b1a7fd8faf67773903168ee5f9c2ac60468cd81c7ee389af0f03f3fed356c65e7f182faa22867aa4544554d235f78d28afe7d90fff1cf60184bb1ea947a343c13d07" + "kfrag": "1365f76b3cecb0d27cd839263d6e91e8a3e703cb10590fc4ee8c533caed2fcb4e390938ab2eb832d51d7436058182fb46fb4288c9409a2465c25e447919e61eb025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74903ffe0345c282a9890aa6759dadd14afdd50a82c19123a110d37f4582a1549ce5d4308de0dbbc76897e910253bd1fdb10e65bbbe45cede7dcbf494eba5dee18f9c141cc095ff275208485abe81b229b730c11a1fd87de00756e3d705faff9e6f508cff3f81aec66079b4737c5d55ada03f7a749da2605e6b1bb57324528c373cac773526c02a0cf876744a5e7cd7dee1bad8ccf1e81a46d4c7049743cabca94dad0101" }, { - "kfrag": "3d09cbb50ab9ff970c93a03976efaf5f13aef88fc4e1b8840cebad96d0469605b343d7f3d4297ada1fcc08009260250f29dbb64bfb6dd64c2dd72174be3d87a202f665886dabd4fd94513aa1082a403efcb9722115e7c44f8ce5394799e10c2ca203b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f41037ec97969ef20834c753f460c1c29360ce535cb19e0dd0da3bc9c568157137c3f741dadb514586112bfa22c4aa64c28ba854f7393a04ce77a3c4b731e6eaa41e29f2d240b3adf5a973688c7691e8bde140647f4d2c4d0c06a0d690415a82f18f095fb69a084607734579a590c6d1e477d93716919c67d6627a890fa5a2250109a" + "kfrag": "d961d60a31b197ee26437b1ff6b484c63bcfd208f509af1225a8db8f65240e366f7924ae66d6cd64c25c74761067bcb3a388cf2d4d2e90738666252868e790b0025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749037c88f9bf80bb6a406843e339dcc8548b3f8bf16e525be9c94d5e3b8c243f466fbb19cf3eec376f9c46d9c52040555927c7eb506af29718ed9b728ac210d43b2b4958eae22852a1e3761a71cedff210a52f5d312e5cc1b12bdbb2edbe3f955f5535b8b1ce9e3e8b04a010a2dd227c9d906d7806fdf9df07d8ce379597bf7513c23db95d84e7774a3fe0de392cd7390c6ec7cab60ad22317d8c00de0865bd0ceb80101" }, { - "kfrag": "71c39f563bdda903d8397370b077ba1348e07cf644eaffdfbca251f63d8e0c8377d0f143019bca10090a07c15ab9d6d71857451443e0e77ca6768b45b93892b802b54fd786330796eebd5df0a7d5dc26422177d5637028aaea293dfa223a72a56203b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103aaaf48203b37dc6152c0735493517a31284be4c46b57a21f01359572d1e1e3d1b0fd64fc82efb401f25dab88e48474450b274625c28e16cb51f31259206aba6fe4886083237bdb5f7da67c8e1e2da7fdef57789c919ccceae6b5453eaa22fb6dcb58a2f9f1f20f05d03326031d4817ec52cf3dc9eb37f2d3b014ba315f5b8c16" + "kfrag": "8618ade86dd8b8f15c206274caba6955c30171e466e220ef2344af25f3ca5976ea2eb761d4e8d083e4bf30052c90f6fde525716bd19b5abe98d66bdd48745f85025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb74902bb441051315ea81c8d9d9cc4e63d3f66e6fe3ef52217e8639e0af421d5dbba1be604f5168408cc4bf118346126b9a105b57524b741e141d5cebca15c8964669858bed28994196a23e4f99706cdb8d912d9c53b7c58f98e6d5eb5a4ef3aa2b7b9e0a270af089c667647613c6abe1b7aba8103ee386a04df80341e51e132d6d35d28753fa65e7f8d8c8f3a10d8adc8499a174bcb8041cf6078520ef5e9e00853290101" }, { - "kfrag": "55faf9c9be6d59da90b2c2e9f09d85e3965e00629b31c3854367f86039725ecb5c560659b6dc7d16a5f3202da0489aa02cbbabb65d8e1107c3645ca7e5bf36c3020e06cdf7d03bafc42e77c86d07b76840ffa7db6a5c511f3530d44b34edb69aba03b890c5614684ac49f59bae91f699cf15761d4c994e0561a1dd570d8dc1081f4103f5674cd594e92cace034b8b443a7aae0ae48ed57ca9eeca5ad6e2855334a989c0ea976c30e4f5eb2527b01caa468f150db4a19cae08ba6015df41fc07d4ea6bb33433a543608fd59cacba037daecf6e069f0954ce9a5f1651297c28cf31fdf76b655ed10284f5bb436c93934bb89b2434b7ff9f7bcb414b3e879a5571c88a0b1" + "kfrag": "939cfdfc368ae2c011ade7b7d18543f66f6b2f5aea0ed6732830d8ab281ec492cd90cd1756a44414e51d741e99f9a7d46cbedbfc7bdb60f6b8d33ffb1d4d6b31025141c7f166303d33491fb9aae65c941fd7f40e5c9270a9600c20281090dbb749020d6a191832eed71367b495a514ee4ac442ce19040c00c4e6ab331f844b2fff11d1db98034e5ff8f86a5b2d015cfa439774dd83644adb80bcba1881f09bdb1b105e37329495d03775e99da0f1c99e753e6868fbe04766572a086ce8e1c575e0d253698578672fbfdcdf2607513d0d0c03f346cb8183506d179e9b999988c7ca317c10e8606e3f7a18ac9146dcc2f484dc6c46a149c371c7a22b17c14f0e3e84220101" } ] } \ No newline at end of file diff --git a/vectors/vectors_point_operations.json b/vectors/vectors_point_operations.json index 520d4d43..2e39456c 100644 --- a/vectors/vectors_point_operations.json +++ b/vectors/vectors_point_operations.json @@ -1,37 +1,37 @@ { - "name": "Test vectors for Point operations", + "name": "Test vectors for CurvePoint operations", "params": "default", - "first Point operand": "036893b75f97f4200270c07d043c86d4b9a48e0f0cf4a649b5311cb557cd49f65d", - "second Point operand": "022a7baeacffd711253616cc83da6c17451e5511b92fbef51da2a74f17db1989c6", - "CurveBN operand": "42bd8598f460a2334e921feaa58a64700bdd5eeb4a6d5f59f7363f5d167a2830", + "first CurvePoint operand": "02eb0184eedd9d14e10ad0714afd9915c58b2b40b582283e3e741d0141189246c0", + "second CurvePoint operand": "02b925f594ea60040f470195c72fc7aa8caeac7161af3abe65dceb2908bc866754", + "CurveScalar operand": "d63d8806eba7bfc2f5fd77d21aa5d7cc7cffcee26ac096f7c5904629c0db1c12", "vectors": [ { "operation": "Addition", - "result": "024e520b33f362bf072339db00c591ed9082914fa3c4f3e32b0e614019bf4961de" + "result": "02de2d20749111f538575c81e0abc406c71cf6d4c7c1b3555476d6f8778f271d5a" }, { "operation": "Subtraction", - "result": "021e4e230982f00e23b7b95eb4fcd36881f478b90928a35f5fb0a46fe36d7eb8ed" + "result": "031bd3e6f5b33b3f94601d3a243efaf2c359c3b097aff1aa3fa8fbf5210f110b8d" }, { "operation": "Multiplication", - "result": "03f72a2a0bfef906e5ae98931f156db679bfbb3e72aed461b217d9a035cb2882ad" + "result": "020fd46d21ec56d94a787c6d717222489b7a070a4f57065f442f588789d1feed87" }, { "operation": "Inversion", - "result": "026893b75f97f4200270c07d043c86d4b9a48e0f0cf4a649b5311cb557cd49f65d" + "result": "03eb0184eedd9d14e10ad0714afd9915c58b2b40b582283e3e741d0141189246c0" }, { "operation": "To_affine.X", - "result": "6893b75f97f4200270c07d043c86d4b9a48e0f0cf4a649b5311cb557cd49f65d" + "result": "eb0184eedd9d14e10ad0714afd9915c58b2b40b582283e3e741d0141189246c0" }, { "operation": "To_affine.Y", - "result": "f940cab3f294e54a5ccd5643a212350be822b145e6dab7cae5ad1d98ffb9bbad" + "result": "d9bed51d198e8ccd919b54a6eabfed2032cc737d410e0364643716986de89afc" }, { "operation": "kdf", - "result": "1bbe934cc018de9b123002acdf658b80d63456206c948279ea832832349328f3" + "result": "40b49492ba7924c421dd61ea39bf94ac6566feff43a1ef14e7adc2b9af3f6664" } ] } \ No newline at end of file diff --git a/vectors/vectors_scalar_from_digest.json b/vectors/vectors_scalar_from_digest.json new file mode 100644 index 00000000..b3ad32e2 --- /dev/null +++ b/vectors/vectors_scalar_from_digest.json @@ -0,0 +1,92 @@ +{ + "name": "Test vectors for umbral.curvebn.CurveScalar.from_digest()", + "params": "default", + "vectors": [ + { + "input": [ + { + "class": "bytes", + "bytes": "" + } + ], + "output": "42184a0ea1e39037cad1ed7f3bb0cd8b7fe978e6d8b94f965e47d582cbdb8208" + }, + { + "input": [ + { + "class": "bytes", + "bytes": "616263" + } + ], + "output": "02e2c58350c30e80f9deea1ae19e21a0baa7761f4448c792f205b8e9b7ac1ab3" + }, + { + "input": [ + { + "class": "CurvePoint", + "bytes": "02a03893438c0502dd13818f65c039b2ef4fce33bfed150c6ad166554b4e8a51c2" + } + ], + "output": "cd175898869252f3d6c6e77eaed94a72e74410d99534b349f27df2362c35745a" + }, + { + "input": [ + { + "class": "CurveScalar", + "bytes": "5e8601ee29241f263bf49b9999594413f863193fa1b8a985fff981cda7cc9087" + } + ], + "output": "2b83903fedca70169024365a4a5b387536a9ba38bd7b9fa0462f5f932f41a493" + }, + { + "input": [ + { + "class": "CurvePoint", + "bytes": "02a03893438c0502dd13818f65c039b2ef4fce33bfed150c6ad166554b4e8a51c2" + }, + { + "class": "CurveScalar", + "bytes": "5e8601ee29241f263bf49b9999594413f863193fa1b8a985fff981cda7cc9087" + } + ], + "output": "9f7cea094a5ed29ab2ec83391527db31850f915781c07c0b13853869e9885968" + }, + { + "input": [ + { + "class": "CurvePoint", + "bytes": "02a03893438c0502dd13818f65c039b2ef4fce33bfed150c6ad166554b4e8a51c2" + }, + { + "class": "CurvePoint", + "bytes": "02ecbc4dc0aed60efa211c7bf0e238593d292a042373b891928bcee459151c2f44" + }, + { + "class": "CurvePoint", + "bytes": "02aa6a09c61286e36d82f6371038f1c33b2095b3b6dc8d09de7489f516c2dfe49a" + }, + { + "class": "CurvePoint", + "bytes": "028da9ebf8cc0966bc010152fd3917a8f12dfff0af3b06e34e17f300d622893159" + }, + { + "class": "CurvePoint", + "bytes": "0281171b7e330ebd097575dadb210e8a405bc162e293881457a301da03f7571c7a" + }, + { + "class": "CurvePoint", + "bytes": "03e2869b26bbf46a2e1f46116d8d9eeeb45f18acf4a808defee52040221dd08af9" + }, + { + "class": "CurvePoint", + "bytes": "0374d2e59ea274c8011f6bf26ca8fe8eb8e7837cafed8547485e3fde6ffe0368e9" + }, + { + "class": "CurvePoint", + "bytes": "024526ff9ab3c9c4cf619166ff897b8c023a6ff01f54c42a921ec1ab564d5a65eb" + } + ], + "output": "072c408c4631491eb12b00b38b8f7f20080b802e3e7c5c421f89887055248b1a" + } + ] +} \ No newline at end of file diff --git a/vectors/vectors_scalar_operations.json b/vectors/vectors_scalar_operations.json new file mode 100644 index 00000000..d7e342c4 --- /dev/null +++ b/vectors/vectors_scalar_operations.json @@ -0,0 +1,24 @@ +{ + "name": "Test vectors for CurveScalar operations", + "params": "default", + "first operand": "d63d8806eba7bfc2f5fd77d21aa5d7cc7cffcee26ac096f7c5904629c0db1c12", + "second operand": "c2cc9d2f0b39201a5d4d4aa755c0506eab19c1abc89068d216f23f4965427ac4", + "vectors": [ + { + "operation": "Addition", + "result": "990a2535f6e0dfdd534ac2797066283c6d6ab3a784085f8e1cb026e655e75595" + }, + { + "operation": "Subtraction", + "result": "1370ead7e06e9fa898b02d2ac4e5875dd1e60d36a2302e25ae9e06e05b98a14e" + }, + { + "operation": "Multiplication", + "result": "88cdbd2959262c74f26d4315e65b7e8c4fb5d1326fb9f1c6dbfd7c951d43485f" + }, + { + "operation": "Inverse", + "result": "663c74e198bd4dcd2db7b78895fe8994a727d8bcba073818475a22483bb0103a" + } + ] +} \ No newline at end of file diff --git a/vectors/vectors_unsafe_hash_to_point.json b/vectors/vectors_unsafe_hash_to_point.json index 920ed742..fd2a4394 100644 --- a/vectors/vectors_unsafe_hash_to_point.json +++ b/vectors/vectors_unsafe_hash_to_point.json @@ -1,86 +1,86 @@ { - "name": "Test vectors for umbral.point.Point.unsafe_hash_to_point", + "name": "Test vectors for unsafe_hash_to_point()", "params": "default", "vectors": [ { "data": "", - "label": "", - "point": "03bb27bd2a7b7ff7500284bc44285d80ce5527448c79e7ef25843d1209c5df40c3" + "dst": "", + "point": "0215ec7bf0b50732b49f8228e07d24365338f9e3ab994b00af08e5a3bffe55fd8b" }, { "data": "", - "label": "616263", - "point": "03eec257593bbefd7f617350bd2aea9b14cc14a93528bad07b6e39c5db433adbd8" + "dst": "616263", + "point": "0297427e8f434c897d66d7ad40b51e0a11f8bdfed31e724ca4ac86c14fb5e2668f" }, { "data": "", - "label": "4e75437970686572", - "point": "0352184687070d943946f5da637b8e2aa00640b0da2231e7598ceea0286657a7cb" + "dst": "4e75437970686572", + "point": "025aa967c88c73854f4f4d9286a7ce4292898dfa42c7593b75cf823cd1b6dada96" }, { "data": "", - "label": "4e75637970686572", - "point": "0290c2fff33ad722da7cc813f57153afbcf33fc2acd1607f188770f9dcc7c00a0d" + "dst": "4e75637970686572", + "point": "02f3fcae4fb3596fbb34feaf3e2fff938b177b55d89c66f728e51fef220d9b702f" }, { "data": "616263", - "label": "", - "point": "02a79e7fe8a6559b5de0614702a4e13d97a672a899d5943e5c6b1a0c45fca933b0" + "dst": "", + "point": "0204c19746f60b6c4abbce9dbe31f2e0df9b22d8130cc0844cbf67db154d944db3" }, { "data": "616263", - "label": "616263", - "point": "0234cb950681a734bc29feaa5c1dd029a9062352488bae035acd56c0ebe99f0b7f" + "dst": "616263", + "point": "024c70ca862edba77a8265ee46e0137729826a79721855888bf7791feea42b9990" }, { "data": "616263", - "label": "4e75437970686572", - "point": "032106a37075e17b6f01b4ab63d5c84622efe5111843155c7d53e34548f287115d" + "dst": "4e75437970686572", + "point": "02357334755ceedaef03cb81b6dbbebd8399e0cf40a122a586069ae241e34fc869" }, { "data": "616263", - "label": "4e75637970686572", - "point": "034b4db429ccf36858718cb864c0c27520fb16218992a3290d1fc4758756ee0bef" + "dst": "4e75637970686572", + "point": "0256ec5dbf81d55fbdad3c2095177982a068bb0043dd2cf2834cc6a53e538157bf" }, { "data": "4e75437970686572", - "label": "", - "point": "03828335c1f3ccac7ec40d6dd4771e9ba527b039d7104fa0477a96cdccbf16c7cf" + "dst": "", + "point": "02b0cd14ef08638d57804c768d3b0a171461268f6faede586751f2919bdd7490b6" }, { "data": "4e75437970686572", - "label": "616263", - "point": "03193846a6ba4d9dab59990e53317050fe301477d3ac699f8cc260dd33cbc2c9c5" + "dst": "616263", + "point": "02a1c3e1c00f45a059fcf7749e31c5206388aa72bcc7c10195907e9c70c2a0a700" }, { "data": "4e75437970686572", - "label": "4e75437970686572", - "point": "0324215e7df37205a23c0b7f0a7e168c7984d9109ef31ebe7b37edc7d81ede4b55" + "dst": "4e75437970686572", + "point": "02100c656eed3ed2e175e5430bbd644ac86f24fa69fc1c5b3fd65ece562b480764" }, { "data": "4e75437970686572", - "label": "4e75637970686572", - "point": "03d5744667f3f2ff36217380a5d1701edf939d70b79d17d78a3969b533acb7c326" + "dst": "4e75637970686572", + "point": "0227a46bc66817fcaa803535a1c109674d300de5df0d8d11f6588325cf6cedf2b1" }, { "data": "4e75637970686572", - "label": "", - "point": "03f31c20a8264446d224c4ae6368193ac8b97247cf386bafe2cc27ffb6783ace19" + "dst": "", + "point": "02483315691815818fa1f1804406fc4246940cc8cb39405401e2aa5fd8d94bfa64" }, { "data": "4e75637970686572", - "label": "616263", - "point": "0347b4a8559bf9eb00cdc4c183ee4ff0a5c3a12692988d88927b07157c3fdd50a1" + "dst": "616263", + "point": "02dc01829e4725f8cacf6990c12ab0a5f837770b21e41bdd9964bb0f1ad52fcc31" }, { "data": "4e75637970686572", - "label": "4e75437970686572", - "point": "02b158ccb0b3384c2a8af92ac3e0e59ed9d0647fb62715fefdc9c0796c0b28bebb" + "dst": "4e75437970686572", + "point": "02b6653e2ed79579380104598cf83fc2b119dd8b91afae2a2a8077ffdca0b212ad" }, { "data": "4e75637970686572", - "label": "4e75637970686572", - "point": "0356b5aa5ef6be8229f3611095a47842aad8a3e54b3aa1f6caea696fa4bfdfe95e" + "dst": "4e75637970686572", + "point": "02192de02d9c15a52d90ef7192794a2fc925c09f7dcdb4b584b8c7fab33bbda1df" } ] } \ No newline at end of file