From e719f7981e2b348986e03ef8a44f8a72ced5dd80 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 12 Apr 2021 19:21:16 +0200 Subject: implement DD18 (forgettable fields in contract terms) --- packages/taler-util/src/helpers.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'packages/taler-util/src') diff --git a/packages/taler-util/src/helpers.ts b/packages/taler-util/src/helpers.ts index 282724464..e269bd46b 100644 --- a/packages/taler-util/src/helpers.ts +++ b/packages/taler-util/src/helpers.ts @@ -56,11 +56,23 @@ export function canonicalizeBaseUrl(url: string): string { /** * Convert object to JSON with canonical ordering of keys * and whitespace omitted. + * + * See RFC 4885 (https://tools.ietf.org/html/rfc8785). */ export function canonicalJson(obj: any): string { // Check for cycles, etc. obj = JSON.parse(JSON.stringify(obj)); - if (typeof obj === "string" || typeof obj === "number" || obj === null) { + if (typeof obj === "string") { + const s = JSON.stringify(obj); + return s.replace(/[\u007F-\uFFFF]/g, function (chr) { + return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4); + }); + } + if ( + typeof obj === "number" || + typeof obj === "boolean" || + obj === null + ) { return JSON.stringify(obj); } if (Array.isArray(obj)) { -- cgit v1.2.3