Example #1
0
    def test_mix_parameters(self) -> None:
        zksnark = Groth16()

        ext_proof = ExtendedProof(proof=Groth16.proof_from_json_dict({
            "a": ["1234", "2345"],
            "b": [["3456", "4567"], ["5678", "6789"]],
            "c": ["789a", "89ab"],
        }),
                                  inputs=[
                                      "9abc",
                                      "abcd",
                                      "bcde",
                                      "cdef",
                                  ])
        sig_keypair = gen_signing_keypair()
        sig_vk = sig_keypair.vk
        sig = sign(sig_keypair.sk, bytes.fromhex("00112233"))
        receiver_enc_keypair = generate_encryption_keypair()
        ciphertexts = [
            encrypt(token_bytes(NOTE_LENGTH_BYTES), receiver_enc_keypair.k_pk),
            encrypt(token_bytes(NOTE_LENGTH_BYTES), receiver_enc_keypair.k_pk),
        ]

        mix_params = MixParameters(ext_proof, sig_vk, sig, ciphertexts)

        mix_params_json = mix_params.to_json()
        mix_params_2 = MixParameters.from_json(zksnark, mix_params_json)

        self.assertEqual(mix_params.extended_proof.to_json_dict(),
                         mix_params_2.extended_proof.to_json_dict())
        self.assertEqual(encode_vk_to_bytes(mix_params.signature_vk),
                         encode_vk_to_bytes(mix_params_2.signature_vk))
        self.assertEqual(mix_params.signature, mix_params_2.signature)
        self.assertEqual(mix_params.ciphertexts, mix_params_2.ciphertexts)
 def from_json_dict(zksnark: IZKSnarkProvider,
                    json_dict: Dict[str, Any]) -> AggregatedTransaction:
     app_name = json_dict["app_name"]
     ext_proof = ExtendedProof.from_json_dict(zksnark,
                                              json_dict["ext_proof"])
     nested_parameters = \
         [bytes.fromhex(x) for x in json_dict["nested_parameters"]]
     return AggregatedTransaction(app_name, ext_proof, nested_parameters)
Example #3
0
    def from_json_dict(
            zksnark: IZKSnarkProvider,
            json_dict: Dict[str, Any]) -> NestedTransaction:
        app_name = json_dict["app_name"]
        ext_proof = ExtendedProof.from_json_dict(
            zksnark, cast(Dict[str, Any], json_dict["extended_proof"]))
        parameters = bytes.fromhex(json_dict["parameters"])
        fee_in_wei = json_dict["fee_in_wei"]

        return NestedTransaction(app_name, ext_proof, parameters, fee_in_wei)
Example #4
0
 def _from_json_dict(zksnark: IZKSnarkProvider,
                     json_dict: Dict[str, Any]) -> DepositParameters:
     ext_proof = ExtendedProof.from_json_dict(zksnark,
                                              json_dict["extended_proof"])
     zklay_address = decode_encryption_public_key(
         json_dict["zklay_address"])
     eth_amount = EtherValue(json_dict["eth_amount"])
     ciphertexts = [bytes.fromhex(x) for x in json_dict["ciphertexts"]]
     return DepositParameters(ext_proof, zklay_address, eth_amount,
                              ciphertexts)
Example #5
0
 def _from_json_dict(zksnark: IZKSnarkProvider,
                     json_dict: Dict[str, Any]) -> MixParameters:
     ext_proof = ExtendedProof.from_json_dict(zksnark,
                                              json_dict["extended_proof"])
     signature_pk_param = [int(x) for x in json_dict["signature_vk"]]
     signature_pk = signing.verification_key_from_mix_parameter(
         signature_pk_param)
     signature = signing.signature_from_mix_parameter(
         int(json_dict["signature"]))
     ciphertexts = [bytes.fromhex(x) for x in json_dict["ciphertexts"]]
     return MixParameters(ext_proof, signature_pk, signature, ciphertexts)
Example #6
0
 def _do_test_ext_proof_proto_encode_decode(
         self, proof: ExtendedProof, snark: IZKSnarkProvider) -> None:
     proof_proto = snark.extended_proof_to_proto(proof)
     proof_decoded = snark.extended_proof_from_proto(proof_proto)
     self.assertEqual(proof.to_json_dict(), proof_decoded.to_json_dict())
Example #7
0
    int("0x1a4cfba533c731398e06458003ef7c3920dd1a545b469cc0c35dc19c51942c15", 16),  # noqa
    int("0x06194ebb25bab4d163005b23e9cf9aa8d43d242a7792f0fcf269549b46bcc217", 16),  # noqa
]

EXTPROOF_BLS12_377_GROTH16 = ExtendedProof(
    proof=Groth16.Proof.from_json_dict({
        "a": [
            "0x010bd3c06ed5aeb1a7b0653ba63f413b27ba7fd1b77cb4a403fb15f9fb8735abda93a3c78ad05afd111ea68d016cf99e",  # noqa
            "0x00255a73b1247dcfd62171b29ddbd271cdb7e98b78912ddf6bfe4723cd229f414f9a47cecd0fec7fb74bf13b22a7395b"  # noqa
        ],
        "b": [
            [
                "0x01ada9239a53b094ae15473baaa3649afb46d5330f36f8590df668167dd02aaf0a18602ce42654c3d857c4e5e454ca28",  # noqa
                "0x00938ce5525864aa135674b048bb68adadfabca2a4cea43ea13b19cacec1ae171986009e916f729a085c04cbe22c4127"  # noqa
            ],
            [
                "0x01015a4ea0daaaf8ef20b37c4bda03c2d381be797ae59b621b841d3e61495cf2aaf7e008565884f1d7245ea003ebbf79",  # noqa
                "0x0128d64383293780f481278fbb22ce1078d79180193361869d9e8639f028ac4c3a7c12f8bc7f7c138821bccd71abcca5"  # noqa
            ]
        ],
        "c": [
            "0x00001c5d91872102ab1ca71b321f5e3b6aca698be9d8b432b8f1fc60c37bda88d6f9fdcc91225dd2d17bc58f08826e68",  # noqa
            "0x000b34a2d07bba78abf1c3e909b1f691bb02f62991a6c6bab53c016e191ecf7929f866eef5231e7f0d29944166a49bf1"  # noqa
        ]
    }),
    inputs=[
        "0x0000000000000000000000000000000000000000000000000000000000000007"  # noqa
    ])

# Proof part of EXTPROOF_BLS12_377_GROTH16 encoded as uint256_t words
PROOF_BLS12_377_GROTH16_PARAMETERS = [
    # "a":