import * as lume from "https://deno.land/x/lume@v2.0.2/deps/crypto.ts";
Extensions to the [Web Crypto API]https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API supporting additional encryption APIs, but also delegating to the built-in APIs when possible.
Provides additional digest algorithms that are not part of the WebCrypto
standard as well as a subtle.digest
and subtle.digestSync
methods.
The KeyStack
export implements the KeyRing
interface
for managing rotatable keys for signing data to prevent tampering, like with
HTTP cookies.
Supported algorithms
Here is a list of supported algorithms. If the algorithm name in WebCrypto and Wasm/Rust is the same, this library prefers to use algorithms that are supported by WebCrypto.
WebCrypto:
SHA-384
SHA-256
SHA-512
(length-extendable and collidable)
Wasm/Rust:
BLAKE2B-128
BLAKE2B-160
BLAKE2B-224
BLAKE2B-256
BLAKE2B-384
BLAKE2B
BLAKE2S
BLAKE3
FNV32
(length-extendable)FNV32A
(length-extendable)FNV64
(length-extendable)FNV64A
(length-extendable)KECCAK-224
KECCAK-256
KECCAK-384
KECCAK-512
SHA-384
SHA3-224
SHA3-256
SHA3-384
SHA3-512
SHAKE128
SHAKE256
TIGER
RIPEMD-160
(length-extendable)SHA-224
(length-extendable)SHA-256
(length-extendable)SHA-512
(length-extendable)MD4
(collidable and length-extendable)MD5
(collidable and length-extendable)SHA-1
(collidable and length-extendable)
Examples
Example 1
Example 1
import { crypto } from "https://deno.land/std@0.224.0/crypto/mod.ts";
// This will delegate to the runtime's WebCrypto implementation.
console.log(
new Uint8Array(
await crypto.subtle.digest(
"SHA-384",
new TextEncoder().encode("hello world"),
),
),
);
// This will use a bundled Wasm/Rust implementation.
console.log(
new Uint8Array(
await crypto.subtle.digest(
"BLAKE3",
new TextEncoder().encode("hello world"),
),
),
);
Convert hash to a string
Convert hash to a string
import {
crypto,
} from "https://deno.land/std@0.224.0/crypto/mod.ts";
import { encodeHex } from "https://deno.land/std@0.224.0/encoding/hex.ts"
import { encodeBase64 } from "https://deno.land/std@0.224.0/encoding/base64.ts"
const hash = await crypto.subtle.digest(
"SHA-384",
new TextEncoder().encode("You hear that Mr. Anderson?"),
);
// Hex encoding
console.log(encodeHex(hash));
// Or with base64 encoding
console.log(encodeBase64(hash));
Classes
A cryptographic key chain which allows signing of data to prevent tampering, but also allows for easy key rotation without needing to re-sign the data. |
Variables
An wrapper for WebCrypto adding support for additional non-standard algorithms, but delegating to the runtime WebCrypto implementation whenever possible. | |
All cryptographic hash/digest algorithms supported by std/crypto/_wasm. |
Functions
When checking the values of cryptographic hashes are equal, default comparisons can be susceptible to timing based attacks, where attacker is able to find out information about the host system by repeatedly checking response times to equality comparisons of values. |
Interfaces
Extensions to the Web | |
Extensions to the web standard |
Type Aliases
T Data | Types of data that can be signed cryptographically. |
Extended digest algorithms accepted by | |
Extended digest algorithm names. | |
Extended digest algorithm objects. | |
FNV (Fowler/Noll/Vo) algorithms names. | |
T Key | Types of keys that can be used to sign data. |
An algorithm name supported by std/crypto/_wasm. |