Files
mars-flaim/sql/src/f_nici.h
dsandersoremutah ffe3cb6975 Changed Id property
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@482 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2006-05-30 22:00:45 +00:00

269 lines
5.9 KiB
C++

//------------------------------------------------------------------------------
// Desc: This file contains the definitions needed for the NICI interface
// functions.
//
// Tabs: 3
//
// Copyright (c) 2004-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id$
//------------------------------------------------------------------------------
#ifndef _F_NICI_HPP
#define _F_NICI_HPP
#ifdef FLM_USE_NICI
#ifdef FLM_NLM
#define N_PLAT_NLM
#endif
#include "nwccs.h"
#ifndef IDV_NOV_AES128CBCPad
#define IDV_NOV_AES128CBCPad NICI_AlgorithmPrefix(1), 97 /* 0x61 */
#endif
#else
#define NICI_OBJECT_HANDLE void *
#define NICI_CC_HANDLE FLMUINT32
#endif
/*--------------------------------------------------------------------------
* Definitions
*------------------------------------------------------------------------*/
#define IV_SZ 16
#define IV_SZ8 8
#define SALT_SZ 8
#define SALT_COUNT 895
/*-----------------------------------------------------------------------
* CCS Interface.
*-----------------------------------------------------------------------*/
class IF_CCS : public F_Object
{
public:
virtual ~IF_CCS()
{
}
virtual RCODE generateEncryptionKey(
FLMUINT uiEncKeySize) = 0;
virtual RCODE generateWrappingKey(
FLMUINT uiEncKeySize) = 0;
virtual RCODE encryptToStore(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV = NULL) = 0;
virtual RCODE decryptFromStore(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV = NULL) = 0;
}; // IF_CCS
class F_CCS : public IF_CCS
{
public:
// Constructor & destructor
F_CCS()
{
m_bInitCalled = FALSE;
m_bKeyVerified = FALSE;
f_memset( m_ucIV, 0, IV_SZ);
//m_bKeyIsWrappingKey = FALSE;
//m_uiAlgType = 0xFF;
m_keyHandle = 0;
m_hContext = 0;
m_uiEncKeySize = 0;
m_hMutex = F_MUTEX_NULL;
}
~F_CCS();
RCODE init(
FLMBOOL bKeyIsWrappingKey,
eEncAlgorithm eEncAlg);
RCODE generateEncryptionKey(
FLMUINT uiEncKeySize);
RCODE generateWrappingKey(
FLMUINT uiEncKeySize);
RCODE encryptToStore(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV = NULL);
RCODE decryptFromStore(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV = NULL);
RCODE getKeyToStore(
FLMBYTE ** ppucKeyInfo,
FLMUINT32 * pui32BufLen,
FLMBYTE * pzEncKeyPasswd = NULL,
F_CCS * pWrappingCcs = NULL);
RCODE setKeyFromStore(
FLMBYTE * pucKeyInfo,
FLMBYTE * pszEncKeyPasswd = NULL,
F_CCS * pWrappingCcs = NULL);
FINLINE FLMBOOL keyVerified()
{
return m_bKeyVerified;
}
FINLINE FLMUINT getEncType( void)
{
return m_uiAlgType;
}
FLMUINT getIVLen();
RCODE generateIV(
FLMUINT uiIVLen,
FLMBYTE * pucIV);
private:
RCODE getWrappingKey(
NICI_OBJECT_HANDLE * pWrappingKeyHandle);
RCODE wrapKey(
FLMBYTE ** ppucWrappedKey,
FLMUINT32 * pui32Length,
NICI_OBJECT_HANDLE masterWrappingKey = 0 );
RCODE unwrapKey(
FLMBYTE * pucWrappedKey,
FLMUINT32 ui32WrappedKeyLength,
NICI_OBJECT_HANDLE masterWrappingKey = 0);
RCODE extractKey(
FLMBYTE ** ppucShroudedKey,
FLMUINT32 * pui32Length,
FLMUNICODE * puzEncKeyPasswd );
RCODE injectKey(
FLMBYTE * pucBuffer,
FLMUINT32 ui32Length,
FLMUNICODE * puzEncKeyPasswd );
RCODE encryptToStoreAES(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV);
RCODE encryptToStoreDES3(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV);
RCODE encryptToStoreDES(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV);
RCODE decryptFromStoreAES(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV);
RCODE decryptFromStoreDES3(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV);
RCODE decryptFromStoreDES(
FLMBYTE * pucIn,
FLMUINT uiInLen,
FLMBYTE * pucOut,
FLMUINT * puiOutLen,
FLMBYTE * pucIV);
RCODE generateEncryptionKeyAES(
FLMUINT uiEncKeySize);
RCODE generateEncryptionKeyDES3(
FLMUINT uiEncKeySize);
RCODE generateEncryptionKeyDES(
FLMUINT uiEncKeySize);
RCODE generateWrappingKeyAES(
FLMUINT uiEncKeySize);
RCODE generateWrappingKeyDES3(
FLMUINT uiEncKeySize);
RCODE generateWrappingKeyDES(
FLMUINT uiEncKeySize);
FLMUINT m_uiAlgType;
FLMBOOL m_bInitCalled;
FLMBOOL m_bKeyIsWrappingKey;
FLMBOOL m_bKeyVerified;
NICI_OBJECT_HANDLE m_keyHandle; // Handle to the clear key - we don't ever get the actual key.
FLMBYTE m_ucIV[ IV_SZ]; // Used when the algorithm type is DES, 3DES or AES
FLMBYTE m_ucRndIV[ IV_SZ]; // Used when the IV is stored with the data.
FLMUINT m_uiIVFactor;
NICI_CC_HANDLE m_hContext;
FLMUINT m_uiEncKeySize;
F_MUTEX m_hMutex;
}; // F_CCS
RCODE flmDecryptBuffer(
FLMBYTE * pucBuffer,
FLMUINT * puiBufLen);
RCODE flmEncryptBuffer(
FLMBYTE * pucBuffer,
FLMUINT * puiBufLen);
#endif /* _F_NICI_HPP */