From 5480bfc55989620ff248540921563679bd204635 Mon Sep 17 00:00:00 2001 From: Yannick Huard Date: Wed, 19 May 2021 10:51:44 +0200 Subject: [PATCH] fix: don't run JSON.stringify on canonicalized data (#172) fixes #171 --- src/JWT.ts | 2 +- src/__tests__/JWT.test.ts | 6 ++++-- src/__tests__/__snapshots__/JWT.test.ts.snap | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/JWT.ts b/src/JWT.ts index b79f08bb..3133262e 100644 --- a/src/JWT.ts +++ b/src/JWT.ts @@ -130,7 +130,7 @@ const DID_JSON = 'application/did+json' function encodeSection(data: any, shouldCanonicalize: boolean = false): string { if (shouldCanonicalize) { - return encodeBase64url(JSON.stringify(canonicalizeData(data))) + return encodeBase64url(canonicalizeData(data)) } else { return encodeBase64url(JSON.stringify(data)) } diff --git a/src/__tests__/JWT.test.ts b/src/__tests__/JWT.test.ts index 77621e6c..4e0735bb 100644 --- a/src/__tests__/JWT.test.ts +++ b/src/__tests__/JWT.test.ts @@ -551,11 +551,13 @@ describe('JWS', () => { }) it('createJWS can canonicalize a JSON payload', async () => { - expect.assertions(2) + expect.assertions(3) const payload = { z: 'z', a: 'a' } const jws = await createJWS(payload, signer, {}, { canonicalize: true }) expect(jws).toMatchSnapshot() - expect(JSON.parse(decodeBase64url(jws.split('.')[1]))).toEqual(JSON.stringify({ a: 'a', z: 'z' })) + const parsedPayload = JSON.parse(decodeBase64url(jws.split('.')[1])) + expect(parsedPayload).toEqual(payload) + expect(JSON.stringify(parsedPayload)).toEqual(JSON.stringify({ a: 'a', z: 'z' })) }) it('createJWS works with base64url payload', async () => { diff --git a/src/__tests__/__snapshots__/JWT.test.ts.snap b/src/__tests__/__snapshots__/JWT.test.ts.snap index c2ed0cb0..5b6699b2 100644 --- a/src/__tests__/__snapshots__/JWT.test.ts.snap +++ b/src/__tests__/__snapshots__/JWT.test.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`JWS createJWS can canonicalize a JSON payload 1`] = `"IntcImFsZ1wiOlwiRVMyNTZLXCJ9Ig.IntcImFcIjpcImFcIixcInpcIjpcInpcIn0i.aKyOmGo5Dx2VsvDZAAHMxNtgqBeI0-qij4OB2AsISFdGsnNDJNEptZkQjY497mzX1LdMPS84pzykqalPtMwqMQ"`; +exports[`JWS createJWS can canonicalize a JSON payload 1`] = `"eyJhbGciOiJFUzI1NksifQ.eyJhIjoiYSIsInoiOiJ6In0.FiH0l1yEU2PmMQnD17WhsqwaV9oyFsOkm-U_natKFqeo4OTA7OYheYmlRy1OpNYbtYhDyZj0w1NfCpgsgDMGjw"`; exports[`JWS createJWS works with JSON payload 1`] = `"eyJhbGciOiJFUzI1NksifQ.eyJzb21lIjoiZGF0YSJ9.dblNz-7BVLknOFIBPmt5VTG0MDls_Q69WI8OfQuqNdUp4y50-b8Ubn0xujm1ijfmfqRunpks5TyWqgMsQkR_GQ"`;