view usr/src/lib/libkmsagent/common/KMSAgentPKIimpl.h @ 12720:3db6e0082404

PSARC 2010/195 PKCS11 KMS Provider 6944296 Solaris needs a PKCS#11 provider to allow access to KMS keystore functionality
author Wyllys Ingersoll <Wyllys.Ingersoll@Sun.COM>
date Mon, 28 Jun 2010 16:04:11 -0700
parents
children
line wrap: on
line source

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
 */

/**
 * \file KMSAgentPKIimpl.h
 */

#ifndef K_KMSAgentPKIimpl_h
#define K_KMSAgentPKIimpl_h

/**
 *   initializes the implementation environment for an X509
 *   certificate implementation and returns an opague handle to any
 *   resources that should be freed when use of the X.509
 *   implementation is complete.  This handle is used on all
 *   subsequent calls that may need to access this resource.
 */
void * InitializeCertImpl();

/**
 *  Save the X.509 Certificate in PEM format to the specified filename
 */
bool SaveX509CertTofile( 
                        void* const i_pImplResource,
                        const char * const i_pcFileName );

/**
 *  Save the X.509Certificate in PEM format to the specified buffer
 *  and set the length of the certificate in the location referenced
 *  by o_pActualLength
 */
bool SaveX509CertToBuffer(
                        void* const             i_pImplResource,
                        unsigned char * const   i_pcBuffer,
                        int                     i_iBufferLength,
                        int * const             o_pActualLength );

/**
 *  loads the X.509 certificate from i_pcFileName and keeps a reference to it
 *  via i_pImplResource
 */
bool LoadX509CertFromFile( 
                            void* const i_pImplResource,
                            const char * const i_pcFileName );

/**
 *  load the X.509 certificate from i_pX509Buffer and keeps a reference to it
 *  via i_pImplResource
 */
bool LoadX509CertFromBuffer( 
                           void* const i_pImplResource,
                           void* const i_pX509Cert,
                           int         i_iLength);
                                                    
/**
 *   frees any resources allocated by <code>InitializeCertImpl</code>
 */ 
void FinalizeCertImpl(
                        void* i_pImplResource);

/**
 *  print the X.509 certificate to stdout
 */
bool PrintX509Cert( void* const i_pImplResource );

/**
 *   initializes the implementation environment for a public or private key
 *   and returns an opague handle to any resources that should be freed
 *   when use of the key is complete.  This handle is used
 *   on all subsequent calls that may need to access this resource.
 */
void * InitializePKeyImpl();

/**
 *   frees any resources allocated by <code>InitializePKeyImpl</code>
 */ 
void FinalizePKeyImpl( void * i_pPKeyImpl );

#ifdef KMSUSERPKCS12
void *GetPKey( void *i_pImplResource);
void SetPKey( void *i_pImplResource, void *i_pPKey);
void *GetCert( void *i_pImplResource);
void SetCert( void *i_pImplResource, void *cert);
#endif

/**
 *   Stores the private key in a memory buffer referenced by
 *   i_pcBuffer with the length of the key being stored in the area
 *   referenced by o_pActualLength.
 *
 */
bool SavePrivateKeyToBuffer(
                        void * const          i_pPKeyImpl,
                        unsigned char * const i_pcBuffer, 
                        int                   i_iBufferLength, 
                        int * const           o_pActualLength,
			            const char * const    i_pPassphrase, 
                        int                   i_iFormat);

/**
 *   load the private key into this object from the specified buffer
 */
bool LoadPrivateKeyFromBuffer(
                        void * const        i_pPKeyImpl,
                        unsigned char *     i_pcBuffer,
			            int                 i_iLength, 
                        const char * const  i_pPassphrase, 
                        int                 i_iFormat);

/**
 *   Stores the pubic key in a memory buffer referenced by
 *   i_pcBuffer with the length of the key being stored in the area
 *   referenced by o_pActualLength.
 *
 */
bool SavePublicKeyToBuffer(
                        void * const          i_pPKeyImpl,
                        unsigned char * const i_pcBuffer, 
                        int                   i_iBufferLength, 
                        int * const           o_pActualLength,
                        int                   i_iFormat);

/**
 *  load a public key into this object from the specified buffer
 */
bool LoadPublicKeyFromBuffer(
                        void * const        i_pPKeyImpl,
                        unsigned char *     i_pcBuffer,
			            int                 i_iLength, 
                        int                 i_iFormat);

/**
 *  encrypt the plaintext using RSA encryption with the RSA public
 *  key provided and return resulting cyphertext
 */
bool PublicKeyEncrypt (int i_iLength,
                       const unsigned char * const i_pcPlainText,
                       unsigned char * const o_pcCypherText,
                       int * const o_pActualLength,
                       void * i_pRSAPublicKey);

#endif // K_KMSAgentPKIimpl_h