]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
*** empty log message ***
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sat, 19 May 2001 10:51:44 +0000 (10:51 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sat, 19 May 2001 10:51:44 +0000 (10:51 +0000)
lib/gnutls_errors.c
lib/gnutls_errors_int.h
lib/gnutls_handshake.c
lib/gnutls_srp.c
lib/gnutls_srp.h

index bbb9b7464b34d5ad76dbe503ae972501ca39e17d..f4894efb164e6075b07921149eacdb897a46ed80 100644 (file)
@@ -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}
index c0817ebdfe52e5198e7b2c095e2c1ad24cefce18..969df449f63bcca44f4a0a8d10725e18e9fa8d9c 100644 (file)
@@ -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
index e1cf5bf95dcc63a3ed0a44369f4b1edba904a0fa..2f4c79f8f7988785dfb386578266bc9c8ca46d7a 100644 (file)
@@ -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;
                }
        }
index 70b9550384c3df72f54f1a2f70a05fc7280ce788..6a35e4ee74c9232e0b453ff42f8086656bd113e5 100644 (file)
@@ -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);
index d7ed82d179664193a7cff210d07c8005923a5794..2e9ee311bc6ae5cd0afcb3c9ca66f69a5c179732 100644 (file)
@@ -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];