include(libgnutls.m4)
configure.in:
- AM_PATH_LIBGNUTLS( 0.9.99,, AC_MSG_ERROR([[
+ AM_PATH_LIBGNUTLS( 1.0.0,, AC_MSG_ERROR([[
***
*** libgnutls was not found. You may want to get it from
*** ftp://ftp.gnutls.org/pub/gnutls/
include(libgnutls-extra.m4)
configure.in:
- AM_PATH_LIBGNUTLS_EXTRA( 0.9.99,, AC_MSG_ERROR([[
+ AM_PATH_LIBGNUTLS_EXTRA( 1.0.0,, AC_MSG_ERROR([[
***
*** libgnutls-extra was not found. You may want to get it from
*** ftp://ftp.gnutls.org/pub/gnutls/
ret = GNUTLS_A_BAD_RECORD_MAC;
_level = GNUTLS_AL_FATAL;
break;
- case GNUTLS_E_EMPTY_SRP_USERNAME:
- ret = GNUTLS_A_MISSING_SRP_USERNAME;
- _level = GNUTLS_AL_FATAL;
- break;
case GNUTLS_E_DECOMPRESSION_FAILED:
ret = GNUTLS_A_DECOMPRESSION_FAILURE;
_level = GNUTLS_AL_FATAL;
ERROR_ENTRY("Could not get OpenPGP key.", GNUTLS_E_OPENPGP_GETKEY_FAILED, 1),
ERROR_ENTRY("The SRP username supplied by the peer is illegal.", GNUTLS_E_ILLEGAL_SRP_USERNAME, 1),
- ERROR_ENTRY("The peer advertized SRP but did not supply any SRP username.", GNUTLS_E_EMPTY_SRP_USERNAME, 1),
ERROR_ENTRY("The OpenPGP fingerprint is not supported.", GNUTLS_E_OPENPGP_FINGERPRINT_UNSUPPORTED, 1),
ERROR_ENTRY("The certificate has unsupported attributes.", GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE, 1),
#define GNUTLS_E_ILLEGAL_SRP_USERNAME -90
#define GNUTLS_E_SRP_PWD_PARSING_ERROR -91
-#define GNUTLS_E_EMPTY_SRP_USERNAME -92
#define GNUTLS_E_NO_TEMPORARY_DH_PARAMS -93
/* For certificate and key stuff
/* _INT_ internal errors. Not exported */
#define GNUTLS_E_INT_RET_0 -1251
+#define GNUTLS_E_INT_HANDSHAKE_AGAIN -1252
#endif /* GNUTLS_ERRORS_IH */
#define IMED_RET( str, ret) do { \
if (ret < 0) { \
+ if (ret == GNUTLS_E_INT_HANDSHAKE_AGAIN) { \
+ STATE = STATE0; \
+ return GNUTLS_E_AGAIN; \
+ } \
if (gnutls_error_is_fatal(ret)==0) return ret; \
gnutls_assert(); \
ERR( str, ret); \
#include "auth_srp.h"
#include <gnutls_str.h>
#include <gnutls_datum.h>
+#include <gnutls_alert.h>
int _gnutls_gen_srp_server_kx(gnutls_session, opaque **);
int _gnutls_gen_srp_client_kx(gnutls_session, opaque **);
if (state->security_parameters.extensions.srp_username[0] == 0) {
/* The peer didn't send a valid SRP extension with the
- * SRP username.
+ * SRP username. The draft requires that we send an
+ * alert and start the handshake again.
*/
gnutls_assert();
- return GNUTLS_E_EMPTY_SRP_USERNAME;
+ ret = gnutls_alert_send( state, GNUTLS_AL_WARNING,
+ GNUTLS_A_MISSING_SRP_USERNAME);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+
+ return GNUTLS_E_INT_HANDSHAKE_AGAIN;
}
if ( (ret=_gnutls_auth_info_set( state, GNUTLS_CRD_SRP, sizeof( SRP_SERVER_AUTH_INFO_INT), 1)) < 0) {
{
int tmp;
char a;
- if(sscanf(arg, "%d%c", &tmp, &a) < 1)
+ if(sscanf(arg, "%d%c", &tmp, &a) != 1)
{
printf("Option %s: '%s' isn't an integer\n", gaa_current_option, arg);
GAAERROR(-1);
{
float tmp;
char a;
- if(sscanf(arg, "%f%c", &tmp, &a) < 1)
+ if(sscanf(arg, "%f%c", &tmp, &a) != 1)
{
printf("Option %s: '%s' isn't a float number\n", gaa_current_option, arg);
GAAERROR(-1);
int kx_priority[PRI_MAX] =
{ GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP,
/* Do not use anonymous authentication, unless you know what that means */
- GNUTLS_KX_ANON_DH, GNUTLS_KX_RSA_EXPORT, 0
+ GNUTLS_KX_SRP_DSS, GNUTLS_KX_SRP_RSA, GNUTLS_KX_ANON_DH,
+ GNUTLS_KX_RSA_EXPORT, 0
};
int cipher_priority[PRI_MAX] =
{ GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_3DES_CBC,