diff options
author | Masih Yeganeh <goodboy.php@gmail.com> | 2020-10-07 22:45:18 +0330 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-07 12:15:18 -0700 |
commit | 00d7d43e619a6bebe17459e620edd2d123c84bcf (patch) | |
tree | bdbd1bd17160c914469dfccbf3b1f3ea99c3e4f3 /srp/src/server.rs | |
parent | 9f42267e1a968c26b9785af79f56dd3cdc9ddf5a (diff) | |
download | PAKEs-00d7d43e619a6bebe17459e620edd2d123c84bcf.tar.xz |
Bump digest, sha-1, and sha2 dependencies to v0.9 (#37)
Diffstat (limited to 'srp/src/server.rs')
-rw-r--r-- | srp/src/server.rs | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/srp/src/server.rs b/srp/src/server.rs index f30608a..9be1948 100644 --- a/srp/src/server.rs +++ b/srp/src/server.rs @@ -36,8 +36,7 @@ //! encryption. use std::marker::PhantomData; -use digest::Digest; -use generic_array::GenericArray; +use digest::{Digest, Output}; use num_bigint::BigUint; use crate::tools::powm; @@ -57,7 +56,7 @@ pub struct SrpServer<D: Digest> { a_pub: BigUint, b_pub: BigUint, - key: GenericArray<u8, D::OutputSize>, + key: Output<D>, d: PhantomData<D>, } @@ -86,14 +85,14 @@ impl<D: Digest> SrpServer<D> { // H(A || B) let u = { let mut d = D::new(); - d.input(&a_pub.to_bytes_be()); - d.input(&b_pub.to_bytes_be()); - d.result() + d.update(&a_pub.to_bytes_be()); + d.update(&b_pub.to_bytes_be()); + d.finalize() }; let d = Default::default(); //(Av^u) ^ b let key = { - let u = BigUint::from_bytes_be(&u); + let u = BigUint::from_bytes_be(u.as_slice()); let t = (&a_pub * powm(&v, &u, ¶ms.n)) % ¶ms.n; let s = powm(&t, &b, ¶ms.n); D::digest(&s.to_bytes_be()) @@ -119,29 +118,26 @@ impl<D: Digest> SrpServer<D> { /// Get shared secret between user and the server. (do not forget to verify /// that keys are the same!) - pub fn get_key(&self) -> GenericArray<u8, D::OutputSize> { + pub fn get_key(&self) -> Output<D> { self.key.clone() } /// Process user proof of having the same shared secret and compute /// server proof for sending to the user. - pub fn verify( - &self, - user_proof: &[u8], - ) -> Result<GenericArray<u8, D::OutputSize>, SrpAuthError> { + pub fn verify(&self, user_proof: &[u8]) -> Result<Output<D>, SrpAuthError> { // M = H(A, B, K) let mut d = D::new(); - d.input(&self.a_pub.to_bytes_be()); - d.input(&self.b_pub.to_bytes_be()); - d.input(&self.key); + d.update(&self.a_pub.to_bytes_be()); + d.update(&self.b_pub.to_bytes_be()); + d.update(&self.key); - if user_proof == d.result().as_slice() { + if user_proof == d.finalize().as_slice() { // H(A, M, K) let mut d = D::new(); - d.input(&self.a_pub.to_bytes_be()); - d.input(user_proof); - d.input(&self.key); - Ok(d.result()) + d.update(&self.a_pub.to_bytes_be()); + d.update(user_proof); + d.update(&self.key); + Ok(d.finalize()) } else { Err(SrpAuthError { description: "Incorrect user proof", |