summaryrefslogtreecommitdiffstats
path: root/base/crypto/symmetric_key.h
diff options
context:
space:
mode:
Diffstat (limited to 'base/crypto/symmetric_key.h')
-rw-r--r--base/crypto/symmetric_key.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/base/crypto/symmetric_key.h b/base/crypto/symmetric_key.h
index c298048..1e1aed5 100644
--- a/base/crypto/symmetric_key.h
+++ b/base/crypto/symmetric_key.h
@@ -19,12 +19,25 @@ namespace base {
// scoped_ptr.
class SymmetricKey {
public:
-#if defined(USE_NSS)
- explicit SymmetricKey(PK11SymKey* key) : key_(key) {}
-#endif // USE_NSS
+ enum Algorithm {
+ AES,
+ HMAC_SHA1,
+ };
virtual ~SymmetricKey() {}
+ // Generates a random key suitable to be used with |cipher| and of |key_size|
+ // bytes. The caller is responsible for deleting the returned SymmetricKey.
+ static SymmetricKey* GenerateRandomKey(Algorithm algorithm, size_t key_size);
+
+ // Derives a key from the supplied password and salt using PBKDF2. The caller
+ // is respnosible 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);
+
#if defined(USE_NSS)
PK11SymKey* key() const { return key_.get(); }
#endif // USE_NSS
@@ -35,6 +48,7 @@ class SymmetricKey {
private:
#if defined(USE_NSS)
+ explicit SymmetricKey(PK11SymKey* key) : key_(key) {}
ScopedPK11SymKey key_;
#endif // USE_NSS