aboutsummaryrefslogtreecommitdiff
path: root/srp
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-02-17 22:30:28 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-02-17 22:30:28 +0100
commit350e0dc3582af9a0b8c51968937dc096ae786a4a (patch)
tree0e11ae792d509c7d59657c6c35b7f78c5dcf37b3 /srp
parent02ee9799707700f4bf44a0ff9d9e805b6508258f (diff)
downloadPAKEs-350e0dc3582af9a0b8c51968937dc096ae786a4a.tar.xz
include username in client proof
Diffstat (limited to 'srp')
-rw-r--r--srp/src/client.rs1
-rw-r--r--srp/src/server.rs6
-rw-r--r--srp/src/utils.rs2
3 files changed, 9 insertions, 0 deletions
diff --git a/srp/src/client.rs b/srp/src/client.rs
index 263e5f3..eed1153 100644
--- a/srp/src/client.rs
+++ b/srp/src/client.rs
@@ -204,6 +204,7 @@ impl<'a, D: Digest> SrpClient<'a, D> {
let m1 = compute_m1::<D>(
self.params,
+ identity_hash.as_slice(),
&a_pub.to_bytes_be(),
&b_pub.to_bytes_be(),
&key.to_bytes_be(),
diff --git a/srp/src/server.rs b/srp/src/server.rs
index b7d3eff..e1eb331 100644
--- a/srp/src/server.rs
+++ b/srp/src/server.rs
@@ -124,6 +124,7 @@ impl<'a, D: Digest> SrpServer<'a, D> {
/// v is the provided during initial user registration
pub fn process_reply(
&self,
+ username: &str,
b: &[u8],
v: &[u8],
a_pub: &[u8],
@@ -142,10 +143,15 @@ impl<'a, D: Digest> SrpServer<'a, D> {
let u = compute_u::<D>(&a_pub.to_bytes_be(), &b_pub.to_bytes_be());
+ let mut d = D::new();
+ d.update(username);
+ let identity_hash = d.finalize();
+
let key = self.compute_premaster_secret(&a_pub, &v, &u, &b);
let m1 = compute_m1::<D>(
self.params,
+ identity_hash.as_slice(),
&a_pub.to_bytes_be(),
&b_pub.to_bytes_be(),
&key.to_bytes_be(),
diff --git a/srp/src/utils.rs b/srp/src/utils.rs
index 2bd7639..d053f5d 100644
--- a/srp/src/utils.rs
+++ b/srp/src/utils.rs
@@ -28,6 +28,7 @@ pub fn compute_k<D: Digest>(params: &SrpGroup) -> BigUint {
// M1 = H(H(N) XOR H(g) | H(U) | s | A | B | K)
pub fn compute_m1<D: Digest>(
params: &SrpGroup,
+ identity_hash: &[u8],
a_pub: &[u8],
b_pub: &[u8],
key: &[u8],
@@ -44,6 +45,7 @@ pub fn compute_m1<D: Digest>(
let mut d = D::new();
d.update(ng_xor);
+ d.update(identity_hash);
d.update(a_pub);
d.update(b_pub);
d.update(key);