Module

std/crypto/crypto.ts

Deno standard library
Go to Latest
import * as mod from "https://dotland.deno.dev/std@0.215.0/crypto/crypto.ts";

Extensions to the 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 {@link KeyStack} export implements the {@link 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

import { crypto } from "https://deno.land/std@0.215.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

import {
  crypto,
} from "https://deno.land/std@0.215.0/crypto/mod.ts";
import { encodeHex } from "https://deno.land/std@0.215.0/encoding/hex.ts"
import { encodeBase64 } from "https://deno.land/std@0.215.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));

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.

Interfaces

Extensions to the Web Crypto interface.

Extensions to the web standard SubtleCrypto interface.

Type Aliases

Extended digest algorithms accepted by {@link stdCrypto.subtle.digest}.

Extended digest algorithm names.

Extended digest algorithm objects.

FNV (Fowler/Noll/Vo) algorithms names.

An algorithm name supported by std/crypto/_wasm.