includes/clientside/static/diffiehellman.js
author Dan
Wed, 07 May 2008 14:05:31 -0400
changeset 547 0a2c1ce32d91
parent 436 242353360e37
permissions -rw-r--r--
Added ETag on TinyMCE gzip; changed ETag format for standard pages so as to include user and login info to control caching when logged in or out

/*
 * The Diffie-Hellman key exchange protocol.
 */

// Our prime number as a base for operations.
var dh_prime = '82818079787776757473727170696867666564636261605958575655545352515049484746454443424140393837363534333231302928272625242322212019181716151413121110987654321';

// g, a primitive root used as an exponent
// (2 and 5 are acceptable, but BigInt is faster with odd numbers)
var dh_g = '5';

/**
 * Generates a Diffie-Hellman private key
 * @return string(BigInt)
 */

function dh_gen_private()
{
  return EnanoMath.RandomInt(256);
}

/**
 * Calculates the public key from the private key
 * @param string(BigInt)
 * @return string(BigInt)
 */

function dh_gen_public(b)
{
  return EnanoMath.PowMod(dh_g, b, dh_prime);
}

/**
 * Calculates the shared secret.
 * @param string(BigInt) Our private key
 * @param string(BigInt) Remote party's public key
 * @return string(BigInt)
 */

function dh_gen_shared_secret(b, A)
{
  return EnanoMath.PowMod(A, b, dh_prime);
}