Skip to content

Commit 2fae1c4

Browse files
committed
refactor!: drop support for Ed448 and X448
1 parent ef918be commit 2fae1c4

File tree

12 files changed

+13
-96
lines changed

12 files changed

+13
-96
lines changed

src/jwks/local.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,12 @@ class LocalJWKSet {
101101
candidate = jwk.key_ops.includes('verify')
102102
}
103103

104-
// filter out non-applicable curves / sub types
104+
// filter out non-applicable OKP Sub Types
105+
if (candidate && alg === 'EdDSA') {
106+
candidate = jwk.crv === 'Ed25519'
107+
}
108+
109+
// filter out non-applicable EC curves
105110
if (candidate) {
106111
switch (alg) {
107112
case 'ES256':

src/lib/crypto_key.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,7 @@ export function checkSigCryptoKey(key: CryptoKey, alg: string, usage: KeyUsage)
6565
break
6666
}
6767
case 'EdDSA': {
68-
if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {
69-
throw unusable('Ed25519 or Ed448')
70-
}
68+
if (!isAlgorithm(key.algorithm, 'Ed25519')) throw unusable('Ed25519')
7169
break
7270
}
7371
case 'Ed25519': {
@@ -114,10 +112,9 @@ export function checkEncCryptoKey(key: CryptoKey, alg: string, usage?: KeyUsage)
114112
switch (key.algorithm.name) {
115113
case 'ECDH':
116114
case 'X25519':
117-
case 'X448':
118115
break
119116
default:
120-
throw unusable('ECDH, X25519, or X448')
117+
throw unusable('ECDH or X25519')
121118
}
122119
break
123120
}

src/runtime/asn1.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,8 @@ const getNamedCurve = (keyData: Uint8Array): string => {
6060
return 'P-521'
6161
case findOid(keyData, [0x2b, 0x65, 0x6e]):
6262
return 'X25519'
63-
case findOid(keyData, [0x2b, 0x65, 0x6f]):
64-
return 'X448'
6563
case findOid(keyData, [0x2b, 0x65, 0x70]):
6664
return 'Ed25519'
67-
case findOid(keyData, [0x2b, 0x65, 0x71]):
68-
return 'Ed448'
6965
default:
7066
throw new JOSENotSupported('Invalid or unsupported EC Key Curve or OKP Key Sub Type')
7167
}

src/runtime/ecdhes.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ export async function deriveKey(
2323
let length: number
2424
if (publicKey.algorithm.name === 'X25519') {
2525
length = 256
26-
} else if (publicKey.algorithm.name === 'X448') {
27-
length = 448
2826
} else {
2927
length =
3028
Math.ceil(parseInt((publicKey.algorithm as EcKeyAlgorithm).namedCurve.slice(-3), 10) / 8) << 3
@@ -51,7 +49,6 @@ export async function generateEpk(key: CryptoKey) {
5149
export function ecdhAllowed(key: CryptoKey) {
5250
return (
5351
['P-256', 'P-384', 'P-521'].includes((key.algorithm as EcKeyAlgorithm).namedCurve) ||
54-
key.algorithm.name === 'X25519' ||
55-
key.algorithm.name === 'X448'
52+
key.algorithm.name === 'X25519'
5653
)
5754
}

src/runtime/generate.ts

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,7 @@ export async function generateKeyPair(alg: string, options?: GenerateKeyPairOpti
115115
break
116116
case 'EdDSA': {
117117
keyUsages = ['sign', 'verify']
118-
const crv = options?.crv ?? 'Ed25519'
119-
switch (crv) {
120-
case 'Ed25519':
121-
case 'Ed448':
122-
algorithm = { name: crv }
123-
break
124-
default:
125-
throw new JOSENotSupported('Invalid or unsupported crv option provided')
126-
}
118+
algorithm = { name: 'Ed25519' }
127119
break
128120
}
129121
case 'ECDH-ES':
@@ -140,12 +132,11 @@ export async function generateKeyPair(alg: string, options?: GenerateKeyPairOpti
140132
break
141133
}
142134
case 'X25519':
143-
case 'X448':
144135
algorithm = { name: crv }
145136
break
146137
default:
147138
throw new JOSENotSupported(
148-
'Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448',
139+
'Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, and X25519',
149140
)
150141
}
151142
break

src/runtime/normalize_key.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const handleKeyObject = (key: ConvertableKeyObject, alg: string) => {
4848
}
4949

5050
let cryptoKey: CryptoKey | undefined
51-
if (key.asymmetricKeyType === 'x25519' || key.asymmetricKeyType === 'x448') {
51+
if (key.asymmetricKeyType === 'x25519') {
5252
switch (alg) {
5353
case 'ECDH-ES':
5454
case 'ECDH-ES+A128KW':
@@ -67,7 +67,7 @@ const handleKeyObject = (key: ConvertableKeyObject, alg: string) => {
6767
)
6868
}
6969

70-
if (key.asymmetricKeyType === 'ed25519' || key.asymmetricKeyType === 'ed448') {
70+
if (key.asymmetricKeyType === 'ed25519') {
7171
if (alg !== 'EdDSA') {
7272
throw new TypeError('TODO')
7373
}

tap/ecdh.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export default (
2929
(env.isBlink && env.isBrowserVersionAtLeast(133)),
3030
{ crv: 'X25519' },
3131
],
32-
['ECDH-ES', env.isNode || env.isEdgeRuntime, { crv: 'X448' }],
3332
]
3433

3534
function title(vector: Vector) {

tap/fixtures.ts

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -27,38 +27,6 @@ export const KEYS = {
2727
'Krphj6cA4Ls9aMYAHf5w+OW9D/t3a9p6mYm78AKIdBsPEtT1AQ==\n' +
2828
'-----END CERTIFICATE-----\n',
2929
},
30-
Ed448: {
31-
jwk: {
32-
crv: 'Ed448',
33-
d: '35yNO4M8bgte2BEjaCxrx9epQhzZ4VqF5GhjDaBHGPHHCznFXtmQuOps4XvrNpnVUtiawY4j3FCq',
34-
kty: 'OKP',
35-
x: 'pNAfXkImnUHY52ePCZoU4TKCnrq8baLpCiboNxlmN2AbG2xqmLW5F1DA3lsf-S6GWVIfXPysVd0A',
36-
},
37-
pkcs8:
38-
'-----BEGIN PRIVATE KEY-----\n' +
39-
'MEcCAQAwBQYDK2VxBDsEOd+cjTuDPG4LXtgRI2gsa8fXqUIc2eFaheRoYw2gRxjx\n' +
40-
'xws5xV7ZkLjqbOF76zaZ1VLYmsGOI9xQqg==\n' +
41-
'-----END PRIVATE KEY-----\n',
42-
spki:
43-
'-----BEGIN PUBLIC KEY-----\n' +
44-
'MEMwBQYDK2VxAzoApNAfXkImnUHY52ePCZoU4TKCnrq8baLpCiboNxlmN2AbG2xq\n' +
45-
'mLW5F1DA3lsf+S6GWVIfXPysVd0A\n' +
46-
'-----END PUBLIC KEY-----\n',
47-
x509:
48-
'-----BEGIN CERTIFICATE-----\n' +
49-
'MIIB7DCCAWygAwIBAgIUL85nVDm2evUiy7tWzGv6OxRjclswBQYDK2VxMEUxCzAJ\n' +
50-
'BgNVBAYTAkNaMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5l\n' +
51-
'dCBXaWRnaXRzIFB0eSBMdGQwIBcNMjIxMDExMTIyMTQwWhgPMjEyMjA5MTcxMjIx\n' +
52-
'NDBaMEUxCzAJBgNVBAYTAkNaMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK\n' +
53-
'DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwQzAFBgMrZXEDOgCk0B9eQiadQdjn\n' +
54-
'Z48JmhThMoKeurxtoukKJug3GWY3YBsbbGqYtbkXUMDeWx/5LoZZUh9c/KxV3QCj\n' +
55-
'UzBRMB0GA1UdDgQWBBSA9Hb5PA/vVojQWg4Per+myWHvCzAfBgNVHSMEGDAWgBSA\n' +
56-
'9Hb5PA/vVojQWg4Per+myWHvCzAPBgNVHRMBAf8EBTADAQH/MAUGAytlcQNzAN9G\n' +
57-
'9bFcVViH8c/zexozB/QCtueCu2kLNCLM9auSlFoHEy8u7+Gxyg1O+3bc43YxBObB\n' +
58-
'+wwH7G+8gKKOkFL/43b7o2HNOlZUDHcWAP25cGY6lDFUvQDc0FGO0ge+h4tt075x\n' +
59-
'e52JbhpyuHQlrWYQqHQSAA==\n' +
60-
'-----END CERTIFICATE-----\n',
61-
},
6230
P256: {
6331
jwk: {
6432
crv: 'P-256',
@@ -243,23 +211,4 @@ export const KEYS = {
243211
'-----END PUBLIC KEY-----\n',
244212
x509: undefined,
245213
},
246-
X448: {
247-
jwk: {
248-
crv: 'X448',
249-
d: 'tMpYXWcUg7vGrUcZ1cUMVodjB6rWSOaBKgmaigThaInGRTCmaWPDYrE93wwPmyxOhVYRsmIRFv0',
250-
kty: 'OKP',
251-
x: 'jk-IiddcEYNq6CwHnqsQleaB86W2tUITnIMwkurT5BUdw2YpJxQt9rgnEZQW0KnQE-ORhEl0kaA',
252-
},
253-
pkcs8:
254-
'-----BEGIN PRIVATE KEY-----\n' +
255-
'MEYCAQAwBQYDK2VvBDoEOLTKWF1nFIO7xq1HGdXFDFaHYweq1kjmgSoJmooE4WiJ\n' +
256-
'xkUwpmljw2KxPd8MD5ssToVWEbJiERb9\n' +
257-
'-----END PRIVATE KEY-----\n',
258-
spki:
259-
'-----BEGIN PUBLIC KEY-----\n' +
260-
'MEIwBQYDK2VvAzkAjk+IiddcEYNq6CwHnqsQleaB86W2tUITnIMwkurT5BUdw2Yp\n' +
261-
'JxQt9rgnEZQW0KnQE+ORhEl0kaA=\n' +
262-
'-----END PUBLIC KEY-----\n',
263-
x509: undefined,
264-
},
265214
}

tap/jwk.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,7 @@ export default (
2828
(env.isGecko && env.isBrowserVersionAtLeast(130)) ||
2929
(env.isBlink && env.isBrowserVersionAtLeast(133)),
3030
],
31-
['ECDH-ES', KEYS.X448.jwk, env.isDeno ? [true, false] : env.isNode || env.isEdgeRuntime],
3231
['EdDSA', KEYS.Ed25519.jwk, !env.isBlink],
33-
['Ed25519', KEYS.Ed25519.jwk, !env.isBlink],
34-
['EdDSA', KEYS.Ed448.jwk, env.isNode || env.isEdgeRuntime],
3532
['ES256', KEYS.P256.jwk, true],
3633
['ES384', KEYS.P384.jwk, true],
3734
['ES512', KEYS.P521.jwk, env.isDeno ? [true, false] : true],

tap/jws.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ export default (
1414
type Vector = [string, boolean] | [string, boolean, jose.GenerateKeyPairOptions]
1515
const algorithms: Vector[] = [
1616
['EdDSA', !env.isBlink],
17-
['Ed25519', !env.isBlink],
18-
['EdDSA', env.isNode || env.isEdgeRuntime, { crv: 'Ed448' }],
1917
['ES256', true],
2018
['ES384', true],
2119
['ES512', !env.isDeno],

tap/keyobject-stub.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ const stub: Pick<
8888
case undefined:
8989
case 'Ed25519':
9090
return generate('ed25519')
91-
case 'Ed448':
92-
return generate('ed448')
9391
default:
9492
throw new Error('unreachable')
9593
}
@@ -106,8 +104,6 @@ const stub: Pick<
106104
return generate('ec', { namedCurve: crv })
107105
case 'X25519':
108106
return generate('x25519')
109-
case 'X448':
110-
return generate('x448')
111107
default:
112108
Error('unreachable')
113109
}

tap/pem.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,9 @@ export default (
8787
(env.isGecko && env.isBrowserVersionAtLeast(130)) ||
8888
(env.isBlink && env.isBrowserVersionAtLeast(133)),
8989
],
90-
[['ECDH-ES', 'X448'], KEYS.X448.pkcs8, env.isNode || env.isEdgeRuntime],
91-
[['ECDH-ES', 'X448'], KEYS.X448.spki, env.isNode || env.isEdgeRuntime || env.isDeno],
9290
[['EdDSA', 'Ed25519'], KEYS.Ed25519.pkcs8, !env.isBlink],
9391
[['EdDSA', 'Ed25519'], KEYS.Ed25519.spki, !env.isBlink],
9492
[['EdDSA', 'Ed25519'], KEYS.Ed25519.x509, !env.isBlink],
95-
[['EdDSA', 'Ed448'], KEYS.Ed448.pkcs8, env.isNode || env.isEdgeRuntime],
96-
[['EdDSA', 'Ed448'], KEYS.Ed448.spki, env.isNode || env.isEdgeRuntime],
97-
[['EdDSA', 'Ed448'], KEYS.Ed448.x509, env.isNode || env.isEdgeRuntime],
98-
['Ed25519', KEYS.Ed25519.pkcs8, !env.isBlink],
99-
['Ed25519', KEYS.Ed25519.spki, !env.isBlink],
100-
['Ed25519', KEYS.Ed25519.x509, !env.isBlink],
10193
]
10294

10395
function title(alg: string, crv: string | undefined, pem: string, works: boolean) {

0 commit comments

Comments
 (0)