1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#![no_std]

extern crate alloc;
extern crate argon2;
extern crate chacha20poly1305;
extern crate crypto_box as _crypto_box;
extern crate ed25519_dalek;
extern crate hkdf;
extern crate hmac;
extern crate pbkdf2;
extern crate rand_core;
extern crate scrypt;
extern crate sha2;
extern crate x25519_dalek;
extern crate zeroize;

pub use alloc::{vec, vec::Vec};
pub use rand_core::CryptoRngCore;

#[derive(Debug)]
pub enum Error {
    DecodingFailed,
    InvalidPadding,
    InvalidOffset,
    KeyDerivationFailed,
    InvalidKey,
    VerificationFailed,
    SigningFailed,
    EncryptionFailed,
    DecryptionFailed,
    InvalidNonce,
    IncrementFailed,
    ConversionFailed,
    InvalidInput,
    CombinationFailed,
}

#[derive(Debug)]
pub enum Encoding {
    Hex,
    Base16,
    Base32,
    Base32Unpadded,
    Base64,
    Base64Unpadded,
    Base64Url,
    Base64UrlUnpadded,
}

mod aead;
mod base;
mod crypto_box;
mod decode;
mod encode;
mod hash;
mod kdf;
mod key_exchange;
mod key_pair;
mod mac;
mod numbers;
mod pad;
mod random;
mod shamir;
mod sign;
mod transcode;
mod xor;
mod zero;

pub use aead::{
    chacha20poly1305_decrypt, chacha20poly1305_encrypt, chacha20poly1305_generate_key,
    chacha20poly1305_generate_nonce, ChaCha20Poly1305Key, ChaCha20Poly1305Nonce,
    CHACHA20_POLY1305_KEY_SIZE, CHACHA20_POLY1305_NONCE_SIZE, CHACHA20_POLY1305_TAG_SIZE,
};
pub use crypto_box::{
    x25519_decrypt, x25519_encrypt, x25519_generate_key_pair, x25519_get_private_key,
    x25519_get_public_key, xchacha20poly1305_generate_nonce, X25519KeyPair, X25519PrivateKey,
    X25519PublicKey, XChaCha20Poly1305Nonce, X25519_KEY_PAIR_SIZE, X25519_PRIVATE_KEY_SIZE,
    X25519_PUBLIC_KEY_SIZE, XCHACHA20_POLY1305_NONCE_SIZE,
};
pub use decode::decode;
pub use encode::encode;
pub use hash::{
    blake2b, sha512, Blake2bDigest, Sha512Digest, BLAKE2B_DIGEST_SIZE, SHA512_DIGEST_SIZE,
};
pub use kdf::{argon2d, hkdf_sha512, pbkdf2_sha512, scrypt};
pub use key_exchange::{x25519_key_exchange, X25519SharedSecret, X25519_SHARED_SECRET_SIZE};
pub use mac::{
    blake2b_mac, blake2b_verify, hmac_sha512, hmac_sha512_verify, Blake2bMac, HmacSha512,
    BLAKE2B_MAC_SIZE, HMAC_SHA512_SIZE,
};
pub use numbers::{
    increment_nonce, read_f32_be, read_f32_le, read_f64_be, read_f64_le, read_i128_be,
    read_i128_le, read_i16_be, read_i16_le, read_i32_be, read_i32_le, read_i64_be, read_i64_le,
    read_i8, read_isize_be, read_isize_le, read_u128_be, read_u128_le, read_u16_be, read_u16_le,
    read_u32_be, read_u32_le, read_u64_be, read_u64_le, read_u8, read_usize_be, read_usize_le,
    write_f32_be, write_f32_le, write_f64_be, write_f64_le, write_i128_be, write_i128_le,
    write_i16_be, write_i16_le, write_i32_be, write_i32_le, write_i64_be, write_i64_le, write_i8,
    write_isize_be, write_isize_le, write_u128_be, write_u128_le, write_u16_be, write_u16_le,
    write_u32_be, write_u32_le, write_u64_be, write_u64_le, write_u8, write_usize_be,
    write_usize_le,
};
pub use pad::{pad, unpad};
pub use random::get_random_bytes;
pub use shamir::{
    shamir_combine, shamir_combine_unpadded, shamir_split, shamir_split_unpadded, ShamirSecret,
    ShamirShare, SHAMIR_SECRET_SIZE, SHAMIR_SHARE_SIZE,
};
pub use sign::{
    ed25519_generate_key_pair, ed25519_get_private_key, ed25519_get_public_key, ed25519_sign,
    ed25519_verify, Ed25519KeyPair, Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature,
    ED25519_KEY_PAIR_SIZE, ED25519_PRIVATE_KEY_SIZE, ED25519_PUBLIC_KEY_SIZE,
    ED25519_SIGNATURE_SIZE,
};
pub use transcode::transcode;
pub use xor::xor;
pub use zero::zeroize;