Skip to main content

workflow_node/node_sys/module/
crypto.rs

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