Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(969)

Unified Diff: chrome/browser/chromeos/platform_keys/platform_keys_nss.cc

Issue 331173002: enterprise.platformKeys: Respect the 'hash' argument of generateKey. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/platform_keys/platform_keys_nss.cc
diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc b/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc
index c4123b2186c0dcaedc8b0926570f0efff959030d..06fca0e0bf06620e34dfb687247e31fae9fe39c9 100644
--- a/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc
+++ b/chrome/browser/chromeos/platform_keys/platform_keys_nss.cc
@@ -152,6 +152,7 @@ class GenerateRSAKeyState : public NSSOperationState {
class SignState : public NSSOperationState {
public:
SignState(const std::string& public_key,
+ HashAlgorithm hash_algorithm,
const std::string& data,
const SignCallback& callback);
virtual ~SignState() {}
@@ -169,6 +170,7 @@ class SignState : public NSSOperationState {
}
const std::string public_key_;
+ HashAlgorithm hash_algorithm_;
const std::string data_;
private:
@@ -259,9 +261,13 @@ GenerateRSAKeyState::GenerateRSAKeyState(unsigned int modulus_length,
}
SignState::SignState(const std::string& public_key,
+ HashAlgorithm hash_algorithm,
const std::string& data,
const SignCallback& callback)
- : public_key_(public_key), data_(data), callback_(callback) {
+ : public_key_(public_key),
+ hash_algorithm_(hash_algorithm),
+ data_(data),
+ callback_(callback) {
}
GetCertificatesState::GetCertificatesState(
@@ -333,12 +339,28 @@ void RSASignOnWorkerThread(scoped_ptr<SignState> state) {
return;
}
+ SECOidTag sign_alg_tag = SEC_OID_UNKNOWN;
+ switch (state->hash_algorithm_) {
+ case HASH_ALGORITHM_SHA1:
+ sign_alg_tag = SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION;
+ break;
+ case HASH_ALGORITHM_SHA256:
+ sign_alg_tag = SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION;
+ break;
+ case HASH_ALGORITHM_SHA384:
+ sign_alg_tag = SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION;
+ break;
+ case HASH_ALGORITHM_SHA512:
+ sign_alg_tag = SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION;
+ break;
+ }
+
SECItem sign_result = {siBuffer, NULL, 0};
if (SEC_SignData(&sign_result,
reinterpret_cast<const unsigned char*>(state->data_.data()),
state->data_.size(),
rsa_key->key(),
- SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION) != SECSuccess) {
+ sign_alg_tag) != SECSuccess) {
LOG(ERROR) << "Couldn't sign.";
state->OnError(FROM_HERE, kErrorInternal);
return;
@@ -493,11 +515,13 @@ void GenerateRSAKey(const std::string& token_id,
void Sign(const std::string& token_id,
const std::string& public_key,
+ HashAlgorithm hash_algorithm,
const std::string& data,
const SignCallback& callback,
BrowserContext* browser_context) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- scoped_ptr<SignState> state(new SignState(public_key, data, callback));
+ scoped_ptr<SignState> state(
+ new SignState(public_key, hash_algorithm, data, callback));
// Get the pointer to |state| before base::Passed releases |state|.
NSSOperationState* state_ptr = state.get();

Powered by Google App Engine
This is Rietveld 408576698