diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2000-04-10 17:12:47 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2000-04-10 17:12:47 +0000 |
commit | 88085ddad8320f6c7b632ea40e32b9628774294a (patch) | |
tree | 1890698afe6ff86626fcfb8633dc9917dab48c46 /lib/gnutls_dh.c | |
parent | 1f9db0b3c5877b9a3b545be65ae55c6fcd7fd82a (diff) | |
download | gnutls-88085ddad8320f6c7b632ea40e32b9628774294a.tar.gz |
Bugfixes in the diffie hellman.
Diffstat (limited to 'lib/gnutls_dh.c')
-rw-r--r-- | lib/gnutls_dh.c | 194 |
1 files changed, 102 insertions, 92 deletions
diff --git a/lib/gnutls_dh.c b/lib/gnutls_dh.c index f7718dff40..c44c29110f 100644 --- a/lib/gnutls_dh.c +++ b/lib/gnutls_dh.c @@ -4,127 +4,137 @@ /* Taken from gsti */ static const uint8 diffie_hellman_group1_prime[130] = { 0x04, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, 0xA2, - 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1, - 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, 0xA6, - 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, 0xDD, - 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, 0x6D, - 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, 0x45, - 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, 0xE9, - 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, 0xED, - 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, 0x11, - 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, 0x81, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - -#if 0 - --Example-- - you: X = g^x mod p; - peer: Y = g^y mod p; - - your_key = Y^x mod p; - his_key = X^y mod p; - - /* generate our secret and the public value for it */ - X = _gnutls_calc_dh_secret( &x ); - /* now we can calculate the shared secret */ - key = _gnutls_calc_dh_key( Y, x); - mpi_release( x ); - mpi_release( g ); -#endif + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC9, 0x0F, 0xDA, + 0xA2, + 0x21, 0x68, 0xC2, 0x34, 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, + 0xD1, + 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74, 0x02, 0x0B, 0xBE, + 0xA6, + 0x3B, 0x13, 0x9B, 0x22, 0x51, 0x4A, 0x08, 0x79, 0x8E, 0x34, 0x04, + 0xDD, + 0xEF, 0x95, 0x19, 0xB3, 0xCD, 0x3A, 0x43, 0x1B, 0x30, 0x2B, 0x0A, + 0x6D, + 0xF2, 0x5F, 0x14, 0x37, 0x4F, 0xE1, 0x35, 0x6D, 0x6D, 0x51, 0xC2, + 0x45, + 0xE4, 0x85, 0xB5, 0x76, 0x62, 0x5E, 0x7E, 0xC6, 0xF4, 0x4C, 0x42, + 0xE9, + 0xA6, 0x37, 0xED, 0x6B, 0x0B, 0xFF, 0x5C, 0xB6, 0xF4, 0x06, 0xB7, + 0xED, + 0xEE, 0x38, 0x6B, 0xFB, 0x5A, 0x89, 0x9F, 0xA5, 0xAE, 0x9F, 0x24, + 0x11, + 0x7C, 0x4B, 0x1F, 0xE6, 0x49, 0x28, 0x66, 0x51, 0xEC, 0xE6, 0x53, + 0x81, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF +}; + +/* + --Example-- + you: X = g ^ x mod p; + peer:Y = g ^ y mod p; + + your_key = Y ^ x mod p; + his_key = X ^ y mod p; + +// generate our secret and the public value for it + X = _gnutls_calc_dh_secret(&x); +// now we can calculate the shared secret + key = _gnutls_calc_dh_key(Y, x); + mpi_release(x); + mpi_release(g); +*/ /**************** * Choose a random value x and calculate e = g^x mod p. * Return: e and if ret_x is not NULL x. * It also returns g and p. */ -MPI _gnutls_calc_dh_secret( MPI *ret_x ) +MPI _gnutls_calc_dh_secret(MPI * ret_x) { - MPI e, g, x, prime; - size_t n = sizeof diffie_hellman_group1_prime; - - if( gcry_mpi_scan( &prime, GCRYMPI_FMT_STD, - diffie_hellman_group1_prime, &n ) ) - abort(); - /*dump_mpi(stderr, "prime=", prime );*/ - - g = mpi_set_ui( NULL, 2 ); - x = mpi_new( 200 ); /* FIXME: allocate in secure memory */ - gcry_mpi_randomize( x, 200, GCRY_STRONG_RANDOM ); - /* fixme: set high bit of x and select a larger one */ - - e = mpi_new(1024); - mpi_powm( e, g, x, prime ); - - if( ret_x ) - *ret_x = x; - else - mpi_release(x); + MPI e, g, x, prime; + size_t n = sizeof diffie_hellman_group1_prime; + + if (gcry_mpi_scan(&prime, GCRYMPI_FMT_STD, + diffie_hellman_group1_prime, &n)) + abort(); + /*dump_mpi(stderr, "prime=", prime ); */ + + g = mpi_set_ui(NULL, 2); + x = mpi_new(200); /* FIXME: allocate in secure memory */ + gcry_mpi_randomize(x, 200, GCRY_STRONG_RANDOM); + /* fixme: set high bit of x and select a larger one */ + + e = mpi_new(1024); + mpi_powm(e, g, x, prime); + + if (ret_x) + *ret_x = x; + else + mpi_release(x); mpi_release(g); mpi_release(prime); - return e; + return e; } -MPI __gnutls_calc_dh_secret( MPI *ret_x, MPI g, MPI prime ) +MPI __gnutls_calc_dh_secret(MPI * ret_x, MPI g, MPI prime) { - MPI e, x; + MPI e, x; - x = mpi_new( 200 ); /* FIXME: allocate in secure memory */ - gcry_mpi_randomize( x, 200, GCRY_STRONG_RANDOM ); - /* fixme: set high bit of x and select a larger one */ + x = mpi_new(200); /* FIXME: allocate in secure memory */ + gcry_mpi_randomize(x, 200, GCRY_STRONG_RANDOM); + /* fixme: set high bit of x and select a larger one */ - e = mpi_new(1024); - mpi_powm( e, g, x, prime ); + e = mpi_new(1024); + mpi_powm(e, g, x, prime); - if( ret_x ) - *ret_x = x; - else - mpi_release(x); - return e; + if (ret_x) + *ret_x = x; + else + mpi_release(x); + return e; } /* returns g and p */ -MPI _gnutls_get_dh_params( MPI *ret_p ) +MPI _gnutls_get_dh_params(MPI * ret_p) { - MPI g, prime; - size_t n = sizeof diffie_hellman_group1_prime; + MPI g, prime; + size_t n = sizeof diffie_hellman_group1_prime; - if( gcry_mpi_scan( &prime, GCRYMPI_FMT_STD, - diffie_hellman_group1_prime, &n ) ) - abort(); + if (gcry_mpi_scan(&prime, GCRYMPI_FMT_STD, + diffie_hellman_group1_prime, &n)) + abort(); - g = mpi_set_ui( NULL, 2 ); + g = mpi_set_ui(NULL, 2); - if( ret_p ) - *ret_p = prime; - else - mpi_release(prime); - return g; + if (ret_p) + *ret_p = prime; + else + mpi_release(prime); + return g; } -MPI _gnutls_calc_dh_key( MPI f, MPI x ) +MPI _gnutls_calc_dh_key(MPI f, MPI x) { - MPI k, prime; - size_t n = sizeof diffie_hellman_group1_prime; - - k = mpi_new( 1024 ); /* FIXME: allocate in secure memory */ - if( gcry_mpi_scan( &prime, GCRYMPI_FMT_STD, - diffie_hellman_group1_prime, &n ) ) - abort(); - /*dump_mpi(stderr, "prime=", prime );*/ - - mpi_powm( k, f, x, prime ); - mpi_release(prime); - return k; + MPI k, prime; + size_t n = sizeof diffie_hellman_group1_prime; + + k = mpi_new(1024); /* FIXME: allocate in secure memory */ + if (gcry_mpi_scan(&prime, GCRYMPI_FMT_STD, + diffie_hellman_group1_prime, &n)) + abort(); + /*dump_mpi(stderr, "prime=", prime ); */ + + mpi_powm(k, f, x, prime); + mpi_release(prime); + return k; } -MPI __gnutls_calc_dh_key( MPI f, MPI x, MPI prime ) +MPI __gnutls_calc_dh_key(MPI f, MPI x, MPI prime) { - MPI k; + MPI k; - k = mpi_new( 1024 ); /* FIXME: allocate in secure memory */ + k = mpi_new(1024); /* FIXME: allocate in secure memory */ - mpi_powm( k, f, x, prime ); - return k; + mpi_powm(k, f, x, prime); + return k; } - |