summaryrefslogtreecommitdiff
path: root/webhook/src/handler/tests/utils.rs
blob: f8cdac2e5dedb224d28c48bbc4a18c7e8be9b57f (plain)
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
pub fn generate_keypair() -> (
    String,
    [u8; libsodium_sys::crypto_sign_ed25519_SECRETKEYBYTES as usize],
) {
    use libsodium_sys::crypto_sign_ed25519_keypair;
    let pk_s: String;

    let mut pk = [0; libsodium_sys::crypto_sign_ed25519_PUBLICKEYBYTES as usize];
    let mut sk = [0; libsodium_sys::crypto_sign_ed25519_SECRETKEYBYTES as usize];

    let pk_p = pk.as_mut_ptr();
    let sk_p = sk.as_mut_ptr();

    // generate keypair
    unsafe {
        if crypto_sign_ed25519_keypair(pk_p, sk_p) < 0 {
            panic!("keypair generation failed!");
        }
    };

    pk_s = hex::encode(pk);
    return (pk_s, sk);
}

pub fn sign_message(
    msg: Vec<u8>,
    sk: [u8; libsodium_sys::crypto_sign_ed25519_SECRETKEYBYTES as usize],
) -> String {
    use libc::c_ulonglong;
    use libsodium_sys::crypto_sign_ed25519_detached;

    let len = msg.len();
    let mut signature_len: c_ulonglong = 0;
    let mut str = [0; 64];
    unsafe {
        crypto_sign_ed25519_detached(
            str.as_mut_ptr(),
            &mut signature_len,
            msg.as_ptr(),
            len as u64,
            sk.as_ptr(),
        );
    };

    return hex::encode(str);
}