summaryrefslogtreecommitdiff
path: root/gio/src/tlsdatabase.hg
blob: 2da76d0d1d8071be1a3c5b7b6c6e7ebac24c91fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/* Copyright (C) 2013 The giomm Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <glibmm/object.h>
#include <giomm/asyncresult.h>
#include <giomm/enums.h>

_DEFS(giomm,gio)
_PINCLUDE(glibmm/private/object_p.h)

namespace Glib
{

// Forward declaration.
class GLIBMM_API ByteArray;

}

namespace Gio
{

class GIOMM_API Cancellable;
class GIOMM_API SocketConnectable;
class GIOMM_API TlsCertificate;
class GIOMM_API TlsInteraction;

/** TlsDatabase - TLS database type.
 * TlsDatabase is used to lookup certificates and other information from a
 * certificate or key store. It is an abstract base class which TLS library
 * specific subtypes override.
 *
 * Most common client applications will not directly interact with TlsDatabase.
 * It is used internally by TlsConnection.
 * @newin{2,36}
 */
class GIOMM_API TlsDatabase : public Glib::Object
{
  _CLASS_GOBJECT(TlsDatabase, GTlsDatabase, G_TLS_DATABASE, Glib::Object, GObject, , , GIOMM_API)

protected:
  _CTOR_DEFAULT

public:
  //TODO?: Have a constant for the C macro G_TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER (which is a string)?
  //TODO?: Have a constant for the C macro G_TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT (which is a string)?

  _WRAP_ENUM(VerifyFlags, GTlsDatabaseVerifyFlags, decl_prefix GIOMM_API)
  _WRAP_ENUM(LookupFlags, GTlsDatabaseLookupFlags, decl_prefix GIOMM_API)

  _WRAP_METHOD(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity{?}, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags flags{.} = VerifyFlags::NONE) const, g_tls_database_verify_chain, errthrow)
  _WRAP_METHOD(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose,
    const Glib::RefPtr<const SocketConnectable>& identity{?}, const Glib::RefPtr<TlsInteraction>& interaction{?},
    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, VerifyFlags flags{.} = VerifyFlags::NONE) const,
    g_tls_database_verify_chain_async, slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_METHOD(TlsCertificateFlags verify_chain_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_verify_chain_finish, errthrow)

  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificate_issuer, errthrow)
  _WRAP_METHOD(Glib::RefPtr<const TlsCertificate> lookup_certificate_issuer(const Glib::RefPtr<const TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE) const, g_tls_database_lookup_certificate_issuer, errthrow, constversion)

  _WRAP_METHOD(void lookup_certificate_issuer_async(const Glib::RefPtr<const TlsCertificate>& certificate,
    const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback},
    const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE),
    g_tls_database_lookup_certificate_issuer_async, slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_lookup_certificate_issuer_finish, errthrow)

#m4 _CONVERSION(`GList*',`std::vector< Glib::RefPtr<TlsCertificate> >',`Glib::ListHandler< Glib::RefPtr<TlsCertificate> >::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
  _WRAP_METHOD(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificates_issued_by, errthrow)

#m4 _CONVERSION(`GList*',`std::vector< Glib::RefPtr<const TlsCertificate> >',`Glib::ListHandler< Glib::RefPtr<const TlsCertificate> >::list_to_vector($3, Glib::OWNERSHIP_DEEP)')
  _WRAP_METHOD(std::vector< Glib::RefPtr<const TlsCertificate> > lookup_certificates_issued_by(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE) const, g_tls_database_lookup_certificates_issued_by, errthrow)

  _WRAP_METHOD(void lookup_certificates_issued_by_async(const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn,
    const Glib::RefPtr<TlsInteraction>& interaction{?}, const SlotAsyncReady& slot{callback},
    const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE),
    g_tls_database_lookup_certificates_issued_by_async, slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_METHOD(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_lookup_certificates_issued_by_finish, errthrow)

  _WRAP_METHOD(Glib::ustring create_certificate_handle(const Glib::RefPtr<const TlsCertificate>& certificate) const, g_tls_database_create_certificate_handle)

  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE), g_tls_database_lookup_certificate_for_handle, errthrow)
  _WRAP_METHOD(Glib::RefPtr<const TlsCertificate> lookup_certificate_for_handle(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE) const, g_tls_database_lookup_certificate_for_handle, errthrow, constversion)

  _WRAP_METHOD(void lookup_certificate_for_handle_async(const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction{?},
    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.?}, LookupFlags flags{.} = LookupFlags::NONE),
    g_tls_database_lookup_certificate_for_handle_async, slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_METHOD(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle_finish(const Glib::RefPtr<AsyncResult>& result), g_tls_database_lookup_certificate_for_handle_finish, errthrow)

