readme, benchmarks, fix verification
This commit is contained in:
		| @@ -7,7 +7,8 @@ | ||||
|  | ||||
|     <script src="https://cdn.socket.io/4.5.4/socket.io.min.js"></script> | ||||
|     <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script> | ||||
|     <script src="{{ url_for('static', filename='js/sha3.js') }}" type="module"></script> | ||||
|     <script src="{{ url_for('static', filename='js/lz-string.js') }}"></script> | ||||
|     <script src="{{ url_for('static', filename='js/sha3.js') }}"></script> | ||||
|     <script src="{{ url_for('static', filename='js/modules/interface/main.js') }}" type="module"></script> | ||||
|     <script src="{{ url_for('static', filename='js/modules/crypto/main.js') }}" type="module"></script> | ||||
| </head> | ||||
| @@ -188,6 +189,8 @@ | ||||
|         function RSABench() { | ||||
|             console.log("Warming up") | ||||
|  | ||||
|             const ROUNDS = 250; | ||||
|  | ||||
|             for (let i = 0n; i < 100n; i++) { | ||||
|                 window.rsa.pubKey.encrypt(i); | ||||
|             } | ||||
| @@ -195,17 +198,19 @@ | ||||
|             console.log("Benching") | ||||
|  | ||||
|             performance.mark("rsa-start") | ||||
|             for (let i = 0n; i < 250n; i++) { | ||||
|             for (let i = 0n; i < BigInt(ROUNDS); i++) { | ||||
|                 window.rsa.pubKey.encrypt(i); | ||||
|             } | ||||
|             performance.mark("rsa-end") | ||||
|  | ||||
|             console.log(`Bench done. Duration: ${performance.measure("rsa-duration", "rsa-start", "rsa-end").duration}`) | ||||
|             console.log(`Bench done. Time per encrypt: ${performance.measure("rsa-duration", "rsa-start", "rsa-end").duration / ROUNDS}`) | ||||
|         } | ||||
|  | ||||
|         function PaillierBench() { | ||||
|             console.log("Warming up") | ||||
|  | ||||
|             const ROUNDS = 250 | ||||
|  | ||||
|             for (let i = 0n; i < 100n; i++) { | ||||
|                 window.paillier.pubKey.encrypt(i); | ||||
|             } | ||||
| @@ -213,12 +218,162 @@ | ||||
|             console.log("Benching") | ||||
|  | ||||
|             performance.mark("paillier-start") | ||||
|             for (let i = 0n; i < 250n; i++) { | ||||
|             for (let i = 0n; i < BigInt(ROUNDS); i++) { | ||||
|                 window.paillier.pubKey.encrypt(i); | ||||
|             } | ||||
|             performance.mark("paillier-end") | ||||
|  | ||||
|             console.log(`Bench done. Duration: ${performance.measure("paillier-duration", "paillier-start", "paillier-end").duration}`) | ||||
|             console.log(`Bench done. Time per encrypt: ${performance.measure("paillier-duration", "paillier-start", "paillier-end").duration / ROUNDS}`) | ||||
|         } | ||||
|  | ||||
|         function ZeroProofBench() { | ||||
|             console.log("Warming up") | ||||
|  | ||||
|             const cipherText = paillier.pubKey.encrypt(0n) | ||||
|             const ROUNDS = 20; | ||||
|  | ||||
|             for (let i = 0; i < 5; i++) { | ||||
|                 cipherText.proveNI(); | ||||
|             } | ||||
|  | ||||
|             console.log("Benching") | ||||
|  | ||||
|             performance.mark("paillier-start") | ||||
|             for (let i = 0; i < ROUNDS; i++) { | ||||
|                 cipherText.proveNI() | ||||
|             } | ||||
|             performance.mark("paillier-end") | ||||
|  | ||||
|             console.log(`Bench done. Time per proof: ${performance.measure("paillier-duration", "paillier-start", "paillier-end").duration / ROUNDS}`) | ||||
|         } | ||||
|  | ||||
|         function ZeroProofVerifierBench() { | ||||
|             console.log("Warming up") | ||||
|             const ROUNDS = 20 | ||||
|  | ||||
|             const cipherText = paillier.pubKey.encrypt(1n) | ||||
|             const readOnly = cipherText.asReadOnlyCiphertext(); | ||||
|             const proof = cipherText.proveNI() | ||||
|  | ||||
|             for (let i = 0; i < 5; i++) { | ||||
|                 readOnly.verifyNI(proof) | ||||
|             } | ||||
|  | ||||
|             console.log("Benching") | ||||
|  | ||||
|             performance.mark("paillier-start") | ||||
|             for (let i = 0; i < ROUNDS; i++) { | ||||
|                 readOnly.verifyNI(proof) | ||||
|             } | ||||
|             performance.mark("paillier-end") | ||||
|  | ||||
|             console.log(`Bench done. Time per verification: ${performance.measure("paillier-duration", "paillier-start", "paillier-end").duration / ROUNDS}`) | ||||
|         } | ||||
|  | ||||
|         function Protocol4Bench() { | ||||
|             console.log("Warming up") | ||||
|  | ||||
|             const regions = { | ||||
|                 A: paillier.pubKey.encrypt(0n), | ||||
|                 B: paillier.pubKey.encrypt(1n), | ||||
|                 C: paillier.pubKey.encrypt(0n), | ||||
|                 D: paillier.pubKey.encrypt(0n), | ||||
|                 E: paillier.pubKey.encrypt(0n) | ||||
|             } | ||||
|             const ROUNDS = 20; | ||||
|  | ||||
|             for (let i = 0; i < 5; i++) { | ||||
|                 proveRegions(regions) | ||||
|             } | ||||
|  | ||||
|             console.log("Benching") | ||||
|  | ||||
|             performance.mark("paillier-start") | ||||
|             for (let i = 0; i < ROUNDS; i++) { | ||||
|                 proveRegions(regions) | ||||
|             } | ||||
|             performance.mark("paillier-end") | ||||
|  | ||||
|             console.log(`Bench done. Time per proof: ${performance.measure("paillier-duration", "paillier-start", "paillier-end").duration / ROUNDS}`) | ||||
|         } | ||||
|  | ||||
|         function Protocol4VerifierBench() { | ||||
|             console.log("Warming up") | ||||
|  | ||||
|             const ROUNDS = 20; | ||||
|             const regions = { | ||||
|                 A: paillier.pubKey.encrypt(0n), | ||||
|                 B: paillier.pubKey.encrypt(1n), | ||||
|                 C: paillier.pubKey.encrypt(0n), | ||||
|                 D: paillier.pubKey.encrypt(0n), | ||||
|                 E: paillier.pubKey.encrypt(0n) | ||||
|             } | ||||
|             let proof = proveRegions(regions) | ||||
|  | ||||
|             for (let i = 0; i < 5; i++) { | ||||
|                 verifyRegions(proof, paillier.pubKey) | ||||
|             } | ||||
|  | ||||
|             console.log("Benching") | ||||
|  | ||||
|             performance.mark("paillier-start") | ||||
|             for (let i = 0; i < ROUNDS; i++) { | ||||
|                 verifyRegions(proof, paillier.pubKey) | ||||
|             } | ||||
|             performance.mark("paillier-end") | ||||
|  | ||||
|             console.log(`Bench done. Time per verification: ${performance.measure("paillier-duration", "paillier-start", "paillier-end").duration / ROUNDS}`) | ||||
|         } | ||||
|  | ||||
|         // https://gist.github.com/kawanet/352a2ed1d1656816b2bc | ||||
|         function string_to_buffer(src) { | ||||
|           return (new Uint16Array([].map.call(src, function(c) { | ||||
|             return c.charCodeAt(0) | ||||
|           }))).buffer; | ||||
|         } | ||||
|  | ||||
|         function Protocol4Size() { | ||||
|             const regions = { | ||||
|                 A: paillier.pubKey.encrypt(0n), | ||||
|                 B: paillier.pubKey.encrypt(1n), | ||||
|                 C: paillier.pubKey.encrypt(0n), | ||||
|                 D: paillier.pubKey.encrypt(0n), | ||||
|                 E: paillier.pubKey.encrypt(0n) | ||||
|             } | ||||
|             let ROUNDS  = 10; | ||||
|  | ||||
|             let size = 0; | ||||
|             let compressedSize = 0; | ||||
|  | ||||
|             for (let x = 0; x < ROUNDS; x++) { | ||||
|                 let s = JSON.stringify(proveRegions(regions)); | ||||
|                 size += string_to_buffer(s).byteLength; | ||||
|                 compressedSize += LZString.compressToUint8Array(s).length; | ||||
|             } | ||||
|  | ||||
|             return { | ||||
|                 size: size / ROUNDS, | ||||
|                 compressedSize: compressedSize / ROUNDS | ||||
|             }; | ||||
|         } | ||||
|  | ||||
|         function ZeroProofSize() { | ||||
|             const ROUNDS = 100; | ||||
|             const cipherText = paillier.pubKey.encrypt(0n) | ||||
|  | ||||
|             let size = 0; | ||||
|             let compressedSize = 0; | ||||
|  | ||||
|             for (let x = 0; x < ROUNDS; x++) { | ||||
|                 let s = JSON.stringify(cipherText.proveNI()); | ||||
|                 size += string_to_buffer(s).byteLength; | ||||
|                 compressedSize += LZString.compressToUint8Array(s).length; | ||||
|             } | ||||
|  | ||||
|             return { | ||||
|                 size: size / ROUNDS, | ||||
|                 compressedSize: compressedSize / ROUNDS | ||||
|             }; | ||||
|         } | ||||
|     </script> | ||||
| </body> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user