annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/openssl/x509.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
jpayne@69 1 /*
jpayne@69 2 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
jpayne@69 3 * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
jpayne@69 4 *
jpayne@69 5 * Licensed under the OpenSSL license (the "License"). You may not use
jpayne@69 6 * this file except in compliance with the License. You can obtain a copy
jpayne@69 7 * in the file LICENSE in the source distribution or at
jpayne@69 8 * https://www.openssl.org/source/license.html
jpayne@69 9 */
jpayne@69 10
jpayne@69 11 #ifndef HEADER_X509_H
jpayne@69 12 # define HEADER_X509_H
jpayne@69 13
jpayne@69 14 # include <openssl/e_os2.h>
jpayne@69 15 # include <openssl/ossl_typ.h>
jpayne@69 16 # include <openssl/symhacks.h>
jpayne@69 17 # include <openssl/buffer.h>
jpayne@69 18 # include <openssl/evp.h>
jpayne@69 19 # include <openssl/bio.h>
jpayne@69 20 # include <openssl/asn1.h>
jpayne@69 21 # include <openssl/safestack.h>
jpayne@69 22 # include <openssl/ec.h>
jpayne@69 23
jpayne@69 24 # if OPENSSL_API_COMPAT < 0x10100000L
jpayne@69 25 # include <openssl/rsa.h>
jpayne@69 26 # include <openssl/dsa.h>
jpayne@69 27 # include <openssl/dh.h>
jpayne@69 28 # endif
jpayne@69 29
jpayne@69 30 # include <openssl/sha.h>
jpayne@69 31 # include <openssl/x509err.h>
jpayne@69 32
jpayne@69 33 #ifdef __cplusplus
jpayne@69 34 extern "C" {
jpayne@69 35 #endif
jpayne@69 36
jpayne@69 37
jpayne@69 38 /* Flags for X509_get_signature_info() */
jpayne@69 39 /* Signature info is valid */
jpayne@69 40 # define X509_SIG_INFO_VALID 0x1
jpayne@69 41 /* Signature is suitable for TLS use */
jpayne@69 42 # define X509_SIG_INFO_TLS 0x2
jpayne@69 43
jpayne@69 44 # define X509_FILETYPE_PEM 1
jpayne@69 45 # define X509_FILETYPE_ASN1 2
jpayne@69 46 # define X509_FILETYPE_DEFAULT 3
jpayne@69 47
jpayne@69 48 # define X509v3_KU_DIGITAL_SIGNATURE 0x0080
jpayne@69 49 # define X509v3_KU_NON_REPUDIATION 0x0040
jpayne@69 50 # define X509v3_KU_KEY_ENCIPHERMENT 0x0020
jpayne@69 51 # define X509v3_KU_DATA_ENCIPHERMENT 0x0010
jpayne@69 52 # define X509v3_KU_KEY_AGREEMENT 0x0008
jpayne@69 53 # define X509v3_KU_KEY_CERT_SIGN 0x0004
jpayne@69 54 # define X509v3_KU_CRL_SIGN 0x0002
jpayne@69 55 # define X509v3_KU_ENCIPHER_ONLY 0x0001
jpayne@69 56 # define X509v3_KU_DECIPHER_ONLY 0x8000
jpayne@69 57 # define X509v3_KU_UNDEF 0xffff
jpayne@69 58
jpayne@69 59 struct X509_algor_st {
jpayne@69 60 ASN1_OBJECT *algorithm;
jpayne@69 61 ASN1_TYPE *parameter;
jpayne@69 62 } /* X509_ALGOR */ ;
jpayne@69 63
jpayne@69 64 typedef STACK_OF(X509_ALGOR) X509_ALGORS;
jpayne@69 65
jpayne@69 66 typedef struct X509_val_st {
jpayne@69 67 ASN1_TIME *notBefore;
jpayne@69 68 ASN1_TIME *notAfter;
jpayne@69 69 } X509_VAL;
jpayne@69 70
jpayne@69 71 typedef struct X509_sig_st X509_SIG;
jpayne@69 72
jpayne@69 73 typedef struct X509_name_entry_st X509_NAME_ENTRY;
jpayne@69 74
jpayne@69 75 DEFINE_STACK_OF(X509_NAME_ENTRY)
jpayne@69 76
jpayne@69 77 DEFINE_STACK_OF(X509_NAME)
jpayne@69 78
jpayne@69 79 # define X509_EX_V_NETSCAPE_HACK 0x8000
jpayne@69 80 # define X509_EX_V_INIT 0x0001
jpayne@69 81 typedef struct X509_extension_st X509_EXTENSION;
jpayne@69 82
jpayne@69 83 typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;
jpayne@69 84
jpayne@69 85 DEFINE_STACK_OF(X509_EXTENSION)
jpayne@69 86
jpayne@69 87 typedef struct x509_attributes_st X509_ATTRIBUTE;
jpayne@69 88
jpayne@69 89 DEFINE_STACK_OF(X509_ATTRIBUTE)
jpayne@69 90
jpayne@69 91 typedef struct X509_req_info_st X509_REQ_INFO;
jpayne@69 92
jpayne@69 93 typedef struct X509_req_st X509_REQ;
jpayne@69 94
jpayne@69 95 typedef struct x509_cert_aux_st X509_CERT_AUX;
jpayne@69 96
jpayne@69 97 typedef struct x509_cinf_st X509_CINF;
jpayne@69 98
jpayne@69 99 DEFINE_STACK_OF(X509)
jpayne@69 100
jpayne@69 101 /* This is used for a table of trust checking functions */
jpayne@69 102
jpayne@69 103 typedef struct x509_trust_st {
jpayne@69 104 int trust;
jpayne@69 105 int flags;
jpayne@69 106 int (*check_trust) (struct x509_trust_st *, X509 *, int);
jpayne@69 107 char *name;
jpayne@69 108 int arg1;
jpayne@69 109 void *arg2;
jpayne@69 110 } X509_TRUST;
jpayne@69 111
jpayne@69 112 DEFINE_STACK_OF(X509_TRUST)
jpayne@69 113
jpayne@69 114 /* standard trust ids */
jpayne@69 115
jpayne@69 116 # define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */
jpayne@69 117
jpayne@69 118 # define X509_TRUST_COMPAT 1
jpayne@69 119 # define X509_TRUST_SSL_CLIENT 2
jpayne@69 120 # define X509_TRUST_SSL_SERVER 3
jpayne@69 121 # define X509_TRUST_EMAIL 4
jpayne@69 122 # define X509_TRUST_OBJECT_SIGN 5
jpayne@69 123 # define X509_TRUST_OCSP_SIGN 6
jpayne@69 124 # define X509_TRUST_OCSP_REQUEST 7
jpayne@69 125 # define X509_TRUST_TSA 8
jpayne@69 126
jpayne@69 127 /* Keep these up to date! */
jpayne@69 128 # define X509_TRUST_MIN 1
jpayne@69 129 # define X509_TRUST_MAX 8
jpayne@69 130
jpayne@69 131 /* trust_flags values */
jpayne@69 132 # define X509_TRUST_DYNAMIC (1U << 0)
jpayne@69 133 # define X509_TRUST_DYNAMIC_NAME (1U << 1)
jpayne@69 134 /* No compat trust if self-signed, preempts "DO_SS" */
jpayne@69 135 # define X509_TRUST_NO_SS_COMPAT (1U << 2)
jpayne@69 136 /* Compat trust if no explicit accepted trust EKUs */
jpayne@69 137 # define X509_TRUST_DO_SS_COMPAT (1U << 3)
jpayne@69 138 /* Accept "anyEKU" as a wildcard trust OID */
jpayne@69 139 # define X509_TRUST_OK_ANY_EKU (1U << 4)
jpayne@69 140
jpayne@69 141 /* check_trust return codes */
jpayne@69 142
jpayne@69 143 # define X509_TRUST_TRUSTED 1
jpayne@69 144 # define X509_TRUST_REJECTED 2
jpayne@69 145 # define X509_TRUST_UNTRUSTED 3
jpayne@69 146
jpayne@69 147 /* Flags for X509_print_ex() */
jpayne@69 148
jpayne@69 149 # define X509_FLAG_COMPAT 0
jpayne@69 150 # define X509_FLAG_NO_HEADER 1L
jpayne@69 151 # define X509_FLAG_NO_VERSION (1L << 1)
jpayne@69 152 # define X509_FLAG_NO_SERIAL (1L << 2)
jpayne@69 153 # define X509_FLAG_NO_SIGNAME (1L << 3)
jpayne@69 154 # define X509_FLAG_NO_ISSUER (1L << 4)
jpayne@69 155 # define X509_FLAG_NO_VALIDITY (1L << 5)
jpayne@69 156 # define X509_FLAG_NO_SUBJECT (1L << 6)
jpayne@69 157 # define X509_FLAG_NO_PUBKEY (1L << 7)
jpayne@69 158 # define X509_FLAG_NO_EXTENSIONS (1L << 8)
jpayne@69 159 # define X509_FLAG_NO_SIGDUMP (1L << 9)
jpayne@69 160 # define X509_FLAG_NO_AUX (1L << 10)
jpayne@69 161 # define X509_FLAG_NO_ATTRIBUTES (1L << 11)
jpayne@69 162 # define X509_FLAG_NO_IDS (1L << 12)
jpayne@69 163
jpayne@69 164 /* Flags specific to X509_NAME_print_ex() */
jpayne@69 165
jpayne@69 166 /* The field separator information */
jpayne@69 167
jpayne@69 168 # define XN_FLAG_SEP_MASK (0xf << 16)
jpayne@69 169
jpayne@69 170 # define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */
jpayne@69 171 # define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */
jpayne@69 172 # define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */
jpayne@69 173 # define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */
jpayne@69 174 # define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */
jpayne@69 175
jpayne@69 176 # define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */
jpayne@69 177
jpayne@69 178 /* How the field name is shown */
jpayne@69 179
jpayne@69 180 # define XN_FLAG_FN_MASK (0x3 << 21)
jpayne@69 181
jpayne@69 182 # define XN_FLAG_FN_SN 0/* Object short name */
jpayne@69 183 # define XN_FLAG_FN_LN (1 << 21)/* Object long name */
jpayne@69 184 # define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */
jpayne@69 185 # define XN_FLAG_FN_NONE (3 << 21)/* No field names */
jpayne@69 186
jpayne@69 187 # define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */
jpayne@69 188
jpayne@69 189 /*
jpayne@69 190 * This determines if we dump fields we don't recognise: RFC2253 requires
jpayne@69 191 * this.
jpayne@69 192 */
jpayne@69 193
jpayne@69 194 # define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)
jpayne@69 195
jpayne@69 196 # define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20
jpayne@69 197 * characters */
jpayne@69 198
jpayne@69 199 /* Complete set of RFC2253 flags */
jpayne@69 200
jpayne@69 201 # define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \
jpayne@69 202 XN_FLAG_SEP_COMMA_PLUS | \
jpayne@69 203 XN_FLAG_DN_REV | \
jpayne@69 204 XN_FLAG_FN_SN | \
jpayne@69 205 XN_FLAG_DUMP_UNKNOWN_FIELDS)
jpayne@69 206
jpayne@69 207 /* readable oneline form */
jpayne@69 208
jpayne@69 209 # define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \
jpayne@69 210 ASN1_STRFLGS_ESC_QUOTE | \
jpayne@69 211 XN_FLAG_SEP_CPLUS_SPC | \
jpayne@69 212 XN_FLAG_SPC_EQ | \
jpayne@69 213 XN_FLAG_FN_SN)
jpayne@69 214
jpayne@69 215 /* readable multiline form */
jpayne@69 216
jpayne@69 217 # define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \
jpayne@69 218 ASN1_STRFLGS_ESC_MSB | \
jpayne@69 219 XN_FLAG_SEP_MULTILINE | \
jpayne@69 220 XN_FLAG_SPC_EQ | \
jpayne@69 221 XN_FLAG_FN_LN | \
jpayne@69 222 XN_FLAG_FN_ALIGN)
jpayne@69 223
jpayne@69 224 DEFINE_STACK_OF(X509_REVOKED)
jpayne@69 225
jpayne@69 226 typedef struct X509_crl_info_st X509_CRL_INFO;
jpayne@69 227
jpayne@69 228 DEFINE_STACK_OF(X509_CRL)
jpayne@69 229
jpayne@69 230 typedef struct private_key_st {
jpayne@69 231 int version;
jpayne@69 232 /* The PKCS#8 data types */
jpayne@69 233 X509_ALGOR *enc_algor;
jpayne@69 234 ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */
jpayne@69 235 /* When decrypted, the following will not be NULL */
jpayne@69 236 EVP_PKEY *dec_pkey;
jpayne@69 237 /* used to encrypt and decrypt */
jpayne@69 238 int key_length;
jpayne@69 239 char *key_data;
jpayne@69 240 int key_free; /* true if we should auto free key_data */
jpayne@69 241 /* expanded version of 'enc_algor' */
jpayne@69 242 EVP_CIPHER_INFO cipher;
jpayne@69 243 } X509_PKEY;
jpayne@69 244
jpayne@69 245 typedef struct X509_info_st {
jpayne@69 246 X509 *x509;
jpayne@69 247 X509_CRL *crl;
jpayne@69 248 X509_PKEY *x_pkey;
jpayne@69 249 EVP_CIPHER_INFO enc_cipher;
jpayne@69 250 int enc_len;
jpayne@69 251 char *enc_data;
jpayne@69 252 } X509_INFO;
jpayne@69 253
jpayne@69 254 DEFINE_STACK_OF(X509_INFO)
jpayne@69 255
jpayne@69 256 /*
jpayne@69 257 * The next 2 structures and their 8 routines are used to manipulate Netscape's
jpayne@69 258 * spki structures - useful if you are writing a CA web page
jpayne@69 259 */
jpayne@69 260 typedef struct Netscape_spkac_st {
jpayne@69 261 X509_PUBKEY *pubkey;
jpayne@69 262 ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */
jpayne@69 263 } NETSCAPE_SPKAC;
jpayne@69 264
jpayne@69 265 typedef struct Netscape_spki_st {
jpayne@69 266 NETSCAPE_SPKAC *spkac; /* signed public key and challenge */
jpayne@69 267 X509_ALGOR sig_algor;
jpayne@69 268 ASN1_BIT_STRING *signature;
jpayne@69 269 } NETSCAPE_SPKI;
jpayne@69 270
jpayne@69 271 /* Netscape certificate sequence structure */
jpayne@69 272 typedef struct Netscape_certificate_sequence {
jpayne@69 273 ASN1_OBJECT *type;
jpayne@69 274 STACK_OF(X509) *certs;
jpayne@69 275 } NETSCAPE_CERT_SEQUENCE;
jpayne@69 276
jpayne@69 277 /*- Unused (and iv length is wrong)
jpayne@69 278 typedef struct CBCParameter_st
jpayne@69 279 {
jpayne@69 280 unsigned char iv[8];
jpayne@69 281 } CBC_PARAM;
jpayne@69 282 */
jpayne@69 283
jpayne@69 284 /* Password based encryption structure */
jpayne@69 285
jpayne@69 286 typedef struct PBEPARAM_st {
jpayne@69 287 ASN1_OCTET_STRING *salt;
jpayne@69 288 ASN1_INTEGER *iter;
jpayne@69 289 } PBEPARAM;
jpayne@69 290
jpayne@69 291 /* Password based encryption V2 structures */
jpayne@69 292
jpayne@69 293 typedef struct PBE2PARAM_st {
jpayne@69 294 X509_ALGOR *keyfunc;
jpayne@69 295 X509_ALGOR *encryption;
jpayne@69 296 } PBE2PARAM;
jpayne@69 297
jpayne@69 298 typedef struct PBKDF2PARAM_st {
jpayne@69 299 /* Usually OCTET STRING but could be anything */
jpayne@69 300 ASN1_TYPE *salt;
jpayne@69 301 ASN1_INTEGER *iter;
jpayne@69 302 ASN1_INTEGER *keylength;
jpayne@69 303 X509_ALGOR *prf;
jpayne@69 304 } PBKDF2PARAM;
jpayne@69 305
jpayne@69 306 #ifndef OPENSSL_NO_SCRYPT
jpayne@69 307 typedef struct SCRYPT_PARAMS_st {
jpayne@69 308 ASN1_OCTET_STRING *salt;
jpayne@69 309 ASN1_INTEGER *costParameter;
jpayne@69 310 ASN1_INTEGER *blockSize;
jpayne@69 311 ASN1_INTEGER *parallelizationParameter;
jpayne@69 312 ASN1_INTEGER *keyLength;
jpayne@69 313 } SCRYPT_PARAMS;
jpayne@69 314 #endif
jpayne@69 315
jpayne@69 316 #ifdef __cplusplus
jpayne@69 317 }
jpayne@69 318 #endif
jpayne@69 319
jpayne@69 320 # include <openssl/x509_vfy.h>
jpayne@69 321 # include <openssl/pkcs7.h>
jpayne@69 322
jpayne@69 323 #ifdef __cplusplus
jpayne@69 324 extern "C" {
jpayne@69 325 #endif
jpayne@69 326
jpayne@69 327 # define X509_EXT_PACK_UNKNOWN 1
jpayne@69 328 # define X509_EXT_PACK_STRING 2
jpayne@69 329
jpayne@69 330 # define X509_extract_key(x) X509_get_pubkey(x)/*****/
jpayne@69 331 # define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)
jpayne@69 332 # define X509_name_cmp(a,b) X509_NAME_cmp((a),(b))
jpayne@69 333
jpayne@69 334 void X509_CRL_set_default_method(const X509_CRL_METHOD *meth);
jpayne@69 335 X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),
jpayne@69 336 int (*crl_free) (X509_CRL *crl),
jpayne@69 337 int (*crl_lookup) (X509_CRL *crl,
jpayne@69 338 X509_REVOKED **ret,
jpayne@69 339 ASN1_INTEGER *ser,
jpayne@69 340 X509_NAME *issuer),
jpayne@69 341 int (*crl_verify) (X509_CRL *crl,
jpayne@69 342 EVP_PKEY *pk));
jpayne@69 343 void X509_CRL_METHOD_free(X509_CRL_METHOD *m);
jpayne@69 344
jpayne@69 345 void X509_CRL_set_meth_data(X509_CRL *crl, void *dat);
jpayne@69 346 void *X509_CRL_get_meth_data(X509_CRL *crl);
jpayne@69 347
jpayne@69 348 const char *X509_verify_cert_error_string(long n);
jpayne@69 349
jpayne@69 350 int X509_verify(X509 *a, EVP_PKEY *r);
jpayne@69 351
jpayne@69 352 int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);
jpayne@69 353 int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);
jpayne@69 354 int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);
jpayne@69 355
jpayne@69 356 NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);
jpayne@69 357 char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);
jpayne@69 358 EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);
jpayne@69 359 int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);
jpayne@69 360
jpayne@69 361 int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);
jpayne@69 362
jpayne@69 363 int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);
jpayne@69 364 int X509_signature_print(BIO *bp, const X509_ALGOR *alg,
jpayne@69 365 const ASN1_STRING *sig);
jpayne@69 366
jpayne@69 367 int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
jpayne@69 368 int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
jpayne@69 369 # ifndef OPENSSL_NO_OCSP
jpayne@69 370 int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert);
jpayne@69 371 # endif
jpayne@69 372 int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
jpayne@69 373 int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
jpayne@69 374 int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
jpayne@69 375 int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
jpayne@69 376 # ifndef OPENSSL_NO_OCSP
jpayne@69 377 int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl);
jpayne@69 378 # endif
jpayne@69 379 int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);
jpayne@69 380
jpayne@69 381 int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
jpayne@69 382 unsigned char *md, unsigned int *len);
jpayne@69 383 int X509_digest(const X509 *data, const EVP_MD *type,
jpayne@69 384 unsigned char *md, unsigned int *len);
jpayne@69 385 int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,
jpayne@69 386 unsigned char *md, unsigned int *len);
jpayne@69 387 int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,
jpayne@69 388 unsigned char *md, unsigned int *len);
jpayne@69 389 int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,
jpayne@69 390 unsigned char *md, unsigned int *len);
jpayne@69 391
jpayne@69 392 # ifndef OPENSSL_NO_STDIO
jpayne@69 393 X509 *d2i_X509_fp(FILE *fp, X509 **x509);
jpayne@69 394 int i2d_X509_fp(FILE *fp, X509 *x509);
jpayne@69 395 X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);
jpayne@69 396 int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl);
jpayne@69 397 X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);
jpayne@69 398 int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req);
jpayne@69 399 # ifndef OPENSSL_NO_RSA
jpayne@69 400 RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);
jpayne@69 401 int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa);
jpayne@69 402 RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);
jpayne@69 403 int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa);
jpayne@69 404 RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);
jpayne@69 405 int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa);
jpayne@69 406 # endif
jpayne@69 407 # ifndef OPENSSL_NO_DSA
jpayne@69 408 DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);
jpayne@69 409 int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);
jpayne@69 410 DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);
jpayne@69 411 int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);
jpayne@69 412 # endif
jpayne@69 413 # ifndef OPENSSL_NO_EC
jpayne@69 414 EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);
jpayne@69 415 int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey);
jpayne@69 416 EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);
jpayne@69 417 int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey);
jpayne@69 418 # endif
jpayne@69 419 X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);
jpayne@69 420 int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8);
jpayne@69 421 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,
jpayne@69 422 PKCS8_PRIV_KEY_INFO **p8inf);
jpayne@69 423 int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf);
jpayne@69 424 int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key);
jpayne@69 425 int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey);
jpayne@69 426 EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);
jpayne@69 427 int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
jpayne@69 428 EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);
jpayne@69 429 # endif
jpayne@69 430
jpayne@69 431 X509 *d2i_X509_bio(BIO *bp, X509 **x509);
jpayne@69 432 int i2d_X509_bio(BIO *bp, X509 *x509);
jpayne@69 433 X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);
jpayne@69 434 int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl);
jpayne@69 435 X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);
jpayne@69 436 int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req);
jpayne@69 437 # ifndef OPENSSL_NO_RSA
jpayne@69 438 RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);
jpayne@69 439 int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa);
jpayne@69 440 RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);
jpayne@69 441 int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa);
jpayne@69 442 RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);
jpayne@69 443 int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa);
jpayne@69 444 # endif
jpayne@69 445 # ifndef OPENSSL_NO_DSA
jpayne@69 446 DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);
jpayne@69 447 int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);
jpayne@69 448 DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);
jpayne@69 449 int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);
jpayne@69 450 # endif
jpayne@69 451 # ifndef OPENSSL_NO_EC
jpayne@69 452 EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);
jpayne@69 453 int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey);
jpayne@69 454 EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);
jpayne@69 455 int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey);
jpayne@69 456 # endif
jpayne@69 457 X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);
jpayne@69 458 int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8);
jpayne@69 459 PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,
jpayne@69 460 PKCS8_PRIV_KEY_INFO **p8inf);
jpayne@69 461 int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf);
jpayne@69 462 int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key);
jpayne@69 463 int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey);
jpayne@69 464 EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
jpayne@69 465 int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
jpayne@69 466 EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
jpayne@69 467
jpayne@69 468 X509 *X509_dup(X509 *x509);
jpayne@69 469 X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);
jpayne@69 470 X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex);
jpayne@69 471 X509_CRL *X509_CRL_dup(X509_CRL *crl);
jpayne@69 472 X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev);
jpayne@69 473 X509_REQ *X509_REQ_dup(X509_REQ *req);
jpayne@69 474 X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);
jpayne@69 475 int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
jpayne@69 476 void *pval);
jpayne@69 477 void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
jpayne@69 478 const void **ppval, const X509_ALGOR *algor);
jpayne@69 479 void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);
jpayne@69 480 int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);
jpayne@69 481 int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src);
jpayne@69 482
jpayne@69 483 X509_NAME *X509_NAME_dup(X509_NAME *xn);
jpayne@69 484 X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne);
jpayne@69 485
jpayne@69 486 int X509_cmp_time(const ASN1_TIME *s, time_t *t);
jpayne@69 487 int X509_cmp_current_time(const ASN1_TIME *s);
jpayne@69 488 ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);
jpayne@69 489 ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,
jpayne@69 490 int offset_day, long offset_sec, time_t *t);
jpayne@69 491 ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);
jpayne@69 492
jpayne@69 493 const char *X509_get_default_cert_area(void);
jpayne@69 494 const char *X509_get_default_cert_dir(void);
jpayne@69 495 const char *X509_get_default_cert_file(void);
jpayne@69 496 const char *X509_get_default_cert_dir_env(void);
jpayne@69 497 const char *X509_get_default_cert_file_env(void);
jpayne@69 498 const char *X509_get_default_private_dir(void);
jpayne@69 499
jpayne@69 500 X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
jpayne@69 501 X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);
jpayne@69 502
jpayne@69 503 DECLARE_ASN1_FUNCTIONS(X509_ALGOR)
jpayne@69 504 DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)
jpayne@69 505 DECLARE_ASN1_FUNCTIONS(X509_VAL)
jpayne@69 506
jpayne@69 507 DECLARE_ASN1_FUNCTIONS(X509_PUBKEY)
jpayne@69 508
jpayne@69 509 int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
jpayne@69 510 EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key);
jpayne@69 511 EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key);
jpayne@69 512 int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);
jpayne@69 513 long X509_get_pathlen(X509 *x);
jpayne@69 514 int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);
jpayne@69 515 EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
jpayne@69 516 # ifndef OPENSSL_NO_RSA
jpayne@69 517 int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp);
jpayne@69 518 RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length);
jpayne@69 519 # endif
jpayne@69 520 # ifndef OPENSSL_NO_DSA
jpayne@69 521 int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp);
jpayne@69 522 DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length);
jpayne@69 523 # endif
jpayne@69 524 # ifndef OPENSSL_NO_EC
jpayne@69 525 int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp);
jpayne@69 526 EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length);
jpayne@69 527 # endif
jpayne@69 528
jpayne@69 529 DECLARE_ASN1_FUNCTIONS(X509_SIG)
jpayne@69 530 void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg,
jpayne@69 531 const ASN1_OCTET_STRING **pdigest);
jpayne@69 532 void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg,
jpayne@69 533 ASN1_OCTET_STRING **pdigest);
jpayne@69 534
jpayne@69 535 DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)
jpayne@69 536 DECLARE_ASN1_FUNCTIONS(X509_REQ)
jpayne@69 537
jpayne@69 538 DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)
jpayne@69 539 X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);
jpayne@69 540
jpayne@69 541 DECLARE_ASN1_FUNCTIONS(X509_EXTENSION)
jpayne@69 542 DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)
jpayne@69 543
jpayne@69 544 DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)
jpayne@69 545
jpayne@69 546 DECLARE_ASN1_FUNCTIONS(X509_NAME)
jpayne@69 547
jpayne@69 548 int X509_NAME_set(X509_NAME **xn, X509_NAME *name);
jpayne@69 549
jpayne@69 550 DECLARE_ASN1_FUNCTIONS(X509_CINF)
jpayne@69 551
jpayne@69 552 DECLARE_ASN1_FUNCTIONS(X509)
jpayne@69 553 DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)
jpayne@69 554
jpayne@69 555 #define X509_get_ex_new_index(l, p, newf, dupf, freef) \
jpayne@69 556 CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef)
jpayne@69 557 int X509_set_ex_data(X509 *r, int idx, void *arg);
jpayne@69 558 void *X509_get_ex_data(X509 *r, int idx);
jpayne@69 559 int i2d_X509_AUX(X509 *a, unsigned char **pp);
jpayne@69 560 X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length);
jpayne@69 561
jpayne@69 562 int i2d_re_X509_tbs(X509 *x, unsigned char **pp);
jpayne@69 563
jpayne@69 564 int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid,
jpayne@69 565 int *secbits, uint32_t *flags);
jpayne@69 566 void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid,
jpayne@69 567 int secbits, uint32_t flags);
jpayne@69 568
jpayne@69 569 int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits,
jpayne@69 570 uint32_t *flags);
jpayne@69 571
jpayne@69 572 void X509_get0_signature(const ASN1_BIT_STRING **psig,
jpayne@69 573 const X509_ALGOR **palg, const X509 *x);
jpayne@69 574 int X509_get_signature_nid(const X509 *x);
jpayne@69 575
jpayne@69 576 int X509_trusted(const X509 *x);
jpayne@69 577 int X509_alias_set1(X509 *x, const unsigned char *name, int len);
jpayne@69 578 int X509_keyid_set1(X509 *x, const unsigned char *id, int len);
jpayne@69 579 unsigned char *X509_alias_get0(X509 *x, int *len);
jpayne@69 580 unsigned char *X509_keyid_get0(X509 *x, int *len);
jpayne@69 581 int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *,
jpayne@69 582 int);
jpayne@69 583 int X509_TRUST_set(int *t, int trust);
jpayne@69 584 int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj);
jpayne@69 585 int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj);
jpayne@69 586 void X509_trust_clear(X509 *x);
jpayne@69 587 void X509_reject_clear(X509 *x);
jpayne@69 588
jpayne@69 589 STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x);
jpayne@69 590 STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x);
jpayne@69 591
jpayne@69 592 DECLARE_ASN1_FUNCTIONS(X509_REVOKED)
jpayne@69 593 DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)
jpayne@69 594 DECLARE_ASN1_FUNCTIONS(X509_CRL)
jpayne@69 595
jpayne@69 596 int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);
jpayne@69 597 int X509_CRL_get0_by_serial(X509_CRL *crl,
jpayne@69 598 X509_REVOKED **ret, ASN1_INTEGER *serial);
jpayne@69 599 int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);
jpayne@69 600
jpayne@69 601 X509_PKEY *X509_PKEY_new(void);
jpayne@69 602 void X509_PKEY_free(X509_PKEY *a);
jpayne@69 603
jpayne@69 604 DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)
jpayne@69 605 DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)
jpayne@69 606 DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)
jpayne@69 607
jpayne@69 608 X509_INFO *X509_INFO_new(void);
jpayne@69 609 void X509_INFO_free(X509_INFO *a);
jpayne@69 610 char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size);
jpayne@69 611
jpayne@69 612 int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,
jpayne@69 613 ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);
jpayne@69 614
jpayne@69 615 int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,
jpayne@69 616 unsigned char *md, unsigned int *len);
jpayne@69 617
jpayne@69 618 int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1,
jpayne@69 619 X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
jpayne@69 620 char *data, EVP_PKEY *pkey, const EVP_MD *type);
jpayne@69 621
jpayne@69 622 int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,
jpayne@69 623 unsigned char *md, unsigned int *len);
jpayne@69 624
jpayne@69 625 int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1,
jpayne@69 626 ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey);
jpayne@69 627
jpayne@69 628 int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1,
jpayne@69 629 X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data,
jpayne@69 630 EVP_PKEY *pkey, const EVP_MD *type);
jpayne@69 631 int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,
jpayne@69 632 X509_ALGOR *algor2, ASN1_BIT_STRING *signature,
jpayne@69 633 void *asn, EVP_MD_CTX *ctx);
jpayne@69 634
jpayne@69 635 long X509_get_version(const X509 *x);
jpayne@69 636 int X509_set_version(X509 *x, long version);
jpayne@69 637 int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);
jpayne@69 638 ASN1_INTEGER *X509_get_serialNumber(X509 *x);
jpayne@69 639 const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x);
jpayne@69 640 int X509_set_issuer_name(X509 *x, X509_NAME *name);
jpayne@69 641 X509_NAME *X509_get_issuer_name(const X509 *a);
jpayne@69 642 int X509_set_subject_name(X509 *x, X509_NAME *name);
jpayne@69 643 X509_NAME *X509_get_subject_name(const X509 *a);
jpayne@69 644 const ASN1_TIME * X509_get0_notBefore(const X509 *x);
jpayne@69 645 ASN1_TIME *X509_getm_notBefore(const X509 *x);
jpayne@69 646 int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm);
jpayne@69 647 const ASN1_TIME *X509_get0_notAfter(const X509 *x);
jpayne@69 648 ASN1_TIME *X509_getm_notAfter(const X509 *x);
jpayne@69 649 int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm);
jpayne@69 650 int X509_set_pubkey(X509 *x, EVP_PKEY *pkey);
jpayne@69 651 int X509_up_ref(X509 *x);
jpayne@69 652 int X509_get_signature_type(const X509 *x);
jpayne@69 653
jpayne@69 654 # if OPENSSL_API_COMPAT < 0x10100000L
jpayne@69 655 # define X509_get_notBefore X509_getm_notBefore
jpayne@69 656 # define X509_get_notAfter X509_getm_notAfter
jpayne@69 657 # define X509_set_notBefore X509_set1_notBefore
jpayne@69 658 # define X509_set_notAfter X509_set1_notAfter
jpayne@69 659 #endif
jpayne@69 660
jpayne@69 661
jpayne@69 662 /*
jpayne@69 663 * This one is only used so that a binary form can output, as in
jpayne@69 664 * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf)
jpayne@69 665 */
jpayne@69 666 X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x);
jpayne@69 667 const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x);
jpayne@69 668 void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid,
jpayne@69 669 const ASN1_BIT_STRING **psuid);
jpayne@69 670 const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x);
jpayne@69 671
jpayne@69 672 EVP_PKEY *X509_get0_pubkey(const X509 *x);
jpayne@69 673 EVP_PKEY *X509_get_pubkey(X509 *x);
jpayne@69 674 ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);
jpayne@69 675 int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey);
jpayne@69 676
jpayne@69 677 long X509_REQ_get_version(const X509_REQ *req);
jpayne@69 678 int X509_REQ_set_version(X509_REQ *x, long version);
jpayne@69 679 X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req);
jpayne@69 680 int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name);
jpayne@69 681 void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
jpayne@69 682 const X509_ALGOR **palg);
jpayne@69 683 void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig);
jpayne@69 684 int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg);
jpayne@69 685 int X509_REQ_get_signature_nid(const X509_REQ *req);
jpayne@69 686 int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp);
jpayne@69 687 int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);
jpayne@69 688 EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);
jpayne@69 689 EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req);
jpayne@69 690 X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req);
jpayne@69 691 int X509_REQ_extension_nid(int nid);
jpayne@69 692 int *X509_REQ_get_extension_nids(void);
jpayne@69 693 void X509_REQ_set_extension_nids(int *nids);
jpayne@69 694 STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);
jpayne@69 695 int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,
jpayne@69 696 int nid);
jpayne@69 697 int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts);
jpayne@69 698 int X509_REQ_get_attr_count(const X509_REQ *req);
jpayne@69 699 int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);
jpayne@69 700 int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj,
jpayne@69 701 int lastpos);
jpayne@69 702 X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);
jpayne@69 703 X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);
jpayne@69 704 int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);
jpayne@69 705 int X509_REQ_add1_attr_by_OBJ(X509_REQ *req,
jpayne@69 706 const ASN1_OBJECT *obj, int type,
jpayne@69 707 const unsigned char *bytes, int len);
jpayne@69 708 int X509_REQ_add1_attr_by_NID(X509_REQ *req,
jpayne@69 709 int nid, int type,
jpayne@69 710 const unsigned char *bytes, int len);
jpayne@69 711 int X509_REQ_add1_attr_by_txt(X509_REQ *req,
jpayne@69 712 const char *attrname, int type,
jpayne@69 713 const unsigned char *bytes, int len);
jpayne@69 714
jpayne@69 715 int X509_CRL_set_version(X509_CRL *x, long version);
jpayne@69 716 int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);
jpayne@69 717 int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);
jpayne@69 718 int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);
jpayne@69 719 int X509_CRL_sort(X509_CRL *crl);
jpayne@69 720 int X509_CRL_up_ref(X509_CRL *crl);
jpayne@69 721
jpayne@69 722 # if OPENSSL_API_COMPAT < 0x10100000L
jpayne@69 723 # define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate
jpayne@69 724 # define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate
jpayne@69 725 #endif
jpayne@69 726
jpayne@69 727 long X509_CRL_get_version(const X509_CRL *crl);
jpayne@69 728 const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl);
jpayne@69 729 const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl);
jpayne@69 730 DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl))
jpayne@69 731 DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl))
jpayne@69 732 X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl);
jpayne@69 733 const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl);
jpayne@69 734 STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl);
jpayne@69 735 void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
jpayne@69 736 const X509_ALGOR **palg);
jpayne@69 737 int X509_CRL_get_signature_nid(const X509_CRL *crl);
jpayne@69 738 int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp);
jpayne@69 739
jpayne@69 740 const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x);
jpayne@69 741 int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
jpayne@69 742 const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x);
jpayne@69 743 int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
jpayne@69 744 const STACK_OF(X509_EXTENSION) *
jpayne@69 745 X509_REVOKED_get0_extensions(const X509_REVOKED *r);
jpayne@69 746
jpayne@69 747 X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
jpayne@69 748 EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);
jpayne@69 749
jpayne@69 750 int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);
jpayne@69 751
jpayne@69 752 int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey);
jpayne@69 753 int X509_chain_check_suiteb(int *perror_depth,
jpayne@69 754 X509 *x, STACK_OF(X509) *chain,
jpayne@69 755 unsigned long flags);
jpayne@69 756 int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
jpayne@69 757 STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);
jpayne@69 758
jpayne@69 759 int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
jpayne@69 760 unsigned long X509_issuer_and_serial_hash(X509 *a);
jpayne@69 761
jpayne@69 762 int X509_issuer_name_cmp(const X509 *a, const X509 *b);
jpayne@69 763 unsigned long X509_issuer_name_hash(X509 *a);
jpayne@69 764
jpayne@69 765 int X509_subject_name_cmp(const X509 *a, const X509 *b);
jpayne@69 766 unsigned long X509_subject_name_hash(X509 *x);
jpayne@69 767
jpayne@69 768 # ifndef OPENSSL_NO_MD5
jpayne@69 769 unsigned long X509_issuer_name_hash_old(X509 *a);
jpayne@69 770 unsigned long X509_subject_name_hash_old(X509 *x);
jpayne@69 771 # endif
jpayne@69 772
jpayne@69 773 int X509_cmp(const X509 *a, const X509 *b);
jpayne@69 774 int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);
jpayne@69 775 unsigned long X509_NAME_hash(X509_NAME *x);
jpayne@69 776 unsigned long X509_NAME_hash_old(X509_NAME *x);
jpayne@69 777
jpayne@69 778 int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);
jpayne@69 779 int X509_CRL_match(const X509_CRL *a, const X509_CRL *b);
jpayne@69 780 int X509_aux_print(BIO *out, X509 *x, int indent);
jpayne@69 781 # ifndef OPENSSL_NO_STDIO
jpayne@69 782 int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,
jpayne@69 783 unsigned long cflag);
jpayne@69 784 int X509_print_fp(FILE *bp, X509 *x);
jpayne@69 785 int X509_CRL_print_fp(FILE *bp, X509_CRL *x);
jpayne@69 786 int X509_REQ_print_fp(FILE *bp, X509_REQ *req);
jpayne@69 787 int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent,
jpayne@69 788 unsigned long flags);
jpayne@69 789 # endif
jpayne@69 790
jpayne@69 791 int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase);
jpayne@69 792 int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent,
jpayne@69 793 unsigned long flags);
jpayne@69 794 int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,
jpayne@69 795 unsigned long cflag);
jpayne@69 796 int X509_print(BIO *bp, X509 *x);
jpayne@69 797 int X509_ocspid_print(BIO *bp, X509 *x);
jpayne@69 798 int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag);
jpayne@69 799 int X509_CRL_print(BIO *bp, X509_CRL *x);
jpayne@69 800 int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,
jpayne@69 801 unsigned long cflag);
jpayne@69 802 int X509_REQ_print(BIO *bp, X509_REQ *req);
jpayne@69 803
jpayne@69 804 int X509_NAME_entry_count(const X509_NAME *name);
jpayne@69 805 int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len);
jpayne@69 806 int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj,
jpayne@69 807 char *buf, int len);
jpayne@69 808
jpayne@69 809 /*
jpayne@69 810 * NOTE: you should be passing -1, not 0 as lastpos. The functions that use
jpayne@69 811 * lastpos, search after that position on.
jpayne@69 812 */
jpayne@69 813 int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos);
jpayne@69 814 int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj,
jpayne@69 815 int lastpos);
jpayne@69 816 X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc);
jpayne@69 817 X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
jpayne@69 818 int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne,
jpayne@69 819 int loc, int set);
jpayne@69 820 int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type,
jpayne@69 821 const unsigned char *bytes, int len, int loc,
jpayne@69 822 int set);
jpayne@69 823 int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,
jpayne@69 824 const unsigned char *bytes, int len, int loc,
jpayne@69 825 int set);
jpayne@69 826 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,
jpayne@69 827 const char *field, int type,
jpayne@69 828 const unsigned char *bytes,
jpayne@69 829 int len);
jpayne@69 830 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,
jpayne@69 831 int type,
jpayne@69 832 const unsigned char *bytes,
jpayne@69 833 int len);
jpayne@69 834 int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,
jpayne@69 835 const unsigned char *bytes, int len, int loc,
jpayne@69 836 int set);
jpayne@69 837 X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,
jpayne@69 838 const ASN1_OBJECT *obj, int type,
jpayne@69 839 const unsigned char *bytes,
jpayne@69 840 int len);
jpayne@69 841 int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj);
jpayne@69 842 int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,
jpayne@69 843 const unsigned char *bytes, int len);
jpayne@69 844 ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne);
jpayne@69 845 ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne);
jpayne@69 846 int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne);
jpayne@69 847
jpayne@69 848 int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder,
jpayne@69 849 size_t *pderlen);
jpayne@69 850
jpayne@69 851 int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);
jpayne@69 852 int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,
jpayne@69 853 int nid, int lastpos);
jpayne@69 854 int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,
jpayne@69 855 const ASN1_OBJECT *obj, int lastpos);
jpayne@69 856 int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,
jpayne@69 857 int crit, int lastpos);
jpayne@69 858 X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);
jpayne@69 859 X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);
jpayne@69 860 STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,
jpayne@69 861 X509_EXTENSION *ex, int loc);
jpayne@69 862
jpayne@69 863 int X509_get_ext_count(const X509 *x);
jpayne@69 864 int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos);
jpayne@69 865 int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos);
jpayne@69 866 int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos);
jpayne@69 867 X509_EXTENSION *X509_get_ext(const X509 *x, int loc);
jpayne@69 868 X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
jpayne@69 869 int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
jpayne@69 870 void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx);
jpayne@69 871 int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,
jpayne@69 872 unsigned long flags);
jpayne@69 873
jpayne@69 874 int X509_CRL_get_ext_count(const X509_CRL *x);
jpayne@69 875 int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos);
jpayne@69 876 int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj,
jpayne@69 877 int lastpos);
jpayne@69 878 int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos);
jpayne@69 879 X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc);
jpayne@69 880 X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);
jpayne@69 881 int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);
jpayne@69 882 void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx);
jpayne@69 883 int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,
jpayne@69 884 unsigned long flags);
jpayne@69 885
jpayne@69 886 int X509_REVOKED_get_ext_count(const X509_REVOKED *x);
jpayne@69 887 int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos);
jpayne@69 888 int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj,
jpayne@69 889 int lastpos);
jpayne@69 890 int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit,
jpayne@69 891 int lastpos);
jpayne@69 892 X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc);
jpayne@69 893 X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);
jpayne@69 894 int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);
jpayne@69 895 void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit,
jpayne@69 896 int *idx);
jpayne@69 897 int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,
jpayne@69 898 unsigned long flags);
jpayne@69 899
jpayne@69 900 X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
jpayne@69 901 int nid, int crit,
jpayne@69 902 ASN1_OCTET_STRING *data);
jpayne@69 903 X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,
jpayne@69 904 const ASN1_OBJECT *obj, int crit,
jpayne@69 905 ASN1_OCTET_STRING *data);
jpayne@69 906 int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj);
jpayne@69 907 int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);
jpayne@69 908 int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);
jpayne@69 909 ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);
jpayne@69 910 ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);
jpayne@69 911 int X509_EXTENSION_get_critical(const X509_EXTENSION *ex);
jpayne@69 912
jpayne@69 913 int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);
jpayne@69 914 int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,
jpayne@69 915 int lastpos);
jpayne@69 916 int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,
jpayne@69 917 const ASN1_OBJECT *obj, int lastpos);
jpayne@69 918 X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);
jpayne@69 919 X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);
jpayne@69 920 STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,
jpayne@69 921 X509_ATTRIBUTE *attr);
jpayne@69 922 STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)
jpayne@69 923 **x, const ASN1_OBJECT *obj,
jpayne@69 924 int type,
jpayne@69 925 const unsigned char *bytes,
jpayne@69 926 int len);
jpayne@69 927 STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)
jpayne@69 928 **x, int nid, int type,
jpayne@69 929 const unsigned char *bytes,
jpayne@69 930 int len);
jpayne@69 931 STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)
jpayne@69 932 **x, const char *attrname,
jpayne@69 933 int type,
jpayne@69 934 const unsigned char *bytes,
jpayne@69 935 int len);
jpayne@69 936 void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x,
jpayne@69 937 const ASN1_OBJECT *obj, int lastpos, int type);
jpayne@69 938 X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,
jpayne@69 939 int atrtype, const void *data,
jpayne@69 940 int len);
jpayne@69 941 X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,
jpayne@69 942 const ASN1_OBJECT *obj,
jpayne@69 943 int atrtype, const void *data,
jpayne@69 944 int len);
jpayne@69 945 X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,
jpayne@69 946 const char *atrname, int type,
jpayne@69 947 const unsigned char *bytes,
jpayne@69 948 int len);
jpayne@69 949 int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);
jpayne@69 950 int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,
jpayne@69 951 const void *data, int len);
jpayne@69 952 void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,
jpayne@69 953 void *data);
jpayne@69 954 int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr);
jpayne@69 955 ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);
jpayne@69 956 ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);
jpayne@69 957
jpayne@69 958 int EVP_PKEY_get_attr_count(const EVP_PKEY *key);
jpayne@69 959 int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);
jpayne@69 960 int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj,
jpayne@69 961 int lastpos);
jpayne@69 962 X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);
jpayne@69 963 X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);
jpayne@69 964 int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);
jpayne@69 965 int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,
jpayne@69 966 const ASN1_OBJECT *obj, int type,
jpayne@69 967 const unsigned char *bytes, int len);
jpayne@69 968 int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,
jpayne@69 969 int nid, int type,
jpayne@69 970 const unsigned char *bytes, int len);
jpayne@69 971 int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,
jpayne@69 972 const char *attrname, int type,
jpayne@69 973 const unsigned char *bytes, int len);
jpayne@69 974
jpayne@69 975 int X509_verify_cert(X509_STORE_CTX *ctx);
jpayne@69 976
jpayne@69 977 /* lookup a cert from a X509 STACK */
jpayne@69 978 X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name,
jpayne@69 979 ASN1_INTEGER *serial);
jpayne@69 980 X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name);
jpayne@69 981
jpayne@69 982 DECLARE_ASN1_FUNCTIONS(PBEPARAM)
jpayne@69 983 DECLARE_ASN1_FUNCTIONS(PBE2PARAM)
jpayne@69 984 DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)
jpayne@69 985 #ifndef OPENSSL_NO_SCRYPT
jpayne@69 986 DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS)
jpayne@69 987 #endif
jpayne@69 988
jpayne@69 989 int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,
jpayne@69 990 const unsigned char *salt, int saltlen);
jpayne@69 991
jpayne@69 992 X509_ALGOR *PKCS5_pbe_set(int alg, int iter,
jpayne@69 993 const unsigned char *salt, int saltlen);
jpayne@69 994 X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,
jpayne@69 995 unsigned char *salt, int saltlen);
jpayne@69 996 X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,
jpayne@69 997 unsigned char *salt, int saltlen,
jpayne@69 998 unsigned char *aiv, int prf_nid);
jpayne@69 999
jpayne@69 1000 #ifndef OPENSSL_NO_SCRYPT
jpayne@69 1001 X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher,
jpayne@69 1002 const unsigned char *salt, int saltlen,
jpayne@69 1003 unsigned char *aiv, uint64_t N, uint64_t r,
jpayne@69 1004 uint64_t p);
jpayne@69 1005 #endif
jpayne@69 1006
jpayne@69 1007 X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,
jpayne@69 1008 int prf_nid, int keylen);
jpayne@69 1009
jpayne@69 1010 /* PKCS#8 utilities */
jpayne@69 1011
jpayne@69 1012 DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)
jpayne@69 1013
jpayne@69 1014 EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8);
jpayne@69 1015 PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey);
jpayne@69 1016
jpayne@69 1017 int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,
jpayne@69 1018 int version, int ptype, void *pval,
jpayne@69 1019 unsigned char *penc, int penclen);
jpayne@69 1020 int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg,
jpayne@69 1021 const unsigned char **pk, int *ppklen,
jpayne@69 1022 const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8);
jpayne@69 1023
jpayne@69 1024 const STACK_OF(X509_ATTRIBUTE) *
jpayne@69 1025 PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8);
jpayne@69 1026 int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type,
jpayne@69 1027 const unsigned char *bytes, int len);
jpayne@69 1028
jpayne@69 1029 int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
jpayne@69 1030 int ptype, void *pval,
jpayne@69 1031 unsigned char *penc, int penclen);
jpayne@69 1032 int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
jpayne@69 1033 const unsigned char **pk, int *ppklen,
jpayne@69 1034 X509_ALGOR **pa, X509_PUBKEY *pub);
jpayne@69 1035
jpayne@69 1036 int X509_check_trust(X509 *x, int id, int flags);
jpayne@69 1037 int X509_TRUST_get_count(void);
jpayne@69 1038 X509_TRUST *X509_TRUST_get0(int idx);
jpayne@69 1039 int X509_TRUST_get_by_id(int id);
jpayne@69 1040 int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int),
jpayne@69 1041 const char *name, int arg1, void *arg2);
jpayne@69 1042 void X509_TRUST_cleanup(void);
jpayne@69 1043 int X509_TRUST_get_flags(const X509_TRUST *xp);
jpayne@69 1044 char *X509_TRUST_get0_name(const X509_TRUST *xp);
jpayne@69 1045 int X509_TRUST_get_trust(const X509_TRUST *xp);
jpayne@69 1046
jpayne@69 1047 # ifdef __cplusplus
jpayne@69 1048 }
jpayne@69 1049 # endif
jpayne@69 1050 #endif