arnaucube
arnaucube/keccak256-circomPublic Self-hosted repository
keccak256-circom/test/keccak256.js
test/keccak256.jsRaw
  1const chai = require("chai");
  2const path = require("path");
  3const crypto = require("crypto");
  4const F1Field = require("ffjavascript").F1Field;
  5const Scalar = require("ffjavascript").Scalar;
  6exports.p = Scalar.fromString("21888242871839275222246405745257275088548364400416034343698204186575808495617");
  7const Fr = new F1Field(exports.p);
  8
  9const assert = chai.assert;
 10
 11const keccak256 = require("keccak256");
 12
 13const wasm_tester = require("circom_tester").wasm;
 14
 15// const printSignal = require("./helpers/printsignal");
 16
 17function bytesToU64(byteArray) {
 18    var value = 0;
 19    for ( var i = byteArray.length - 1; i >= 0; i--) {
 20        value = (value * 256) + byteArray[i];
 21    }
 22
 23    return value;
 24}
 25function u64ToBytes(long) {
 26    var byteArray = [0, 0, 0, 0, 0, 0, 0, 0];
 27
 28    for ( var index = 0; index < byteArray.length; index ++ ) {
 29        var byte = long & 0xff;
 30        byteArray [ index ] = byte;
 31        long = (long - byte) / 256 ;
 32    }
 33
 34    return byteArray;
 35}
 36
 37function u64ToBits(a) {
 38    const aBytes = u64ToBytes(a);
 39    return bytesToBits(aBytes);
 40}
 41function bytesToBits(b) {
 42	const bits = [];
 43	for (let i = 0; i < b.length; i++) {
 44		for (let j = 0; j < 8; j++) {
 45			if ((b[i]&(1<<j)) > 0) {
 46                            bits.push(Fr.e(1));
 47                        } else {
 48                            bits.push(Fr.e(0));
 49                        }
 50		}
 51	}
 52	return bits
 53}
 54function u64ArrayToBits(u) {
 55	let r = [];
 56	for (let i = 0; i < u.length; i++) {
 57            r = r.concat(u64ToBits(u[i]));
 58	}
 59	return r
 60}
 61function bitsToU64(b) {
 62	if (b.length != 64) {
 63	    console.log("b.length = ", b.length, " max=64");
 64	    return;
 65	}
 66	const by = bitsToBytes(b)
 67	return bytesToU64(by)
 68}
 69function bitsToBytes(a) {
 70    const len = Math.floor((a.length -1 )/8)+1;
 71    const b = [];
 72
 73    for (let i=0; i<a.length; i++) {
 74	const p = Math.floor(i/8);
 75	if (a[i]==1) {
 76	    b[p] |= 1<<(i%8);
 77	}
 78    }
 79    return b;
 80}
 81
 82function bitsToU64Array(b) {
 83	const r = [];
 84	for (let i = 0; i < b.length/64; i++) {
 85            r.push(bitsToU64(b.slice(i*64, i*64+64)));
 86	}
 87	return r
 88}
 89
 90function intsToBigInts(a) {
 91    let b = [];
 92    for (let i=0; i<a.length; i++) {
 93        b[i] = Fr.e(a[i]);
 94    }
 95    return b;
 96}
 97
 98describe("Utils test", function () {
 99    this.timeout(100000);
100
101    it ("utils", async () => {
102        let a = 3;
103        let aBits = u64ToBits(a);
104	let a2 = bitsToU64(aBits);
105	assert.equal(a2, a);
106        a = 12345;
107        aBits = u64ToBits(a);
108	a2 = bitsToU64(aBits);
109	assert.equal(a2, a);
110
111	a = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24];
112	aBits = u64ArrayToBits(a);
113	a2 = bitsToU64Array(aBits);
114	// console.log("a", a);
115	// console.log("a2", a2);
116    
117	assert.deepEqual(a2, a);
118    });
119});
120