chore: split web op crate (#9635)
This commit starts splitting out the deno_web op crate into multiple
smaller crates. This commit splits out WebIDL and URL API, but in the
future I want to split out each spec into its own crate. That means we
will have (in rough order of loading): `webidl`, `dom`, `streams`,
`console`, `encoding`, `url`, `file`, `fetch`, `websocket`, and
`webgpu` crates.
2021-03-12 10:17:18 -05:00
|
|
|
# deno_crypto
|
2020-11-13 16:01:57 -05:00
|
|
|
|
2024-06-17 18:07:48 -04:00
|
|
|
**This crate implements the Web Cryptography API.**
|
chore: split web op crate (#9635)
This commit starts splitting out the deno_web op crate into multiple
smaller crates. This commit splits out WebIDL and URL API, but in the
future I want to split out each spec into its own crate. That means we
will have (in rough order of loading): `webidl`, `dom`, `streams`,
`console`, `encoding`, `url`, `file`, `fetch`, `websocket`, and
`webgpu` crates.
2021-03-12 10:17:18 -05:00
|
|
|
|
|
|
|
Spec: https://www.w3.org/TR/WebCryptoAPI/
|
2024-06-17 18:07:48 -04:00
|
|
|
|
|
|
|
## Usage Example
|
|
|
|
|
|
|
|
From javascript, include the extension's source, and assign `CryptoKey`,
|
|
|
|
`crypto`, `Crypto`, and `SubtleCrypto` to the global scope:
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
import * as crypto from "ext:deno_crypto/00_crypto.js";
|
|
|
|
|
|
|
|
Object.defineProperty(globalThis, "CryptoKey", {
|
|
|
|
value: crypto.CryptoKey,
|
|
|
|
enumerable: false,
|
|
|
|
configurable: true,
|
|
|
|
writable: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.defineProperty(globalThis, "crypto", {
|
|
|
|
value: crypto.crypto,
|
|
|
|
enumerable: false,
|
|
|
|
configurable: true,
|
|
|
|
writable: false,
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.defineProperty(globalThis, "Crypto", {
|
|
|
|
value: crypto.Crypto,
|
|
|
|
enumerable: false,
|
|
|
|
configurable: true,
|
|
|
|
writable: true,
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.defineProperty(globalThis, "SubtleCrypto", {
|
|
|
|
value: crypto.SubtleCrypto,
|
|
|
|
enumerable: false,
|
|
|
|
configurable: true,
|
|
|
|
writable: true,
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
Then from rust, provide:
|
|
|
|
`deno_crypto::deno_crypto::init_ops_and_esm(Option<u64>)` in the `extensions`
|
|
|
|
field of your `RuntimeOptions`
|
|
|
|
|
|
|
|
Where the `Option<u64>` represents an optional seed for initialization.
|
|
|
|
|
|
|
|
## Dependencies
|
|
|
|
|
|
|
|
- **deno_webidl**: Provided by the `deno_webidl` crate
|
|
|
|
- **deno_web**: Provided by the `deno_web` crate
|
|
|
|
|
|
|
|
## Provided ops
|
|
|
|
|
|
|
|
Following ops are provided, which can be accessed through `Deno.ops`:
|
|
|
|
|
|
|
|
- op_crypto_get_random_values
|
|
|
|
- op_crypto_generate_key
|
|
|
|
- op_crypto_sign_key
|
|
|
|
- op_crypto_verify_key
|
|
|
|
- op_crypto_derive_bits
|
|
|
|
- op_crypto_import_key
|
|
|
|
- op_crypto_export_key
|
|
|
|
- op_crypto_encrypt
|
|
|
|
- op_crypto_decrypt
|
|
|
|
- op_crypto_subtle_digest
|
|
|
|
- op_crypto_random_uuid
|
|
|
|
- op_crypto_wrap_key
|
|
|
|
- op_crypto_unwrap_key
|
|
|
|
- op_crypto_base64url_decode
|
|
|
|
- op_crypto_base64url_encode
|
|
|
|
- x25519::op_crypto_generate_x25519_keypair
|
|
|
|
- x25519::op_crypto_derive_bits_x25519
|
|
|
|
- x25519::op_crypto_import_spki_x25519
|
|
|
|
- x25519::op_crypto_import_pkcs8_x25519
|
|
|
|
- ed25519::op_crypto_generate_ed25519_keypair
|
|
|
|
- ed25519::op_crypto_import_spki_ed25519
|
|
|
|
- ed25519::op_crypto_import_pkcs8_ed25519
|
|
|
|
- ed25519::op_crypto_sign_ed25519
|
|
|
|
- ed25519::op_crypto_verify_ed25519
|
|
|
|
- ed25519::op_crypto_export_spki_ed25519
|
|
|
|
- ed25519::op_crypto_export_pkcs8_ed25519
|
|
|
|
- ed25519::op_crypto_jwk_x_ed25519
|
|
|
|
- x25519::op_crypto_export_spki_x25519
|
|
|
|
- x25519::op_crypto_export_pkcs8_x25519
|