aboutsummaryrefslogtreecommitdiff
path: root/srp/src/server.rs
diff options
context:
space:
mode:
authorMasih Yeganeh <goodboy.php@gmail.com>2020-10-07 22:45:18 +0330
committerGitHub <noreply@github.com>2020-10-07 12:15:18 -0700
commit00d7d43e619a6bebe17459e620edd2d123c84bcf (patch)
treebdbd1bd17160c914469dfccbf3b1f3ea99c3e4f3 /srp/src/server.rs
parent9f42267e1a968c26b9785af79f56dd3cdc9ddf5a (diff)
downloadPAKEs-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.rs36
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, &params.n)) % &params.n;
let s = powm(&t, &b, &params.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",