diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-09-20 02:56:13 +0200 |
commit | bbff7403fbf46f9ad92240ac213df8d30ef31b64 (patch) | |
tree | c58400ec5124da1c7d56b01aea83309f80a56c3b /src/crypto | |
parent | 003fb34971cf63466184351b4db5f7c67df4f444 (diff) |
update packages
Diffstat (limited to 'src/crypto')
-rw-r--r-- | src/crypto/cryptoApi.ts | 7 | ||||
-rw-r--r-- | src/crypto/cryptoWorker.ts | 83 | ||||
-rw-r--r-- | src/crypto/emscInterface.ts | 4 |
3 files changed, 91 insertions, 3 deletions
diff --git a/src/crypto/cryptoApi.ts b/src/crypto/cryptoApi.ts index c1f3f4245..03c2a675b 100644 --- a/src/crypto/cryptoApi.ts +++ b/src/crypto/cryptoApi.ts @@ -41,6 +41,7 @@ import { } from "../talerTypes"; import { + BenchmarkResult, CoinWithDenom, PayCoinInfo, } from "../walletTypes"; @@ -323,4 +324,10 @@ export class CryptoApi { newCoinDenoms, meltFee); } + + benchmark(repetitions: number): Promise<BenchmarkResult> { + return this.doRpc<BenchmarkResult>("benchmark", + 1, + repetitions); + } } diff --git a/src/crypto/cryptoWorker.ts b/src/crypto/cryptoWorker.ts index 88e30e55b..7cec5f284 100644 --- a/src/crypto/cryptoWorker.ts +++ b/src/crypto/cryptoWorker.ts @@ -25,6 +25,8 @@ import * as Amounts from "../amounts"; import { AmountJson } from "../amounts"; +import * as timer from "../timer"; + import { CoinRecord, CoinStatus, @@ -44,6 +46,7 @@ import { } from "../talerTypes"; import { + BenchmarkResult, CoinWithDenom, PayCoinInfo, } from "../walletTypes"; @@ -437,7 +440,7 @@ namespace RpcFunctions { const confirmSig: string = native.eddsaSign(confirmData.toPurpose(), - native.EddsaPrivateKey.fromCrock( + native.EddsaPrivateKey.fromCrock( meltCoin.coinPriv)).toCrock(); let valueOutput = Amounts.getZero(newCoinDenoms[0].value.currency); @@ -478,6 +481,84 @@ namespace RpcFunctions { export function hashDenomPub(denomPub: string): string { return native.RsaPublicKey.fromCrock(denomPub).encode().hash().toCrock(); } + + export function benchmark(repetitions: number): BenchmarkResult { + let time_hash = 0; + for (let i = 0; i < repetitions; i++) { + const start = timer.performanceNow(); + hashString("hello world"); + time_hash += timer.performanceNow() - start; + } + + let time_hash_big = 0; + const ba = new native.ByteArray(4096); + for (let i = 0; i < repetitions; i++) { + ba.randomize(native.RandomQuality.WEAK); + const start = timer.performanceNow(); + ba.hash(); + time_hash_big += timer.performanceNow() - start; + } + + let time_eddsa_create = 0; + for (let i = 0; i < repetitions; i++) { + const start = timer.performanceNow(); + const priv: native.EddsaPrivateKey = native.EddsaPrivateKey.create(); + time_eddsa_create += timer.performanceNow() - start; + priv.destroy(); + } + + let time_eddsa_sign = 0; + const eddsaPriv: native.EddsaPrivateKey = native.EddsaPrivateKey.create(); + const eddsaPub: native.EddsaPublicKey = eddsaPriv.getPublicKey(); + const h: native.HashCode = new native.HashCode(); + h.alloc(); + h.random(native.RandomQuality.WEAK); + + const ps = new native.PaymentSignaturePS({ + contract_hash: h, + }); + + const p = ps.toPurpose(); + + for (let i = 0; i < repetitions; i++) { + const start = timer.performanceNow(); + native.eddsaSign(p, eddsaPriv); + time_eddsa_sign += timer.performanceNow() - start; + } + + const eddsaSig = native.eddsaSign(p, eddsaPriv); + + let time_ecdsa_create = 0; + for (let i = 0; i < repetitions; i++) { + const start = timer.performanceNow(); + const priv: native.EcdsaPrivateKey = native.EcdsaPrivateKey.create(); + time_ecdsa_create += timer.performanceNow() - start; + priv.destroy(); + } + + + let time_eddsa_verify = 0; + for (let i = 0; i < repetitions; i++) { + const start = timer.performanceNow(); + native.eddsaVerify(native.SignaturePurpose.MERCHANT_PAYMENT_OK, + p, + eddsaSig, + eddsaPub); + time_eddsa_verify += timer.performanceNow() - start; + } + + return { + repetitions, + time: { + hash_small: time_hash, + hash_big: time_hash_big, + eddsa_create: time_eddsa_create, + eddsa_sign: time_eddsa_sign, + eddsa_verify: time_eddsa_verify, + ecdsa_create: time_ecdsa_create, + } + }; + } } diff --git a/src/crypto/emscInterface.ts b/src/crypto/emscInterface.ts index ce52c88bd..0662f4a71 100644 --- a/src/crypto/emscInterface.ts +++ b/src/crypto/emscInterface.ts @@ -189,7 +189,7 @@ export class HashContext implements ArenaObject { /** - * Arena object that points to an allocaed block of memory. + * Arena object that points to an allocated block of memory. */ abstract class MallocArenaObject implements ArenaObject { protected _nativePtr: number | undefined = undefined; @@ -303,7 +303,7 @@ class SyncArena extends SimpleArena { } } -const arenaStack: Arena[] = []; +export const arenaStack: Arena[] = []; arenaStack.push(new SyncArena()); |