dryoc 0.9.0

Don't Roll Your Own Crypto: pure-Rust, hard to misuse cryptography library
Documentation
#![cfg(all(target_arch = "wasm32", target_os = "unknown"))]

use dryoc::classic::crypto_generichash::crypto_generichash;
use dryoc::dryocbox::{DryocBox, KeyPair, NewByteArray, Nonce};
use dryoc::dryocsecretbox::{DryocSecretBox, Key};
use dryoc::precalc::PrecalcSecretKey;
use wasm_bindgen_test::wasm_bindgen_test;

#[wasm_bindgen_test]
fn dryocbox_roundtrip() {
    let sender_keypair = KeyPair::generate();
    let recipient_keypair = KeyPair::generate();
    let nonce = Nonce::generate();
    let message = b"wasm dryocbox";

    let dryocbox = DryocBox::encrypt_to_vecbox(
        message,
        &nonce,
        &recipient_keypair.public_key,
        &sender_keypair.secret_key,
    )
    .expect("unable to encrypt");

    let decrypted = dryocbox
        .decrypt_to_vec(
            &nonce,
            &sender_keypair.public_key,
            &recipient_keypair.secret_key,
        )
        .expect("unable to decrypt");

    assert_eq!(message, decrypted.as_slice());
}

#[wasm_bindgen_test]
fn dryocbox_precalc_roundtrip() {
    let sender_keypair = KeyPair::generate();
    let recipient_keypair = KeyPair::generate();
    let nonce = Nonce::generate();
    let message = b"wasm dryocbox precalc";
    let shared_key =
        PrecalcSecretKey::precalculate(&recipient_keypair.public_key, &sender_keypair.secret_key);

    let dryocbox =
        DryocBox::precalc_encrypt_to_vecbox(message, &nonce, &shared_key).expect("encrypt failed");
    let decrypted = dryocbox
        .decrypt_to_vec(
            &nonce,
            &sender_keypair.public_key,
            &recipient_keypair.secret_key,
        )
        .expect("decrypt failed");

    assert_eq!(message, decrypted.as_slice());
}

#[wasm_bindgen_test]
fn dryocsecretbox_roundtrip() {
    let secret_key = Key::generate();
    let nonce = dryoc::dryocsecretbox::Nonce::generate();
    let message = b"wasm dryocsecretbox";

    let dryocsecretbox: dryoc::dryocsecretbox::VecBox =
        DryocSecretBox::encrypt(message, &nonce, &secret_key);
    let decrypted: Vec<u8> = dryocsecretbox
        .decrypt(&nonce, &secret_key)
        .expect("unable to decrypt");

    assert_eq!(message, decrypted.as_slice());
}

#[wasm_bindgen_test]
fn generichash_known_answer() {
    let mut hash = [0u8; 32];
    crypto_generichash(&mut hash, b"abc", None).expect("hash failed");

    assert_eq!(
        &hash,
        &[
            0xbd, 0xdd, 0x81, 0x3c, 0x63, 0x42, 0x39, 0x72, 0x31, 0x71, 0xef, 0x3f, 0xee, 0x98,
            0x57, 0x9b, 0x94, 0x96, 0x4e, 0x3b, 0xb1, 0xcb, 0x3e, 0x42, 0x72, 0x62, 0xc8, 0xc0,
            0x68, 0xd5, 0x23, 0x19,
        ]
    );
}