summaryrefslogtreecommitdiff
path: root/src/se/leap/leapclient/LeapSRPSession.java
diff options
context:
space:
mode:
authorParménides GV <parmegv@sdf.org>2013-04-08 20:48:17 +0200
committerParménides GV <parmegv@sdf.org>2013-04-08 20:48:17 +0200
commit47e489f521c1f69c357880234a8aa8b5408595aa (patch)
treec5bdd2ed90591bf12807d45b68b17dc09d3f8231 /src/se/leap/leapclient/LeapSRPSession.java
parentbfee299e998143c801b231060fd5fdb5eb7204b2 (diff)
Done constructor of LeapSRPSession: it's OK.
Next step: fix response() calculations.
Diffstat (limited to 'src/se/leap/leapclient/LeapSRPSession.java')
-rw-r--r--src/se/leap/leapclient/LeapSRPSession.java16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/se/leap/leapclient/LeapSRPSession.java b/src/se/leap/leapclient/LeapSRPSession.java
index f81e1637..e5860dd8 100644
--- a/src/se/leap/leapclient/LeapSRPSession.java
+++ b/src/se/leap/leapclient/LeapSRPSession.java
@@ -61,7 +61,8 @@ public class LeapSRPSession {
}
this.params = params;
this.g = new BigInteger(1, params.g);
- this.N = new BigInteger(1, params.N);
+ byte[] N_trimmed = Util.trim(params.N);
+ this.N = new BigInteger(1, N_trimmed);
if( abytes != null ) {
A_LEN = 8*abytes.length;
/* TODO Why did they put this condition?
@@ -84,14 +85,15 @@ public class LeapSRPSession {
clientHash = newDigest();
// H(N)
- byte[] hn = newDigest().digest(params.N);
+ byte[] hn = newDigest().digest(N_trimmed);
// H(g)
byte[] hg = newDigest().digest(params.g);
// clientHash = H(N) xor H(g)
byte[] hxg = xor(hn, hg, hg.length);
clientHash.update(hxg);
// clientHash = H(N) xor H(g) | H(U)
- clientHash.update(newDigest().digest(username.getBytes()));
+ byte[] username_digest = newDigest().digest(username.getBytes());
+ clientHash.update(username_digest);
// clientHash = H(N) xor H(g) | H(U) | s
clientHash.update(params.s);
K = null;
@@ -124,7 +126,7 @@ public class LeapSRPSession {
public byte[] response(byte[] Bbytes) throws NoSuchAlgorithmException {
// clientHash = H(N) xor H(g) | H(U) | s | A | B
- clientHash.update(Bbytes);
+ clientHash.update(Util.trim(Bbytes));
/*
var B = new BigInteger(ephemeral, 16);
@@ -157,7 +159,7 @@ public class LeapSRPSession {
public byte[] getU(byte[] Abytes, byte[] Bbytes) {
- MessageDigest u_digest = Util.newDigest();
+ MessageDigest u_digest = newDigest();
u_digest.update(Abytes);
u_digest.update(Bbytes);
return new BigInteger(1, u_digest.digest()).toByteArray();
@@ -195,7 +197,7 @@ public class LeapSRPSession {
{
MessageDigest md = null;
try {
- md = MessageDigest.getInstance("SHA256");
+ md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
@@ -248,6 +250,6 @@ public class LeapSRPSession {
public byte[] xor(byte[] b1, byte[] b2, int length)
{
//TODO Check if length matters in the order, when b2 is smaller than b1 or viceversa
- return new BigInteger(b1).xor(new BigInteger(b2)).toByteArray();
+ return new BigInteger(1, b1).xor(new BigInteger(1, b2)).toByteArray();
}
}