Files
xen/tools/vtpm_manager/crypto/crypto.c
T
shand@ubuntu.eng.hq.xensource.com f2a4d188c4 vTPM manager - Intel/IBM joint TPM Virtualization implementation for Xen.
This is a software implementation for people without h/w vTPM support. 

Signed-off-by: Vinnie Scarlata <vincent.r.scarlata@intel.com>
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Steven Hand <steven@xensource.com>
2005-08-30 11:39:25 -08:00

89 lines
2.8 KiB
C

// ===================================================================
//
// Copyright (c) 2005, Intel Corp.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
// * Neither the name of Intel Corporation nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGE.
// ===================================================================
//
// crypto.c
//
// This file will handle all the TPM Crypto functionality
//
// ==================================================================
#include <string.h>
#include <openssl/crypto.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/rand.h>
#include "crypto.h"
#include "log.h"
/**
* Initialize cryptography library
* @rand: random seed
* @size: size of @rand
*/
void Crypto_Init(const BYTE* rand, int size) {
ERR_load_crypto_strings();
CRYPTO_malloc_init();
OpenSSL_add_all_algorithms();
SYM_CIPHER = EVP_aes_128_cbc();
RAND_poll();
if (rand == NULL)
return;
RAND_add(rand, size, size);
}
/**
* Shutdown cryptography library
*/
void Crypto_Exit() {
ERR_free_strings();
ERR_remove_state(0);
EVP_cleanup();
}
/**
* Get random data
* @data: (OUT) Random data
* @size: Size of @data
*/
void Crypto_GetRandom(void* data, int size) {
int result;
result = RAND_pseudo_bytes((BYTE*) data, size);
if (result <= 0)
vtpmlogerror (VTPM_LOG_CRYPTO, "RAND_pseudo_bytes failed: %s\n",
ERR_error_string (ERR_get_error(), NULL));
}