1 /* ksba.h - X.509 library used by GnuPG 2 * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2010, 2011 3 * 2012, 2013, 2104, 2015, 2019, 2020, 2021 g10 Code GmbH 4 * 5 * This file is part of KSBA. 6 * 7 * KSBA is free software; you can redistribute it and/or modify 8 * it under the terms of either 9 * 10 * - the GNU Lesser General Public License as published by the Free 11 * Software Foundation; either version 3 of the License, or (at 12 * your option) any later version. 13 * 14 * or 15 * 16 * - the GNU General Public License as published by the Free 17 * Software Foundation; either version 2 of the License, or (at 18 * your option) any later version. 19 * 20 * or both in parallel, as here. 21 * 22 * KSBA is distributed in the hope that it will be useful, but WITHOUT 23 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 24 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 25 * License for more details. 26 * 27 * You should have received a copies of the GNU General Public License 28 * and the GNU Lesser General Public License along with this program; 29 * if not, see <http://www.gnu.org/licenses/>. 30 * SPDX-License-Identifier: LGPL-3.0-or-later OR GPL-2.0-or-later 31 */ 32 33 #ifndef KSBA_H 34 #define KSBA_H 1 35 36 #include <gpg-error.h> 37 #include <stdio.h> 38 39 #ifdef __cplusplus 40 extern "C" { 41 #if 0 42 } 43 #endif 44 #endif 45 46 /* The version of this header should match the one of the library. Do 47 * not use this symbol in your application; use assuan_check_version 48 * instead. */ 49 #define KSBA_VERSION "1.6.0" 50 51 /* The version number of this header. It may be used to handle minor 52 * API incompatibilities. */ 53 #define KSBA_VERSION_NUMBER 0x010600 54 55 56 57 /* Check for compiler features. */ 58 #ifdef __GNUC__ 59 #define _KSBA_GCC_VERSION (__GNUC__ * 10000 \ 60 + __GNUC_MINOR__ * 100 \ 61 + __GNUC_PATCHLEVEL__) 62 #if _KSBA_GCC_VERSION > 30100 63 #define _KSBA_DEPRECATED __attribute__ ((__deprecated__)) 64 #endif 65 #endif /*__GNUC__*/ 66 67 #ifndef _KSBA_DEPRECATED 68 #define _KSBA_DEPRECATED 69 #endif 70 71 72 #define KSBA_CLASS_UNIVERSAL 0 73 #define KSBA_CLASS_APPLICATION 1 74 #define KSBA_CLASS_CONTEXT 2 75 #define KSBA_CLASS_PRIVATE 3 76 #define KSBA_CLASS_ENCAPSULATE 0x80 /* Pseudo class. */ 77 78 #define KSBA_TYPE_BOOLEAN 1 79 #define KSBA_TYPE_INTEGER 2 80 #define KSBA_TYPE_BIT_STRING 3 81 #define KSBA_TYPE_OCTET_STRING 4 82 #define KSBA_TYPE_NULL 5 83 #define KSBA_TYPE_OBJECT_ID 6 84 #define KSBA_TYPE_OBJECT_DESCRIPTOR 7 85 #define KSBA_TYPE_EXTERNAL 8 86 #define KSBA_TYPE_REAL 9 87 #define KSBA_TYPE_ENUMERATED 10 88 #define KSBA_TYPE_EMBEDDED_PDV 11 89 #define KSBA_TYPE_UTF8_STRING 12 90 #define KSBA_TYPE_RELATIVE_OID 13 91 #define KSBA_TYPE_TIME 14 92 #define KSBA_TYPE_SEQUENCE 16 93 #define KSBA_TYPE_SET 17 94 #define KSBA_TYPE_NUMERIC_STRING 18 95 #define KSBA_TYPE_PRINTABLE_STRING 19 96 #define KSBA_TYPE_TELETEX_STRING 20 97 #define KSBA_TYPE_VIDEOTEX_STRING 21 98 #define KSBA_TYPE_IA5_STRING 22 99 #define KSBA_TYPE_UTC_TIME 23 100 #define KSBA_TYPE_GENERALIZED_TIME 24 101 #define KSBA_TYPE_GRAPHIC_STRING 25 102 #define KSBA_TYPE_VISIBLE_STRING 26 103 #define KSBA_TYPE_GENERAL_STRING 27 104 #define KSBA_TYPE_UNIVERSAL_STRING 28 105 #define KSBA_TYPE_CHARACTER_STRING 29 106 #define KSBA_TYPE_BMP_STRING 30 107 #define KSBA_TYPE_DATE 31 108 #define KSBA_TYPE_TIME_OF_DAY 32 109 #define KSBA_TYPE_DATE_TIME 33 110 #define KSBA_TYPE_DURATION 34 111 #define KSBA_TYPE_OID_IRI 35 112 #define KSBA_TYPE_RELATIVE_OID_IRI 36 113 114 115 116 typedef gpg_error_t KsbaError _KSBA_DEPRECATED; 117 118 typedef enum 119 { 120 KSBA_CT_NONE = 0, 121 KSBA_CT_DATA = 1, 122 KSBA_CT_SIGNED_DATA = 2, 123 KSBA_CT_ENVELOPED_DATA = 3, 124 KSBA_CT_DIGESTED_DATA = 4, 125 KSBA_CT_ENCRYPTED_DATA = 5, 126 KSBA_CT_AUTH_DATA = 6, 127 KSBA_CT_PKCS12 = 7, 128 KSBA_CT_SPC_IND_DATA_CTX = 8, 129 KSBA_CT_OPENPGP_KEYBLOCK = 9, 130 KSBA_CT_AUTHENVELOPED_DATA = 10 131 } 132 ksba_content_type_t; 133 typedef ksba_content_type_t KsbaContentType _KSBA_DEPRECATED; 134 135 136 137 typedef enum 138 { 139 KSBA_SR_NONE = 0, /* Never seen by libksba user. */ 140 KSBA_SR_RUNNING = 1, /* Never seen by libksba user. */ 141 KSBA_SR_GOT_CONTENT = 2, 142 KSBA_SR_NEED_HASH = 3, 143 KSBA_SR_BEGIN_DATA = 4, 144 KSBA_SR_END_DATA = 5, 145 KSBA_SR_READY = 6, 146 KSBA_SR_NEED_SIG = 7, 147 KSBA_SR_DETACHED_DATA = 8, 148 KSBA_SR_BEGIN_ITEMS = 9, 149 KSBA_SR_GOT_ITEM = 10, 150 KSBA_SR_END_ITEMS = 11 151 } 152 ksba_stop_reason_t; 153 typedef ksba_stop_reason_t KsbaStopReason _KSBA_DEPRECATED; 154 155 typedef enum 156 { 157 KSBA_CRLREASON_UNSPECIFIED = 1, 158 KSBA_CRLREASON_KEY_COMPROMISE = 2, 159 KSBA_CRLREASON_CA_COMPROMISE = 4, 160 KSBA_CRLREASON_AFFILIATION_CHANGED = 8, 161 KSBA_CRLREASON_SUPERSEDED = 16, 162 KSBA_CRLREASON_CESSATION_OF_OPERATION = 32, 163 KSBA_CRLREASON_CERTIFICATE_HOLD = 64, 164 KSBA_CRLREASON_REMOVE_FROM_CRL = 256, 165 KSBA_CRLREASON_PRIVILEGE_WITHDRAWN = 512, 166 KSBA_CRLREASON_AA_COMPROMISE = 1024, 167 KSBA_CRLREASON_OTHER = 32768 168 } 169 ksba_crl_reason_t; 170 typedef ksba_crl_reason_t KsbaCRLReason _KSBA_DEPRECATED; 171 172 typedef enum 173 { 174 KSBA_OCSP_RSPSTATUS_SUCCESS = 0, 175 KSBA_OCSP_RSPSTATUS_MALFORMED = 1, 176 KSBA_OCSP_RSPSTATUS_INTERNAL = 2, 177 KSBA_OCSP_RSPSTATUS_TRYLATER = 3, 178 KSBA_OCSP_RSPSTATUS_SIGREQUIRED = 5, 179 KSBA_OCSP_RSPSTATUS_UNAUTHORIZED = 6, 180 KSBA_OCSP_RSPSTATUS_REPLAYED = 253, 181 KSBA_OCSP_RSPSTATUS_OTHER = 254, 182 KSBA_OCSP_RSPSTATUS_NONE = 255 183 } 184 ksba_ocsp_response_status_t; 185 186 typedef enum 187 { 188 KSBA_STATUS_NONE = 0, 189 KSBA_STATUS_UNKNOWN = 1, 190 KSBA_STATUS_GOOD = 2, 191 KSBA_STATUS_REVOKED = 4 192 } 193 ksba_status_t; 194 195 196 typedef enum 197 { 198 KSBA_KEYUSAGE_DIGITAL_SIGNATURE = 1, 199 KSBA_KEYUSAGE_NON_REPUDIATION = 2, 200 KSBA_KEYUSAGE_KEY_ENCIPHERMENT = 4, 201 KSBA_KEYUSAGE_DATA_ENCIPHERMENT = 8, 202 KSBA_KEYUSAGE_KEY_AGREEMENT = 16, 203 KSBA_KEYUSAGE_KEY_CERT_SIGN = 32, 204 KSBA_KEYUSAGE_CRL_SIGN = 64, 205 KSBA_KEYUSAGE_ENCIPHER_ONLY = 128, 206 KSBA_KEYUSAGE_DECIPHER_ONLY = 256 207 } 208 ksba_key_usage_t; 209 typedef ksba_key_usage_t KsbaKeyUsage _KSBA_DEPRECATED; 210 211 /* ISO format, e.g. "19610711T172059", assumed to be UTC. */ 212 typedef char ksba_isotime_t[16]; 213 214 215 /* X.509 certificates are represented by this object. 216 ksba_cert_new() creates such an object */ 217 struct ksba_cert_s; 218 typedef struct ksba_cert_s *ksba_cert_t; 219 typedef struct ksba_cert_s *KsbaCert _KSBA_DEPRECATED; 220 221 /* CMS objects are controlled by this object. 222 ksba_cms_new() creates it */ 223 struct ksba_cms_s; 224 typedef struct ksba_cms_s *ksba_cms_t; 225 typedef struct ksba_cms_s *KsbaCMS _KSBA_DEPRECATED; 226 227 /* CRL objects are controlled by this object. 228 ksba_crl_new() creates it */ 229 struct ksba_crl_s; 230 typedef struct ksba_crl_s *ksba_crl_t; 231 typedef struct ksba_crl_s *KsbaCRL _KSBA_DEPRECATED; 232 233 /* OCSP objects are controlled by this object. 234 ksba_ocsp_new() creates it. */ 235 struct ksba_ocsp_s; 236 typedef struct ksba_ocsp_s *ksba_ocsp_t; 237 238 /* PKCS-10 creation is controlled by this object. 239 ksba_certreq_new() creates it */ 240 struct ksba_certreq_s; 241 typedef struct ksba_certreq_s *ksba_certreq_t; 242 typedef struct ksba_certreq_s *KsbaCertreq _KSBA_DEPRECATED; 243 244 /* This is a reader object for various purposes 245 see ksba_reader_new et al. */ 246 struct ksba_reader_s; 247 typedef struct ksba_reader_s *ksba_reader_t; 248 typedef struct ksba_reader_s *KsbaReader _KSBA_DEPRECATED; 249 250 /* This is a writer object for various purposes 251 see ksba_writer_new et al. */ 252 struct ksba_writer_s; 253 typedef struct ksba_writer_s *ksba_writer_t; 254 typedef struct ksba_writer_s *KsbaWriter _KSBA_DEPRECATED; 255 256 /* This is an object to store an ASN.1 parse tree as 257 create by ksba_asn_parse_file() */ 258 struct ksba_asn_tree_s; 259 typedef struct ksba_asn_tree_s *ksba_asn_tree_t; 260 typedef struct ksba_asn_tree_s *KsbaAsnTree _KSBA_DEPRECATED; 261 262 /* This is an object to reference a General Name. Such an object is 263 returned by several functions. */ 264 struct ksba_name_s; 265 typedef struct ksba_name_s *ksba_name_t; 266 typedef struct ksba_name_s *KsbaName _KSBA_DEPRECATED; 267 268 /* KsbaSexp is just an unsigned char * which should be used for 269 documentation purpose. The S-expressions returned by libksba are 270 always in canonical representation with an extra 0 byte at the end, 271 so that one can print the values in the debugger and at least see 272 the first bytes */ 273 typedef unsigned char *ksba_sexp_t; 274 typedef unsigned char *KsbaSexp _KSBA_DEPRECATED; 275 typedef const unsigned char *ksba_const_sexp_t; 276 typedef const unsigned char *KsbaConstSexp _KSBA_DEPRECATED; 277 278 279 /* This is a generic object used by various functions. */ 280 struct ksba_der_s; 281 typedef struct ksba_der_s *ksba_der_t; 282 283 284 /*-- cert.c --*/ 285 gpg_error_t ksba_cert_new (ksba_cert_t *acert); 286 void ksba_cert_ref (ksba_cert_t cert); 287 void ksba_cert_release (ksba_cert_t cert); 288 gpg_error_t ksba_cert_set_user_data (ksba_cert_t cert, const char *key, 289 const void *data, size_t datalen); 290 gpg_error_t ksba_cert_get_user_data (ksba_cert_t cert, const char *key, 291 void *buffer, size_t bufferlen, 292 size_t *datalen); 293 294 gpg_error_t ksba_cert_read_der (ksba_cert_t cert, ksba_reader_t reader); 295 gpg_error_t ksba_cert_init_from_mem (ksba_cert_t cert, 296 const void *buffer, size_t length); 297 const unsigned char *ksba_cert_get_image (ksba_cert_t cert, size_t *r_length); 298 gpg_error_t ksba_cert_hash (ksba_cert_t cert, 299 int what, 300 void (*hasher)(void *, 301 const void *, 302 size_t length), 303 void *hasher_arg); 304 const char *ksba_cert_get_digest_algo (ksba_cert_t cert); 305 ksba_sexp_t ksba_cert_get_serial (ksba_cert_t cert); 306 char *ksba_cert_get_issuer (ksba_cert_t cert, int idx); 307 gpg_error_t ksba_cert_get_validity (ksba_cert_t cert, int what, 308 ksba_isotime_t r_time); 309 char *ksba_cert_get_subject (ksba_cert_t cert, int idx); 310 ksba_sexp_t ksba_cert_get_public_key (ksba_cert_t cert); 311 ksba_sexp_t ksba_cert_get_sig_val (ksba_cert_t cert); 312 313 gpg_error_t ksba_cert_get_extension (ksba_cert_t cert, int idx, 314 char const **r_oid, int *r_crit, 315 size_t *r_deroff, size_t *r_derlen); 316 317 gpg_error_t ksba_cert_is_ca (ksba_cert_t cert, int *r_ca, int *r_pathlen); 318 gpg_error_t ksba_cert_get_key_usage (ksba_cert_t cert, unsigned int *r_flags); 319 gpg_error_t ksba_cert_get_cert_policies (ksba_cert_t cert, char **r_policies); 320 gpg_error_t ksba_cert_get_ext_key_usages (ksba_cert_t cert, char **result); 321 gpg_error_t ksba_cert_get_crl_dist_point (ksba_cert_t cert, int idx, 322 ksba_name_t *r_distpoint, 323 ksba_name_t *r_issuer, 324 ksba_crl_reason_t *r_reason); 325 gpg_error_t ksba_cert_get_auth_key_id (ksba_cert_t cert, 326 ksba_sexp_t *r_keyid, 327 ksba_name_t *r_name, 328 ksba_sexp_t *r_serial); 329 gpg_error_t ksba_cert_get_subj_key_id (ksba_cert_t cert, 330 int *r_crit, 331 ksba_sexp_t *r_keyid); 332 gpg_error_t ksba_cert_get_authority_info_access (ksba_cert_t cert, int idx, 333 char **r_method, 334 ksba_name_t *r_location); 335 gpg_error_t ksba_cert_get_subject_info_access (ksba_cert_t cert, int idx, 336 char **r_method, 337 ksba_name_t *r_location); 338 339 340 /*-- cms.c --*/ 341 ksba_content_type_t ksba_cms_identify (ksba_reader_t reader); 342 343 gpg_error_t ksba_cms_new (ksba_cms_t *r_cms); 344 void ksba_cms_release (ksba_cms_t cms); 345 gpg_error_t ksba_cms_set_reader_writer (ksba_cms_t cms, 346 ksba_reader_t r, ksba_writer_t w); 347 348 gpg_error_t ksba_cms_parse (ksba_cms_t cms, ksba_stop_reason_t *r_stopreason); 349 gpg_error_t ksba_cms_build (ksba_cms_t cms, ksba_stop_reason_t *r_stopreason); 350 351 ksba_content_type_t ksba_cms_get_content_type (ksba_cms_t cms, int what); 352 const char *ksba_cms_get_content_oid (ksba_cms_t cms, int what); 353 gpg_error_t ksba_cms_get_content_enc_iv (ksba_cms_t cms, void *iv, 354 size_t maxivlen, size_t *ivlen); 355 const char *ksba_cms_get_digest_algo_list (ksba_cms_t cms, int idx); 356 gpg_error_t ksba_cms_get_issuer_serial (ksba_cms_t cms, int idx, 357 char **r_issuer, 358 ksba_sexp_t *r_serial); 359 const char *ksba_cms_get_digest_algo (ksba_cms_t cms, int idx); 360 ksba_cert_t ksba_cms_get_cert (ksba_cms_t cms, int idx); 361 gpg_error_t ksba_cms_get_message_digest (ksba_cms_t cms, int idx, 362 char **r_digest, size_t *r_digest_len); 363 gpg_error_t ksba_cms_get_signing_time (ksba_cms_t cms, int idx, 364 ksba_isotime_t r_sigtime); 365 gpg_error_t ksba_cms_get_sigattr_oids (ksba_cms_t cms, int idx, 366 const char *reqoid, char **r_value); 367 ksba_sexp_t ksba_cms_get_sig_val (ksba_cms_t cms, int idx); 368 ksba_sexp_t ksba_cms_get_enc_val (ksba_cms_t cms, int idx); 369 370 void ksba_cms_set_hash_function (ksba_cms_t cms, 371 void (*hash_fnc)(void *, const void *, size_t), 372 void *hash_fnc_arg); 373 374 gpg_error_t ksba_cms_hash_signed_attrs (ksba_cms_t cms, int idx); 375 376 377 gpg_error_t ksba_cms_set_content_type (ksba_cms_t cms, int what, 378 ksba_content_type_t type); 379 gpg_error_t ksba_cms_add_digest_algo (ksba_cms_t cms, const char *oid); 380 gpg_error_t ksba_cms_add_signer (ksba_cms_t cms, ksba_cert_t cert); 381 gpg_error_t ksba_cms_add_cert (ksba_cms_t cms, ksba_cert_t cert); 382 gpg_error_t ksba_cms_add_smime_capability (ksba_cms_t cms, const char *oid, 383 const unsigned char *der, 384 size_t derlen); 385 gpg_error_t ksba_cms_set_message_digest (ksba_cms_t cms, int idx, 386 const unsigned char *digest, 387 size_t digest_len); 388 gpg_error_t ksba_cms_set_signing_time (ksba_cms_t cms, int idx, 389 const ksba_isotime_t sigtime); 390 gpg_error_t ksba_cms_set_sig_val (ksba_cms_t cms, 391 int idx, ksba_const_sexp_t sigval); 392 393 gpg_error_t ksba_cms_set_content_enc_algo (ksba_cms_t cms, 394 const char *oid, 395 const void *iv, 396 size_t ivlen); 397 gpg_error_t ksba_cms_add_recipient (ksba_cms_t cms, ksba_cert_t cert); 398 gpg_error_t ksba_cms_set_enc_val (ksba_cms_t cms, 399 int idx, ksba_const_sexp_t encval); 400 401 402 /*-- crl.c --*/ 403 gpg_error_t ksba_crl_new (ksba_crl_t *r_crl); 404 void ksba_crl_release (ksba_crl_t crl); 405 gpg_error_t ksba_crl_set_reader (ksba_crl_t crl, ksba_reader_t r); 406 void ksba_crl_set_hash_function (ksba_crl_t crl, 407 void (*hash_fnc)(void *, 408 const void *, size_t), 409 void *hash_fnc_arg); 410 const char *ksba_crl_get_digest_algo (ksba_crl_t crl); 411 gpg_error_t ksba_crl_get_issuer (ksba_crl_t crl, char **r_issuer); 412 gpg_error_t ksba_crl_get_extension (ksba_crl_t crl, int idx, 413 char const **oid, int *critical, 414 unsigned char const **der, size_t *derlen); 415 gpg_error_t ksba_crl_get_auth_key_id (ksba_crl_t crl, 416 ksba_sexp_t *r_keyid, 417 ksba_name_t *r_name, 418 ksba_sexp_t *r_serial); 419 gpg_error_t ksba_crl_get_crl_number (ksba_crl_t crl, ksba_sexp_t *number); 420 gpg_error_t ksba_crl_get_update_times (ksba_crl_t crl, 421 ksba_isotime_t this_update, 422 ksba_isotime_t next_update); 423 gpg_error_t ksba_crl_get_item (ksba_crl_t crl, 424 ksba_sexp_t *r_serial, 425 ksba_isotime_t r_revocation_date, 426 ksba_crl_reason_t *r_reason); 427 ksba_sexp_t ksba_crl_get_sig_val (ksba_crl_t crl); 428 gpg_error_t ksba_crl_parse (ksba_crl_t crl, ksba_stop_reason_t *r_stopreason); 429 430 431 432 /*-- ocsp.c --*/ 433 gpg_error_t ksba_ocsp_new (ksba_ocsp_t *r_oscp); 434 void ksba_ocsp_release (ksba_ocsp_t ocsp); 435 gpg_error_t ksba_ocsp_set_digest_algo (ksba_ocsp_t ocsp, const char *oid); 436 gpg_error_t ksba_ocsp_set_requestor (ksba_ocsp_t ocsp, ksba_cert_t cert); 437 gpg_error_t ksba_ocsp_add_target (ksba_ocsp_t ocsp, 438 ksba_cert_t cert, ksba_cert_t issuer_cert); 439 size_t ksba_ocsp_set_nonce (ksba_ocsp_t ocsp, 440 unsigned char *nonce, size_t noncelen); 441 442 gpg_error_t ksba_ocsp_prepare_request (ksba_ocsp_t ocsp); 443 gpg_error_t ksba_ocsp_hash_request (ksba_ocsp_t ocsp, 444 void (*hasher)(void *, const void *, 445 size_t length), 446 void *hasher_arg); 447 gpg_error_t ksba_ocsp_set_sig_val (ksba_ocsp_t ocsp, 448 ksba_const_sexp_t sigval); 449 gpg_error_t ksba_ocsp_add_cert (ksba_ocsp_t ocsp, ksba_cert_t cert); 450 gpg_error_t ksba_ocsp_build_request (ksba_ocsp_t ocsp, 451 unsigned char **r_buffer, 452 size_t *r_buflen); 453 454 gpg_error_t ksba_ocsp_parse_response (ksba_ocsp_t ocsp, 455 const unsigned char *msg, size_t msglen, 456 ksba_ocsp_response_status_t *resp_status); 457 458 const char *ksba_ocsp_get_digest_algo (ksba_ocsp_t ocsp); 459 gpg_error_t ksba_ocsp_hash_response (ksba_ocsp_t ocsp, 460 const unsigned char *msg, size_t msglen, 461 void (*hasher)(void *, const void *, 462 size_t length), 463 void *hasher_arg); 464 ksba_sexp_t ksba_ocsp_get_sig_val (ksba_ocsp_t ocsp, 465 ksba_isotime_t produced_at); 466 gpg_error_t ksba_ocsp_get_responder_id (ksba_ocsp_t ocsp, 467 char **r_name, 468 ksba_sexp_t *r_keyid); 469 ksba_cert_t ksba_ocsp_get_cert (ksba_ocsp_t ocsp, int idx); 470 gpg_error_t ksba_ocsp_get_status (ksba_ocsp_t ocsp, ksba_cert_t cert, 471 ksba_status_t *r_status, 472 ksba_isotime_t r_this_update, 473 ksba_isotime_t r_next_update, 474 ksba_isotime_t r_revocation_time, 475 ksba_crl_reason_t *r_reason); 476 gpg_error_t ksba_ocsp_get_extension (ksba_ocsp_t ocsp, ksba_cert_t cert, 477 int idx, 478 char const **r_oid, int *r_crit, 479 unsigned char const **r_der, 480 size_t *r_derlen); 481 482 483 /*-- certreq.c --*/ 484 gpg_error_t ksba_certreq_new (ksba_certreq_t *r_cr); 485 void ksba_certreq_release (ksba_certreq_t cr); 486 gpg_error_t ksba_certreq_set_writer (ksba_certreq_t cr, ksba_writer_t w); 487 void ksba_certreq_set_hash_function ( 488 ksba_certreq_t cr, 489 void (*hash_fnc)(void *, const void *, size_t), 490 void *hash_fnc_arg); 491 gpg_error_t ksba_certreq_add_subject (ksba_certreq_t cr, const char *name); 492 gpg_error_t ksba_certreq_set_public_key (ksba_certreq_t cr, 493 ksba_const_sexp_t key); 494 gpg_error_t ksba_certreq_add_extension (ksba_certreq_t cr, 495 const char *oid, int is_crit, 496 const void *der, 497 size_t derlen); 498 gpg_error_t ksba_certreq_set_sig_val (ksba_certreq_t cr, 499 ksba_const_sexp_t sigval); 500 gpg_error_t ksba_certreq_build (ksba_certreq_t cr, 501 ksba_stop_reason_t *r_stopreason); 502 503 /* The functions below are used to switch to X.509 certificate creation. */ 504 gpg_error_t ksba_certreq_set_serial (ksba_certreq_t cr, ksba_const_sexp_t sn); 505 gpg_error_t ksba_certreq_set_issuer (ksba_certreq_t cr, const char *name); 506 gpg_error_t ksba_certreq_set_validity (ksba_certreq_t cr, int what, 507 const ksba_isotime_t timebuf); 508 gpg_error_t ksba_certreq_set_siginfo (ksba_certreq_t cr, 509 ksba_const_sexp_t siginfo); 510 511 512 513 /*-- reader.c --*/ 514 gpg_error_t ksba_reader_new (ksba_reader_t *r_r); 515 void ksba_reader_release (ksba_reader_t r); 516 gpg_error_t ksba_reader_set_release_notify (ksba_reader_t r, 517 void (*notify)(void*,ksba_reader_t), 518 void *notify_value); 519 gpg_error_t ksba_reader_clear (ksba_reader_t r, 520 unsigned char **buffer, size_t *buflen); 521 gpg_error_t ksba_reader_error (ksba_reader_t r); 522 523 gpg_error_t ksba_reader_set_mem (ksba_reader_t r, 524 const void *buffer, size_t length); 525 gpg_error_t ksba_reader_set_fd (ksba_reader_t r, int fd); 526 gpg_error_t ksba_reader_set_file (ksba_reader_t r, FILE *fp); 527 gpg_error_t ksba_reader_set_cb (ksba_reader_t r, 528 int (*cb)(void*,char *,size_t,size_t*), 529 void *cb_value ); 530 531 gpg_error_t ksba_reader_read (ksba_reader_t r, 532 char *buffer, size_t length, size_t *nread); 533 gpg_error_t ksba_reader_unread (ksba_reader_t r, const void *buffer, size_t count); 534 unsigned long ksba_reader_tell (ksba_reader_t r); 535 536 /*-- writer.c --*/ 537 gpg_error_t ksba_writer_new (ksba_writer_t *r_w); 538 void ksba_writer_release (ksba_writer_t w); 539 gpg_error_t ksba_writer_set_release_notify (ksba_writer_t w, 540 void (*notify)(void*,ksba_writer_t), 541 void *notify_value); 542 int ksba_writer_error (ksba_writer_t w); 543 unsigned long ksba_writer_tell (ksba_writer_t w); 544 gpg_error_t ksba_writer_set_fd (ksba_writer_t w, int fd); 545 gpg_error_t ksba_writer_set_file (ksba_writer_t w, FILE *fp); 546 gpg_error_t ksba_writer_set_cb (ksba_writer_t w, 547 int (*cb)(void*,const void *,size_t), 548 void *cb_value); 549 gpg_error_t ksba_writer_set_mem (ksba_writer_t w, size_t initial_size); 550 const void *ksba_writer_get_mem (ksba_writer_t w, size_t *nbytes); 551 void * ksba_writer_snatch_mem (ksba_writer_t w, size_t *nbytes); 552 gpg_error_t ksba_writer_set_filter (ksba_writer_t w, 553 gpg_error_t (*filter)(void*, 554 const void *,size_t, size_t *, 555 void *, size_t, size_t *), 556 void *filter_arg); 557 558 gpg_error_t ksba_writer_write (ksba_writer_t w, const void *buffer, size_t length); 559 gpg_error_t ksba_writer_write_octet_string (ksba_writer_t w, 560 const void *buffer, size_t length, 561 int flush); 562 563 /*-- asn1-parse.y --*/ 564 int ksba_asn_parse_file (const char *filename, ksba_asn_tree_t *result, 565 int debug); 566 void ksba_asn_tree_release (ksba_asn_tree_t tree); 567 568 /*-- asn1-func.c --*/ 569 void ksba_asn_tree_dump (ksba_asn_tree_t tree, const char *name, FILE *fp); 570 gpg_error_t ksba_asn_create_tree (const char *mod_name, ksba_asn_tree_t *result); 571 572 /*-- oid.c --*/ 573 char *ksba_oid_to_str (const char *buffer, size_t length); 574 gpg_error_t ksba_oid_from_str (const char *string, 575 unsigned char **rbuf, size_t *rlength); 576 577 /*-- dn.c --*/ 578 gpg_error_t ksba_dn_der2str (const void *der, size_t derlen, char **r_string); 579 gpg_error_t ksba_dn_str2der (const char *string, 580 unsigned char **rder, size_t *rderlen); 581 gpg_error_t ksba_dn_teststr (const char *string, int seq, 582 size_t *rerroff, size_t *rerrlen); 583 584 585 /*-- name.c --*/ 586 gpg_error_t ksba_name_new (ksba_name_t *r_name); 587 void ksba_name_ref (ksba_name_t name); 588 void ksba_name_release (ksba_name_t name); 589 const char *ksba_name_enum (ksba_name_t name, int idx); 590 char *ksba_name_get_uri (ksba_name_t name, int idx); 591 592 593 /*-- der-builder.c --*/ 594 void ksba_der_release (ksba_der_t d); 595 596 ksba_der_t ksba_der_builder_new (unsigned int nitems); 597 void ksba_der_builder_reset (ksba_der_t d); 598 599 void ksba_der_add_ptr (ksba_der_t d, int cls, int tag, 600 void *value, size_t valuelen); 601 void ksba_der_add_val (ksba_der_t d, int cls, int tag, 602 const void *value, size_t valuelen); 603 void ksba_der_add_int (ksba_der_t d, const void *value, size_t valuelen, 604 int force_positive); 605 void ksba_der_add_oid (ksba_der_t d, const char *oidstr); 606 void ksba_der_add_bts (ksba_der_t d, const void *value, size_t valuelen, 607 unsigned int unusedbits); 608 void ksba_der_add_der (ksba_der_t d, const void *der, size_t derlen); 609 void ksba_der_add_tag (ksba_der_t d, int cls, int tag); 610 void ksba_der_add_end (ksba_der_t d); 611 612 gpg_error_t ksba_der_builder_get (ksba_der_t d, 613 unsigned char **r_obj, size_t *r_objlen); 614 615 616 617 /*-- util.c --*/ 618 void ksba_set_malloc_hooks ( void *(*new_alloc_func)(size_t n), 619 void *(*new_realloc_func)(void *p, size_t n), 620 void (*new_free_func)(void*) ); 621 void ksba_set_hash_buffer_function ( gpg_error_t (*fnc) 622 (void *arg, const char *oid, 623 const void *buffer, size_t length, 624 size_t resultsize, 625 unsigned char *result, 626 size_t *resultlen), 627 void *fnc_arg); 628 void *ksba_malloc (size_t n ); 629 void *ksba_calloc (size_t n, size_t m ); 630 void *ksba_realloc (void *p, size_t n); 631 char *ksba_strdup (const char *p); 632 void ksba_free ( void *a ); 633 634 /*--version.c --*/ 635 const char *ksba_check_version (const char *req_version); 636 637 #ifdef __cplusplus 638 } 639 #endif 640 #endif /*KSBA_H*/ 641