summaryrefslogtreecommitdiff
path: root/packages/taler-util
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2021-04-12 19:21:16 +0200
committerFlorian Dold <florian@dold.me>2021-04-12 19:21:16 +0200
commite719f7981e2b348986e03ef8a44f8a72ced5dd80 (patch)
treee702e192c6fe880988ca0525fed14a7cafb31248 /packages/taler-util
parentf30f923e15adcb7242cfba565cd0c7e1e8666f8e (diff)
downloadwallet-core-e719f7981e2b348986e03ef8a44f8a72ced5dd80.tar.gz
wallet-core-e719f7981e2b348986e03ef8a44f8a72ced5dd80.tar.bz2
wallet-core-e719f7981e2b348986e03ef8a44f8a72ced5dd80.zip
implement DD18 (forgettable fields in contract terms)
Diffstat (limited to 'packages/taler-util')
-rw-r--r--packages/taler-util/src/helpers.ts14
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)) {