From 014b2bc17663257590c2c703abe11b3ffff7d51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Lenksj=C3=B6?= <5889538+lenkan@users.noreply.github.com> Date: Thu, 9 May 2024 16:27:49 +0200 Subject: [PATCH] fix: use cesrnumber when parsing sn in rotate event (#257) * fix: use cesrnumber when parsing sn in rotate event * add unit tests --- src/keri/core/eventing.ts | 8 ++++---- test/core/eventing.test.ts | 29 ++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/keri/core/eventing.ts b/src/keri/core/eventing.ts index d03e4473..3130b159 100644 --- a/src/keri/core/eventing.ts +++ b/src/keri/core/eventing.ts @@ -67,9 +67,9 @@ export function rotate({ throw new Error(`Invalid ilk = ${ilk} for rot or drt.`); } - const sner = Number(sn); - if (sner < 1) { - throw new Error(`Invalid sn = 0x${sner.toString()} for rot or drt.`); + const sner = new CesrNumber({}, sn); + if (sner.num < 1) { + throw new Error(`Invalid sn = 0x${sner.numh} for rot or drt.`); } let _isit: number; @@ -199,7 +199,7 @@ export function rotate({ t: _ilk, d: '', i: pre, - s: sner.toString(16), + s: sner.numh, p: dig, kt: tholder.num && diff --git a/test/core/eventing.test.ts b/test/core/eventing.test.ts index b730a364..b5b697b6 100644 --- a/test/core/eventing.test.ts +++ b/test/core/eventing.test.ts @@ -2,11 +2,12 @@ import libsodium from 'libsodium-wrappers-sumo'; import { Signer } from '../../src/keri/core/signer'; import { strict as assert } from 'assert'; import { MtrDex } from '../../src/keri/core/matter'; -import { incept, messagize } from '../../src/keri/core/eventing'; +import { incept, messagize, rotate } from '../../src/keri/core/eventing'; import { Saider } from '../../src/keri/core/saider'; import { Diger } from '../../src/keri/core/diger'; import { b, d, Ilks } from '../../src/keri/core/core'; import { Siger } from '../../src/keri/core/siger'; +import { randomBytes } from 'crypto'; describe('key event function', () => { it('incept should create inception events', async () => { @@ -190,4 +191,30 @@ describe('key event function', () => { 'BhfNFh5uk-WxvhsL-AABAABB3MJGmBXxSEryNHw3YwZZLRl_6Ws4Me2WFq8PrQ6WlluSOpPqbwXuiG9RvNWZkqeW8A_0VRjokGMVRZ3m-c0I' ); }); + + it('Rotate should create rotation event with hex sequence number', async () => { + await libsodium.ready; + + const signer0 = new Signer({ transferable: true }); + const signer1 = new Signer({ transferable: true }); + const keys0 = [signer0.verfer.qb64]; + const ndigs = [new Diger({}, signer1.verfer.qb64b).qb64]; + const serder = incept({ keys: keys0, ndigs }); + + function createRotation(sn: number) { + return rotate({ + keys: keys0, + pre: serder.ked.i, + ndigs: serder.ked.n, + sn, + isith: 1, + nsith: 1, + }).ked['s']; + } + + assert.equal(createRotation(1), '1'); + assert.equal(createRotation(10), 'a'); + assert.equal(createRotation(14), 'e'); + assert.equal(createRotation(255), 'ff'); + }); });