devgianlu
0c60f7c995
LibWeb: Migrate ECDSA.generateKey and ECDSA.verify away from ByteBuffer
...
Use instances of `ECPublicKey` and `ECPrivateKey` instead of
`ByteBuffer` for ECDSA. Fixes another ~200 tests.
2024-12-03 13:20:51 +01:00
devgianlu
f0fbd50c66
LibWeb: Implement ECDSA.importKey and ECDSA.exportKey
...
Very similar implementation to ECDH. Fixes ~700 tests!
2024-12-03 13:20:51 +01:00
devgianlu
c6e684791f
LibWeb: Remove useless bytes conversion in ECDH.exportKey
...
Using `generate_public_key_point` instead of `generate_public_key`
removes a bit of redundant code.
2024-11-30 11:17:44 +01:00
devgianlu
399b3d2430
LibCrypto+LibWeb: Parse EC public key in parse_subject_public_key_info
...
Replicate what we are doing with RSA and parse both the private and
public key when parsing the ASN1.
The only thing that changed in the tests is the error message.
2024-11-30 11:17:44 +01:00
devgianlu
51f69be51f
LibCrypto: Move ASN1 constants to Crypto::ASN1
...
Makes more sense to have them in `Crypto::ASN1` rather than in
`Crypto::Certificate`.
2024-11-30 11:17:44 +01:00
devgianlu
ab2960e49f
LibCrypto+LibWeb: Reorganize OID ASN1 constants
...
I have divided ANS1 constants by length so that they don't have
trailing zeros that need to be removed.
Also moved OIDs lists to the only place they are used for clarity.
Fixed a couple of WPT tests by adding SECP521r1 to the list of known
curves.
2024-11-30 11:17:44 +01:00
devgianlu
46e724729c
LibWeb: Match algorithm names case-insensitive
...
CI / Lagom (false, FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
I dug through the code and the WebCryptoAPI spec to figure out the
reason for `... mixed case parameters` WPT tests and figured out that
our implementation was slightly wrong.
By being closer to the spec we can now pass those tests and also remove
a bunch of duplicated code.
Context: https://github.com/LadybirdBrowser/ladybird/pull/2598#discussion_r1859263798
2024-11-28 00:21:49 +01:00
devgianlu
6ebc812035
LibWeb: Rename EcdhKeyDerivePrams
to EcdhKeyDeriveParams
2024-11-28 00:21:49 +01:00
devgianlu
13c9874830
LibWeb: Be spec compliant by comparing WebCryptoAPI strings with case
...
Following the discovery that the WebCryptoAPI spec requires all strings
to be compared case-sensitive, I have updated existing code that did
not respect this criterion.
No test failures are introduced.
Spec: https://www.w3.org/TR/WebCryptoAPI/#conformance
Context: https://github.com/LadybirdBrowser/ladybird/pull/2598#discussion_r1859263798
2024-11-28 00:21:49 +01:00
devgianlu
6fa53a4382
LibWeb: Implement ECDH.exportKey
2024-11-27 10:59:48 +01:00
devgianlu
228276a383
LibWeb: Implement ECDH.importKey
2024-11-27 10:59:48 +01:00
devgianlu
e6056ab959
LibWeb: Implement ECDH.deriveBits
2024-11-27 10:59:48 +01:00
devgianlu
4fb19913a1
LibWeb: Switch ECDH.generateKey to use internal keys instead of bytes
...
Previously, `ECDH::generate_key` was implemented by storing a
`ByteBuffer` in the `InternalKeyData`. This improves the implementation
by using internal structures of already-parsed data.
2024-11-27 10:59:48 +01:00
devgianlu
fd336ed619
LibWeb: Define EcKeyImportParams
2024-11-27 10:59:48 +01:00
devgianlu
9eea94aa14
LibCrypto+LibWeb: Support passing parameters to ASN.1 wrappers
...
Add support for encoding parameters in `wrap_in_private_key_info` and
`wrap_in_subject_public_key_info` as well as turn `Span<int>` into
`Span<int const>`.
2024-11-27 10:59:48 +01:00
Andreas Kling
d625e12082
LibWeb: Implement the deriveBits algorithm for X448
CI / Lagom (false, FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
2024-11-25 17:16:51 +01:00
Andreas Kling
96ddccd961
LibWeb: Implement the importKey algorithm for X448
2024-11-25 17:16:51 +01:00
Andreas Kling
4a734226aa
LibWeb: Implement the exportKey algorithm for X448
2024-11-25 17:16:51 +01:00
Andreas Kling
5a8b0a2610
LibWeb: Implement the generateKey algorithm for X448
2024-11-25 17:16:51 +01:00
devgianlu
506e490793
LibWeb+LibCrypto: Remove OID constants scattered around
...
Now that `Certificate` has been moved, the OID constants are easily
reachable in `LibCrypto`.
2024-11-25 13:38:38 +01:00
devgianlu
49c388b891
LibTLS+LibWeb+LibCrypto: Move Certificate
to LibCrypto
...
By moving `Certificate` to `LibCrypto` it is possible to reuse a bunch
of code from in `LibCrypto` itself. It also moves some constants
and pieces of code to a more appropriate place than `LibTLS`.
This also makes future work on WebCryptoAPI easier.
2024-11-25 13:38:38 +01:00
devgianlu
fcdcba51f5
LibTLS+LibWeb: Decouple EC parameters from TLS::SupportedGroup
...
This is in preparation of the next commits to split the changes.
2024-11-25 13:38:38 +01:00
Andreas Kling
ed7b1caba2
LibWeb: Implement the exportKey algorithm for Ed25519
2024-11-24 23:28:23 +01:00
Andreas Kling
4d25369f29
LibWeb: Implement the importKey algorithm for Ed25519
2024-11-24 23:28:23 +01:00
Andreas Kling
8cb371b2ce
LibWeb: Decode X25519 keys as base64url + throw on bogus key data
...
This makes the X25519 importKey tests from WPT actually run.
2024-11-24 23:28:23 +01:00
devgianlu
009f328308
LibWeb: Implement ECDH.generateKey
2024-11-21 11:45:22 +01:00
Shannon Booth
f87041bf3a
LibGC+Everywhere: Factor out a LibGC from LibJS
...
Resulting in a massive rename across almost everywhere! Alongside the
namespace change, we now have the following names:
* JS::NonnullGCPtr -> GC::Ref
* JS::GCPtr -> GC::Ptr
* JS::HeapFunction -> GC::Function
* JS::CellImpl -> GC::Cell
* JS::Handle -> GC::Root
2024-11-15 14:49:20 +01:00
Jelle Raaijmakers
f8c853712e
LibWeb: Add some missing spec links to Crypto
2024-11-15 12:32:04 +01:00
Jelle Raaijmakers
b290c180e0
LibWeb: Move PBKDF2::import_key() up in the file
...
Let's try to keep algorithm implementations together. No functional
changes.
2024-11-15 12:32:04 +01:00
stelar7
5b67f17551
LibWeb: Sset the key_usages on X25519 export in a better way
2024-11-14 19:48:06 +01:00
stelar7
19ee8ddec2
LibWeb: Correctly set the key_usages on HMAC export
2024-11-14 19:48:06 +01:00
Jelle Raaijmakers
329cd946ac
LibWeb: Implement Web Crypto HMAC algorithm
CI / Lagom (false, FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (false, NO_FUZZ, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (true, NO_FUZZ, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (macos-14, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Push notes / build (push) Waiting to run
2024-11-14 11:52:18 +01:00
Jelle Raaijmakers
884a4163a0
LibWeb: Centralize validating a JWK's key_ops field
...
This gets rid of a couple FIXMEs and allows reusing the logic of
validating this field between different algorithms. While we're here,
expand its logic to match the constraints as outlined in RFC 7517.
2024-11-14 11:52:18 +01:00
Jelle Raaijmakers
f73a434177
LibWeb: Centralize getting the hash algorithm identifier for crypto
2024-11-14 11:52:18 +01:00
Timothy Flynn
93712b24bf
Everywhere: Hoist the Libraries folder to the top-level
2024-11-10 12:50:45 +01:00