5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * ====================================================================
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Redistribution and use in source and binary forms, with or without
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * modification, are permitted provided that the following conditions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * are met:
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * 1. Redistributions of source code must retain the above copyright
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * notice, this list of conditions and the following disclaimer.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * 2. Redistributions in binary form must reproduce the above copyright
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * notice, this list of conditions and the following disclaimer in
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * the documentation and/or other materials provided with the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * distribution.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * 3. All advertising materials mentioning features or use of this
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * software must display the following acknowledgment:
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * "This product includes software developed by the OpenSSL Project
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * endorse or promote products derived from this software without
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * prior written permission. For written permission, please contact
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * licensing@OpenSSL.org.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * 5. Products derived from this software may not be called "OpenSSL"
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * nor may "OpenSSL" appear in their names without prior written
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * permission of the OpenSSL Project.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * 6. Redistributions of any form whatsoever must retain the following
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * acknowledgment:
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * "This product includes software developed by the OpenSSL Project
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * OF THE POSSIBILITY OF SUCH DAMAGE.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * ====================================================================
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * This product includes cryptographic software written by Eric Young
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * (eay@cryptsoft.com). This product includes software written by Tim
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Hudson (tjh@cryptsoft.com).
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Use is subject to license terms.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifndef _P12LIB_H
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define _P12LIB_H
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <openssl/pkcs12.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#include <openssl/pem.h>
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * PKCS12 file routines borrowed from SNT's libwanboot.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifdef __cplusplus
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern "C" {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* These declarations allow us to make stacks of EVP_PKEY objects */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah WaterlandDECLARE_STACK_OF(EVP_PKEY)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_new_null() SKM_sk_new_null(EVP_PKEY)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_free(st) SKM_sk_free(EVP_PKEY, (st))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_num(st) SKM_sk_num(EVP_PKEY, (st))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_value(st, i) SKM_sk_value(EVP_PKEY, (st), (i))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_push(st, val) SKM_sk_push(EVP_PKEY, (st), (val))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_find(st, val) SKM_sk_find(EVP_PKEY, (st), (val))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_delete(st, i) SKM_sk_delete(EVP_PKEY, (st), (i))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY, (st), (ptr))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_insert(st, val, i) SKM_sk_insert(EVP_PKEY, (st), (val), (i))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY, (st), \
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland (free_func))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define sk_EVP_PKEY_pop(st) SKM_sk_pop(EVP_PKEY, (st))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Error reporting routines required by OpenSSL */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define SUNW_LIB_NAME "SUNW_PKCS12"
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define SUNWerr(f, r) ERR_SUNW_error((f), (r), __FILE__, __LINE__)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Error codes for the SUNW functions. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* OpenSSL prefers codes to start at 100 */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Function codes. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef enum {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_USE_X509CERT = 100,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_USE_PKEY,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_USE_TASTORE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_USE_CERTFILE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_USE_KEYFILE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_USE_TRUSTFILE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_READ_FILE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_DOPARSE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PKCS12_PARSE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PKCS12_CONTENTS,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PARSE_ONE_BAG,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PKCS12_CREATE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_SPLIT_CERTS,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_FIND_LOCALKEYID,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_SET_LOCALKEYID,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_SET_FNAME,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_GET_LOCALKEYID,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_GET_PKEY_FNAME,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_APPEND_KEYS,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PEM_CONTENTS,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PEM_INFO,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_ASC2BMPSTRING,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_UTF82ASCSTR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_FINDATTR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_TYPE2ATTRIB,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_MOVE_CERTS,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_FIND_FNAME,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_PARSE_OUTER,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_F_CHECKFILE
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} sunw_err_func_t;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Reason codes. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef enum {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_INVALID_ARG = 100,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_MEMORY_FAILURE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_MAC_VERIFY_FAILURE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_MAC_CREATE_FAILURE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_FILETYPE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_PKEY,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_PKEYTYPE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PKEY_READ_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_NO_TRUST_ANCHOR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_READ_TRUST_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_ADD_TRUST_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PKCS12_PARSE_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PKCS12_CREATE_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PARSE_BAG_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_MAKE_BAG_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_CERTTYPE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PARSE_CERT_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_LKID,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_SET_LKID_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_FNAME,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_SET_FNAME_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_TRUST,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_BAD_BAGTYPE,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_CERT_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PKEY_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_READ_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_ADD_ATTR_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_STR_CONVERT_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PKCS12_EMPTY_ERR,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland SUNW_R_PASSWORD_ERR
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} sunw_err_reason_t;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Type of checking to perform when calling sunw_check_cert_times
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef enum {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHK_NOT_BEFORE = 1, /* Check 'not before' date */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHK_NOT_AFTER, /* Check 'not after' date */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHK_BOTH /* Check both dates */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} chk_actions_t;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Return type for sunw_check_cert_times
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef enum {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHKERR_TIME_OK = 0, /* Current time meets requested checks */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHKERR_TIME_BEFORE_BAD, /* 'not before' field is invalid */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHKERR_TIME_AFTER_BAD, /* 'not after' field is invalid */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHKERR_TIME_IS_BEFORE, /* Current time is before 'not before' */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland CHKERR_TIME_HAS_EXPIRED /* Current time is after 'not after' */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} chk_errs_t;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * This type indicates what to do with an attribute being returned.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef enum {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland GETDO_COPY = 1, /* Simply return the value of the attribute */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland GETDO_DEL /* Delete the attribute at the same time. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} getdo_actions_t;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * For sunw_pkcs12_parse, the following are values for bits that indicate
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * various types of searches/matching to do. Any of these values can be
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * OR'd together. However, the order in which an attempt will be made
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * to satisfy them is the order in which they are listed below. The
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * exception is DO_NONE. It should not be OR'd with any other value.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define DO_NONE 0x00 /* Don't even try to match */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define DO_FIND_KEYID 0x01 /* 1st cert, key with matching localkeyid */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define DO_FIND_FN 0x02 /* 1st cert, key with matching friendlyname */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define DO_FIRST_PAIR 0x04 /* Return first matching cert/key pair found */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define DO_LAST_PAIR 0x08 /* Return last matching cert/key pair found */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define DO_UNMATCHING 0x10 /* Return first cert and/or key */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Bits returned, which indicate what values were found. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define FOUND_PKEY 0x01 /* Found one or more private key */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define FOUND_CERT 0x02 /* Found one or more client certificate */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define FOUND_CA_CERTS 0x04 /* Added at least one cert to the CA list */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define FOUND_XPKEY 0x08 /* Found at least one private key which does */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /* not match a certificate in the certs list */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* p12lib.c */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah WaterlandPKCS12 *sunw_PKCS12_create(const char *, STACK_OF(EVP_PKEY) *,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland STACK_OF(X509) *, STACK_OF(X509) *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_split_certs(STACK_OF(EVP_PKEY) *, STACK_OF(X509) *,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland STACK_OF(X509) **, STACK_OF(EVP_PKEY) **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandvoid sunw_evp_pkey_free(EVP_PKEY *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_set_localkeyid(const char *, int, EVP_PKEY *, X509 *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_get_pkey_localkeyid(getdo_actions_t, EVP_PKEY *, char **, int *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_get_pkey_fname(getdo_actions_t, EVP_PKEY *, char **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_find_localkeyid(char *, int, STACK_OF(EVP_PKEY) *,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland STACK_OF(X509) *, EVP_PKEY **, X509 **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_find_fname(char *, STACK_OF(EVP_PKEY) *, STACK_OF(X509) *,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland EVP_PKEY **, X509 **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_set_fname(const char *, EVP_PKEY *, X509 *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_check_keys(X509 *, EVP_PKEY *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandchk_errs_t sunw_check_cert_times(chk_actions_t, X509 *);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern void ERR_SUNW_error(int function, int reason, char *file, int line);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern void ERR_load_SUNW_strings(void);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_PKCS12_contents(PKCS12 *, const char *,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland STACK_OF(EVP_PKEY) **, STACK_OF(X509) **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_get_cert_fname(getdo_actions_t, X509 *, char **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandint sunw_PEM_contents(FILE *, pem_password_cb, void *,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland STACK_OF(EVP_PKEY) **, STACK_OF(X509) **);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifdef __cplusplus
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland}
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif /* _P12LIB_H */