def test_base_times_zero_fails(): with pytest.raises(ValueError): Point.base_times(Scalar(0))
def get(obj_type, num_elements=None, **kwargs): mapping = { Scalar: lambda: Scalar.random(), Point: lambda: Point.base_times(Scalar.random()), Hash: lambda: Hash(secrets.token_bytes(32)), Signature: lambda: Signature(secrets.token_bytes(64)), RecoveryCertificate: lambda: RecoveryCertificate( signers=random.sample(list(range(N)), F + 1), signatures=get(Signature, F + 1), ), ConfirmationCertificate: lambda: ConfirmationCertificate( dataset_header_digest=get(Hash), signers=random.sample(list(range(N)), F + 1), signatures=get(Signature, F + 1), ), ShareCorrectnessProof: lambda: ShareCorrectnessProof( commitments=get(Point, N - 1), challenge=get(Scalar), responses=get(Scalar, N - 1), ), ShareDecryptionProof: lambda: ShareDecryptionProof( challenge=get(Scalar), response=get(Scalar), ), RecoveredShare: lambda: RecoveredShare( share=get(Point), proof=get(ShareDecryptionProof), merkle_branch=get(Hash, merkle.branch_length(N - 1)), ), DatasetHeader: lambda **kws: DatasetHeader( round_idx=kws['round_idx'], prev_round_idx=kws['prev_round_idx'], revealed_secret=get(Scalar), beacon=get(Hash), recovered_beacons=get(Hash, kws['round_idx'] - kws['prev_round_idx'] - 1), merkle_root=get(Hash), ), Dataset: lambda **kws: Dataset( round_idx=kws['round_idx'], prev_round_idx=kws['prev_round_idx'], revealed_secret=get(Scalar), beacon=get(Hash), recovered_beacons=get(Hash, kws['round_idx'] - kws['prev_round_idx'] - 1), merkle_root=get(Hash), encrypted_shares=get(Point, N - 1), proof=get(ShareCorrectnessProof), confirmation_certificate=None if kws['prev_round_idx'] == 0 else get(ConfirmationCertificate), recovery_certificates=get(RecoveryCertificate, kws['round_idx'] - kws['prev_round_idx'] - 1), ), ProposeMessage: lambda **kws: ProposeMessage( sender=random.randint(0, N - 1), dataset=get(Dataset, **kws), dataset_header_signature=get(Signature), confirmation_certificate_signature=get(Signature), ), AcknowledgeMessage: lambda **kws: AcknowledgeMessage( sender=random.randint(0, N - 1), dataset_header=get(DatasetHeader, **kws), dataset_header_signature=get(Signature), ), ConfirmMessage: lambda **kws: ConfirmMessage( sender=random.randint(0, N - 1), round_idx=kws.get('round_idx', random.randint(0, 1000_000)), dataset_header_digest=get(Hash), ), RecoverMessage: lambda **kws: RecoverMessage( sender=random.randint(0, N - 1), round_idx=kws.get('round_idx', random.randint(0, 1000_000)), recovery_certificate_signature=get(Signature), recovered_share=get(RecoveredShare) if kws.get('add_recovered_share', True) else None ), SignedMessage: lambda **kws: SignedMessage( message=get(kws['msg_type'], **kws), signature=get(Signature), ) } if num_elements is None: return mapping[obj_type](**kwargs) return [mapping[obj_type](**kwargs) for _ in range(num_elements)]
def test_base_multiply_by_one(): assert B == Point.base_times(Scalar(1))