Skip to content

Various Rust crypto libraries wrapped in WASM for use in the browser

Notifications You must be signed in to change notification settings

watzon/wasm-crypto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WASM Crypto

Various Rust crypto libraries wrapped in WASM for use in Deno and the browser. This library is specifically made for use with Telegram crypto, but other non-telegram related things will be added here.

Usage

Be sure to build with --unstable.

import { igeEncrypt, igeDecrypt } from 'https://deno.land/x/wasm_crypto/mod.js';

const key = Uint8Array.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f])

const iv = Uint8Array.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f])

const plaintext = Uint8Array.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f])

const ciphertext = igeEncrypt(plaintext, key, iv)
const decrypted  = igeDecrypt(ciphertext, key, iv)

console.log('Original value: ', plaintext)
console.log('Encrypted value:', ciphertext)
console.log('Decrypted value:', decrypted)

Building

Building will require deno, rust, and wasm-pack. Once all dependencies are installed, just run:

deno run -A ./scripts/build.ts

mod.ts is not generated, so any new definitions will have to be manually added there.

Roadmap

The end goal for this project is to have all of the algorithms implemented that I possibly can. Since that will lead to very large WASM binaries though, I would like to eventually have different wasm/js files for different algorithm types (hashing, ciphers, etc). For now, however, everything will be bundled into a single binary.

  • AES
    • CBC (Counter)
    • IGE (Infinite Garbled Extension)
    • CTR (Cipher Block Chaining)
    • ECB (Electronic Codebook)
  • Bcrypt
  • BLAKE2b
  • BLAKE2s
  • Blowfish
  • ChaCha20
  • Curve25519
  • ECB, CBC, and CTR block cipher modes
  • Ed25519
  • Fortuna
  • Ghash
  • HC128
  • HMAC
  • MD5
  • PBKDF2
  • PKCS padding for CBC block cipher mode
  • Poly1305
  • RC4
  • RIPEMD-160
  • Salsa20 and XSalsa20
  • Scrypt
  • Sha1
  • Sha2 (All fixed output size variants)
  • Sha3
  • Sosemanuk
  • Whirlpool

About

Various Rust crypto libraries wrapped in WASM for use in the browser

Resources

Stars

Watchers

Forks

Packages

No packages published