diff --git a/app/modules/prover/lib/proof.ts b/app/modules/prover/lib/proof.ts index 9d631b6dd4a8b958921e3a2363c457332998625c..1d723da5f768c7661b09c167407d5904949a0982 100644 --- a/app/modules/prover/lib/proof.ts +++ b/app/modules/prover/lib/proof.ts @@ -17,7 +17,7 @@ import {hashf} from "../../../lib/common" import {DBBlock} from "../../../lib/db/DBBlock" import {ConfDTO} from "../../../lib/dto/ConfDTO" import {ProverConstants} from "./constants" -import {KeyGen} from "../../../lib/common-libs/crypto/keyring" +import {KeyGen, verify, verifyBuggy} from "../../../lib/common-libs/crypto/keyring" import {dos2unix} from "../../../lib/common-libs/dos2unix" import {rawer} from "../../../lib/common-libs/index" import {ProcessCpuProfiler} from "../../../ProcessCpuProfiler" @@ -36,7 +36,9 @@ export function createPowWorker() { // By default, we do not prefix the PoW by any number let prefix = 0; - let signatureFunc:any, lastSecret:any, lastVersion: number, currentCPU = 1; + let sigFuncSaved: (msg:string) => string; + let verifyFuncSaved: (msg:string, sig:string) => boolean; + let lastSecret:any, lastVersion: number, currentCPU:number = 1; process.on('uncaughtException', (err:any) => { console.error(err.stack || Error(err)) @@ -115,24 +117,36 @@ export function createPowWorker() { prefix *= 100 * ProverConstants.NONCE_RANGE } const highMark = stuff.highMark; + + // Define sigFunc + // Use Buggy version for performance reasons let sigFunc = null; - if (signatureFunc && lastSecret === pair.sec && lastVersion === block.version) { - sigFunc = signatureFunc; + if (sigFuncSaved && lastSecret === pair.sec) { + sigFunc = sigFuncSaved; + } else { + lastSecret = pair.sec; + sigFunc = (msg:string) => KeyGen(pair.pub, pair.sec).signSyncBuggy(msg) + } + + // Define verifyFunc + let verifyFunc = null; + if (verifyFuncSaved && lastSecret === pair.sec && lastVersion === block.version) { + verifyFunc = verifyFuncSaved; } else { lastSecret = pair.sec; lastVersion = block.version; if (block.version >= 12) { - sigFunc = (msg:string) => KeyGen(pair.pub, pair.sec).signSync(msg) + verifyFunc = (msg:string, sig:string) => verify(msg, sig, pair.pub) } else { - sigFunc = (msg:string) => KeyGen(pair.pub, pair.sec).signSyncBuggy(msg) + verifyFunc = (msg:string, sig:string) => verifyBuggy(msg, sig, pair.pub) } } - let pow = "", sig = "", raw = ""; - + /***************** * GO! ****************/ - + + let pow = "", sig = "", raw = ""; let pausePeriod = 1; let testsCount = 0; let found = false; @@ -198,6 +212,12 @@ export function createPowWorker() { } if (charOK) { found = !!(pow[nbZeros].match(new RegExp('[0-' + highMark + ']'))) + if (found) { + let sigOk = verifyFunc(raw, sig); + if (!sigOk) { + found = false; + } + } } if (!found && nbZeros > 0 && j - 1 >= ProverConstants.POW_MINIMAL_TO_SHOW) { pSend({ pow: { pow: pow, block: block, nbZeros: nbZeros }});