arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
ark-r1cs-std/tests/to_bytes_test.rs
tests/to_bytes_test.rsRaw
 1use ark_ec::PairingEngine;
 2use ark_ff::{to_bytes, Zero};
 3use ark_mnt4_298::MNT4_298;
 4use ark_mnt6_298::MNT6_298;
 5use ark_r1cs_std::alloc::AllocVar;
 6use ark_r1cs_std::fields::nonnative::NonNativeFieldVar;
 7use ark_r1cs_std::{R1CSVar, ToBitsGadget, ToBytesGadget};
 8use ark_relations::r1cs::ConstraintSystem;
 9
10#[test]
11fn to_bytes_test() {
12    let cs = ConstraintSystem::<<MNT6_298 as PairingEngine>::Fr>::new_ref();
13
14    let target_test_elem = <MNT4_298 as PairingEngine>::Fr::from(123456u128);
15    let target_test_gadget = NonNativeFieldVar::<
16        <MNT4_298 as PairingEngine>::Fr,
17        <MNT6_298 as PairingEngine>::Fr,
18    >::new_witness(cs, || Ok(target_test_elem))
19    .unwrap();
20
21    let target_to_bytes: Vec<u8> = target_test_gadget
22        .to_bytes()
23        .unwrap()
24        .iter()
25        .map(|v| v.value().unwrap())
26        .collect();
27
28    // 123456 = 65536 + 226 * 256 + 64
29    assert_eq!(target_to_bytes[0], 64);
30    assert_eq!(target_to_bytes[1], 226);
31    assert_eq!(target_to_bytes[2], 1);
32
33    for byte in target_to_bytes.iter().skip(3) {
34        assert_eq!(*byte, 0);
35    }
36
37    assert_eq!(to_bytes!(target_test_elem).unwrap(), target_to_bytes);
38}
39
40#[test]
41fn to_bits_test() {
42    type F = ark_bls12_377::Fr;
43    type CF = ark_bls12_377::Fq;
44
45    let cs = ConstraintSystem::<CF>::new_ref();
46    let f = F::zero();
47
48    let f_var = NonNativeFieldVar::<F, CF>::new_input(cs.clone(), || Ok(f)).unwrap();
49    f_var.to_bits_le().unwrap();
50}