blob: 16a54137fca1cb32d08758f20e93b4460d966160 [file] [log] [blame]
// Copyright (c) 2009-2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Crypto - class for handling some OpenSSL crypto functions
#ifndef TPM_INIT_CRYPTO_H_
#define TPM_INIT_CRYPTO_H_
#include <base/basictypes.h>
#include <base/file_path.h>
#include "secure_blob.h"
namespace tpm_init {
// Default entropy source is used to seed openssl's random number generator
extern const std::string kDefaultEntropySource;
class Crypto {
public:
// Default constructor, using the default entropy source
Crypto();
virtual ~Crypto();
// Initializes Crypto
bool Init();
// Seeds the random number generator
void SeedRng() const;
// Returns random bytes of the given length
//
// Parameters
// rand (OUT) - Where to store the random bytes
// length - The number of random bytes to store in rand
void GetSecureRandom(unsigned char *rand, int length) const;
// Creates a new RSA key
//
// Parameters
// key_bits - The key size to generate
// n (OUT) - the modulus
// p (OUT) - the private key
bool CreateRsaKey(int key_bits, SecureBlob* n, SecureBlob *p) const;
// Gets the SHA1 hash of the data provided
void GetSha1(const chromeos::Blob& data, int start, int count,
SecureBlob* hash) const;
void AsciiEncodeToBuffer(const chromeos::Blob& blob, char* buffer,
int buffer_length);
private:
std::string entropy_source_;
DISALLOW_COPY_AND_ASSIGN(Crypto);
};
} // namespace tpm_init
#endif // TPM_INIT_CRYPTO_H_