protected:
#m4 _CONVERSION(`GTlsCertificate*',`const Glib::RefPtr<TlsCertificate>&',`Glib::wrap($3, true)')
#m4 _CONVERSION(`GSocketConnectable*',`const Glib::RefPtr<const SocketConnectable>&',`Glib::wrap($3, true)')
#m4 _CONVERSION(`GTlsInteraction*',`const Glib::RefPtr<TlsInteraction>&',`Glib::wrap($3, true)')

  _WRAP_VFUNC(TlsCertificateFlags verify_chain(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose, const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& interaction, const Glib::RefPtr<Cancellable>& cancellable{.}, VerifyFlags flags{.}) const, "verify_chain", errthrow)
  _WRAP_VFUNC(void verify_chain_async(const Glib::RefPtr<TlsCertificate>& chain, const Glib::ustring& purpose,
    const Glib::RefPtr<const SocketConnectable>& identity, const Glib::RefPtr<TlsInteraction>& interaction,
    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, VerifyFlags flags{.}) const,
    "verify_chain_async", slot_name slot, slot_callback giomm_SignalProxy_async_callback)

#m4 _CONVERSION(`GAsyncResult*',`const Glib::RefPtr<AsyncResult>&',`Glib::wrap($3, true)')

  _WRAP_VFUNC(TlsCertificateFlags verify_chain_finish(const Glib::RefPtr<AsyncResult>& result), "verify_chain_finish", errthrow)

dnl// create_certificate_handle_vfunc() shall return a newly allocated string.
dnl// Also, ensure that create_certificate_handle_vfunc() never returns an empty char[],
dnl// because that could be caused by an intermediate empty ustring from an initial null char*.
#m4 _CONVERSION(`GTlsCertificate*',`const Glib::RefPtr<const TlsCertificate>&',`Glib::wrap($3, true)')
#m4 _CONVERSION(`Glib::ustring',`gchar*',`g_strdup(Glib::c_str_or_nullptr($3))')
#m4 _CONVERSION(`gchar*',`Glib::ustring',`Glib::convert_return_gchar_ptr_to_ustring($3)')
  _WRAP_VFUNC(Glib::ustring create_certificate_handle(const Glib::RefPtr<const TlsCertificate>& certificate) const, "create_certificate_handle")

  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle(
    const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction,
    const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
    "lookup_certificate_for_handle", errthrow, refreturn_ctype)
  _WRAP_VFUNC(void lookup_certificate_for_handle_async(
    const Glib::ustring& handle, const Glib::RefPtr<TlsInteraction>& interaction,
    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
    "lookup_certificate_for_handle_async", slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_for_handle_finish(
    const Glib::RefPtr<AsyncResult>& result), "lookup_certificate_for_handle_finish", errthrow, refreturn_ctype)

  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer(
    const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction,
    const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
    "lookup_certificate_issuer", errthrow, refreturn_ctype)
  _WRAP_VFUNC(void lookup_certificate_issuer_async(
    const Glib::RefPtr<TlsCertificate>& certificate, const Glib::RefPtr<TlsInteraction>& interaction,
    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
    "lookup_certificate_issuer_async", slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_VFUNC(Glib::RefPtr<TlsCertificate> lookup_certificate_issuer_finish(
    const Glib::RefPtr<AsyncResult>& result), "lookup_certificate_issuer_finish", errthrow, refreturn_ctype)

#m4 _CONVERSION(`std::vector< Glib::RefPtr<TlsCertificate> >',`GList*',
#m4  `g_list_copy_deep(Glib::ListHandler< Glib::RefPtr<TlsCertificate> >::vector_to_list($3).data(), list_copy_ref, nullptr)')
#m4 _CONVERSION(`GByteArray*',`const Glib::RefPtr<Glib::ByteArray>&',`Glib::wrap($3, true)')

  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by(
    const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction,
    const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}), "lookup_certificates_issued_by", errthrow)
  _WRAP_VFUNC(void lookup_certificates_issued_by_async(
    const Glib::RefPtr<Glib::ByteArray>& issuer_raw_dn, const Glib::RefPtr<TlsInteraction>& interaction,
    const SlotAsyncReady& slot{callback}, const Glib::RefPtr<Cancellable>& cancellable{.}, LookupFlags flags{.}),
    "lookup_certificates_issued_by_async", slot_name slot, slot_callback giomm_SignalProxy_async_callback)
  _WRAP_VFUNC(std::vector< Glib::RefPtr<TlsCertificate> > lookup_certificates_issued_by_finish(
    const Glib::RefPtr<AsyncResult>& result), "lookup_certificates_issued_by_finish", errthrow)
};

} // namespace Gio