author | Dan |
Mon, 16 Jun 2008 19:07:15 -0400 | |
changeset 577 | 5118610ce160 |
parent 436 | 242353360e37 |
permissions | -rw-r--r-- |
436
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
1 |
/* |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
2 |
* The Diffie-Hellman key exchange protocol. |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
3 |
*/ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
4 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
5 |
// Our prime number as a base for operations. |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
6 |
var dh_prime = '82818079787776757473727170696867666564636261605958575655545352515049484746454443424140393837363534333231302928272625242322212019181716151413121110987654321'; |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
7 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
8 |
// g, a primitive root used as an exponent |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
9 |
// (2 and 5 are acceptable, but BigInt is faster with odd numbers) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
10 |
var dh_g = '5'; |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
11 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
12 |
/** |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
13 |
* Generates a Diffie-Hellman private key |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
14 |
* @return string(BigInt) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
15 |
*/ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
16 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
17 |
function dh_gen_private() |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
18 |
{ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
19 |
return EnanoMath.RandomInt(256); |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
20 |
} |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
21 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
22 |
/** |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
23 |
* Calculates the public key from the private key |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
24 |
* @param string(BigInt) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
25 |
* @return string(BigInt) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
26 |
*/ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
27 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
28 |
function dh_gen_public(b) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
29 |
{ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
30 |
return EnanoMath.PowMod(dh_g, b, dh_prime); |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
31 |
} |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
32 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
33 |
/** |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
34 |
* Calculates the shared secret. |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
35 |
* @param string(BigInt) Our private key |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
36 |
* @param string(BigInt) Remote party's public key |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
37 |
* @return string(BigInt) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
38 |
*/ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
39 |
|
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
40 |
function dh_gen_shared_secret(b, A) |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
41 |
{ |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
42 |
return EnanoMath.PowMod(A, b, dh_prime); |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
43 |
} |
242353360e37
Added support for Diffie-Hellman key exchange during login. w00t!
Dan
parents:
diff
changeset
|
44 |