node_sys/module/
crypto.rs

1use crate::{
2    class::{
3        crypto::{Cipher, Decipher, DiffieHellman, DiffieHellmanGroup, Ecdh, Hash, Hmac, KeyObject, Sign, Verify},
4        Buffer,
5    },
6    interface::{
7        CryptoConstants,
8        GenerateKeyPairOptions,
9        GenerateKeyPairSyncReturn,
10        ScryptOptions,
11        StreamTransformOptions,
12        StreamWritableOptions,
13    },
14};
15use js_sys::Function;
16use wasm_bindgen::prelude::*;
17
18#[wasm_bindgen(module = "crypto")]
19extern {
20    //*******************//
21    // Module Properties //
22    //*******************//
23
24    pub static constants: CryptoConstants;
25
26    //****************//
27    // Module Methods //
28    //****************//
29
30    #[wasm_bindgen(js_name = "createCipheriv")]
31    pub fn create_cipheriv(
32        algorithm: &str,
33        key: &JsValue,
34        iv: &JsValue,
35        options: Option<StreamTransformOptions>,
36    ) -> Cipher;
37
38    #[wasm_bindgen(js_name = "createDecipheriv")]
39    pub fn create_decipheriv(
40        algorithm: &str,
41        key: &JsValue,
42        iv: &JsValue,
43        options: Option<StreamTransformOptions>,
44    ) -> Decipher;
45
46    #[wasm_bindgen(js_name = "createDiffieHellman")]
47    pub fn create_diffie_hellman_with_prime(
48        prime: &JsValue,
49        prime_encoding: Option<&str>,
50        generator: &JsValue,
51        generator_encoding: Option<&str>,
52    ) -> DiffieHellman;
53
54    #[wasm_bindgen(js_name = "createDiffieHellman")]
55    pub fn create_diffie_hellman(prime_length: u32, generator: &JsValue) -> DiffieHellman;
56
57    #[wasm_bindgen(js_name = "createECDH")]
58    pub fn create_ecdh(curve_name: &str) -> Ecdh;
59
60    #[wasm_bindgen(js_name = "createHash")]
61    pub fn create_hash(algorithm: &str, options: Option<StreamTransformOptions>) -> Hash;
62
63    #[wasm_bindgen(js_name = "createHmac")]
64    pub fn create_hmac(algorithm: &str, key: &JsValue, option: Option<StreamTransformOptions>) -> Hmac;
65
66    #[wasm_bindgen(js_name = "createPrivateKey")]
67    pub fn create_private_key(key: &JsValue) -> KeyObject;
68
69    #[wasm_bindgen(js_name = "createPublicKey")]
70    pub fn create_public_key(key: &JsValue) -> KeyObject;
71
72    #[wasm_bindgen(js_name = "createSecretKey")]
73    pub fn create_secret_key(key: &Buffer) -> KeyObject;
74
75    #[wasm_bindgen(js_name = "createSign")]
76    pub fn create_sign(algorithm: &str, options: Option<StreamWritableOptions>) -> Sign;
77
78    #[wasm_bindgen(js_name = "createVerify")]
79    pub fn create_verify(algorithm: &str, options: Option<StreamWritableOptions>) -> Verify;
80
81    #[wasm_bindgen(js_name = "generateKeyPair")]
82    pub fn generate_key_pair(kind: &str, options: &GenerateKeyPairOptions, callback: &Function);
83
84    #[wasm_bindgen(js_name = "generateKeyPairSync")]
85    pub fn generate_key_pair_sync(kind: &str, options: &GenerateKeyPairOptions) -> GenerateKeyPairSyncReturn;
86
87    #[wasm_bindgen(js_name = "getCiphers")]
88    pub fn get_ciphers() -> Box<[JsValue]>;
89
90    #[wasm_bindgen(js_name = "getCurves")]
91    pub fn get_curves() -> Box<[JsValue]>;
92
93    #[wasm_bindgen(js_name = "getDiffieHellman")]
94    pub fn get_diffie_hellman(group_name: &str) -> DiffieHellmanGroup;
95
96    #[wasm_bindgen(js_name = "getFips")]
97    pub fn get_fips(group_name: &str) -> DiffieHellmanGroup;
98
99    #[wasm_bindgen(js_name = "getHashes")]
100    pub fn get_hashes() -> Box<[JsValue]>;
101
102    #[wasm_bindgen(js_name = "pbkdf2")]
103    pub fn pbkdf2(password: &JsValue, salt: &JsValue, iterations: u32, keylen: u32, digest: &str, callback: &Function);
104
105    #[wasm_bindgen(js_name = "pbkdf2Sync")]
106    pub fn pbkdf2_sync(password: &JsValue, salt: &JsValue, iterations: u32, keylen: u32, digest: &str) -> Buffer;
107
108    #[wasm_bindgen(js_name = "privateDecrypt")]
109    pub fn private_decrypt(private_key: &JsValue, buffer: &JsValue) -> Buffer;
110
111    #[wasm_bindgen(js_name = "privateEncrypt")]
112    pub fn private_encrypt(private_key: &JsValue, buffer: &JsValue) -> Buffer;
113
114    #[wasm_bindgen(js_name = "publicDecrypt")]
115    pub fn public_decrypt(key: &JsValue, buffer: &JsValue) -> Buffer;
116
117    #[wasm_bindgen(js_name = "publicEncrypt")]
118    pub fn public_encrypt(key: &JsValue, buffer: &JsValue) -> Buffer;
119
120    #[wasm_bindgen(js_name = "randomBytes")]
121    pub fn random_bytes(size: f64, callback: Option<&Function>) -> Buffer;
122
123    #[wasm_bindgen(js_name = "randomFillSync")]
124    pub fn random_fill_sync(buffer: &JsValue, offset: Option<f64>, size: Option<f64>) -> JsValue;
125
126    #[wasm_bindgen(js_name = "randomFill")]
127    pub fn random_fill(buffer: &JsValue, offset: Option<f64>, size: Option<f64>, callback: &Function);
128
129    pub fn scrypt(password: &JsValue, salt: &JsValue, keylen: f64, options: Option<ScryptOptions>, callback: &Function);
130
131    #[wasm_bindgen(js_name = "scryptSync")]
132    pub fn scrypt_sync(password: &JsValue, salt: &JsValue, keylen: f64, options: Option<ScryptOptions>) -> Buffer;
133
134    #[wasm_bindgen(js_name = "setEngine")]
135    pub fn set_engine(engine: &str, flags: Option<i32>);
136
137    #[wasm_bindgen(js_name = "setFips")]
138    pub fn set_fips(enable: bool);
139
140    pub fn sign(algorithm: &JsValue, data: &JsValue, key: &JsValue) -> Buffer;
141
142    #[wasm_bindgen(js_name = "timingSafeEqual")]
143    pub fn timing_safe_equal(a: &JsValue, b: &JsValue) -> bool;
144
145    pub fn verify(algorithm: &JsValue, data: &JsValue, key: &JsValue, signature: &JsValue) -> bool;
146}