@sd-jwt/utils 0.6.0 → 0.6.1-next.6
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.
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +16 -16
- package/dist/index.mjs +13 -13
- package/package.json +4 -4
- package/src/base64url.ts +3 -3
- package/src/disclosure.ts +10 -10
- package/src/test/base64url.spec.ts +7 -7
- package/src/test/disclosure.spec.ts +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DisclosureData, HasherAndAlg, HasherAndAlgSync } from '@sd-jwt/types';
|
|
2
2
|
|
|
3
|
-
declare const
|
|
4
|
-
declare const
|
|
5
|
-
declare const
|
|
3
|
+
declare const base64urlEncode: (src: string) => string;
|
|
4
|
+
declare const base64urlDecode: (src: string) => string;
|
|
5
|
+
declare const uint8ArrayToBase64Url: (input: Uint8Array) => string;
|
|
6
6
|
|
|
7
7
|
declare class SDJWTException extends Error {
|
|
8
8
|
details?: unknown;
|
|
@@ -32,4 +32,4 @@ declare class Disclosure<T = unknown> {
|
|
|
32
32
|
digestSync(hash: HasherAndAlgSync): string;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export {
|
|
35
|
+
export { Disclosure, SDJWTException, base64urlDecode, base64urlEncode, uint8ArrayToBase64Url };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { DisclosureData, HasherAndAlg, HasherAndAlgSync } from '@sd-jwt/types';
|
|
2
2
|
|
|
3
|
-
declare const
|
|
4
|
-
declare const
|
|
5
|
-
declare const
|
|
3
|
+
declare const base64urlEncode: (src: string) => string;
|
|
4
|
+
declare const base64urlDecode: (src: string) => string;
|
|
5
|
+
declare const uint8ArrayToBase64Url: (input: Uint8Array) => string;
|
|
6
6
|
|
|
7
7
|
declare class SDJWTException extends Error {
|
|
8
8
|
details?: unknown;
|
|
@@ -32,4 +32,4 @@ declare class Disclosure<T = unknown> {
|
|
|
32
32
|
digestSync(hash: HasherAndAlgSync): string;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export {
|
|
35
|
+
export { Disclosure, SDJWTException, base64urlDecode, base64urlEncode, uint8ArrayToBase64Url };
|
package/dist/index.js
CHANGED
|
@@ -40,19 +40,19 @@ var __async = (__this, __arguments, generator) => {
|
|
|
40
40
|
// src/index.ts
|
|
41
41
|
var src_exports = {};
|
|
42
42
|
__export(src_exports, {
|
|
43
|
-
Base64urlDecode: () => Base64urlDecode,
|
|
44
|
-
Base64urlEncode: () => Base64urlEncode,
|
|
45
43
|
Disclosure: () => Disclosure,
|
|
46
44
|
SDJWTException: () => SDJWTException,
|
|
47
|
-
|
|
45
|
+
base64urlDecode: () => base64urlDecode,
|
|
46
|
+
base64urlEncode: () => base64urlEncode,
|
|
47
|
+
uint8ArrayToBase64Url: () => uint8ArrayToBase64Url
|
|
48
48
|
});
|
|
49
49
|
module.exports = __toCommonJS(src_exports);
|
|
50
50
|
|
|
51
51
|
// src/base64url.ts
|
|
52
52
|
var import_js_base64 = require("js-base64");
|
|
53
|
-
var
|
|
54
|
-
var
|
|
55
|
-
var
|
|
53
|
+
var base64urlEncode = import_js_base64.Base64.encodeURI;
|
|
54
|
+
var base64urlDecode = import_js_base64.Base64.decode;
|
|
55
|
+
var uint8ArrayToBase64Url = (input) => import_js_base64.Base64.fromUint8Array(input, true);
|
|
56
56
|
|
|
57
57
|
// src/error.ts
|
|
58
58
|
var SDJWTException = class _SDJWTException extends Error {
|
|
@@ -92,16 +92,16 @@ var Disclosure = class _Disclosure {
|
|
|
92
92
|
return __async(this, null, function* () {
|
|
93
93
|
const { hasher, alg } = hash;
|
|
94
94
|
const digest = yield hasher(s, alg);
|
|
95
|
-
const digestStr =
|
|
96
|
-
const item = JSON.parse(
|
|
95
|
+
const digestStr = uint8ArrayToBase64Url(digest);
|
|
96
|
+
const item = JSON.parse(base64urlDecode(s));
|
|
97
97
|
return _Disclosure.fromArray(item, { digest: digestStr, encoded: s });
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
100
|
static fromEncodeSync(s, hash) {
|
|
101
101
|
const { hasher, alg } = hash;
|
|
102
102
|
const digest = hasher(s, alg);
|
|
103
|
-
const digestStr =
|
|
104
|
-
const item = JSON.parse(
|
|
103
|
+
const digestStr = uint8ArrayToBase64Url(digest);
|
|
104
|
+
const item = JSON.parse(base64urlDecode(s));
|
|
105
105
|
return _Disclosure.fromArray(item, { digest: digestStr, encoded: s });
|
|
106
106
|
}
|
|
107
107
|
static fromArray(item, _meta) {
|
|
@@ -109,7 +109,7 @@ var Disclosure = class _Disclosure {
|
|
|
109
109
|
}
|
|
110
110
|
encode() {
|
|
111
111
|
if (!this._encoded) {
|
|
112
|
-
this._encoded =
|
|
112
|
+
this._encoded = base64urlEncode(JSON.stringify(this.decode()));
|
|
113
113
|
}
|
|
114
114
|
return this._encoded;
|
|
115
115
|
}
|
|
@@ -121,7 +121,7 @@ var Disclosure = class _Disclosure {
|
|
|
121
121
|
const { hasher, alg } = hash;
|
|
122
122
|
if (!this._digest) {
|
|
123
123
|
const hash2 = yield hasher(this.encode(), alg);
|
|
124
|
-
this._digest =
|
|
124
|
+
this._digest = uint8ArrayToBase64Url(hash2);
|
|
125
125
|
}
|
|
126
126
|
return this._digest;
|
|
127
127
|
});
|
|
@@ -130,16 +130,16 @@ var Disclosure = class _Disclosure {
|
|
|
130
130
|
const { hasher, alg } = hash;
|
|
131
131
|
if (!this._digest) {
|
|
132
132
|
const hash2 = hasher(this.encode(), alg);
|
|
133
|
-
this._digest =
|
|
133
|
+
this._digest = uint8ArrayToBase64Url(hash2);
|
|
134
134
|
}
|
|
135
135
|
return this._digest;
|
|
136
136
|
}
|
|
137
137
|
};
|
|
138
138
|
// Annotate the CommonJS export names for ESM import in node:
|
|
139
139
|
0 && (module.exports = {
|
|
140
|
-
Base64urlDecode,
|
|
141
|
-
Base64urlEncode,
|
|
142
140
|
Disclosure,
|
|
143
141
|
SDJWTException,
|
|
144
|
-
|
|
142
|
+
base64urlDecode,
|
|
143
|
+
base64urlEncode,
|
|
144
|
+
uint8ArrayToBase64Url
|
|
145
145
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -21,9 +21,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
21
21
|
|
|
22
22
|
// src/base64url.ts
|
|
23
23
|
import { Base64 } from "js-base64";
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
24
|
+
var base64urlEncode = Base64.encodeURI;
|
|
25
|
+
var base64urlDecode = Base64.decode;
|
|
26
|
+
var uint8ArrayToBase64Url = (input) => Base64.fromUint8Array(input, true);
|
|
27
27
|
|
|
28
28
|
// src/error.ts
|
|
29
29
|
var SDJWTException = class _SDJWTException extends Error {
|
|
@@ -63,16 +63,16 @@ var Disclosure = class _Disclosure {
|
|
|
63
63
|
return __async(this, null, function* () {
|
|
64
64
|
const { hasher, alg } = hash;
|
|
65
65
|
const digest = yield hasher(s, alg);
|
|
66
|
-
const digestStr =
|
|
67
|
-
const item = JSON.parse(
|
|
66
|
+
const digestStr = uint8ArrayToBase64Url(digest);
|
|
67
|
+
const item = JSON.parse(base64urlDecode(s));
|
|
68
68
|
return _Disclosure.fromArray(item, { digest: digestStr, encoded: s });
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
static fromEncodeSync(s, hash) {
|
|
72
72
|
const { hasher, alg } = hash;
|
|
73
73
|
const digest = hasher(s, alg);
|
|
74
|
-
const digestStr =
|
|
75
|
-
const item = JSON.parse(
|
|
74
|
+
const digestStr = uint8ArrayToBase64Url(digest);
|
|
75
|
+
const item = JSON.parse(base64urlDecode(s));
|
|
76
76
|
return _Disclosure.fromArray(item, { digest: digestStr, encoded: s });
|
|
77
77
|
}
|
|
78
78
|
static fromArray(item, _meta) {
|
|
@@ -80,7 +80,7 @@ var Disclosure = class _Disclosure {
|
|
|
80
80
|
}
|
|
81
81
|
encode() {
|
|
82
82
|
if (!this._encoded) {
|
|
83
|
-
this._encoded =
|
|
83
|
+
this._encoded = base64urlEncode(JSON.stringify(this.decode()));
|
|
84
84
|
}
|
|
85
85
|
return this._encoded;
|
|
86
86
|
}
|
|
@@ -92,7 +92,7 @@ var Disclosure = class _Disclosure {
|
|
|
92
92
|
const { hasher, alg } = hash;
|
|
93
93
|
if (!this._digest) {
|
|
94
94
|
const hash2 = yield hasher(this.encode(), alg);
|
|
95
|
-
this._digest =
|
|
95
|
+
this._digest = uint8ArrayToBase64Url(hash2);
|
|
96
96
|
}
|
|
97
97
|
return this._digest;
|
|
98
98
|
});
|
|
@@ -101,15 +101,15 @@ var Disclosure = class _Disclosure {
|
|
|
101
101
|
const { hasher, alg } = hash;
|
|
102
102
|
if (!this._digest) {
|
|
103
103
|
const hash2 = hasher(this.encode(), alg);
|
|
104
|
-
this._digest =
|
|
104
|
+
this._digest = uint8ArrayToBase64Url(hash2);
|
|
105
105
|
}
|
|
106
106
|
return this._digest;
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
109
|
export {
|
|
110
|
-
Base64urlDecode,
|
|
111
|
-
Base64urlEncode,
|
|
112
110
|
Disclosure,
|
|
113
111
|
SDJWTException,
|
|
114
|
-
|
|
112
|
+
base64urlDecode,
|
|
113
|
+
base64urlEncode,
|
|
114
|
+
uint8ArrayToBase64Url
|
|
115
115
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sd-jwt/utils",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1-next.6+f8db275",
|
|
4
4
|
"description": "sd-jwt draft 7 implementation in typescript",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -38,10 +38,10 @@
|
|
|
38
38
|
},
|
|
39
39
|
"license": "Apache-2.0",
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@sd-jwt/crypto-nodejs": "0.6.
|
|
41
|
+
"@sd-jwt/crypto-nodejs": "0.6.1-next.6+f8db275"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@sd-jwt/types": "0.6.
|
|
44
|
+
"@sd-jwt/types": "0.6.1-next.6+f8db275",
|
|
45
45
|
"js-base64": "^3.7.6"
|
|
46
46
|
},
|
|
47
47
|
"publishConfig": {
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"esm"
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "f8db275690dab88000a039838680a3478b3b61ec"
|
|
64
64
|
}
|
package/src/base64url.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Base64 } from 'js-base64';
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const base64urlEncode = Base64.encodeURI;
|
|
4
4
|
|
|
5
|
-
export const
|
|
5
|
+
export const base64urlDecode = Base64.decode;
|
|
6
6
|
|
|
7
|
-
export const
|
|
7
|
+
export const uint8ArrayToBase64Url = (input: Uint8Array): string =>
|
|
8
8
|
Base64.fromUint8Array(input, true);
|
package/src/disclosure.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
uint8ArrayToBase64Url,
|
|
3
|
+
base64urlDecode,
|
|
4
|
+
base64urlEncode,
|
|
5
5
|
} from './base64url';
|
|
6
6
|
import { SDJWTException } from './error';
|
|
7
7
|
import type {
|
|
@@ -45,16 +45,16 @@ export class Disclosure<T = unknown> {
|
|
|
45
45
|
public static async fromEncode<T>(s: string, hash: HasherAndAlg) {
|
|
46
46
|
const { hasher, alg } = hash;
|
|
47
47
|
const digest = await hasher(s, alg);
|
|
48
|
-
const digestStr =
|
|
49
|
-
const item = JSON.parse(
|
|
48
|
+
const digestStr = uint8ArrayToBase64Url(digest);
|
|
49
|
+
const item = JSON.parse(base64urlDecode(s)) as DisclosureData<T>;
|
|
50
50
|
return Disclosure.fromArray<T>(item, { digest: digestStr, encoded: s });
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
public static fromEncodeSync<T>(s: string, hash: HasherAndAlgSync) {
|
|
54
54
|
const { hasher, alg } = hash;
|
|
55
55
|
const digest = hasher(s, alg);
|
|
56
|
-
const digestStr =
|
|
57
|
-
const item = JSON.parse(
|
|
56
|
+
const digestStr = uint8ArrayToBase64Url(digest);
|
|
57
|
+
const item = JSON.parse(base64urlDecode(s)) as DisclosureData<T>;
|
|
58
58
|
return Disclosure.fromArray<T>(item, { digest: digestStr, encoded: s });
|
|
59
59
|
}
|
|
60
60
|
|
|
@@ -69,7 +69,7 @@ export class Disclosure<T = unknown> {
|
|
|
69
69
|
if (!this._encoded) {
|
|
70
70
|
// we use JSON.stringify to encode the data
|
|
71
71
|
// It's the most reliable and universal way to encode JSON object
|
|
72
|
-
this._encoded =
|
|
72
|
+
this._encoded = base64urlEncode(JSON.stringify(this.decode()));
|
|
73
73
|
}
|
|
74
74
|
return this._encoded;
|
|
75
75
|
}
|
|
@@ -84,7 +84,7 @@ export class Disclosure<T = unknown> {
|
|
|
84
84
|
const { hasher, alg } = hash;
|
|
85
85
|
if (!this._digest) {
|
|
86
86
|
const hash = await hasher(this.encode(), alg);
|
|
87
|
-
this._digest =
|
|
87
|
+
this._digest = uint8ArrayToBase64Url(hash);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
return this._digest;
|
|
@@ -94,7 +94,7 @@ export class Disclosure<T = unknown> {
|
|
|
94
94
|
const { hasher, alg } = hash;
|
|
95
95
|
if (!this._digest) {
|
|
96
96
|
const hash = hasher(this.encode(), alg);
|
|
97
|
-
this._digest =
|
|
97
|
+
this._digest = uint8ArrayToBase64Url(hash);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
return this._digest;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { describe, expect, test } from 'vitest';
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
base64urlDecode,
|
|
4
|
+
base64urlEncode,
|
|
5
|
+
uint8ArrayToBase64Url,
|
|
6
6
|
} from '../base64url';
|
|
7
7
|
|
|
8
8
|
describe('Base64url', () => {
|
|
9
9
|
const raw = 'abcdefghijklmnopqrstuvwxyz';
|
|
10
10
|
const encoded = 'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo';
|
|
11
11
|
test('Encode', () => {
|
|
12
|
-
expect(
|
|
12
|
+
expect(base64urlEncode(raw)).toStrictEqual(encoded);
|
|
13
13
|
});
|
|
14
14
|
test('Decode', () => {
|
|
15
|
-
expect(
|
|
15
|
+
expect(base64urlDecode(encoded)).toStrictEqual(raw);
|
|
16
16
|
});
|
|
17
17
|
test('Encode and decode', () => {
|
|
18
18
|
const str = 'hello world';
|
|
19
|
-
expect(
|
|
19
|
+
expect(base64urlDecode(base64urlEncode(str))).toStrictEqual(str);
|
|
20
20
|
});
|
|
21
21
|
test('Uint8Array', () => {
|
|
22
22
|
const str = 'hello world';
|
|
23
23
|
const uint8 = new TextEncoder().encode(str);
|
|
24
|
-
expect(
|
|
24
|
+
expect(uint8ArrayToBase64Url(uint8)).toStrictEqual(base64urlEncode(str));
|
|
25
25
|
});
|
|
26
26
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { generateSalt, digest as hasher } from '@sd-jwt/crypto-nodejs';
|
|
2
2
|
import { Disclosure } from '../disclosure';
|
|
3
3
|
import { describe, expect, test } from 'vitest';
|
|
4
|
-
import {
|
|
4
|
+
import { base64urlEncode, type SDJWTException } from '../index';
|
|
5
5
|
|
|
6
6
|
const hash = { alg: 'SHA256', hasher };
|
|
7
7
|
|
|
@@ -144,7 +144,7 @@ describe('Disclosure', () => {
|
|
|
144
144
|
});
|
|
145
145
|
|
|
146
146
|
test('digest disclosure #3', async () => {
|
|
147
|
-
const encoded =
|
|
147
|
+
const encoded = base64urlEncode(TestDataDraft7.claimTests[0].contents);
|
|
148
148
|
expect(encoded).toStrictEqual(TestDataDraft7.claimTests[0].disclosure);
|
|
149
149
|
|
|
150
150
|
const disclosure = await Disclosure.fromEncode(
|