diff options
author | ausiv4 <ausiv4@eb105b4a-77de-11de-a249-6bf219df57d5> | 2009-07-24 14:01:04 +0000 |
---|---|---|
committer | ausiv4 <ausiv4@eb105b4a-77de-11de-a249-6bf219df57d5> | 2009-07-24 14:01:04 +0000 |
commit | 67f64e7564d5eea4cb71afd719786fd7977f4b98 (patch) | |
tree | 3be51d7f78d37ab3560d4982b595842d1643ae0d /javascript/srp.js | |
parent | 8d359f4d8e27bf5992508bc11486a482d270d6f8 (diff) |
Merge proper-random with trunk.
Diffstat (limited to 'javascript/srp.js')
-rw-r--r-- | javascript/srp.js | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/javascript/srp.js b/javascript/srp.js index 9c84aa9..4fcc1c9 100644 --- a/javascript/srp.js +++ b/javascript/srp.js @@ -17,12 +17,14 @@ var srp_K = null; var srp_M = null; var srp_M2 = null; var xhr; +var rng; + var srp_url = window.location.protocol+"//"+window.location.host+"/srp/"; function srp_register() { - srp_N = str2bigInt(srp_Nstr, 16, 0); - srp_g = str2bigInt("2", 10, 0); - srp_k = str2bigInt("c46d46600d87fef149bd79b81119842f3c20241fda67d06ef412d8f6d9479c58", 16, 0); + srp_N = new BigInteger(srp_Nstr, 16); + srp_g = new BigInteger("2"); + srp_k = new BigInteger("c46d46600d87fef149bd79b81119842f3c20241fda67d06ef412d8f6d9479c58", 16); srp_I = document.getElementById("srp_username").value; srp_register_salt(srp_I); return false; @@ -64,8 +66,8 @@ function srp_register_receive_salt() { s = innerxml(xhr.responseXML.getElementsByTagName("salt")[0]); srp_x = srp_calculate_x(s); - v = powMod(srp_g, srp_x, srp_N); - srp_register_send_verifier(bigInt2str(v, 16)); + v = srp_g.modPow(srp_x, srp_N); + srp_register_send_verifier(v.toString(16)); } else if(xhr.responseXML.getElementsByTagName("error").length > 0) { @@ -115,15 +117,16 @@ function srp_register_user() }; function srp_identify() { - srp_N = str2bigInt(srp_Nstr, 16, 0); - srp_g = str2bigInt("2", 10, 0); - srp_k = str2bigInt("c46d46600d87fef149bd79b81119842f3c20241fda67d06ef412d8f6d9479c58", 16, 0); - srp_a = randBigInt(32, 1); + srp_N = new BigInteger(srp_Nstr, 16); + srp_g = new BigInteger("2"); + srp_k = new BigInteger("c46d46600d87fef149bd79b81119842f3c20241fda67d06ef412d8f6d9479c58", 16); + rng = new SecureRandom(); + srp_a = new BigInteger(32, rng); // A = g**a % N - srp_A = powMod(srp_g,srp_a,srp_N); + srp_A = srp_g.modPow(srp_a, srp_N); srp_I = document.getElementById("srp_username").value; - srp_Astr = bigInt2str(srp_A, 16) + srp_Astr = srp_A.toString(16); // C -> S: A | I srp_send_identity(srp_Astr, srp_I); return false; @@ -178,29 +181,28 @@ function srp_receive_salts() function srp_calculate_x(s) { var p = document.getElementById("srp_password").value; - return str2bigInt(SHA256(s + SHA256(srp_I + ":" + p)), 16, 0); + return new BigInteger(SHA256(s + SHA256(srp_I + ":" + p)), 16); }; function srp_calculations(s, B) -{ - +{ //S -> C: s | B - srp_B = str2bigInt(B, 16, 0); + srp_B = new BigInteger(B, 16); srp_Bstr = B; // u = H(A,B) - srp_u = str2bigInt(SHA256(srp_Astr + srp_Bstr), 16, 0); + srp_u = new BigInteger(SHA256(srp_Astr + srp_Bstr), 16); // x = H(s, H(I:p)) srp_x = srp_calculate_x(s); //S = (B - kg^x) ^ (a + ux) - var kgx = mult(srp_k, powMod(srp_g, srp_x, srp_N)); - var aux = add(srp_a, mult(srp_u, srp_x)); - srp_S = powMod(sub(srp_B, kgx), aux, srp_N); + var kgx = srp_k.multiply(srp_g.modPow(srp_x, srp_N)); + var aux = srp_a.add(srp_u.multiply(srp_x)); + srp_S = srp_B.subtract(kgx).modPow(aux, srp_N); // M = H(H(N) xor H(g), H(I), s, A, B, K) - var Mstr = bigInt2str(srp_A, 16) + bigInt2str(srp_B,16) + bigInt2str(srp_S,16); + var Mstr = srp_A.toString(16) + srp_B.toString(16) + srp_S.toString(16); srp_M = SHA256(Mstr); srp_send_hash(srp_M); //M2 = H(A, M, K) - srp_M2 = SHA256(bigInt2str(srp_A, 16)+srp_M+bigInt2str(srp_S, 16)); + srp_M2 = SHA256(srp_A.toString(16) + srp_M + srp_S.toString(16)); }; |