Index: chromeos/cryptohome/cryptohome_parameters.cc |
diff --git a/chromeos/cryptohome/cryptohome_parameters.cc b/chromeos/cryptohome/cryptohome_parameters.cc |
index 41246f37e0e8640ba0cba2a94caa0bd0d31a85bd..d784d4e22265c68d7a24ddd0a014f591400dc035 100644 |
--- a/chromeos/cryptohome/cryptohome_parameters.cc |
+++ b/chromeos/cryptohome/cryptohome_parameters.cc |
@@ -15,25 +15,135 @@ bool Identification::operator==(const Identification& other) const { |
return user_id == other.user_id; |
} |
-KeyDefinition::KeyDefinition(const std::string& key, |
+KeyDefinition::AuthorizationData::Secret::Secret() : encrypt(false), |
+ sign(false), |
+ wrapped(false) { |
+} |
+ |
+KeyDefinition::AuthorizationData::Secret::Secret( |
+ bool encrypt, |
+ bool sign, |
+ const std::string& symmetric_key, |
+ const std::string& public_key, |
+ bool wrapped) |
+ : encrypt(encrypt), |
+ sign(sign), |
+ symmetric_key(symmetric_key), |
+ public_key(public_key), |
+ wrapped(wrapped) { |
+} |
+ |
+bool KeyDefinition::AuthorizationData::Secret::operator==( |
+ const Secret& other) const { |
+ return encrypt == other.encrypt && |
+ sign == other.sign && |
+ symmetric_key == other.symmetric_key && |
+ public_key == other.public_key && |
+ wrapped == other.wrapped; |
+} |
+ |
+KeyDefinition::AuthorizationData::AuthorizationData() : type(TYPE_HMACSHA256) { |
+} |
+ |
+KeyDefinition::AuthorizationData::AuthorizationData( |
+ bool encrypt, |
+ bool sign, |
+ const std::string& symmetric_key) : type(TYPE_HMACSHA256) { |
+ secrets.push_back(Secret(encrypt, |
+ sign, |
+ symmetric_key, |
+ std::string() /* public_key */, |
+ false /* wrapped */)); |
+} |
+ |
+ |
+KeyDefinition::AuthorizationData::~AuthorizationData() { |
+} |
+ |
+bool KeyDefinition::AuthorizationData::operator==( |
+ const AuthorizationData& other) const { |
+ if (type != other.type || secrets.size() != other.secrets.size()) |
+ return false; |
+ for (size_t i = 0; i < secrets.size(); ++i) { |
+ if (!(secrets[i] == other.secrets[i])) |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+KeyDefinition::ProviderData::ProviderData() { |
+} |
+ |
+KeyDefinition::ProviderData::ProviderData(const std::string& name) |
+ : name(name) { |
+} |
+ |
+KeyDefinition::ProviderData::ProviderData(const ProviderData& other) |
+ : name(other.name) { |
+ if (other.number) |
+ number.reset(new int64(*other.number)); |
+ if (other.bytes) |
+ bytes.reset(new std::string(*other.bytes)); |
+} |
+ |
+void KeyDefinition::ProviderData::operator=(const ProviderData& other) { |
+ name = other.name; |
+ number.reset(other.number ? new int64(*other.number) : NULL); |
+ bytes.reset(other.bytes ? new std::string(*other.bytes) : NULL); |
+} |
+ |
+KeyDefinition::ProviderData::~ProviderData() { |
+} |
+ |
+bool KeyDefinition::ProviderData::operator==(const ProviderData& other) const { |
+ const bool has_number = number; |
+ const bool other_has_number = other.number; |
+ const bool has_bytes = bytes; |
+ const bool other_has_bytes = other.bytes; |
+ return name == other.name && |
+ has_number == other_has_number && |
+ has_bytes == other_has_bytes && |
+ (!has_number || (*number == *other.number)) && |
+ (!has_bytes || (*bytes == *other.bytes)); |
+} |
+ |
+KeyDefinition::KeyDefinition() : type(TYPE_PASSWORD), |
+ privileges(0), |
+ revision(0) { |
+} |
+ |
+KeyDefinition::KeyDefinition(const std::string& secret, |
const std::string& label, |
int /*AuthKeyPrivileges*/ privileges) |
- : label(label), |
- revision(1), |
- key(key), |
- privileges(privileges) { |
+ : type(TYPE_PASSWORD), |
+ label(label), |
+ privileges(privileges), |
+ revision(0), |
+ secret(secret) { |
} |
KeyDefinition::~KeyDefinition() { |
} |
bool KeyDefinition::operator==(const KeyDefinition& other) const { |
- return label == other.label && |
- revision == other.revision && |
- key == other.key && |
- encryption_key == other.encryption_key && |
- signature_key == other.signature_key && |
- privileges == other.privileges; |
+ if (type != other.type || |
+ label != other.label || |
+ privileges != other.privileges || |
+ revision != other.revision || |
+ authorization_data.size() != other.authorization_data.size() || |
+ provider_data.size() != other.provider_data.size()) { |
+ return false; |
+ } |
+ |
+ for (size_t i = 0; i < authorization_data.size(); ++i) { |
+ if (!(authorization_data[i] == other.authorization_data[i])) |
+ return false; |
+ } |
+ for (size_t i = 0; i < provider_data.size(); ++i) { |
+ if (!(provider_data[i] == other.provider_data[i])) |
+ return false; |
+ } |
+ return true; |
} |
Authorization::Authorization(const std::string& key, const std::string& label) |
@@ -42,7 +152,7 @@ Authorization::Authorization(const std::string& key, const std::string& label) |
} |
Authorization::Authorization(const KeyDefinition& key_def) |
- : key(key_def.key), |
+ : key(key_def.secret), |
label(key_def.label) { |
} |
@@ -50,24 +160,6 @@ bool Authorization::operator==(const Authorization& other) const { |
return key == other.key && label == other.label; |
} |
-RetrievedKeyData::ProviderData::ProviderData(const std::string& name) |
- : name(name) { |
-} |
- |
-RetrievedKeyData::ProviderData::~ProviderData() { |
-} |
- |
-RetrievedKeyData::RetrievedKeyData(Type type, |
- const std::string& label, |
- int64 revision) : type(type), |
- label(label), |
- privileges(0), |
- revision(revision) { |
-} |
- |
-RetrievedKeyData::~RetrievedKeyData() { |
-} |
- |
MountParameters::MountParameters(bool ephemeral) : ephemeral(ephemeral) { |
} |