From 6d63fd1e7ee24b355c5cd223a2d751af2888495b Mon Sep 17 00:00:00 2001 From: Eric Swanson Date: Wed, 23 Mar 2022 13:04:15 -0700 Subject: [PATCH 1/4] fix: make makeNonce return unique random values --- packages/agent/src/agent/http/http.test.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/agent/src/agent/http/http.test.ts b/packages/agent/src/agent/http/http.test.ts index 7548d4dd3..a32d5de86 100644 --- a/packages/agent/src/agent/http/http.test.ts +++ b/packages/agent/src/agent/http/http.test.ts @@ -1,13 +1,14 @@ import { HttpAgent, Nonce } from '../index'; import * as cbor from '../../cbor'; import { Expiry, makeNonceTransform } from './transforms'; -import { CallRequest, Envelope, SubmitRequestType } from './types'; +import { CallRequest, Envelope, makeNonce, SubmitRequestType } from './types'; import { Principal } from '@dfinity/principal'; import { requestIdOf } from '../../request_id'; import { JSDOM } from 'jsdom'; import { AnonymousIdentity, SignIdentity } from '../..'; import { Ed25519KeyIdentity } from '../../../../identity/src/identity/ed25519'; +import { toHexString } from '../../../../identity/src/buffer'; import { AgentError } from '../../errors'; const { window } = new JSDOM(`

Hello world

`); window.fetch = global.fetch; @@ -354,3 +355,10 @@ describe('replace identity', () => { expect(mockFetch).toBeCalledTimes(1); }); }); +describe('makeNonce should create unique values', () => { + const nonces = new Set(); + for (let i = 0; i < 100; i++) { + nonces.add(toHexString(makeNonce())); + } + expect(nonces.size).toBe(100); +}); From 6d7585071f079845711f6bc2a5642e3b2a90e677 Mon Sep 17 00:00:00 2001 From: Eric Swanson Date: Wed, 23 Mar 2022 13:13:43 -0700 Subject: [PATCH 2/4] fix: makeNonce generates 128 bits of data in the nonce, not 8 view.setBigUInt(1,...) sets data starting at byte offset 1, not byte offset 9 (where the second bigint would start) --- packages/agent/src/agent/http/types.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/agent/src/agent/http/types.ts b/packages/agent/src/agent/http/types.ts index 55b2dd80b..ff8e3da92 100644 --- a/packages/agent/src/agent/http/types.ts +++ b/packages/agent/src/agent/http/types.ts @@ -107,10 +107,12 @@ export function makeNonce(): Nonce { // Encode 128 bits. const buffer = new ArrayBuffer(16); const view = new DataView(buffer); - const value = BigInt(+Date.now()) * BigInt(100000) + BigInt(Math.floor(Math.random() * 100000)); - view.setBigUint64(0, value); - // tslint:disable-next-line:no-bitwise - view.setBigUint64(1, value >> BigInt(64)); + const now = BigInt(+Date.now()); + const randHi = Math.floor(Math.random() * 0xffffffff); + const randLo = Math.floor(Math.random() * 0xffffffff); + view.setBigUint64(0, now); + view.setUint32(8, randHi); + view.setUint32(12, randLo); return buffer as Nonce; } From fec2e8e7d1eb7e2f1bcefaeff6d66b1600a52d48 Mon Sep 17 00:00:00 2001 From: Eric Swanson Date: Wed, 23 Mar 2022 13:52:01 -0700 Subject: [PATCH 3/4] update changelog --- docs/generated/changelog.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/generated/changelog.html b/docs/generated/changelog.html index c1d267001..e5f15c9cb 100644 --- a/docs/generated/changelog.html +++ b/docs/generated/changelog.html @@ -10,6 +10,13 @@

Agent-JS Changelog

+

Version 0.10.5

+
    +
  • + makeNonce now returns unique values. Previously only the first byte of the nonce was + populated. +
  • +

Version 0.10.3

  • From c3d648a2c9f02628303b6dea851b7cfcddd8b10f Mon Sep 17 00:00:00 2001 From: Eric Swanson Date: Wed, 23 Mar 2022 13:53:26 -0700 Subject: [PATCH 4/4] Fixes https://dfinity.atlassian.net/browse/SDK-396