mirror of https://github.com/nucypher/pyUmbral.git
Update vector generating script and regenerate vectors
parent
0f82580c7e
commit
fe6e32be9d
|
@ -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)
|
|
@ -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, ciphertext = encrypt(delegating_pk, plain_data)
|
||||
|
||||
capsule.set_correctness_keys(delegating=delegating_key,
|
||||
receiving=receiving_key,
|
||||
verifying=verifying_key)
|
||||
|
||||
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 @@ inputs = ([b''],
|
|||
|
||||
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 @@ inputs = (b'',
|
|||
|
||||
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 @@ create_test_vector_file(vector_suite, 'vectors_unsafe_hash_to_point.json', gener
|
|||
|
||||
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 @@ vector_suite = {
|
|||
'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 @@ create_test_vector_file(vector_suite, 'vectors_kfrags.json', generate_again=gene
|
|||
# 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 @@ vector_suite = {
|
|||
'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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue