Skip to content

Commit 9634103

Browse files
youennfcdumez
authored andcommitted
Fix Ed25519 public key generation from private key material
https://bugs.webkit.org/show_bug.cgi?id=251252 rdar://problem/104733721 Reviewed by Chris Dumez. Use cced25519_make_pub to generate the public key. * LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/okp_importKey.https.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/okp_importKey.https.any.worker-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.worker-expected.txt: * Source/WebCore/crypto/mac/CryptoKeyOKPCocoa.cpp: (WebCore::CryptoKeyOKP::generateJwkX const): Canonical link: https://commits.webkit.org/259489@main
1 parent d5514af commit 9634103

File tree

5 files changed

+66
-3
lines changed

5 files changed

+66
-3
lines changed

LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/okp_importKey.https.any-expected.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, true, [])
33
PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, true, [])
44
PASS Good parameters: Ed25519 bits (raw, buffer(32), {name: Ed25519}, true, [])
55
PASS Good parameters: Ed25519 bits (pkcs8, buffer(48), {name: Ed25519}, true, [sign])
6-
FAIL Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign]) assert_true: Round trip works expected true got false
6+
PASS Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign])
77
PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, false, [])
88
PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, false, [])
99
PASS Good parameters: Ed25519 bits (raw, buffer(32), {name: Ed25519}, false, [])

LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/import_export/okp_importKey.https.any.worker-expected.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, true, [])
33
PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, true, [])
44
PASS Good parameters: Ed25519 bits (raw, buffer(32), {name: Ed25519}, true, [])
55
PASS Good parameters: Ed25519 bits (pkcs8, buffer(48), {name: Ed25519}, true, [sign])
6-
FAIL Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign]) assert_true: Round trip works expected true got false
6+
PASS Good parameters: Ed25519 bits (jwk, object(crv, d, x, kty), {name: Ed25519}, true, [sign])
77
PASS Good parameters: Ed25519 bits (spki, buffer(44), {name: Ed25519}, false, [])
88
PASS Good parameters: Ed25519 bits (jwk, object(kty, crv, x), {name: Ed25519}, false, [])
99
PASS Good parameters: Ed25519 bits (raw, buffer(32), {name: Ed25519}, false, [])

LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any-expected.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
1515
PASS Can wrap and unwrap ECDH private key keys using jwk and AES-CTR
1616
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and AES-CTR
1717
PASS Can unwrap ECDH private key non-extractable keys using jwk and AES-CTR
18+
PASS Can wrap and unwrap Ed25519 public key keys using spki and AES-CTR
19+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and AES-CTR
20+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-CTR
21+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-CTR
22+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-CTR
23+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-CTR
24+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-CTR
1825
PASS Can wrap and unwrap AES-CTR keys using raw and AES-CTR
1926
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-CTR
2027
PASS Can wrap and unwrap AES-CTR keys using jwk and AES-CTR
@@ -75,6 +82,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
7582
PASS Can wrap and unwrap ECDH private key keys using jwk and AES-CBC
7683
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and AES-CBC
7784
PASS Can unwrap ECDH private key non-extractable keys using jwk and AES-CBC
85+
PASS Can wrap and unwrap Ed25519 public key keys using spki and AES-CBC
86+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and AES-CBC
87+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-CBC
88+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-CBC
89+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-CBC
90+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-CBC
91+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-CBC
7892
PASS Can wrap and unwrap AES-CTR keys using raw and AES-CBC
7993
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-CBC
8094
PASS Can wrap and unwrap AES-CTR keys using jwk and AES-CBC
@@ -135,6 +149,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
135149
PASS Can wrap and unwrap ECDH private key keys using jwk and AES-GCM
136150
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and AES-GCM
137151
PASS Can unwrap ECDH private key non-extractable keys using jwk and AES-GCM
152+
PASS Can wrap and unwrap Ed25519 public key keys using spki and AES-GCM
153+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and AES-GCM
154+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-GCM
155+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-GCM
156+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-GCM
157+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-GCM
158+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-GCM
138159
PASS Can wrap and unwrap AES-CTR keys using raw and AES-GCM
139160
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-GCM
140161
PASS Can wrap and unwrap AES-CTR keys using jwk and AES-GCM
@@ -181,6 +202,8 @@ PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable u
181202
PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-GCM
182203
PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-GCM
183204
PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-GCM
205+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-KW
206+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-KW
184207
PASS Can wrap and unwrap AES-CTR keys using raw and AES-KW
185208
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-KW
186209
PASS Can wrap and unwrap AES-CBC keys using raw and AES-KW
@@ -208,6 +231,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
208231
PASS Can wrap and unwrap ECDH private key keys using jwk and RSA-OAEP
209232
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and RSA-OAEP
210233
PASS Can unwrap ECDH private key non-extractable keys using jwk and RSA-OAEP
234+
PASS Can wrap and unwrap Ed25519 public key keys using spki and RSA-OAEP
235+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and RSA-OAEP
236+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and RSA-OAEP
237+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and RSA-OAEP
238+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and RSA-OAEP
239+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and RSA-OAEP
240+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and RSA-OAEP
211241
PASS Can wrap and unwrap AES-CTR keys using raw and RSA-OAEP
212242
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and RSA-OAEP
213243
PASS Can wrap and unwrap AES-CTR keys using jwk and RSA-OAEP

LayoutTests/imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.https.any.worker-expected.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
1414
PASS Can wrap and unwrap ECDH private key keys using jwk and AES-CTR
1515
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and AES-CTR
1616
PASS Can unwrap ECDH private key non-extractable keys using jwk and AES-CTR
17+
PASS Can wrap and unwrap Ed25519 public key keys using spki and AES-CTR
18+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and AES-CTR
19+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-CTR
20+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-CTR
21+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-CTR
22+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-CTR
23+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-CTR
1724
PASS Can wrap and unwrap AES-CTR keys using raw and AES-CTR
1825
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-CTR
1926
PASS Can wrap and unwrap AES-CTR keys using jwk and AES-CTR
@@ -74,6 +81,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
7481
PASS Can wrap and unwrap ECDH private key keys using jwk and AES-CBC
7582
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and AES-CBC
7683
PASS Can unwrap ECDH private key non-extractable keys using jwk and AES-CBC
84+
PASS Can wrap and unwrap Ed25519 public key keys using spki and AES-CBC
85+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and AES-CBC
86+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-CBC
87+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-CBC
88+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-CBC
89+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-CBC
90+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-CBC
7791
PASS Can wrap and unwrap AES-CTR keys using raw and AES-CBC
7892
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-CBC
7993
PASS Can wrap and unwrap AES-CTR keys using jwk and AES-CBC
@@ -134,6 +148,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
134148
PASS Can wrap and unwrap ECDH private key keys using jwk and AES-GCM
135149
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and AES-GCM
136150
PASS Can unwrap ECDH private key non-extractable keys using jwk and AES-GCM
151+
PASS Can wrap and unwrap Ed25519 public key keys using spki and AES-GCM
152+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and AES-GCM
153+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-GCM
154+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-GCM
155+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and AES-GCM
156+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and AES-GCM
157+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and AES-GCM
137158
PASS Can wrap and unwrap AES-CTR keys using raw and AES-GCM
138159
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-GCM
139160
PASS Can wrap and unwrap AES-CTR keys using jwk and AES-GCM
@@ -180,6 +201,8 @@ PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable u
180201
PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys using jwk and AES-GCM
181202
PASS Can wrap and unwrap RSASSA-PKCS1-v1_5 private key keys as non-extractable using jwk and AES-GCM
182203
PASS Can unwrap RSASSA-PKCS1-v1_5 private key non-extractable keys using jwk and AES-GCM
204+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and AES-KW
205+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and AES-KW
183206
PASS Can wrap and unwrap AES-CTR keys using raw and AES-KW
184207
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and AES-KW
185208
PASS Can wrap and unwrap AES-CBC keys using raw and AES-KW
@@ -207,6 +230,13 @@ PASS Can wrap and unwrap ECDH private key keys as non-extractable using pkcs8 an
207230
PASS Can wrap and unwrap ECDH private key keys using jwk and RSA-OAEP
208231
PASS Can wrap and unwrap ECDH private key keys as non-extractable using jwk and RSA-OAEP
209232
PASS Can unwrap ECDH private key non-extractable keys using jwk and RSA-OAEP
233+
PASS Can wrap and unwrap Ed25519 public key keys using spki and RSA-OAEP
234+
PASS Can wrap and unwrap Ed25519 public key keys using jwk and RSA-OAEP
235+
PASS Can wrap and unwrap Ed25519 private key keys using pkcs8 and RSA-OAEP
236+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using pkcs8 and RSA-OAEP
237+
PASS Can wrap and unwrap Ed25519 private key keys using jwk and RSA-OAEP
238+
PASS Can wrap and unwrap Ed25519 private key keys as non-extractable using jwk and RSA-OAEP
239+
PASS Can unwrap Ed25519 private key non-extractable keys using jwk and RSA-OAEP
210240
PASS Can wrap and unwrap AES-CTR keys using raw and RSA-OAEP
211241
PASS Can wrap and unwrap AES-CTR keys as non-extractable using raw and RSA-OAEP
212242
PASS Can wrap and unwrap AES-CTR keys using jwk and RSA-OAEP

Source/WebCore/crypto/mac/CryptoKeyOKPCocoa.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,11 @@ String CryptoKeyOKP::generateJwkX() const
314314
return base64URLEncodeToString(m_data);
315315

316316
ASSERT(type() == CryptoKeyType::Private);
317+
318+
auto* di = ccsha512_di();
317319
ccec25519pubkey publicKey;
318-
cccurve25519_make_pub(publicKey, m_data.data());
320+
cced25519_make_pub(di, publicKey, m_data.data());
321+
319322
return base64URLEncodeToString(Span<const uint8_t> { publicKey, sizeof(publicKey) });
320323
}
321324

0 commit comments

Comments
 (0)