view usr/src/lib/libkmsagent/common/KMSAgentPKIKey.cpp @ 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 KMSAgentPKIKey.cpp
 */
#include <stdio.h>

#include "SYSCommon.h"
#include "KMSAgentPKICommon.h"
#include "KMSAgentPKIimpl.h"

///////////////////////////////////////////////////////////////////////////////////////
// public key methods
///////////////////////////////////////////////////////////////////////////////////////
CPublicKey::CPublicKey()
{
   m_pPublicKeyImpl = InitializePKeyImpl();
   
   FATAL_ASSERT( m_pPublicKeyImpl != NULL );
   
}

/**
 * This method saves public key into a buffer,
 * it also returns the actual used buffer length.
 * @param i_pcBuffer Buffer to receive public key
 * @param i_iBufferLength length of the buffer provided
 * @param o_pActualLength actual length of the public key stored into the buffer
 * @param i_iFormat key format, @see EnumPKIFileFormat
 */
bool CPublicKey::Save(  unsigned char * const      i_pcBuffer, 
                        int                        i_iBufferLength,
                        int * const                o_pActualLength,
                        int                        i_iFormat )
{
   return SavePublicKeyToBuffer( m_pPublicKeyImpl, 
                                 i_pcBuffer, 
                                 i_iBufferLength, 
                                 o_pActualLength, 
                                 i_iFormat );
}

bool CPublicKey::Load(unsigned char * const i_pcBuffer,
                       int                   i_iLength,
                       int                   i_iFormat)
{ 
   return LoadPublicKeyFromBuffer( m_pPublicKeyImpl, 
                                    i_pcBuffer, 
                                    i_iLength, 
                                    i_iFormat );
}

bool CPublicKey::Encrypt (int i_iLength,
                  const unsigned char * const i_pcPlainText,
                  unsigned char * const o_pcCypherText,
                  int * const o_pActualLength)
{
    return PublicKeyEncrypt(i_iLength,i_pcPlainText,o_pcCypherText,o_pActualLength, m_pPublicKeyImpl );
}

CPublicKey::~CPublicKey()
{
   if(m_pPublicKeyImpl != NULL)
   {
      FinalizePKeyImpl( m_pPublicKeyImpl );
   }
}

///////////////////////////////////////////////////////////////////////////////////////
// private key methods
///////////////////////////////////////////////////////////////////////////////////////

CPrivateKey::CPrivateKey()
{
   m_pPKeyImpl = InitializePKeyImpl();
   
   FATAL_ASSERT( m_pPKeyImpl != NULL );
   
}

/**
 * This method saves private key into a buffer,
 * it also returns the actual used buffer length.
 */
bool CPrivateKey::Save( unsigned char * const      i_pcBuffer, 
                        int                        i_iBufferLength,
                        int * const                o_pActualLength,
                        const char * const         i_pPassphrase, 
                        int                        i_iFormat )
{
   return SavePrivateKeyToBuffer(m_pPKeyImpl, 
                                 i_pcBuffer, 
                                 i_iBufferLength, 
                                 o_pActualLength, 
                                 i_pPassphrase, 
                                 i_iFormat );
}

bool CPrivateKey::Load(unsigned char * const i_pcBuffer,
                       int                   i_iLength,
                       const char * const    i_pPassphrase,
                       int                   i_iFormat)
{ 
   return LoadPrivateKeyFromBuffer( m_pPKeyImpl, 
                                    i_pcBuffer, 
                                    i_iLength, 
                                    i_pPassphrase, 
                                    i_iFormat );
}

CPrivateKey::~CPrivateKey()
{
   if(m_pPKeyImpl != NULL)
   {
      FinalizePKeyImpl( m_pPKeyImpl );
   }
}
#ifdef KMSUSERPKCS12
void
*CPrivateKey::GetNative()
{
	return GetPKey(m_pPKeyImpl);
}
void
CPrivateKey::SetNative(void *pKey)
{
	SetPKey(m_pPKeyImpl, pKey);
	return;
}
#endif