| Index: base/crypto/symmetric_key.h
|
| ===================================================================
|
| --- base/crypto/symmetric_key.h (revision 81350)
|
| +++ base/crypto/symmetric_key.h (working copy)
|
| @@ -1,105 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef BASE_CRYPTO_SYMMETRIC_KEY_H_
|
| -#define BASE_CRYPTO_SYMMETRIC_KEY_H_
|
| -#pragma once
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/base_api.h"
|
| -#include "base/basictypes.h"
|
| -
|
| -#if defined(USE_NSS)
|
| -#include "base/crypto/scoped_nss_types.h"
|
| -#elif defined(OS_MACOSX)
|
| -#include <Security/cssmtype.h>
|
| -#elif defined(OS_WIN)
|
| -#include "base/crypto/scoped_capi_types.h"
|
| -#endif
|
| -
|
| -namespace base {
|
| -
|
| -// Wraps a platform-specific symmetric key and allows it to be held in a
|
| -// scoped_ptr.
|
| -class BASE_API SymmetricKey {
|
| - public:
|
| - // Defines the algorithm that a key will be used with. See also
|
| - // classs Encrptor.
|
| - enum Algorithm {
|
| - AES,
|
| - HMAC_SHA1,
|
| - };
|
| -
|
| - virtual ~SymmetricKey();
|
| -
|
| - // Generates a random key suitable to be used with |algorithm| and of
|
| - // |key_size_in_bits| bits.
|
| - // The caller is responsible for deleting the returned SymmetricKey.
|
| - static SymmetricKey* GenerateRandomKey(Algorithm algorithm,
|
| - size_t key_size_in_bits);
|
| -
|
| - // Derives a key from the supplied password and salt using PBKDF2, suitable
|
| - // for use with specified |algorithm|. Note |algorithm| is not the algorithm
|
| - // used to derive the key from the password. The caller is responsible for
|
| - // deleting the returned SymmetricKey.
|
| - static SymmetricKey* DeriveKeyFromPassword(Algorithm algorithm,
|
| - const std::string& password,
|
| - const std::string& salt,
|
| - size_t iterations,
|
| - size_t key_size_in_bits);
|
| -
|
| - // Imports an array of key bytes in |raw_key|. This key may have been
|
| - // generated by GenerateRandomKey or DeriveKeyFromPassword and exported with
|
| - // GetRawKey, or via another compatible method. The key must be of suitable
|
| - // size for use with |algorithm|. The caller owns the returned SymmetricKey.
|
| - static SymmetricKey* Import(Algorithm algorithm, const std::string& raw_key);
|
| -
|
| -#if defined(USE_OPENSSL)
|
| - const std::string& key() { return key_; }
|
| -#elif defined(USE_NSS)
|
| - PK11SymKey* key() const { return key_.get(); }
|
| -#elif defined(OS_MACOSX)
|
| - CSSM_DATA cssm_data() const;
|
| -#elif defined(OS_WIN)
|
| - HCRYPTKEY key() const { return key_.get(); }
|
| -#endif
|
| -
|
| - // Extracts the raw key from the platform specific data.
|
| - // Warning: |raw_key| holds the raw key as bytes and thus must be handled
|
| - // carefully.
|
| - bool GetRawKey(std::string* raw_key);
|
| -
|
| - private:
|
| -#if defined(USE_OPENSSL)
|
| - SymmetricKey() {}
|
| - std::string key_;
|
| -#elif defined(USE_NSS)
|
| - explicit SymmetricKey(PK11SymKey* key);
|
| - ScopedPK11SymKey key_;
|
| -#elif defined(OS_MACOSX)
|
| - SymmetricKey(const void* key_data, size_t key_size_in_bits);
|
| - std::string key_;
|
| -#elif defined(OS_WIN)
|
| - SymmetricKey(HCRYPTPROV provider, HCRYPTKEY key,
|
| - const void* key_data, size_t key_size_in_bytes);
|
| -
|
| - ScopedHCRYPTPROV provider_;
|
| - ScopedHCRYPTKEY key_;
|
| -
|
| - // Contains the raw key, if it is known during initialization and when it
|
| - // is likely that the associated |provider_| will be unable to export the
|
| - // |key_|. This is the case of HMAC keys when the key size exceeds 16 bytes
|
| - // when using the default RSA provider.
|
| - // TODO(rsleevi): See if KP_EFFECTIVE_KEYLEN is the reason why CryptExportKey
|
| - // fails with NTE_BAD_KEY/NTE_BAD_LEN
|
| - std::string raw_key_;
|
| -#endif
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SymmetricKey);
|
| -};
|
| -
|
| -} // namespace base
|
| -
|
| -#endif // BASE_CRYPTO_SYMMETRIC_KEY_H_
|
|
|