@atproto/jwk 0.5.0 → 0.7.0-next.0
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/CHANGELOG.md +30 -0
- package/LICENSE.txt +1 -1
- package/dist/alg.d.ts +2 -2
- package/dist/alg.d.ts.map +1 -1
- package/dist/alg.js +19 -16
- package/dist/alg.js.map +1 -1
- package/dist/errors.js +15 -36
- package/dist/errors.js.map +1 -1
- package/dist/index.js +10 -28
- package/dist/index.js.map +1 -1
- package/dist/jwk.d.ts +3725 -1143
- package/dist/jwk.d.ts.map +1 -1
- package/dist/jwk.js +178 -96
- package/dist/jwk.js.map +1 -1
- package/dist/jwks.d.ts +212 -1523
- package/dist/jwks.d.ts.map +1 -1
- package/dist/jwks.js +25 -11
- package/dist/jwks.js.map +1 -1
- package/dist/jwt-decode.js +8 -11
- package/dist/jwt-decode.js.map +1 -1
- package/dist/jwt-verify.js +1 -2
- package/dist/jwt-verify.js.map +1 -1
- package/dist/jwt.d.ts +3937 -1186
- package/dist/jwt.d.ts.map +1 -1
- package/dist/jwt.js +97 -102
- package/dist/jwt.js.map +1 -1
- package/dist/key.d.ts +22 -9
- package/dist/key.d.ts.map +1 -1
- package/dist/key.js +159 -88
- package/dist/key.js.map +1 -1
- package/dist/keyset.d.ts +382 -15
- package/dist/keyset.d.ts.map +1 -1
- package/dist/keyset.js +153 -183
- package/dist/keyset.js.map +1 -1
- package/dist/util.d.ts +1 -6
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +21 -26
- package/dist/util.js.map +1 -1
- package/package.json +8 -7
- package/src/alg.ts +22 -10
- package/src/jwk.ts +163 -51
- package/src/jwks.ts +23 -6
- package/src/key.ts +137 -27
- package/src/keyset.ts +60 -60
- package/src/util.ts +8 -19
- package/tsconfig.build.tsbuildinfo +1 -1
package/dist/jwk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwk.d.ts","sourceRoot":"","sources":["../src/jwk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"jwk.d.ts","sourceRoot":"","sources":["../src/jwk.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAY,CAAA;AAErC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA0BJ,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;QAyB/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAzBM,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;SAApB,WAAW,CAAC,OAAO,CAAC;;QAyB/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAvCX,CAAA;AAEJ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAA;AAErD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsBV,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OANpB,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAZnC,CAAA;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE1D,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EACrC,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,CAAC,GAAG;IAAE,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,CAE1C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EACjD,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,CAAC,GAAG;IAAE,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,CAExC;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,CAAC,GAAG;IAAE,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,CAExC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC;OAJlC,WAAW,CAAC,OAAO,CAAC;;OANpB,WAAW,CAAC,OAAO,CAAC;GAYtC;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,GAAG,EAAE,CAAC,GACL,GAAG,IAAI,OAAO,CACf,OAAO,CAAC,CAAC,EAAE;IAAE,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,EACvC;IAAE,CAAC,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,CAC7B,GAAG;IAAE,CAAC,CAAC,EAAE,KAAK,CAAA;CAAE,CAEhB"}
|
package/dist/jwk.js
CHANGED
|
@@ -1,119 +1,201 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { isLastOccurrence } from './util.js';
|
|
3
|
+
export const PUBLIC_KEY_USAGE = ['verify', 'encrypt', 'wrapKey'];
|
|
4
|
+
export const publicKeyUsageSchema = z.enum(PUBLIC_KEY_USAGE);
|
|
5
|
+
export function isPublicKeyUsage(usage) {
|
|
6
|
+
return PUBLIC_KEY_USAGE.includes(usage);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Determines if the given key usage is consistent for "sig" (signature) public
|
|
10
|
+
* key use.
|
|
11
|
+
*/
|
|
12
|
+
export function isSigKeyUsage(v) {
|
|
13
|
+
return v === 'verify';
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Determines if the given key usage is consistent for "enc" (encryption) public
|
|
17
|
+
* key use.
|
|
18
|
+
*
|
|
19
|
+
* > When a key is used to wrap another key and a public key use
|
|
20
|
+
* > designation for the first key is desired, the "enc" (encryption)
|
|
21
|
+
* > key use value is used, since key wrapping is a kind of encryption.
|
|
22
|
+
* > The "enc" value is also to be used for public keys used for key
|
|
23
|
+
* > agreement operations.
|
|
24
|
+
* @see {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4.2}
|
|
25
|
+
*/
|
|
26
|
+
export function isEncKeyUsage(v) {
|
|
27
|
+
return v === 'encrypt' || v === 'wrapKey';
|
|
28
|
+
}
|
|
29
|
+
export const PRIVATE_KEY_USAGE = [
|
|
6
30
|
'sign',
|
|
7
|
-
'verify',
|
|
8
|
-
'encrypt',
|
|
9
31
|
'decrypt',
|
|
10
|
-
'wrapKey',
|
|
11
32
|
'unwrapKey',
|
|
12
33
|
'deriveKey',
|
|
13
34
|
'deriveBits',
|
|
14
|
-
]
|
|
35
|
+
];
|
|
36
|
+
export const privateKeyUsageSchema = z.enum(PRIVATE_KEY_USAGE);
|
|
37
|
+
export function isPrivateKeyUsage(usage) {
|
|
38
|
+
return PRIVATE_KEY_USAGE.includes(usage);
|
|
39
|
+
}
|
|
40
|
+
export const KEY_USAGE = [...PRIVATE_KEY_USAGE, ...PUBLIC_KEY_USAGE];
|
|
41
|
+
export const keyUsageSchema = z.enum(KEY_USAGE);
|
|
15
42
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* consistent. Applications should specify which of these members they
|
|
19
|
-
* use, if either is to be used by the application.
|
|
20
|
-
*
|
|
21
|
-
* @todo Actually check that "use" and "key_ops" are consistent when both are present.
|
|
22
|
-
* @see {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4.3}
|
|
43
|
+
* @see {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4 JSON Web Key (JWK) Format}
|
|
44
|
+
* @see {@link https://www.iana.org/assignments/jose/jose.xhtml#web-key-parameters IANA "JSON Web Key Parameters" registry}
|
|
23
45
|
*/
|
|
24
|
-
|
|
25
|
-
kty:
|
|
26
|
-
alg:
|
|
27
|
-
kid:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
46
|
+
const jwkBaseSchema = z.object({
|
|
47
|
+
kty: z.string().min(1),
|
|
48
|
+
alg: z.string().min(1).optional(),
|
|
49
|
+
kid: z.string().min(1).optional(),
|
|
50
|
+
use: z.enum(['sig', 'enc']).optional(),
|
|
51
|
+
key_ops: z
|
|
52
|
+
.array(keyUsageSchema)
|
|
53
|
+
.min(1, { message: 'At least one key usage must be specified' })
|
|
54
|
+
// https://datatracker.ietf.org/doc/html/rfc7517#section-4.3
|
|
55
|
+
// > Duplicate key operation values MUST NOT be present in the array.
|
|
56
|
+
.refine((ops) => ops.every(isLastOccurrence), {
|
|
57
|
+
message: 'key_ops must not contain duplicates',
|
|
58
|
+
})
|
|
59
|
+
.optional(),
|
|
60
|
+
x5c: z.array(z.string()).optional(), // X.509 Certificate Chain
|
|
61
|
+
x5t: z.string().min(1).optional(), // X.509 Certificate SHA-1 Thumbprint
|
|
62
|
+
'x5t#S256': z.string().min(1).optional(), // X.509 Certificate SHA-256 Thumbprint
|
|
63
|
+
x5u: z.string().url().optional(), // X.509 URL
|
|
64
|
+
// https://www.w3.org/TR/webcrypto/
|
|
65
|
+
ext: z.boolean().optional(), // Extractable
|
|
66
|
+
// Federation Historical Keys Response
|
|
67
|
+
// https://openid.net/specs/openid-federation-1_0.html#name-federation-historical-keys-res
|
|
68
|
+
iat: z.number().int().optional(), // Issued At (timestamp)
|
|
69
|
+
exp: z.number().int().optional(), // Expiration Time (timestamp)
|
|
70
|
+
nbf: z.number().int().optional(), // Not Before (timestamp)
|
|
71
|
+
revoked: z // properties of the revocation
|
|
72
|
+
.object({
|
|
73
|
+
revoked_at: z.number().int(),
|
|
74
|
+
reason: z.string().optional(),
|
|
75
|
+
})
|
|
76
|
+
.optional(),
|
|
35
77
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
exports.jwkRsaKeySchema = exports.jwkBaseSchema.extend({
|
|
40
|
-
kty: zod_1.z.literal('RSA'),
|
|
41
|
-
alg: zod_1.z
|
|
78
|
+
const jwkRsaKeySchema = jwkBaseSchema.extend({
|
|
79
|
+
kty: z.literal('RSA'),
|
|
80
|
+
alg: z
|
|
42
81
|
.enum(['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'])
|
|
43
82
|
.optional(),
|
|
44
|
-
n:
|
|
45
|
-
e:
|
|
46
|
-
d:
|
|
47
|
-
p:
|
|
48
|
-
q:
|
|
49
|
-
dp:
|
|
50
|
-
dq:
|
|
51
|
-
qi:
|
|
52
|
-
oth:
|
|
53
|
-
.array(
|
|
54
|
-
r:
|
|
55
|
-
d:
|
|
56
|
-
t:
|
|
83
|
+
n: z.string().min(1), // Modulus
|
|
84
|
+
e: z.string().min(1), // Exponent
|
|
85
|
+
d: z.string().min(1).optional(), // Private Exponent
|
|
86
|
+
p: z.string().min(1).optional(), // First Prime Factor
|
|
87
|
+
q: z.string().min(1).optional(), // Second Prime Factor
|
|
88
|
+
dp: z.string().min(1).optional(), // First Factor CRT Exponent
|
|
89
|
+
dq: z.string().min(1).optional(), // Second Factor CRT Exponent
|
|
90
|
+
qi: z.string().min(1).optional(), // First CRT Coefficient
|
|
91
|
+
oth: z
|
|
92
|
+
.array(z.object({
|
|
93
|
+
r: z.string().optional(),
|
|
94
|
+
d: z.string().optional(),
|
|
95
|
+
t: z.string().optional(),
|
|
57
96
|
}))
|
|
58
|
-
.
|
|
97
|
+
.min(1)
|
|
59
98
|
.optional(), // Other Primes Info
|
|
60
99
|
});
|
|
61
|
-
|
|
62
|
-
kty:
|
|
63
|
-
alg:
|
|
64
|
-
crv:
|
|
65
|
-
x:
|
|
66
|
-
y:
|
|
67
|
-
d:
|
|
68
|
-
});
|
|
69
|
-
exports.jwkEcSecp256k1KeySchema = exports.jwkBaseSchema.extend({
|
|
70
|
-
kty: zod_1.z.literal('EC'),
|
|
71
|
-
alg: zod_1.z.enum(['ES256K']).optional(),
|
|
72
|
-
crv: zod_1.z.enum(['secp256k1']),
|
|
73
|
-
x: zod_1.z.string().min(1),
|
|
74
|
-
y: zod_1.z.string().min(1),
|
|
75
|
-
d: zod_1.z.string().min(1).optional(), // ECC Private Key
|
|
100
|
+
const jwkEcKeySchema = jwkBaseSchema.extend({
|
|
101
|
+
kty: z.literal('EC'),
|
|
102
|
+
alg: z.enum(['ES256', 'ES384', 'ES512']).optional(),
|
|
103
|
+
crv: z.enum(['P-256', 'P-384', 'P-521']),
|
|
104
|
+
x: z.string().min(1),
|
|
105
|
+
y: z.string().min(1),
|
|
106
|
+
d: z.string().min(1).optional(), // ECC Private Key
|
|
76
107
|
});
|
|
77
|
-
|
|
78
|
-
kty:
|
|
79
|
-
alg:
|
|
80
|
-
crv:
|
|
81
|
-
x:
|
|
82
|
-
|
|
108
|
+
const jwkEcSecp256k1KeySchema = jwkBaseSchema.extend({
|
|
109
|
+
kty: z.literal('EC'),
|
|
110
|
+
alg: z.enum(['ES256K']).optional(),
|
|
111
|
+
crv: z.enum(['secp256k1']),
|
|
112
|
+
x: z.string().min(1),
|
|
113
|
+
y: z.string().min(1),
|
|
114
|
+
d: z.string().min(1).optional(), // ECC Private Key
|
|
83
115
|
});
|
|
84
|
-
|
|
85
|
-
kty:
|
|
86
|
-
alg:
|
|
87
|
-
|
|
116
|
+
const jwkOkpKeySchema = jwkBaseSchema.extend({
|
|
117
|
+
kty: z.literal('OKP'),
|
|
118
|
+
alg: z.enum(['EdDSA']).optional(),
|
|
119
|
+
crv: z.enum(['Ed25519', 'Ed448']),
|
|
120
|
+
x: z.string().min(1),
|
|
121
|
+
d: z.string().min(1).optional(), // ECC Private Key
|
|
88
122
|
});
|
|
89
|
-
|
|
90
|
-
kty:
|
|
91
|
-
|
|
92
|
-
|
|
123
|
+
const jwkSymKeySchema = jwkBaseSchema.extend({
|
|
124
|
+
kty: z.literal('oct'), // Octet Sequence (used to represent symmetric keys)
|
|
125
|
+
alg: z.enum(['HS256', 'HS384', 'HS512']).optional(),
|
|
126
|
+
k: z.string(), // Key Value (base64url encoded)
|
|
93
127
|
});
|
|
94
|
-
|
|
128
|
+
/**
|
|
129
|
+
* Zod parser for known JWK types
|
|
130
|
+
*/
|
|
131
|
+
export const jwkSchema = z
|
|
95
132
|
.union([
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
exports.jwkSymKeySchema,
|
|
133
|
+
jwkRsaKeySchema,
|
|
134
|
+
jwkEcKeySchema,
|
|
135
|
+
jwkEcSecp256k1KeySchema,
|
|
136
|
+
jwkOkpKeySchema,
|
|
137
|
+
jwkSymKeySchema,
|
|
102
138
|
])
|
|
103
|
-
|
|
139
|
+
// @TODO These rules should be applied to jwkBaseSchema, but Zod 3 doesn't
|
|
140
|
+
// support extending refined schemas. Move these to the base schema when we
|
|
141
|
+
// upgrade to Zod 4.
|
|
142
|
+
.refine(
|
|
143
|
+
// https://datatracker.ietf.org/doc/html/rfc7517#section-4.2
|
|
144
|
+
// > The "use" (public key use) parameter identifies the intended use of the
|
|
145
|
+
// > public key
|
|
146
|
+
(k) => k.use == null || isPublicJwk(k), {
|
|
147
|
+
message: '"use" can only be used with public keys',
|
|
148
|
+
path: ['use'],
|
|
149
|
+
})
|
|
150
|
+
.refine((k) => !k.key_ops?.some(isPrivateKeyUsage) || isPrivateJwk(k), {
|
|
151
|
+
message: 'private key usage not allowed for public keys',
|
|
152
|
+
path: ['key_ops'],
|
|
153
|
+
})
|
|
154
|
+
.refine(
|
|
104
155
|
// https://datatracker.ietf.org/doc/html/rfc7517#section-4.3
|
|
105
|
-
// > The "use"
|
|
106
|
-
// >
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
k.key_ops
|
|
110
|
-
|
|
156
|
+
// > The "use" and "key_ops" JWK members SHOULD NOT be used together;
|
|
157
|
+
// > however, if both are used, the information they convey MUST be
|
|
158
|
+
// > consistent.
|
|
159
|
+
(k) => k.use == null ||
|
|
160
|
+
k.key_ops == null ||
|
|
161
|
+
(k.use === 'sig' && k.key_ops.every(isSigKeyUsage)) ||
|
|
162
|
+
(k.use === 'enc' && k.key_ops.every(isEncKeyUsage)), {
|
|
163
|
+
message: '"key_ops" must be consistent with "use"',
|
|
164
|
+
path: ['key_ops'],
|
|
165
|
+
});
|
|
166
|
+
/** @deprecated use {@link jwkSchema} instead */
|
|
167
|
+
export const jwkValidator = jwkSchema;
|
|
168
|
+
export const jwkPubSchema = jwkSchema
|
|
169
|
+
.refine(hasKid, {
|
|
170
|
+
message: '"kid" is required',
|
|
171
|
+
path: ['kid'],
|
|
172
|
+
})
|
|
173
|
+
// @NOTE for legacy reasons, we don't impose the presence of either "use" or "key_ops"
|
|
174
|
+
.refine(isPublicJwk, {
|
|
175
|
+
message: 'private key not allowed',
|
|
176
|
+
})
|
|
177
|
+
.refine((k) => !k.key_ops || k.key_ops.every(isPublicKeyUsage), {
|
|
178
|
+
message: '"key_ops" must not contain private key usage for public keys',
|
|
111
179
|
path: ['key_ops'],
|
|
112
180
|
});
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
181
|
+
export const jwkPrivateSchema = jwkSchema
|
|
182
|
+
// @NOTE we don't impose the presence of "kid"
|
|
183
|
+
.refine(isPrivateJwk, {
|
|
184
|
+
message: 'private key required',
|
|
185
|
+
});
|
|
186
|
+
export function hasKid(jwk) {
|
|
187
|
+
return 'kid' in jwk && jwk.kid != null;
|
|
188
|
+
}
|
|
189
|
+
export function hasSharedSecretJwk(jwk) {
|
|
190
|
+
return 'k' in jwk && jwk.k != null;
|
|
191
|
+
}
|
|
192
|
+
export function hasPrivateSecretJwk(jwk) {
|
|
193
|
+
return 'd' in jwk && jwk.d != null;
|
|
194
|
+
}
|
|
195
|
+
export function isPrivateJwk(jwk) {
|
|
196
|
+
return hasPrivateSecretJwk(jwk) || hasSharedSecretJwk(jwk);
|
|
197
|
+
}
|
|
198
|
+
export function isPublicJwk(jwk) {
|
|
199
|
+
return !hasPrivateSecretJwk(jwk) && !hasSharedSecretJwk(jwk);
|
|
200
|
+
}
|
|
119
201
|
//# sourceMappingURL=jwk.js.map
|
package/dist/jwk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwk.js","sourceRoot":"","sources":["../src/jwk.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jwk.js","sourceRoot":"","sources":["../src/jwk.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { isLastOccurrence } from './util.js'\n\nexport const PUBLIC_KEY_USAGE = ['verify', 'encrypt', 'wrapKey'] as const\nexport const publicKeyUsageSchema = z.enum(PUBLIC_KEY_USAGE)\nexport type PublicKeyUsage = (typeof PUBLIC_KEY_USAGE)[number]\nexport function isPublicKeyUsage(usage: unknown): usage is PublicKeyUsage {\n return (PUBLIC_KEY_USAGE as readonly unknown[]).includes(usage)\n}\n\n/**\n * Determines if the given key usage is consistent for \"sig\" (signature) public\n * key use.\n */\nexport function isSigKeyUsage(v: KeyUsage) {\n return v === 'verify'\n}\n\n/**\n * Determines if the given key usage is consistent for \"enc\" (encryption) public\n * key use.\n *\n * > When a key is used to wrap another key and a public key use\n * > designation for the first key is desired, the \"enc\" (encryption)\n * > key use value is used, since key wrapping is a kind of encryption.\n * > The \"enc\" value is also to be used for public keys used for key\n * > agreement operations.\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4.2}\n */\nexport function isEncKeyUsage(v: KeyUsage) {\n return v === 'encrypt' || v === 'wrapKey'\n}\n\nexport const PRIVATE_KEY_USAGE = [\n 'sign',\n 'decrypt',\n 'unwrapKey',\n 'deriveKey',\n 'deriveBits',\n] as const\nexport const privateKeyUsageSchema = z.enum(PRIVATE_KEY_USAGE)\nexport type PrivateKeyUsage = (typeof PRIVATE_KEY_USAGE)[number]\nexport function isPrivateKeyUsage(usage: unknown): usage is PrivateKeyUsage {\n return (PRIVATE_KEY_USAGE as readonly unknown[]).includes(usage)\n}\n\nexport const KEY_USAGE = [...PRIVATE_KEY_USAGE, ...PUBLIC_KEY_USAGE] as const\nexport const keyUsageSchema = z.enum(KEY_USAGE)\nexport type KeyUsage = (typeof KEY_USAGE)[number]\n\n/**\n * @see {@link https://datatracker.ietf.org/doc/html/rfc7517#section-4 JSON Web Key (JWK) Format}\n * @see {@link https://www.iana.org/assignments/jose/jose.xhtml#web-key-parameters IANA \"JSON Web Key Parameters\" registry}\n */\nconst jwkBaseSchema = z.object({\n kty: z.string().min(1),\n alg: z.string().min(1).optional(),\n kid: z.string().min(1).optional(),\n use: z.enum(['sig', 'enc']).optional(),\n key_ops: z\n .array(keyUsageSchema)\n .min(1, { message: 'At least one key usage must be specified' })\n // https://datatracker.ietf.org/doc/html/rfc7517#section-4.3\n // > Duplicate key operation values MUST NOT be present in the array.\n .refine((ops) => ops.every(isLastOccurrence), {\n message: 'key_ops must not contain duplicates',\n })\n .optional(),\n\n x5c: z.array(z.string()).optional(), // X.509 Certificate Chain\n x5t: z.string().min(1).optional(), // X.509 Certificate SHA-1 Thumbprint\n 'x5t#S256': z.string().min(1).optional(), // X.509 Certificate SHA-256 Thumbprint\n x5u: z.string().url().optional(), // X.509 URL\n\n // https://www.w3.org/TR/webcrypto/\n ext: z.boolean().optional(), // Extractable\n\n // Federation Historical Keys Response\n // https://openid.net/specs/openid-federation-1_0.html#name-federation-historical-keys-res\n iat: z.number().int().optional(), // Issued At (timestamp)\n exp: z.number().int().optional(), // Expiration Time (timestamp)\n nbf: z.number().int().optional(), // Not Before (timestamp)\n revoked: z // properties of the revocation\n .object({\n revoked_at: z.number().int(),\n reason: z.string().optional(),\n })\n .optional(),\n})\n\nexport type JwkBase = z.infer<typeof jwkBaseSchema>\n\nconst jwkRsaKeySchema = jwkBaseSchema.extend({\n kty: z.literal('RSA'),\n alg: z\n .enum(['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512'])\n .optional(),\n\n n: z.string().min(1), // Modulus\n e: z.string().min(1), // Exponent\n\n d: z.string().min(1).optional(), // Private Exponent\n p: z.string().min(1).optional(), // First Prime Factor\n q: z.string().min(1).optional(), // Second Prime Factor\n dp: z.string().min(1).optional(), // First Factor CRT Exponent\n dq: z.string().min(1).optional(), // Second Factor CRT Exponent\n qi: z.string().min(1).optional(), // First CRT Coefficient\n oth: z\n .array(\n z.object({\n r: z.string().optional(),\n d: z.string().optional(),\n t: z.string().optional(),\n }),\n )\n .min(1)\n .optional(), // Other Primes Info\n})\n\nconst jwkEcKeySchema = jwkBaseSchema.extend({\n kty: z.literal('EC'),\n alg: z.enum(['ES256', 'ES384', 'ES512']).optional(),\n crv: z.enum(['P-256', 'P-384', 'P-521']),\n\n x: z.string().min(1),\n y: z.string().min(1),\n\n d: z.string().min(1).optional(), // ECC Private Key\n})\n\nconst jwkEcSecp256k1KeySchema = jwkBaseSchema.extend({\n kty: z.literal('EC'),\n alg: z.enum(['ES256K']).optional(),\n crv: z.enum(['secp256k1']),\n\n x: z.string().min(1),\n y: z.string().min(1),\n\n d: z.string().min(1).optional(), // ECC Private Key\n})\n\nconst jwkOkpKeySchema = jwkBaseSchema.extend({\n kty: z.literal('OKP'),\n alg: z.enum(['EdDSA']).optional(),\n crv: z.enum(['Ed25519', 'Ed448']),\n\n x: z.string().min(1),\n d: z.string().min(1).optional(), // ECC Private Key\n})\n\nconst jwkSymKeySchema = jwkBaseSchema.extend({\n kty: z.literal('oct'), // Octet Sequence (used to represent symmetric keys)\n alg: z.enum(['HS256', 'HS384', 'HS512']).optional(),\n\n k: z.string(), // Key Value (base64url encoded)\n})\n\n/**\n * Zod parser for known JWK types\n */\nexport const jwkSchema = z\n .union([\n jwkRsaKeySchema,\n jwkEcKeySchema,\n jwkEcSecp256k1KeySchema,\n jwkOkpKeySchema,\n jwkSymKeySchema,\n ])\n // @TODO These rules should be applied to jwkBaseSchema, but Zod 3 doesn't\n // support extending refined schemas. Move these to the base schema when we\n // upgrade to Zod 4.\n .refine(\n // https://datatracker.ietf.org/doc/html/rfc7517#section-4.2\n // > The \"use\" (public key use) parameter identifies the intended use of the\n // > public key\n (k): boolean => k.use == null || isPublicJwk(k),\n {\n message: '\"use\" can only be used with public keys',\n path: ['use'],\n },\n )\n .refine(\n (k): boolean => !k.key_ops?.some(isPrivateKeyUsage) || isPrivateJwk(k),\n {\n message: 'private key usage not allowed for public keys',\n path: ['key_ops'],\n },\n )\n .refine(\n // https://datatracker.ietf.org/doc/html/rfc7517#section-4.3\n // > The \"use\" and \"key_ops\" JWK members SHOULD NOT be used together;\n // > however, if both are used, the information they convey MUST be\n // > consistent.\n (k): boolean =>\n k.use == null ||\n k.key_ops == null ||\n (k.use === 'sig' && k.key_ops.every(isSigKeyUsage)) ||\n (k.use === 'enc' && k.key_ops.every(isEncKeyUsage)),\n {\n message: '\"key_ops\" must be consistent with \"use\"',\n path: ['key_ops'],\n },\n )\n\nexport type Jwk = z.output<typeof jwkSchema>\n\n/** @deprecated use {@link jwkSchema} instead */\nexport const jwkValidator = jwkSchema\n\nexport const jwkPubSchema = jwkSchema\n .refine(hasKid, {\n message: '\"kid\" is required',\n path: ['kid'],\n })\n // @NOTE for legacy reasons, we don't impose the presence of either \"use\" or \"key_ops\"\n .refine(isPublicJwk, {\n message: 'private key not allowed',\n })\n .refine((k): boolean => !k.key_ops || k.key_ops.every(isPublicKeyUsage), {\n message: '\"key_ops\" must not contain private key usage for public keys',\n path: ['key_ops'],\n })\n\nexport type PublicJwk = z.output<typeof jwkPubSchema>\n\nexport const jwkPrivateSchema = jwkSchema\n // @NOTE we don't impose the presence of \"kid\"\n .refine(isPrivateJwk, {\n message: 'private key required',\n })\n\nexport type PrivateJwk = z.output<typeof jwkPrivateSchema>\n\nexport function hasKid<J extends object>(\n jwk: J,\n): jwk is J & { kid: NonNullable<unknown> } {\n return 'kid' in jwk && jwk.kid != null\n}\n\nexport function hasSharedSecretJwk<J extends object>(\n jwk: J,\n): jwk is J & { k: NonNullable<unknown> } {\n return 'k' in jwk && jwk.k != null\n}\n\nexport function hasPrivateSecretJwk<J extends object>(\n jwk: J,\n): jwk is J & { d: NonNullable<unknown> } {\n return 'd' in jwk && jwk.d != null\n}\n\nexport function isPrivateJwk<J extends object>(jwk: J) {\n return hasPrivateSecretJwk(jwk) || hasSharedSecretJwk(jwk)\n}\n\nexport function isPublicJwk<J extends object>(\n jwk: J,\n): jwk is Extract<\n Exclude<J, { k: NonNullable<unknown> }>,\n { d?: NonNullable<unknown> }\n> & { d?: never } {\n return !hasPrivateSecretJwk(jwk) && !hasSharedSecretJwk(jwk)\n}\n"]}
|