diff options
author | Josh Brown <josh9051@gmail.com> | 2021-12-20 05:44:13 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-20 10:44:13 +0000 |
commit | e38144177199721c3bf3f5e2cde403c2ce29c67e (patch) | |
tree | 468b1cf281b5c0a11f7e3e8d34ef1f705832fa32 /srp/src/client.rs | |
parent | a74a157d66586cf7c608ef5a712badde6325dfb8 (diff) | |
download | PAKEs-e38144177199721c3bf3f5e2cde403c2ce29c67e.tar.xz |
srp: replace custom powm with modpow (#78)
Diffstat (limited to 'srp/src/client.rs')
-rw-r--r-- | srp/src/client.rs | 9 |
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()) } |