From: Nikos Mavrogiannopoulos Date: Sat, 19 May 2001 10:51:44 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: gnutls_0_1_4~87 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8781af4e9fcecc6550e75e76e7f75239be020d4d;p=thirdparty%2Fgnutls.git *** empty log message *** --- diff --git a/lib/gnutls_errors.c b/lib/gnutls_errors.c index bbb9b7464b..f4894efb16 100644 --- a/lib/gnutls_errors.c +++ b/lib/gnutls_errors.c @@ -68,6 +68,7 @@ static gnutls_error_entry error_algorithms[] = { GNUTLS_ERROR_ENTRY( GNUTLS_E_EXPIRED, 1), GNUTLS_ERROR_ENTRY( GNUTLS_E_HASH_FAILED, 1), GNUTLS_ERROR_ENTRY( GNUTLS_E_PARSING_ERROR, 1), + GNUTLS_ERROR_ENTRY( GNUTLS_E_AUTH_FAILED, 1), GNUTLS_ERROR_ENTRY( GNUTLS_E_AGAIN, 0), GNUTLS_ERROR_ENTRY( GNUTLS_E_DB_ERROR, 1), {0} diff --git a/lib/gnutls_errors_int.h b/lib/gnutls_errors_int.h index c0817ebdfe..969df449f6 100644 --- a/lib/gnutls_errors_int.h +++ b/lib/gnutls_errors_int.h @@ -33,4 +33,5 @@ #define GNUTLS_E_HASH_FAILED -33 #define GNUTLS_E_PARSING_ERROR -34 #define GNUTLS_E_MPI_PRINT_FAILED -35 +#define GNUTLS_E_AUTH_FAILED -36 #define GNUTLS_E_UNIMPLEMENTED_FEATURE -50 diff --git a/lib/gnutls_handshake.c b/lib/gnutls_handshake.c index e1cf5bf95d..2f4c79f8f7 100644 --- a/lib/gnutls_handshake.c +++ b/lib/gnutls_handshake.c @@ -1455,6 +1455,8 @@ int gnutls_handshake_finish(int cd, GNUTLS_STATE state) if (ret < 0) { gnutls_assert(); gnutls_clearHashDataBuffer(state); + /* for srp */ + if (state->security_parameters.kx_algorithm==GNUTLS_KX_SRP) return GNUTLS_E_AUTH_FAILED; return ret; } @@ -1477,6 +1479,8 @@ int gnutls_handshake_finish(int cd, GNUTLS_STATE state) if (ret < 0) { gnutls_assert(); gnutls_clearHashDataBuffer(state); + /* in srp failure here - means authentication error */ + if (state->security_parameters.kx_algorithm==GNUTLS_KX_SRP) return GNUTLS_E_AUTH_FAILED; return ret; } } diff --git a/lib/gnutls_srp.c b/lib/gnutls_srp.c index 70b9550384..6a35e4ee74 100644 --- a/lib/gnutls_srp.c +++ b/lib/gnutls_srp.c @@ -32,6 +32,7 @@ #define gcry_mpi_addm mpi_addm #define gcry_mpi_mul mpi_mul #define gcry_mpi_mulm mpi_mulm +MPI generate_public_prime( unsigned nbits ); /* Here functions for SRP (like g^x mod n) are defined */ @@ -53,17 +54,24 @@ const uint8 diffie_hellman_group1_prime[130] = { 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; -int _gnutls_srp_gn( opaque** ret_g, opaque** ret_n) { +int _gnutls_srp_gn( opaque** ret_g, opaque** ret_n, int bits) { MPI g, prime; - size_t n = sizeof diffie_hellman_group1_prime; + size_t n; int siz; char* tmp; - if (gcry_mpi_scan(&prime, GCRYMPI_FMT_USG, - diffie_hellman_group1_prime, &n)) { - gnutls_assert(); - return GNUTLS_E_MPI_SCAN_FAILED; + n = sizeof diffie_hellman_group1_prime; + + if (bits==n*8) { + if (gcry_mpi_scan(&prime, GCRYMPI_FMT_USG, + diffie_hellman_group1_prime, &n)) { + gnutls_assert(); + return GNUTLS_E_MPI_SCAN_FAILED; + } + } else { + /* generate a random prime */ + prime = generate_public_prime(bits); } g = gcry_mpi_set_ui(NULL, SRP_G); diff --git a/lib/gnutls_srp.h b/lib/gnutls_srp.h index d7ed82d179..2e9ee311bc 100644 --- a/lib/gnutls_srp.h +++ b/lib/gnutls_srp.h @@ -5,7 +5,7 @@ MPI _gnutls_calc_srp_S1(MPI A, MPI b, MPI u, MPI v, MPI n); MPI _gnutls_calc_srp_A(MPI *a, MPI g, MPI n); MPI _gnutls_calc_srp_S2(MPI B, MPI g, MPI x, MPI a, MPI u, MPI n); void* _gnutls_calc_srp_x( char* username, char* password, opaque* salt, int salt_size, uint8 crypt_algo, int* size); -int _gnutls_srp_gn( opaque** ret_g, opaque** ret_n); +int _gnutls_srp_gn( opaque** ret_g, opaque** ret_n, int bits); /* our prime */ extern const uint8 diffie_hellman_group1_prime[130];