@sd-jwt/utils 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,3 +26,4 @@ export declare class Base64url {
26
26
  */
27
27
  static decode(input: string): Uint8Array;
28
28
  }
29
+ export declare function base64ToBase64URL(base64: string): string;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Base64url = void 0;
3
+ exports.base64ToBase64URL = exports.Base64url = void 0;
4
4
  const buffer_1 = require("buffer");
5
5
  class Base64url {
6
6
  /**
@@ -9,7 +9,7 @@ class Base64url {
9
9
  *
10
10
  */
11
11
  static encode(input) {
12
- return buffer_1.Buffer.from(input).toString('base64url');
12
+ return base64ToBase64URL(buffer_1.Buffer.from(input).toString('base64'));
13
13
  }
14
14
  /**
15
15
  *
@@ -17,7 +17,7 @@ class Base64url {
17
17
  *
18
18
  */
19
19
  static encodeFromJson(input) {
20
- return buffer_1.Buffer.from(JSON.stringify(input)).toString('base64url');
20
+ return base64ToBase64URL(buffer_1.Buffer.from(JSON.stringify(input)).toString('base64'));
21
21
  }
22
22
  /**
23
23
  *
@@ -25,7 +25,7 @@ class Base64url {
25
25
  *
26
26
  */
27
27
  static decodeToJson(input) {
28
- return JSON.parse(buffer_1.Buffer.from(input, 'base64url').toString());
28
+ return JSON.parse(buffer_1.Buffer.from(input, 'base64').toString());
29
29
  }
30
30
  /**
31
31
  *
@@ -33,8 +33,12 @@ class Base64url {
33
33
  *
34
34
  */
35
35
  static decode(input) {
36
- return Uint8Array.from(buffer_1.Buffer.from(input, 'base64url'));
36
+ return Uint8Array.from(buffer_1.Buffer.from(input, 'base64'));
37
37
  }
38
38
  }
39
39
  exports.Base64url = Base64url;
40
+ function base64ToBase64URL(base64) {
41
+ return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
42
+ }
43
+ exports.base64ToBase64URL = base64ToBase64URL;
40
44
  //# sourceMappingURL=base64url.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base64url.js","sourceRoot":"","sources":["../src/base64url.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAE/B,MAAa,SAAS;IAClB;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,KAAmC;QACpD,OAAO,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CACxB,KAA+C;QAE/C,OAAO,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IACnE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,YAAY,CAKxB,KAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAM,CAAA;IACtE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,KAAa;QAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;IAC3D,CAAC;CACJ;AA3CD,8BA2CC"}
