summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2013-03-21 17:49:20 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2013-03-21 21:43:48 +0100
commitf5d3e06bbdda6e3a76562c0ebc475396b3eabdfa (patch)
tree6db6c99ef846f59df1e076519a9f9e83d9cc4d10
parent45189d4a70990767f63fb10e8a3ab4639287820f (diff)
downloadgnutls-f5d3e06bbdda6e3a76562c0ebc475396b3eabdfa.tar.gz
openpgp-auth tests gnutls_openpgp_set_recv_key_function() as well.
-rw-r--r--tests/openpgp-auth.c44
1 files changed, 38 insertions, 6 deletions
diff --git a/tests/openpgp-auth.c b/tests/openpgp-auth.c
index 548d51188a..6b67cab51b 100644
--- a/tests/openpgp-auth.c
+++ b/tests/openpgp-auth.c
@@ -46,13 +46,24 @@ static const char message[] = "Hello, brave GNU world!";
static const char pub_key_file[] = "../guile/tests/openpgp-pub.asc";
static const char priv_key_file[] = "../guile/tests/openpgp-sec.asc";
static const char *key_id = NULL;
+static gnutls_datum_t stored_cli_cert = {NULL, 0};
static void
log_message (int level, const char *message)
{
fprintf (stderr, "[%5d|%2d] %s", getpid (), level, message);
}
-
+
+static
+int key_recv_func(gnutls_session_t session, const unsigned char *keyfpr,
+ unsigned int keyfpr_length, gnutls_datum_t * key)
+{
+ key->data = gnutls_malloc(stored_cli_cert.size);
+ memcpy(key->data, stored_cli_cert.data, stored_cli_cert.size);
+ key->size = stored_cli_cert.size;
+
+ return 0;
+}
void
doit ()
@@ -60,21 +71,20 @@ doit ()
int err, i;
int sockets[2];
const char *srcdir;
- char pub_key_path[512], priv_key_path[512];
pid_t child;
+ char pub_key_path[512], priv_key_path[512];
gnutls_global_init ();
srcdir = getenv ("srcdir") ? getenv ("srcdir") : ".";
- for (i = 0; i < 4; i++)
+ for (i = 0; i < 5; i++)
{
-
if (i <= 1)
key_id = NULL; /* try using the master key */
else if (i == 2)
key_id = "auto"; /* test auto */
- else if (i == 3)
+ else if (i >= 3)
key_id = "f30fd423c143e7ba";
if (debug)
@@ -150,6 +160,9 @@ doit ()
gnutls_dh_set_prime_bits (session, 1024);
+ if (i==4)
+ gnutls_openpgp_send_cert(session, GNUTLS_OPENPGP_CERT_FINGERPRINT);
+
err = gnutls_handshake (session);
if (err != 0)
fail ("client handshake %s (%d) \n", gnutls_strerror (err), err);
@@ -170,6 +183,9 @@ doit ()
gnutls_deinit(session);
gnutls_certificate_free_credentials (cred);
+ gnutls_free(stored_cli_cert.data);
+ gnutls_global_deinit ();
+ exit(0);
}
else
{
@@ -229,10 +245,26 @@ doit ()
gnutls_certificate_server_set_request (session,
GNUTLS_CERT_REQUIRE);
+ if (i==4)
+ gnutls_openpgp_set_recv_key_function(session, key_recv_func);
+
err = gnutls_handshake (session);
if (err != 0)
fail ("server handshake %s (%d) \n", gnutls_strerror (err), err);
+ if (stored_cli_cert.data == NULL)
+ {
+ const gnutls_datum_t* d;
+ unsigned int d_size;
+ d = gnutls_certificate_get_peers(session, &d_size);
+ if (d != NULL)
+ {
+ stored_cli_cert.data = gnutls_malloc(d[0].size);
+ memcpy(stored_cli_cert.data, d[0].data, d[0].size);
+ stored_cli_cert.size = d[0].size;
+ }
+ }
+
received =
gnutls_record_recv (session, greetings, sizeof (greetings));
if (received != sizeof (message)
@@ -268,9 +300,9 @@ doit ()
else
fail ("child failed: %d\n", status);
}
-
}
+ gnutls_free(stored_cli_cert.data);
gnutls_global_deinit ();
}
#else