Expose ntbtls_set_ca_chain API.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 19 Jan 2017 04:11:17 +0000 (13:11 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 19 Jan 2017 04:11:17 +0000 (13:11 +0900)
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
src/context.h
src/ntbtls-int.h
src/ntbtls.h.in
src/protocol.c
src/visibility.c
src/visibility.h

index 4b0d86f..3a644c7 100644 (file)
@@ -94,12 +94,6 @@ typedef enum
 
 
 /*
- * Object to hold X.509 certifciates.
- */
-struct x509_cert_s;
-typedef struct x509_cert_s *x509_cert_t;
-
-/*
  * Object to hold an X.509 private key.
  */
 struct x509_privkey_s;
@@ -107,13 +101,6 @@ typedef struct x509_privkey_s *x509_privkey_t;
 
 
 /*
- * Object to hold an X.509 CRL.
- */
-struct x509_crl_s;
-typedef struct x509_crl_s *x509_crl_t;
-
-
-/*
  * Object to hold an DHM context.
  */
 struct dhm_context_s;
index 21b28f9..3ecf74c 100644 (file)
@@ -323,6 +323,10 @@ gpg_error_t _ntbtls_set_transport (ntbtls_t tls,
 gpg_error_t _ntbtls_get_stream (ntbtls_t tls,
                                 gpgrt_stream_t *r_readfp,
                                 gpgrt_stream_t *r_writefp);
+
+gpg_error_t _ntbtls_set_ca_chain (ntbtls_t tls, x509_cert_t ca_chain,
+                                  x509_crl_t ca_crl);
+
 gpg_error_t _ntbtls_set_hostname (ntbtls_t tls, const char *hostname);
 
 gpg_error_t _ntbtls_handshake (ntbtls_t tls);
index 9085d03..63cb087 100644 (file)
@@ -53,6 +53,18 @@ extern "C" {
 struct _ntbtls_context_s;
 typedef struct _ntbtls_context_s *ntbtls_t;
 
+/*
+ * Object to hold X.509 certifciates.
+ */
+struct x509_cert_s;
+typedef struct x509_cert_s *x509_cert_t;
+
+/*
+ * Object to hold an X.509 CRL.
+ */
+struct x509_crl_s;
+typedef struct x509_crl_s *x509_crl_t;
+
 
 /* Check that the library fulfills the version requirement.  */
 const char *ntbtls_check_version (const char *req_version);
@@ -60,9 +72,15 @@ const char *ntbtls_check_version (const char *req_version);
 /* Create a new TLS context.  */
 gpg_error_t ntbtls_new (ntbtls_t *r_tls, unsigned int flags);
 
-/* Destroy an TLS context.  */
+/* Destroy a TLS context.  */
 void        ntbtls_release (ntbtls_t tls);
 
+/* Create a new X509 certificate chain.  */
+gpg_error_t ntbtls_x509_cert_new (x509_cert_t *r_cert);
+
+/* Destroy a X509 certificate chain.  */
+gpg_error_t ntbtls_x509_cert_release (x509_cert_t cert);
+
 /* Setup the transport streams (usually connected to one socket).  */
 gpg_error_t ntbtls_set_transport (ntbtls_t tls,
                                   gpgrt_stream_t inbound,
@@ -73,6 +91,10 @@ gpg_error_t ntbtls_get_stream (ntbtls_t tls,
                                gpgrt_stream_t *r_readfp,
                                gpgrt_stream_t *r_writefp);
 
+/* Set the data required to verify peer certificate.  */
+gpg_error_t ntbtls_set_ca_chain (ntbtls_t tls, x509_cert_t ca_chain,
+                                 x509_crl_t ca_crl);
+
 /* Set the hostname to check against the received server certificate.
    It is used for SNI, too.  */
 gpg_error_t ntbtls_set_hostname (ntbtls_t tls, const char *hostname);
index 61ca008..3cf16c3 100644 (file)
@@ -3033,13 +3033,15 @@ _ntbtls_set_session (ntbtls_t tls, const session_t session)
 /* } */
 
 
-/* void */
-/* ssl_set_ca_chain (ntbtls_t ssl, x509_crt * ca_chain, */
-/*                   x509_crl_t ca_crl) */
-/* { */
-/*   ssl->ca_chain = ca_chain; */
-/*   ssl->ca_crl = ca_crl; */
-/* } */
+gpg_error_t
+_ntbtls_set_ca_chain (ntbtls_t tls, x509_cert_t ca_chain, x509_crl_t ca_crl)
+{
+  if (!tls)
+    return gpg_error (GPG_ERR_INV_ARG);
+
+  tls->ca_chain = ca_chain;
+  tls->ca_crl = ca_crl;
+}
 
 
 /* int */
index c4e0c71..19be6af 100644 (file)
@@ -69,6 +69,13 @@ ntbtls_get_stream (ntbtls_t tls,
 
 
 gpg_error_t
+ntbtls_set_ca_chain (ntbtls_t tls, x509_cert_t ca_chain, x509_crl_t ca_crl)
+{
+  return _ntbtls_set_ca_chain (tls, ca_chain, ca_crl);
+}
+
+
+gpg_error_t
 ntbtls_set_hostname (ntbtls_t tls, const char *hostname)
 {
   return _ntbtls_set_hostname (tls, hostname);
index fe9b035..bb6e5de 100644 (file)
@@ -47,6 +47,7 @@ MARK_VISIBLE (ntbtls_new)
 MARK_VISIBLE (ntbtls_release)
 MARK_VISIBLE (ntbtls_set_transport)
 MARK_VISIBLE (ntbtls_get_stream)
+MARK_VISIBLE (ntbtls_set_ca_chain)
 MARK_VISIBLE (ntbtls_set_hostname)
 MARK_VISIBLE (ntbtls_handshake)