blob: 24c2277557144e702f0e9acd862cd3a751ff1fbb (
plain) (
blame)
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
|
use num_bigint::RandBigInt;
pub struct DHKeyPair {
pub p: num_bigint::BigUint,
pub g: num_bigint::BigUint,
pub pubkey: num_bigint::BigUint,
privkey: num_bigint::BigUint,
}
impl DHKeyPair {
pub fn new(p: num_bigint::BigUint, g: num_bigint::BigUint) -> DHKeyPair {
let privkey = rand::thread_rng().gen_biguint_below(&p);
let pubkey = g.modpow(&privkey, &p);
DHKeyPair {
p,
g,
pubkey,
privkey,
}
}
pub fn key_exchange(
&self,
other_pubkey: &num_bigint::BigUint,
) -> num_bigint::BigUint {
other_pubkey.modpow(&self.privkey, &self.p)
}
}
|