1
+ {"version":3,"file":"base64url.js","sourceRoot":"","sources":["../src/base64url.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAE/B,MAAa,SAAS;IAClB;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,KAAmC;QACpD,OAAO,iBAAiB,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;IACnE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CACxB,KAA+C;QAE/C,OAAO,iBAAiB,CACpB,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACxD,CAAA;IACL,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,YAAY,CAKxB,KAAa;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAM,CAAA;IACnE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,MAAM,CAAC,KAAa;QAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IACxD,CAAC;CACJ;AA7CD,8BA6CC;AAED,SAAgB,iBAAiB,CAAC,MAAc;IAC5C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AAC3E,CAAC;AAFD,8CAEC"}
package/build/index.d.ts CHANGED
@@ -2,6 +2,5 @@ export * from './base64url';
2
2
  export * from './assert';
3
3
  export * from './getValueByKeyAnyLevel';
4
4
  export * from './isPromise';
5
- export * from './hasherAlgorithm';
6
5
  export * from './object';
7
6
  export * from './simpleDeepEqual';
package/build/index.js CHANGED
@@ -18,7 +18,6 @@ __exportStar(require("./base64url"), exports);
18
18
  __exportStar(require("./assert"), exports);
19
19
  __exportStar(require("./getValueByKeyAnyLevel"), exports);
20
20
  __exportStar(require("./isPromise"), exports);
21
- __exportStar(require("./hasherAlgorithm"), exports);
22
21
  __exportStar(require("./object"), exports);
23
22
  __exportStar(require("./simpleDeepEqual"), exports);
24
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,2CAAwB;AACxB,0DAAuC;AACvC,8CAA2B;AAC3B,oDAAiC;AACjC,2CAAwB;AACxB,oDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA2B;AAC3B,2CAAwB;AACxB,0DAAuC;AACvC,8CAA2B;AAC3B,2CAAwB;AACxB,oDAAiC"}
@@ -0,0 +1,2 @@
1
+ import { DisclosureWithDigest } from '@sd-jwt/types';
2
+ export declare const swapClaims: (payload: Record<string, unknown>, disclosures: Array<DisclosureWithDigest>, newPayload?: Record<string, unknown>) => Record<string, unknown>;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.swapClaims = void 0;
4
+ const shouldInsertDisclosure = (key, value, disclosures) => {
5
+ if (key !== '_sd')
6
+ return [];
7
+ if (!Array.isArray(value))
8
+ return [];
9
+ const filteredDisclosures = [];
10
+ for (const d of disclosures) {
11
+ if (value.includes(d.digest)) {
12
+ filteredDisclosures.push(d);
13
+ }
14
+ }
15
+ return filteredDisclosures;
16
+ };
17
+ const shouldIncludeCleartextClaim = (key, value) => key !== '_sd' && key !== '_sd_alg' && typeof value !== 'object';
18
+ const swapClaims = (payload, disclosures, newPayload = {}) => {
19
+ const entries = Object.entries(payload);
20
+ // Loop over de payload
21
+ for (let i = 0; i < entries.length; i++) {
22
+ const [key, value] = entries[i];
23
+ // See whether we have an `_sd` key with an array of disclosures.
24
+ const foundDisclosures = shouldInsertDisclosure(key, value, disclosures);
25
+ // Add the disclosed items to the pretty payload
26
+ foundDisclosures.forEach((d) => {
27
+ newPayload[d.key] = d.value;
28
+ });
29
+ // Skip the rest as `_sd` is a special case
30
+ if (key === '_sd') {
31
+ continue;
32
+ }
33
+ // Include all the primitive claims into the new payload
34
+ if (shouldIncludeCleartextClaim(key, value)) {
35
+ newPayload[key] = value;
36
+ continue;
37
+ }
38
+ if (typeof value === 'object' && Array.isArray(value)) {
39
+ newPayload[key] = swapClaimsInsideArray(value, disclosures);
40
+ continue;
41
+ }
42
+ if (typeof value === 'object' &&
43
+ value !== null &&
44
+ !Array.isArray(value)) {
45
+ newPayload[key] = (0, exports.swapClaims)(value, disclosures);
46
+ }
47
+ }
48
+ return newPayload;
49
+ };
50
+ exports.swapClaims = swapClaims;
51
+ const swapClaimsInsideArray = (array, disclosures) => {
52
+ const processedArray = [];
53
+ for (const el of array) {
54
+ if (typeof el === 'object' && el !== null && '...' in el) {
55
+ const hash = el['...'];
56
+ let disclosureFound = false;
57
+ let disclosureValue;
58
+ disclosureLoop: for (const d of disclosures) {
59
+ if (d.digest === hash && d.key === undefined) {
60
+ disclosureValue = d.value;
61
+ disclosureFound = true;
62
+ break disclosureLoop;
63
+ }
64
+ }
65
+ processedArray.push(disclosureFound ? disclosureValue : el);
66
+ }
67
+ else {
68
+ processedArray.push(el);
69
+ }
70
+ }
71
+ return processedArray;
72
+ };
73
+ //# sourceMappingURL=swapClaims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swapClaims.js","sourceRoot":"","sources":["../src/swapClaims.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sd-jwt/utils",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Utility functions for sd-jwt Draft 06 and sd-jwt-vc Draft 01",
5
5
  "license": "(MIT OR Apache-2.0)",
6
6
  "author": "Berend Sliedrecht <sliedrecht@berend.io>",
@@ -37,7 +37,7 @@
37
37
  "test": "node --require ts-node/register --test ./tests/*.test.ts"
38
38
  },
39
39
  "dependencies": {
40
- "@sd-jwt/types": "0.2.0",
40
+ "@sd-jwt/types": "0.2.1",
41
41
  "buffer": "*"
42
42
  },
43
43
  "devDependencies": {
@@ -45,5 +45,5 @@
45
45
  "ts-node": "*",
46
46
  "typescript": "*"
47
47
  },
48
- "gitHead": "8fb68d5a23b2bf157949346a6603dc40b1594195"
48
+ "gitHead": "a1fb5fad0b938081e033233bae5569ae3b9fe8cb"
49
49
  }