providing user entropy

This commit is contained in:
Alexey 2020-03-11 13:08:01 +03:00
parent 2e8f758d38
commit 3406debde0
8 changed files with 50 additions and 13 deletions

View File

@ -64,3 +64,12 @@ $ docker-compose up -d
1. The `current.params` file is your initial challenge file.
1. copy `current.params`, `withdraw.json` and `phase1radix*` to `./server/snark_files` folder.
1. `mv withdraw.json circuit.json`
## In case of WASM module changes
1. go to `phase2` folder in [phase2-bn254](https://github.com/tornadocash/phase2-bn254) (ceremony branch for now) and run the following command:
1. `wasm-pack build --release --target web -- --no-default-features --features wasm`
1. it will generate wasm modules in `pkg` folder, then you need to copy it to this project
1. `cp -r pkg/* <path_to_current_project>/lib/phase2 && cp pkg/phase2_bg.wasm <path_to_current_project>/static/_nuxt/lib/phase2/`
Example: `wasm-pack build --release --target web -- --no-default-features --features wasm && cp -r pkg/* ../../trusted-setup-nuxt/lib/phase2 && cp pkg/phase2_bg.wasm ../../trusted-setup-nuxt/static/_nuxt/lib/phase2/`

View File

@ -20,5 +20,5 @@
"module": "phase2.js",
"homepage": "https://github.com/ebfull/phase2",
"types": "phase2.d.ts",
"sideEffects": "false"
"sideEffects": false
}

View File

@ -2,9 +2,10 @@
/* eslint-disable */
/**
* @param {Uint8Array} params
* @param {Uint8Array} entropy
* @returns {Uint8Array}
*/
export function contribute(params: Uint8Array): Uint8Array;
export function contribute(params: Uint8Array, entropy: Uint8Array): Uint8Array;
/**
* If `module_or_path` is {RequestInfo}, makes a request and

View File

@ -70,17 +70,20 @@ function getArrayU8FromWasm0(ptr, len) {
}
/**
* @param {Uint8Array} params
* @param {Uint8Array} entropy
* @returns {Uint8Array}
*/
export function contribute(params) {
export function contribute(params, entropy) {
var ptr0 = passArray8ToWasm0(params, wasm.__wbindgen_malloc);
var len0 = WASM_VECTOR_LEN;
wasm.contribute(8, ptr0, len0);
var ptr1 = passArray8ToWasm0(entropy, wasm.__wbindgen_malloc);
var len1 = WASM_VECTOR_LEN;
wasm.contribute(8, ptr0, len0, ptr1, len1);
var r0 = getInt32Memory0()[8 / 4 + 0];
var r1 = getInt32Memory0()[8 / 4 + 1];
var v1 = getArrayU8FromWasm0(r0, r1).slice();
var v2 = getArrayU8FromWasm0(r0, r1).slice();
wasm.__wbindgen_free(r0, r1 * 1);
return v1;
return v2;
}
let cachedTextEncoder = new TextEncoder('utf-8');

View File

@ -1,7 +1,7 @@
/* tslint:disable */
/* eslint-disable */
export const memory: WebAssembly.Memory;
export function contribute(a: number, b: number, c: number): void;
export function contribute(a: number, b: number, c: number, d: number, e: number): void;
export function __wbindgen_malloc(a: number): number;
export function __wbindgen_free(a: number, b: number): void;
export function __wbindgen_realloc(a: number, b: number, c: number): number;

Binary file not shown.

View File

@ -60,7 +60,7 @@
<div class="buttons is-centered">
<b-button
v-if="!isContributeBtnSnown"
@click="makeContribution"
@click="getUserRandom"
:disabled="isContributeBtnDisabled"
type="is-primary"
outlined
@ -150,8 +150,22 @@ export default {
},
methods: {
...mapActions('user', ['makeTweet', 'logOut', 'getUserData']),
async makeContribution({ retry = 0 } = {}) {
getUserRandom() {
this.$buefy.dialog.prompt({
title: 'Contribution',
message: `Please provide a random input. The input, along with browser randomness, will be used as a source of entropy for your contribution.`,
inputAttrs: {
maxlength: 300
},
trapFocus: true,
onConfirm: (userInput) => {
this.makeContribution({ userInput })
}
})
},
async makeContribution({ userInput, retry = 0 } = {}) {
try {
const contribute = await this.$contribute()
this.isContributeBtnSnown = true
this.status.msg = ''
this.status.type = ''
@ -162,12 +176,22 @@ export default {
this.$root.$emit('enableLoading', 'Generating random contribution')
await timeout(100) // allow UI to update before freezing in wasm
console.log('Source params', data)
const contribute = await this.$contribute()
const result = contribute(data)
const encoder = new TextEncoder(userInput)
const entropyFromUser = encoder.encode(userInput)
const entropy = new Uint8Array(userInput.length)
const entropyFromBrowser = window.crypto.getRandomValues(entropy)
// suffle the browser and user random
for (let i = 0; i < entropyFromBrowser.length; i++) {
entropy[i] = entropyFromBrowser[i] + entropyFromUser[i]
}
console.log('entropy', entropy)
const result = contribute(data, entropy)
console.log('Updated params', result)
this.$root.$emit('enableLoading', 'Uploading and verifying your contribution')
console.log('this.user.name', this.userName, this.userHandle, this.userCompany)
const formData = new FormData()
formData.append('response', new Blob([result], { type: 'application/octet-stream' }))
if (this.contributionType !== 'anonymous') {
@ -202,7 +226,7 @@ export default {
this.isContributeBtnSnown = false
}
} catch (e) {
console.error(e.message)
console.error(e)
this.status.msg = e.message
this.status.type = 'is-danger'
this.isContributeBtnSnown = false