1 module bindbc.gnutls.pkcs11; 2 3 import bindbc.gnutls.config; 4 import bindbc.gnutls.gnutls; 5 import bindbc.gnutls.x509; 6 import bindbc.gnutls.x509_ext; 7 import core.stdc.config; 8 import core.sys.posix.sys.types; 9 10 enum GNUTLS_PKCS11_MAX_PIN_LEN = 32; 11 12 struct gnutls_pkcs11_obj_st; 13 alias gnutls_pkcs11_obj_t = gnutls_pkcs11_obj_st*; 14 15 enum GNUTLS_PKCS11_FLAG_MANUAL = 0; 16 enum GNUTLS_PKCS11_FLAG_AUTO = 1; 17 enum GNUTLS_PKCS11_FLAG_AUTO_TRUSTED = 1 << 1; 18 19 enum gnutls_pkcs11_obj_flags 20 { 21 GNUTLS_PKCS11_OBJ_FLAG_LOGIN = 1 << 0, 22 GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED = 1 << 1, 23 GNUTLS_PKCS11_OBJ_FLAG_MARK_SENSITIVE = 1 << 2, 24 GNUTLS_PKCS11_OBJ_FLAG_LOGIN_SO = 1 << 3, 25 GNUTLS_PKCS11_OBJ_FLAG_MARK_PRIVATE = 1 << 4, 26 GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_PRIVATE = 1 << 5, 27 GNUTLS_PKCS11_OBJ_FLAG_RETRIEVE_ANY = 1 << 6, 28 GNUTLS_PKCS11_OBJ_FLAG_RETRIEVE_TRUSTED = GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED, 29 GNUTLS_PKCS11_OBJ_FLAG_MARK_DISTRUSTED = 1 << 8, 30 GNUTLS_PKCS11_OBJ_FLAG_RETRIEVE_DISTRUSTED = GNUTLS_PKCS11_OBJ_FLAG_MARK_DISTRUSTED, 31 GNUTLS_PKCS11_OBJ_FLAG_COMPARE = 1 << 9, 32 GNUTLS_PKCS11_OBJ_FLAG_PRESENT_IN_TRUSTED_MODULE = 1 << 10, 33 GNUTLS_PKCS11_OBJ_FLAG_MARK_CA = 1 << 11, 34 GNUTLS_PKCS11_OBJ_FLAG_MARK_KEY_WRAP = 1 << 12, 35 GNUTLS_PKCS11_OBJ_FLAG_COMPARE_KEY = 1 << 13, 36 GNUTLS_PKCS11_OBJ_FLAG_OVERWRITE_TRUSTMOD_EXT = 1 << 14, 37 GNUTLS_PKCS11_OBJ_FLAG_MARK_ALWAYS_AUTH = 1 << 15, 38 GNUTLS_PKCS11_OBJ_FLAG_MARK_EXTRACTABLE = 1 << 16, 39 GNUTLS_PKCS11_OBJ_FLAG_NEVER_EXTRACTABLE = 1 << 17, 40 GNUTLS_PKCS11_OBJ_FLAG_CRT = 1 << 18, 41 GNUTLS_PKCS11_OBJ_FLAG_WITH_PRIVKEY = 1 << 19, 42 GNUTLS_PKCS11_OBJ_FLAG_PUBKEY = 1 << 20, 43 GNUTLS_PKCS11_OBJ_FLAG_NO_STORE_PUBKEY = GNUTLS_PKCS11_OBJ_FLAG_PUBKEY, 44 GNUTLS_PKCS11_OBJ_FLAG_PRIVKEY = 1 << 21, 45 GNUTLS_PKCS11_OBJ_FLAG_MARK_NOT_SENSITIVE = 1 << 22 /// Available from GnuTLS 3.6.3 46 } 47 48 alias gnutls_pkcs11_obj_attr_t = gnutls_pkcs11_obj_flags; 49 50 enum gnutls_pkcs11_url_type_t 51 { 52 GNUTLS_PKCS11_URL_GENERIC = 0, 53 GNUTLS_PKCS11_URL_LIB = 1, 54 GNUTLS_PKCS11_URL_LIB_VERSION = 2 55 } 56 57 enum gnutls_pkcs11_obj_info_t 58 { 59 GNUTLS_PKCS11_OBJ_ID_HEX = 1, 60 GNUTLS_PKCS11_OBJ_LABEL = 2, 61 GNUTLS_PKCS11_OBJ_TOKEN_LABEL = 3, 62 GNUTLS_PKCS11_OBJ_TOKEN_SERIAL = 4, 63 GNUTLS_PKCS11_OBJ_TOKEN_MANUFACTURER = 5, 64 GNUTLS_PKCS11_OBJ_TOKEN_MODEL = 6, 65 GNUTLS_PKCS11_OBJ_ID = 7, 66 67 GNUTLS_PKCS11_OBJ_LIBRARY_VERSION = 8, 68 GNUTLS_PKCS11_OBJ_LIBRARY_DESCRIPTION = 9, 69 GNUTLS_PKCS11_OBJ_LIBRARY_MANUFACTURER = 10 70 } 71 72 enum GNUTLS_PKCS11_OBJ_ATTR_CRT_ALL = gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_CRT; 73 enum GNUTLS_PKCS11_OBJ_ATTR_MATCH = 0; 74 enum GNUTLS_PKCS11_OBJ_ATTR_ALL = 0; 75 enum GNUTLS_PKCS11_OBJ_ATTR_CRT_TRUSTED = gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_CRT | gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED; 76 enum GNUTLS_PKCS11_OBJ_ATTR_CRT_WITH_PRIVKEY = gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_CRT | gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_WITH_PRIVKEY; 77 enum GNUTLS_PKCS11_OBJ_ATTR_CRT_TRUSTED_CA = gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_CRT | gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_MARK_CA | gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_MARK_TRUSTED; 78 enum GNUTLS_PKCS11_OBJ_ATTR_PUBKEY = gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_PUBKEY; 79 enum GNUTLS_PKCS11_OBJ_ATTR_PRIVKEY = gnutls_pkcs11_obj_flags.GNUTLS_PKCS11_OBJ_FLAG_PRIVKEY; 80 81 enum gnutls_pkcs11_token_info_t 82 { 83 GNUTLS_PKCS11_TOKEN_LABEL = 0, 84 GNUTLS_PKCS11_TOKEN_SERIAL = 1, 85 GNUTLS_PKCS11_TOKEN_MANUFACTURER = 2, 86 GNUTLS_PKCS11_TOKEN_MODEL = 3, 87 GNUTLS_PKCS11_TOKEN_MODNAME = 4 88 } 89 90 enum gnutls_pkcs11_obj_type_t 91 { 92 GNUTLS_PKCS11_OBJ_UNKNOWN = 0, 93 GNUTLS_PKCS11_OBJ_X509_CRT = 1, 94 GNUTLS_PKCS11_OBJ_PUBKEY = 2, 95 GNUTLS_PKCS11_OBJ_PRIVKEY = 3, 96 GNUTLS_PKCS11_OBJ_SECRET_KEY = 4, 97 GNUTLS_PKCS11_OBJ_DATA = 5, 98 GNUTLS_PKCS11_OBJ_X509_CRT_EXTENSION = 6 99 } 100 101 enum GNUTLS_PKCS11_TOKEN_HW = 1; 102 enum GNUTLS_PKCS11_TOKEN_TRUSTED = 1 << 1; 103 enum GNUTLS_PKCS11_TOKEN_RNG = 1 << 2; 104 enum GNUTLS_PKCS11_TOKEN_LOGIN_REQUIRED = 1 << 3; 105 enum GNUTLS_PKCS11_TOKEN_PROTECTED_AUTHENTICATION_PATH = 1 << 4; 106 enum GNUTLS_PKCS11_TOKEN_INITIALIZED = 1 << 5; 107 enum GNUTLS_PKCS11_TOKEN_USER_PIN_COUNT_LOW = 1 << 6; 108 enum GNUTLS_PKCS11_TOKEN_USER_PIN_FINAL_TRY = 1 << 7; 109 enum GNUTLS_PKCS11_TOKEN_USER_PIN_LOCKED = 1 << 8; 110 enum GNUTLS_PKCS11_TOKEN_SO_PIN_COUNT_LOW = 1 << 9; 111 enum GNUTLS_PKCS11_TOKEN_SO_PIN_FINAL_TRY = 1 << 10; 112 enum GNUTLS_PKCS11_TOKEN_SO_PIN_LOCKED = 1 << 11; 113 enum GNUTLS_PKCS11_TOKEN_USER_PIN_INITIALIZED = 1 << 12; 114 enum GNUTLS_PKCS11_TOKEN_ERROR_STATE = 1 << 13; 115 116 extern(C) nothrow @nogc 117 { 118 alias gnutls_pkcs11_token_callback_t = int function (void* userdata, const char* label, uint retry); 119 } 120 121 extern (D) nothrow @nogc 122 { 123 int gnutls_pkcs11_copy_x509_crt(const(char)* url, gnutls_x509_crt_t crt, const(char)* label, uint flags) 124 { 125 return gnutls_pkcs11_copy_x509_crt2(url, crt, label, null, flags); 126 } 127 128 int gnutls_pkcs11_copy_x509_privkey(const(char)* url, gnutls_x509_privkey_t key, const(char)* label, uint usage, uint flags) 129 { 130 return gnutls_pkcs11_copy_x509_privkey2(url, key, label, null, usage, flags); 131 } 132 133 int gnutls_pkcs11_privkey_generate(const(char)* url, gnutls_pk_algorithm_t pk, uint bits, const(char)* label, uint flags) 134 { 135 return gnutls_pkcs11_privkey_generate3(url, pk, bits, label, null, gnutls_x509_crt_fmt_t.GNUTLS_X509_FMT_DER, null, 0, flags); 136 } 137 138 int gnutls_pkcs11_privkey_generate2(const(char)* url, gnutls_pk_algorithm_t pk, uint bits, const(char)* label, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* pubkey, uint flags) 139 { 140 return gnutls_pkcs11_privkey_generate3(url, pk, bits, label, null, fmt, pubkey, 0, flags); 141 } 142 } 143 144 alias gnutls_x509_crt_import_pkcs11_url = gnutls_x509_crt_import_url; 145 146 version (BindGnuTLS_Static) 147 { 148 extern (System) @nogc nothrow @system: 149 150 int gnutls_pkcs11_init (uint flags, const(char)* deprecated_config_file); 151 int gnutls_pkcs11_reinit (); 152 void gnutls_pkcs11_deinit (); 153 void gnutls_pkcs11_set_token_function (gnutls_pkcs11_token_callback_t fn, void* userdata); 154 void gnutls_pkcs11_set_pin_function (gnutls_pin_callback_t fn, void* userdata); 155 gnutls_pin_callback_t gnutls_pkcs11_get_pin_function (void** userdata); 156 int gnutls_pkcs11_add_provider (const(char)* name, const(char)* params); 157 int gnutls_pkcs11_obj_init (gnutls_pkcs11_obj_t* obj); 158 void gnutls_pkcs11_obj_set_pin_function (gnutls_pkcs11_obj_t obj, gnutls_pin_callback_t fn, void* userdata); 159 int gnutls_pkcs11_obj_import_url (gnutls_pkcs11_obj_t obj, const(char)* url, uint flags); 160 int gnutls_pkcs11_obj_export_url (gnutls_pkcs11_obj_t obj, gnutls_pkcs11_url_type_t detailed, char** url); 161 void gnutls_pkcs11_obj_deinit (gnutls_pkcs11_obj_t obj); 162 int gnutls_pkcs11_obj_export (gnutls_pkcs11_obj_t obj, void* output_data, size_t* output_data_size); 163 int gnutls_pkcs11_obj_export2 (gnutls_pkcs11_obj_t obj, gnutls_datum_t* out_); 164 int gnutls_pkcs11_obj_export3 (gnutls_pkcs11_obj_t obj, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* out_); 165 int gnutls_pkcs11_get_raw_issuer (const(char)* url, gnutls_x509_crt_t cert, gnutls_datum_t* issuer, gnutls_x509_crt_fmt_t fmt, uint flags); 166 int gnutls_pkcs11_get_raw_issuer_by_dn (const(char)* url, const(gnutls_datum_t)* dn, gnutls_datum_t* issuer, gnutls_x509_crt_fmt_t fmt, uint flags); 167 int gnutls_pkcs11_get_raw_issuer_by_subject_key_id (const(char)* url, const(gnutls_datum_t)* dn, const(gnutls_datum_t)* spki, gnutls_datum_t* issuer, gnutls_x509_crt_fmt_t fmt, uint flags); 168 uint gnutls_pkcs11_crt_is_known (const(char)* url, gnutls_x509_crt_t cert, uint flags); 169 int gnutls_pkcs11_copy_pubkey (const(char)* token_url, gnutls_pubkey_t crt, const(char)* label, const(gnutls_datum_t)* cid, uint key_usage, uint flags); 170 int gnutls_pkcs11_copy_x509_crt2 (const(char)* token_url, gnutls_x509_crt_t crt, const(char)* label, const(gnutls_datum_t)* id, uint flags); 171 int gnutls_pkcs11_copy_x509_privkey2 (const(char)* token_url, gnutls_x509_privkey_t key, const(char)* label, const(gnutls_datum_t)* cid, uint key_usage, uint flags); 172 int gnutls_pkcs11_delete_url (const(char)* object_url, uint flags); 173 int gnutls_pkcs11_copy_secret_key (const(char)* token_url, gnutls_datum_t* key, const(char)* label, uint key_usage, uint flags); 174 175 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 176 int gnutls_pkcs11_obj_get_ptr (gnutls_pkcs11_obj_t obj, void** ptr, void** session, void** ohandle, c_ulong* slot_id, uint flags); 177 178 int gnutls_pkcs11_obj_get_info (gnutls_pkcs11_obj_t obj, gnutls_pkcs11_obj_info_t itype, void* output, size_t* output_size); 179 int gnutls_pkcs11_obj_set_info (gnutls_pkcs11_obj_t obj, gnutls_pkcs11_obj_info_t itype, const(void)* data, size_t data_size, uint flags); 180 int gnutls_pkcs11_token_init (const(char)* token_url, const(char)* so_pin, const(char)* label); 181 182 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 183 int gnutls_pkcs11_token_get_ptr (const(char)* url, void** ptr, c_ulong* slot_id, uint flags); 184 185 int gnutls_pkcs11_token_get_mechanism (const(char)* url, uint idx, c_ulong* mechanism); 186 uint gnutls_pkcs11_token_check_mechanism (const(char)* url, c_ulong mechanism, void* ptr, uint psize, uint flags); 187 int gnutls_pkcs11_token_set_pin (const(char)* token_url, const(char)* oldpin, const(char)* newpin, uint flags); 188 int gnutls_pkcs11_token_get_url (uint seq, gnutls_pkcs11_url_type_t detailed, char** url); 189 int gnutls_pkcs11_token_get_info (const(char)* url, gnutls_pkcs11_token_info_t ttype, void* output, size_t* output_size); 190 int gnutls_pkcs11_token_get_flags (const(char)* url, uint* flags); 191 int gnutls_pkcs11_obj_list_import_url3 (gnutls_pkcs11_obj_t* p_list, uint* n_list, const(char)* url, uint flags); 192 int gnutls_pkcs11_obj_list_import_url4 (gnutls_pkcs11_obj_t** p_list, uint* n_list, const(char)* url, uint flags); 193 int gnutls_x509_crt_import_pkcs11 (gnutls_x509_crt_t crt, gnutls_pkcs11_obj_t pkcs11_crt); 194 gnutls_pkcs11_obj_type_t gnutls_pkcs11_obj_get_type (gnutls_pkcs11_obj_t obj); 195 const(char)* gnutls_pkcs11_type_get_name (gnutls_pkcs11_obj_type_t type); 196 int gnutls_pkcs11_obj_get_exts (gnutls_pkcs11_obj_t obj, gnutls_x509_ext_st** exts, uint* exts_size, uint flags); 197 int gnutls_pkcs11_obj_get_flags (gnutls_pkcs11_obj_t obj, uint* oflags); 198 char* gnutls_pkcs11_obj_flags_get_str (uint flags); 199 int gnutls_x509_crt_list_import_pkcs11 (gnutls_x509_crt_t* certs, uint cert_max, gnutls_pkcs11_obj_t* objs, uint flags); 200 int gnutls_pkcs11_privkey_init (gnutls_pkcs11_privkey_t* key); 201 int gnutls_pkcs11_privkey_cpy (gnutls_pkcs11_privkey_t dst, gnutls_pkcs11_privkey_t src); 202 void gnutls_pkcs11_privkey_set_pin_function (gnutls_pkcs11_privkey_t key, gnutls_pin_callback_t fn, void* userdata); 203 void gnutls_pkcs11_privkey_deinit (gnutls_pkcs11_privkey_t key); 204 int gnutls_pkcs11_privkey_get_pk_algorithm (gnutls_pkcs11_privkey_t key, uint* bits); 205 int gnutls_pkcs11_privkey_get_info (gnutls_pkcs11_privkey_t pkey, gnutls_pkcs11_obj_info_t itype, void* output, size_t* output_size); 206 int gnutls_pkcs11_privkey_import_url (gnutls_pkcs11_privkey_t pkey, const(char)* url, uint flags); 207 int gnutls_pkcs11_privkey_export_url (gnutls_pkcs11_privkey_t key, gnutls_pkcs11_url_type_t detailed, char** url); 208 uint gnutls_pkcs11_privkey_status (gnutls_pkcs11_privkey_t key); 209 int gnutls_pkcs11_privkey_generate3 (const(char)* url, gnutls_pk_algorithm_t pk, uint bits, const(char)* label, const(gnutls_datum_t)* cid, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* pubkey, uint key_usage, uint flags); 210 int gnutls_pkcs11_privkey_export_pubkey (gnutls_pkcs11_privkey_t pkey, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* pubkey, uint flags); 211 int gnutls_pkcs11_token_get_random (const(char)* token_url, void* data, size_t len); 212 int gnutls_pkcs11_copy_attached_extension (const(char)* token_url, gnutls_x509_crt_t crt, gnutls_datum_t* data, const(char)* label, uint flags); 213 } 214 else 215 { 216 extern (System) @nogc nothrow @system 217 { 218 alias pgnutls_pkcs11_init = int function (uint flags, const(char)* deprecated_config_file); 219 alias pgnutls_pkcs11_reinit = int function (); 220 alias pgnutls_pkcs11_deinit = void function (); 221 alias pgnutls_pkcs11_set_token_function = void function (gnutls_pkcs11_token_callback_t fn, void* userdata); 222 alias pgnutls_pkcs11_set_pin_function = void function (gnutls_pin_callback_t fn, void* userdata); 223 alias pgnutls_pkcs11_get_pin_function = gnutls_pin_callback_t function (void** userdata); 224 alias pgnutls_pkcs11_add_provider = int function (const(char)* name, const(char)* params); 225 alias pgnutls_pkcs11_obj_init = int function (gnutls_pkcs11_obj_t* obj); 226 alias pgnutls_pkcs11_obj_set_pin_function = void function (gnutls_pkcs11_obj_t obj, gnutls_pin_callback_t fn, void* userdata); 227 alias pgnutls_pkcs11_obj_import_url = int function (gnutls_pkcs11_obj_t obj, const(char)* url, uint flags); 228 alias pgnutls_pkcs11_obj_export_url = int function (gnutls_pkcs11_obj_t obj, gnutls_pkcs11_url_type_t detailed, char** url); 229 alias pgnutls_pkcs11_obj_deinit = void function (gnutls_pkcs11_obj_t obj); 230 alias pgnutls_pkcs11_obj_export = int function (gnutls_pkcs11_obj_t obj, void* output_data, size_t* output_data_size); 231 alias pgnutls_pkcs11_obj_export2 = int function (gnutls_pkcs11_obj_t obj, gnutls_datum_t* out_); 232 alias pgnutls_pkcs11_obj_export3 = int function (gnutls_pkcs11_obj_t obj, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* out_); 233 alias pgnutls_pkcs11_get_raw_issuer = int function (const(char)* url, gnutls_x509_crt_t cert, gnutls_datum_t* issuer, gnutls_x509_crt_fmt_t fmt, uint flags); 234 alias pgnutls_pkcs11_get_raw_issuer_by_dn = int function (const(char)* url, const(gnutls_datum_t)* dn, gnutls_datum_t* issuer, gnutls_x509_crt_fmt_t fmt, uint flags); 235 alias pgnutls_pkcs11_get_raw_issuer_by_subject_key_id = int function (const(char)* url, const(gnutls_datum_t)* dn, const(gnutls_datum_t)* spki, gnutls_datum_t* issuer, gnutls_x509_crt_fmt_t fmt, uint flags); 236 alias pgnutls_pkcs11_crt_is_known = uint function (const(char)* url, gnutls_x509_crt_t cert, uint flags); 237 alias pgnutls_pkcs11_copy_pubkey = int function (const(char)* token_url, gnutls_pubkey_t crt, const(char)* label, const(gnutls_datum_t)* cid, uint key_usage, uint flags); 238 alias pgnutls_pkcs11_copy_x509_crt2 = int function (const(char)* token_url, gnutls_x509_crt_t crt, const(char)* label, const(gnutls_datum_t)* id, uint flags); 239 alias pgnutls_pkcs11_copy_x509_privkey2 = int function (const(char)* token_url, gnutls_x509_privkey_t key, const(char)* label, const(gnutls_datum_t)* cid, uint key_usage, uint flags); 240 alias pgnutls_pkcs11_delete_url = int function (const(char)* object_url, uint flags); 241 alias pgnutls_pkcs11_copy_secret_key = int function (const(char)* token_url, gnutls_datum_t* key, const(char)* label, uint key_usage, uint flags); 242 243 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 244 alias pgnutls_pkcs11_obj_get_ptr = int function (gnutls_pkcs11_obj_t obj, void** ptr, void** session, void** ohandle, c_ulong* slot_id, uint flags); 245 246 alias pgnutls_pkcs11_obj_get_info = int function (gnutls_pkcs11_obj_t obj, gnutls_pkcs11_obj_info_t itype, void* output, size_t* output_size); 247 alias pgnutls_pkcs11_obj_set_info = int function (gnutls_pkcs11_obj_t obj, gnutls_pkcs11_obj_info_t itype, const(void)* data, size_t data_size, uint flags); 248 alias pgnutls_pkcs11_token_init = int function (const(char)* token_url, const(char)* so_pin, const(char)* label); 249 250 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 251 alias pgnutls_pkcs11_token_get_ptr = int function (const(char)* url, void** ptr, c_ulong* slot_id, uint flags); 252 253 alias pgnutls_pkcs11_token_get_mechanism = int function (const(char)* url, uint idx, c_ulong* mechanism); 254 alias pgnutls_pkcs11_token_check_mechanism = uint function (const(char)* url, c_ulong mechanism, void* ptr, uint psize, uint flags); 255 alias pgnutls_pkcs11_token_set_pin = int function (const(char)* token_url, const(char)* oldpin, const(char)* newpin, uint flags); 256 alias pgnutls_pkcs11_token_get_url = int function (uint seq, gnutls_pkcs11_url_type_t detailed, char** url); 257 alias pgnutls_pkcs11_token_get_info = int function (const(char)* url, gnutls_pkcs11_token_info_t ttype, void* output, size_t* output_size); 258 alias pgnutls_pkcs11_token_get_flags = int function (const(char)* url, uint* flags); 259 alias pgnutls_pkcs11_obj_list_import_url3 = int function (gnutls_pkcs11_obj_t* p_list, uint* n_list, const(char)* url, uint flags); 260 alias pgnutls_pkcs11_obj_list_import_url4 = int function (gnutls_pkcs11_obj_t** p_list, uint* n_list, const(char)* url, uint flags); 261 alias pgnutls_x509_crt_import_pkcs11 = int function (gnutls_x509_crt_t crt, gnutls_pkcs11_obj_t pkcs11_crt); 262 alias pgnutls_pkcs11_obj_get_type = gnutls_pkcs11_obj_type_t function (gnutls_pkcs11_obj_t obj); 263 alias pgnutls_pkcs11_type_get_name = const(char)* function (gnutls_pkcs11_obj_type_t type); 264 alias pgnutls_pkcs11_obj_get_exts = int function (gnutls_pkcs11_obj_t obj, gnutls_x509_ext_st** exts, uint* exts_size, uint flags); 265 alias pgnutls_pkcs11_obj_get_flags = int function (gnutls_pkcs11_obj_t obj, uint* oflags); 266 alias pgnutls_pkcs11_obj_flags_get_str = char* function (uint flags); 267 alias pgnutls_x509_crt_list_import_pkcs11 = int function (gnutls_x509_crt_t* certs, uint cert_max, gnutls_pkcs11_obj_t* objs, uint flags); 268 alias pgnutls_pkcs11_privkey_init = int function (gnutls_pkcs11_privkey_t* key); 269 alias pgnutls_pkcs11_privkey_cpy = int function (gnutls_pkcs11_privkey_t dst, gnutls_pkcs11_privkey_t src); 270 alias pgnutls_pkcs11_privkey_set_pin_function = void function (gnutls_pkcs11_privkey_t key, gnutls_pin_callback_t fn, void* userdata); 271 alias pgnutls_pkcs11_privkey_deinit = void function (gnutls_pkcs11_privkey_t key); 272 alias pgnutls_pkcs11_privkey_get_pk_algorithm = int function (gnutls_pkcs11_privkey_t key, uint* bits); 273 alias pgnutls_pkcs11_privkey_get_info = int function (gnutls_pkcs11_privkey_t pkey, gnutls_pkcs11_obj_info_t itype, void* output, size_t* output_size); 274 alias pgnutls_pkcs11_privkey_import_url = int function (gnutls_pkcs11_privkey_t pkey, const(char)* url, uint flags); 275 alias pgnutls_pkcs11_privkey_export_url = int function (gnutls_pkcs11_privkey_t key, gnutls_pkcs11_url_type_t detailed, char** url); 276 alias pgnutls_pkcs11_privkey_status = uint function (gnutls_pkcs11_privkey_t key); 277 alias pgnutls_pkcs11_privkey_generate3 = int function (const(char)* url, gnutls_pk_algorithm_t pk, uint bits, const(char)* label, const(gnutls_datum_t)* cid, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* pubkey, uint key_usage, uint flags); 278 alias pgnutls_pkcs11_privkey_export_pubkey = int function (gnutls_pkcs11_privkey_t pkey, gnutls_x509_crt_fmt_t fmt, gnutls_datum_t* pubkey, uint flags); 279 alias pgnutls_pkcs11_token_get_random = int function (const(char)* token_url, void* data, size_t len); 280 alias pgnutls_pkcs11_copy_attached_extension = int function (const(char)* token_url, gnutls_x509_crt_t crt, gnutls_datum_t* data, const(char)* label, uint flags); 281 } 282 283 __gshared 284 { 285 pgnutls_pkcs11_init gnutls_pkcs11_init; 286 pgnutls_pkcs11_reinit gnutls_pkcs11_reinit; 287 pgnutls_pkcs11_deinit gnutls_pkcs11_deinit; 288 pgnutls_pkcs11_set_token_function gnutls_pkcs11_set_token_function; 289 pgnutls_pkcs11_set_pin_function gnutls_pkcs11_set_pin_function; 290 pgnutls_pkcs11_get_pin_function gnutls_pkcs11_get_pin_function; 291 pgnutls_pkcs11_add_provider gnutls_pkcs11_add_provider; 292 pgnutls_pkcs11_obj_init gnutls_pkcs11_obj_init; 293 pgnutls_pkcs11_obj_set_pin_function gnutls_pkcs11_obj_set_pin_function; 294 pgnutls_pkcs11_obj_import_url gnutls_pkcs11_obj_import_url; 295 pgnutls_pkcs11_obj_export_url gnutls_pkcs11_obj_export_url; 296 pgnutls_pkcs11_obj_deinit gnutls_pkcs11_obj_deinit; 297 pgnutls_pkcs11_obj_export gnutls_pkcs11_obj_export; 298 pgnutls_pkcs11_obj_export2 gnutls_pkcs11_obj_export2; 299 pgnutls_pkcs11_obj_export3 gnutls_pkcs11_obj_export3; 300 pgnutls_pkcs11_get_raw_issuer gnutls_pkcs11_get_raw_issuer; 301 pgnutls_pkcs11_get_raw_issuer_by_dn gnutls_pkcs11_get_raw_issuer_by_dn; 302 pgnutls_pkcs11_get_raw_issuer_by_subject_key_id gnutls_pkcs11_get_raw_issuer_by_subject_key_id; 303 pgnutls_pkcs11_crt_is_known gnutls_pkcs11_crt_is_known; 304 pgnutls_pkcs11_copy_pubkey gnutls_pkcs11_copy_pubkey; 305 pgnutls_pkcs11_copy_x509_crt2 gnutls_pkcs11_copy_x509_crt2; 306 pgnutls_pkcs11_copy_x509_privkey2 gnutls_pkcs11_copy_x509_privkey2; 307 pgnutls_pkcs11_delete_url gnutls_pkcs11_delete_url; 308 pgnutls_pkcs11_copy_secret_key gnutls_pkcs11_copy_secret_key; 309 310 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 311 pgnutls_pkcs11_obj_get_ptr gnutls_pkcs11_obj_get_ptr; 312 313 pgnutls_pkcs11_obj_get_info gnutls_pkcs11_obj_get_info; 314 pgnutls_pkcs11_obj_set_info gnutls_pkcs11_obj_set_info; 315 pgnutls_pkcs11_token_init gnutls_pkcs11_token_init; 316 317 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 318 pgnutls_pkcs11_token_get_ptr gnutls_pkcs11_token_get_ptr; 319 320 pgnutls_pkcs11_token_get_mechanism gnutls_pkcs11_token_get_mechanism; 321 pgnutls_pkcs11_token_check_mechanism gnutls_pkcs11_token_check_mechanism; 322 pgnutls_pkcs11_token_set_pin gnutls_pkcs11_token_set_pin; 323 pgnutls_pkcs11_token_get_url gnutls_pkcs11_token_get_url; 324 pgnutls_pkcs11_token_get_info gnutls_pkcs11_token_get_info; 325 pgnutls_pkcs11_token_get_flags gnutls_pkcs11_token_get_flags; 326 pgnutls_pkcs11_obj_list_import_url3 gnutls_pkcs11_obj_list_import_url3; 327 pgnutls_pkcs11_obj_list_import_url4 gnutls_pkcs11_obj_list_import_url4; 328 pgnutls_x509_crt_import_pkcs11 gnutls_x509_crt_import_pkcs11; 329 pgnutls_pkcs11_obj_get_type gnutls_pkcs11_obj_get_type; 330 pgnutls_pkcs11_type_get_name gnutls_pkcs11_type_get_name; 331 pgnutls_pkcs11_obj_get_exts gnutls_pkcs11_obj_get_exts; 332 pgnutls_pkcs11_obj_get_flags gnutls_pkcs11_obj_get_flags; 333 pgnutls_pkcs11_obj_flags_get_str gnutls_pkcs11_obj_flags_get_str; 334 pgnutls_x509_crt_list_import_pkcs11 gnutls_x509_crt_list_import_pkcs11; 335 pgnutls_pkcs11_privkey_init gnutls_pkcs11_privkey_init; 336 pgnutls_pkcs11_privkey_cpy gnutls_pkcs11_privkey_cpy; 337 pgnutls_pkcs11_privkey_set_pin_function gnutls_pkcs11_privkey_set_pin_function; 338 pgnutls_pkcs11_privkey_deinit gnutls_pkcs11_privkey_deinit; 339 pgnutls_pkcs11_privkey_get_pk_algorithm gnutls_pkcs11_privkey_get_pk_algorithm; 340 pgnutls_pkcs11_privkey_get_info gnutls_pkcs11_privkey_get_info; 341 pgnutls_pkcs11_privkey_import_url gnutls_pkcs11_privkey_import_url; 342 pgnutls_pkcs11_privkey_export_url gnutls_pkcs11_privkey_export_url; 343 pgnutls_pkcs11_privkey_status gnutls_pkcs11_privkey_status; 344 pgnutls_pkcs11_privkey_generate3 gnutls_pkcs11_privkey_generate3; 345 pgnutls_pkcs11_privkey_export_pubkey gnutls_pkcs11_privkey_export_pubkey; 346 pgnutls_pkcs11_token_get_random gnutls_pkcs11_token_get_random; 347 pgnutls_pkcs11_copy_attached_extension gnutls_pkcs11_copy_attached_extension; 348 } 349 350 import bindbc.loader : SharedLib, bindSymbol_stdcall; 351 void bindPkcs11(SharedLib lib) 352 { 353 lib.bindSymbol_stdcall(gnutls_pkcs11_init, "gnutls_pkcs11_init"); 354 lib.bindSymbol_stdcall(gnutls_pkcs11_reinit, "gnutls_pkcs11_reinit"); 355 lib.bindSymbol_stdcall(gnutls_pkcs11_deinit, "gnutls_pkcs11_deinit"); 356 lib.bindSymbol_stdcall(gnutls_pkcs11_set_token_function, "gnutls_pkcs11_set_token_function"); 357 lib.bindSymbol_stdcall(gnutls_pkcs11_set_pin_function, "gnutls_pkcs11_set_pin_function"); 358 lib.bindSymbol_stdcall(gnutls_pkcs11_get_pin_function, "gnutls_pkcs11_get_pin_function"); 359 lib.bindSymbol_stdcall(gnutls_pkcs11_add_provider, "gnutls_pkcs11_add_provider"); 360 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_init, "gnutls_pkcs11_obj_init"); 361 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_set_pin_function, "gnutls_pkcs11_obj_set_pin_function"); 362 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_import_url, "gnutls_pkcs11_obj_import_url"); 363 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_export_url, "gnutls_pkcs11_obj_export_url"); 364 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_deinit, "gnutls_pkcs11_obj_deinit"); 365 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_export, "gnutls_pkcs11_obj_export"); 366 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_export2, "gnutls_pkcs11_obj_export2"); 367 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_export3, "gnutls_pkcs11_obj_export3"); 368 lib.bindSymbol_stdcall(gnutls_pkcs11_get_raw_issuer, "gnutls_pkcs11_get_raw_issuer"); 369 lib.bindSymbol_stdcall(gnutls_pkcs11_get_raw_issuer_by_dn, "gnutls_pkcs11_get_raw_issuer_by_dn"); 370 lib.bindSymbol_stdcall(gnutls_pkcs11_get_raw_issuer_by_subject_key_id, "gnutls_pkcs11_get_raw_issuer_by_subject_key_id"); 371 lib.bindSymbol_stdcall(gnutls_pkcs11_crt_is_known, "gnutls_pkcs11_crt_is_known"); 372 lib.bindSymbol_stdcall(gnutls_pkcs11_copy_pubkey, "gnutls_pkcs11_copy_pubkey"); 373 lib.bindSymbol_stdcall(gnutls_pkcs11_copy_x509_crt2, "gnutls_pkcs11_copy_x509_crt2"); 374 lib.bindSymbol_stdcall(gnutls_pkcs11_copy_x509_privkey2, "gnutls_pkcs11_copy_x509_privkey2"); 375 lib.bindSymbol_stdcall(gnutls_pkcs11_delete_url, "gnutls_pkcs11_delete_url"); 376 lib.bindSymbol_stdcall(gnutls_pkcs11_copy_secret_key, "gnutls_pkcs11_copy_secret_key"); 377 378 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 379 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_get_ptr, "gnutls_pkcs11_obj_get_ptr"); 380 381 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_get_info, "gnutls_pkcs11_obj_get_info"); 382 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_set_info, "gnutls_pkcs11_obj_set_info"); 383 lib.bindSymbol_stdcall(gnutls_pkcs11_token_init, "gnutls_pkcs11_token_init"); 384 385 static if (gnuTLSSupport >= GnuTLSSupport.gnutls_3_6_3) 386 lib.bindSymbol_stdcall(gnutls_pkcs11_token_get_ptr, "gnutls_pkcs11_token_get_ptr"); 387 388 lib.bindSymbol_stdcall(gnutls_pkcs11_token_get_mechanism, "gnutls_pkcs11_token_get_mechanism"); 389 lib.bindSymbol_stdcall(gnutls_pkcs11_token_check_mechanism, "gnutls_pkcs11_token_check_mechanism"); 390 lib.bindSymbol_stdcall(gnutls_pkcs11_token_set_pin, "gnutls_pkcs11_token_set_pin"); 391 lib.bindSymbol_stdcall(gnutls_pkcs11_token_get_url, "gnutls_pkcs11_token_get_url"); 392 lib.bindSymbol_stdcall(gnutls_pkcs11_token_get_info, "gnutls_pkcs11_token_get_info"); 393 lib.bindSymbol_stdcall(gnutls_pkcs11_token_get_flags, "gnutls_pkcs11_token_get_flags"); 394 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_list_import_url3, "gnutls_pkcs11_obj_list_import_url3"); 395 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_list_import_url4, "gnutls_pkcs11_obj_list_import_url4"); 396 lib.bindSymbol_stdcall(gnutls_x509_crt_import_pkcs11, "gnutls_x509_crt_import_pkcs11"); 397 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_get_type, "gnutls_pkcs11_obj_get_type"); 398 lib.bindSymbol_stdcall(gnutls_pkcs11_type_get_name, "gnutls_pkcs11_type_get_name"); 399 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_get_exts, "gnutls_pkcs11_obj_get_exts"); 400 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_get_flags, "gnutls_pkcs11_obj_get_flags"); 401 lib.bindSymbol_stdcall(gnutls_pkcs11_obj_flags_get_str, "gnutls_pkcs11_obj_flags_get_str"); 402 lib.bindSymbol_stdcall(gnutls_x509_crt_list_import_pkcs11, "gnutls_x509_crt_list_import_pkcs11"); 403 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_init, "gnutls_pkcs11_privkey_init"); 404 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_cpy, "gnutls_pkcs11_privkey_cpy"); 405 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_set_pin_function, "gnutls_pkcs11_privkey_set_pin_function"); 406 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_deinit, "gnutls_pkcs11_privkey_deinit"); 407 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_get_pk_algorithm, "gnutls_pkcs11_privkey_get_pk_algorithm"); 408 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_get_info, "gnutls_pkcs11_privkey_get_info"); 409 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_import_url, "gnutls_pkcs11_privkey_import_url"); 410 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_export_url, "gnutls_pkcs11_privkey_export_url"); 411 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_status, "gnutls_pkcs11_privkey_status"); 412 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_generate3, "gnutls_pkcs11_privkey_generate3"); 413 lib.bindSymbol_stdcall(gnutls_pkcs11_privkey_export_pubkey, "gnutls_pkcs11_privkey_export_pubkey"); 414 lib.bindSymbol_stdcall(gnutls_pkcs11_token_get_random, "gnutls_pkcs11_token_get_random"); 415 lib.bindSymbol_stdcall(gnutls_pkcs11_copy_attached_extension, "gnutls_pkcs11_copy_attached_extension"); 416 } 417 }