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);
}
|