Oregami
Repositories/oxedyne/fe2o3

oxedyne/fe2o3/fe2o3_crypto/src/wasm/kem.rs

2.3 KiB, 7 runs

created by r1870400018:252, which is this file's identity for as long as the history lasts, whatever it is later renamed to

download · who wrote it · its history

1use crate::enc::saber::{
2 self,
3 LightSaber,
4 Saber,
5 FireSaber,
6 SaberAlgorithm,
7};
8use console_error_panic_hook;
9use wasm_bindgen::prelude::*;
10
11#[wasm_bindgen]
12extern "C" {
13 fn alert(s: &str);
14}
15
16#[wasm_bindgen]
17pub fn greet(name: &str) {
18 alert(&format!("Hello, {}!", name));
19}
20
21#[wasm_bindgen]
22pub fn key_encap(
23 scheme_id: u8,
24 pk_key: &[u8],
25 pk_seed: &[u8],
26 mut secret: &mut [u8],
27) ->
28 Vec<u8> // Ciphertext
29{
30 console_error_panic_hook::set_once();
31 match scheme_id {
32 saber::LIGHTSABER_ID => {
33 let scheme = saber::LightSaber;
34 return scheme.generic_kem_encap_wasm::<
35 {LightSaber::L},
36 {LightSaber::POLY_VEC_BYTES},
37 {LightSaber::L * LightSaber::POLY_VEC_BYTES},
38 {LightSaber::POLY_VEC_COMPRESSED_BYTES},
39 {LightSaber::POLY_COIN_BYTES},
40 {LightSaber::L * LightSaber::POLY_COIN_BYTES},
41 {LightSaber::SCALE_BYTES_KEM},
42 >(
43 pk_key,
44 pk_seed,
45 &mut secret,
46 ).unwrap_or_default();
47 },
48 saber::SABER_ID => {
49 let scheme = saber::Saber;
50 return scheme.generic_kem_encap_wasm::<
51 {Saber::L},
52 {Saber::POLY_VEC_BYTES},
53 {Saber::L * Saber::POLY_VEC_BYTES},
54 {Saber::POLY_VEC_COMPRESSED_BYTES},
55 {Saber::POLY_COIN_BYTES},
56 {Saber::L * Saber::POLY_COIN_BYTES},
57 {Saber::SCALE_BYTES_KEM},
58 >(
59 pk_key,
60 pk_seed,
61 &mut secret,
62 ).unwrap_or_default();
63 },
64 saber::FIRESABER_ID => {
65 let scheme = saber::FireSaber;
66 return scheme.generic_kem_encap_wasm::<
67 {FireSaber::L},
68 {FireSaber::POLY_VEC_BYTES},
69 {FireSaber::L * FireSaber::POLY_VEC_BYTES},
70 {FireSaber::POLY_VEC_COMPRESSED_BYTES},
71 {FireSaber::POLY_COIN_BYTES},
72 {FireSaber::L * FireSaber::POLY_COIN_BYTES},
73 {FireSaber::SCALE_BYTES_KEM},
74 >(
75 pk_key,
76 pk_seed,
77 &mut secret,
78 ).unwrap_or_default();
79 },
80 _ => unimplemented!(),
81 }
82
83}