aboutsummaryrefslogtreecommitdiff
path: root/srp/src/client.rs
diff options
context:
space:
mode:
authorJosh Brown <josh9051@gmail.com>2021-12-20 05:44:13 -0500
committerGitHub <noreply@github.com>2021-12-20 10:44:13 +0000
commite38144177199721c3bf3f5e2cde403c2ce29c67e (patch)
tree468b1cf281b5c0a11f7e3e8d34ef1f705832fa32 /srp/src/client.rs
parenta74a157d66586cf7c608ef5a712badde6325dfb8 (diff)
downloadPAKEs-e38144177199721c3bf3f5e2cde403c2ce29c67e.tar.xz
srp: replace custom powm with modpow (#78)
Diffstat (limited to 'srp/src/client.rs')
-rw-r--r--srp/src/client.rs9
1 files changed, 4 insertions, 5 deletions
diff --git a/srp/src/client.rs b/srp/src/client.rs
index d47983e..815b195 100644
--- a/srp/src/client.rs
+++ b/srp/src/client.rs
@@ -62,7 +62,6 @@ use std::marker::PhantomData;
use digest::{Digest, Output};
use num_bigint::BigUint;
-use crate::tools::powm;
use crate::types::{SrpAuthError, SrpGroup};
/// SRP client state before handshake with the server.
@@ -102,7 +101,7 @@ impl<'a, D: Digest> SrpClient<'a, D> {
/// Create new SRP client instance.
pub fn new(a: &[u8], params: &'a SrpGroup) -> Self {
let a = BigUint::from_bytes_be(a);
- let a_pub = params.powm(&a);
+ let a_pub = params.modpow(&a);
Self {
params,
@@ -115,14 +114,14 @@ impl<'a, D: Digest> SrpClient<'a, D> {
/// Get password verfier for user registration on the server
pub fn get_password_verifier(&self, private_key: &[u8]) -> Vec<u8> {
let x = BigUint::from_bytes_be(private_key);
- let v = self.params.powm(&x);
+ let v = self.params.modpow(&x);
v.to_bytes_be()
}
fn calc_key(&self, b_pub: &BigUint, x: &BigUint, u: &BigUint) -> Output<D> {
let n = &self.params.n;
let k = self.params.compute_k::<D>();
- let interm = (k * self.params.powm(x)) % n;
+ let interm = (k * self.params.modpow(x)) % n;
// Because we do operation in modulo N we can get: (kv + g^b) < kv
let v = if *b_pub > interm {
(b_pub - &interm) % n
@@ -130,7 +129,7 @@ impl<'a, D: Digest> SrpClient<'a, D> {
(n + b_pub - &interm) % n
};
// S = |B - kg^x| ^ (a + ux)
- let s = powm(&v, &(&self.a + (u * x) % n), n);
+ let s = v.modpow(&(&self.a + (u * x) % n), n);
D::digest(&s.to_bytes_be())
}