diff options
author | Florian Dold <florian@dold.me> | 2021-04-12 19:21:16 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2021-04-12 19:21:16 +0200 |
commit | e719f7981e2b348986e03ef8a44f8a72ced5dd80 (patch) | |
tree | e702e192c6fe880988ca0525fed14a7cafb31248 /packages/taler-util | |
parent | f30f923e15adcb7242cfba565cd0c7e1e8666f8e (diff) | |
download | wallet-core-e719f7981e2b348986e03ef8a44f8a72ced5dd80.tar.xz |
implement DD18 (forgettable fields in contract terms)
Diffstat (limited to 'packages/taler-util')
-rw-r--r-- | packages/taler-util/src/helpers.ts | 14 |
1 files changed, 13 insertions, 1 deletions
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)) { |