int proc_anon_server_kx( GNUTLS_KEY, opaque*, int);
int proc_anon_client_kx( GNUTLS_KEY, opaque*, int);
-int gen_anon_client_cert_vrfy( GNUTLS_KEY, opaque**);
-int proc_anon_client_cert_vrfy( GNUTLS_KEY, opaque*, int);
-
-int gen_anon_server_cert_vrfy( GNUTLS_KEY, opaque**);
-int proc_anon_server_cert_vrfy( GNUTLS_KEY, opaque*, int);
-
MOD_AUTH_STRUCT anon_auth_struct = {
"ANON",
gen_anon_server_kx,
NULL,
NULL,
gen_anon_client_kx,
- gen_anon_client_cert_vrfy,
- gen_anon_server_cert_vrfy,
+ NULL,
+ NULL,
proc_anon_server_kx,
NULL,
NULL,
proc_anon_client_kx,
- proc_anon_client_cert_vrfy,
- proc_anon_server_cert_vrfy
+ NULL,
+ NULL
};
int gen_anon_server_kx( GNUTLS_KEY key, opaque** data) {
return 0;
}
-
-int gen_anon_client_cert_vrfy( GNUTLS_KEY key, opaque** data) {
- (*data) = NULL;
- return 0;
-}
-int gen_anon_server_cert_vrfy( GNUTLS_KEY key, opaque** data) {
- (*data) = NULL;
- return 0;
-}
-int proc_anon_client_cert_vrfy( GNUTLS_KEY key, opaque* data, int data_size) {
- /* no certificate check in anonymous KX */
- return 0;
-}
-int proc_anon_server_cert_vrfy( GNUTLS_KEY key, opaque* data, int data_size) {
- /* no certificate check in this algorithm */
- return 0;
-}
/* Key Exchange Section */
-#define GNUTLS_KX_ALGO_ENTRY(name, server_cert, server_kx, server_kx2, client_kx, client_kx0, client_cert, RSA_premaster, DH_public_value, auth_struct) \
- { #name, name, server_cert, server_kx, server_kx2, client_kx, client_kx0, client_cert, RSA_premaster, DH_public_value, auth_struct }
+#define GNUTLS_KX_ALGO_ENTRY(name, server_cert, client_cert, RSA_premaster, DH_public_value, auth_struct) \
+ { #name, name, server_cert, client_cert, RSA_premaster, DH_public_value, auth_struct }
struct gnutls_kx_algo_entry {
char *name;
KXAlgorithm algorithm;
int server_cert;
- int server_kx;
- int server_kx2;
- int client_kx;
- int client_kx0;
int client_cert;
int RSA_premaster;
int DH_public_value;
typedef struct gnutls_kx_algo_entry gnutls_kx_algo_entry;
static gnutls_kx_algo_entry kx_algorithms[] = {
- GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_ANON_DH, 0, 1, 0, 1, 0, 0, 0, 1, &anon_auth_struct),
- GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_RSA, 1, 0, 0, 1, 0, 1, 1, 0, NULL),
- GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DHE_DSS, 1, 1, 0, 1, 0, 1, 0, 0, &dhe_dss_auth_struct),
- GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DHE_RSA, 1, 1, 0, 1, 0, 1, 0, 0, NULL),
- GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DH_DSS, 1, 0, 0, 1, 0, 1, 0, 0, NULL),
- GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DH_RSA, 1, 0, 0, 1, 0, 1, 0, 0, NULL),
-// GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_SRP, 0, 1, 1, 0, 1, 0, 0, 0, &srp_auth_struct),
+ GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_ANON_DH, 0, 0, 0, 1, &anon_auth_struct),
+ GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_RSA, 1, 1, 1, 0, NULL),
+ GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DHE_DSS, 1, 1, 0, 0, &dhe_dss_auth_struct),
+ GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DHE_RSA, 1, 1, 0, 0, NULL),
+ GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DH_DSS, 1, 1, 0, 0, NULL),
+ GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_DH_RSA, 1, 1, 0, 0, NULL),
+// GNUTLS_KX_ALGO_ENTRY(GNUTLS_KX_SRP, 0, 0, 0, 0, &srp_auth_struct),
{0}
};
int _gnutls_kx_server_key_exchange(KXAlgorithm algorithm)
{
size_t ret = 0;
+ void* ret2=NULL;
+
+ /* if the auth algorithm does not have a null value
+ * for the kx2 generation then it supports it!
+ */
+ GNUTLS_KX_ALG_LOOP(ret2 = p->auth_struct->gnutls_generate_server_kx);
+ if (ret2!=NULL) ret = 1;
- GNUTLS_KX_ALG_LOOP(ret = p->server_kx);
return ret;
}
int _gnutls_kx_server_key_exchange2(KXAlgorithm algorithm)
{
size_t ret = 0;
-
- GNUTLS_KX_ALG_LOOP(ret = p->server_kx2);
+ void* ret2=NULL;
+
+ /* if the auth algorithm does not have a null value
+ * for the kx2 generation then it supports it!
+ */
+ GNUTLS_KX_ALG_LOOP(ret2 = p->auth_struct->gnutls_generate_server_kx2);
+ if (ret2!=NULL) ret = 1;
+
return ret;
}
int _gnutls_kx_client_key_exchange0(KXAlgorithm algorithm)
{
size_t ret = 0;
-
- GNUTLS_KX_ALG_LOOP(ret = p->client_kx0);
+ void* ret2=NULL;
+
+ /* if the auth algorithm does not have a null value
+ * for the kx0 generation then it supports it!
+ */
+ GNUTLS_KX_ALG_LOOP(ret2 = p->auth_struct->gnutls_process_client_kx0);
+ if (ret2!=NULL) ret = 1;
+
return ret;
}
int _gnutls_kx_client_key_exchange(KXAlgorithm algorithm)
{
size_t ret = 0;
+ void* ret2=NULL;
+
+ /* if the auth algorithm does not have a null value
+ * for the kx0 generation then it supports it!
+ */
+ GNUTLS_KX_ALG_LOOP(ret2 = p->auth_struct->gnutls_process_client_kx);
+ if (ret2!=NULL) ret = 1;
+ return ret;
+
+}
+
+
+int _gnutls_kx_client_cert_vrfy(KXAlgorithm algorithm)
+{
+ size_t ret = 0;
+ void* ret2=NULL;
+
+ /* if the auth algorithm does not have a null value
+ * for the cert_vrfy function then it supports it!
+ */
+ GNUTLS_KX_ALG_LOOP(ret2 = p->auth_struct->gnutls_generate_client_cert_vrfy);
+ if (ret2!=NULL) ret = 1;
+
+ return ret;
- GNUTLS_KX_ALG_LOOP(ret = p->server_kx);
+}
+
+int _gnutls_kx_server_cert_vrfy(KXAlgorithm algorithm)
+{
+ size_t ret = 0;
+ void* ret2=NULL;
+
+ /* if the auth algorithm does not have a null value
+ * for the cert_vrfy function then it supports it!
+ */
+ GNUTLS_KX_ALG_LOOP(ret2 = p->auth_struct->gnutls_generate_server_cert_vrfy);
+ if (ret2!=NULL) ret = 1;
+
return ret;
}