Index: crypto/signature_creator_openssl.cc |
diff --git a/crypto/signature_creator_openssl.cc b/crypto/signature_creator_openssl.cc |
index 0d90d50044da8de10c7af00f80bb2ccf65e4e548..b17e73db94ce657ee19b8973167909c484c9f029 100644 |
--- a/crypto/signature_creator_openssl.cc |
+++ b/crypto/signature_creator_openssl.cc |
@@ -40,9 +40,20 @@ int ToOpenSSLDigestType(SignatureCreator::HashAlgorithm hash_alg) { |
} // namespace |
-// static |
SignatureCreator* SignatureCreator::Create(RSAPrivateKey* key, |
- HashAlgorithm hash_alg) { |
+ HashAlgorithm hash_algm) { |
davidben
2015/08/21 21:52:23
Nit: hash_alg, to be consistent?
|
+ return SignatureCreator::CreateImpl(key, hash_algm, false); |
+} |
+ |
+SignatureCreator* SignatureCreator::CreatePSS(RSAPrivateKey* key, |
+ HashAlgorithm hash_algm) { |
+ return SignatureCreator::CreateImpl(key, hash_algm, true); |
+} |
+ |
+// static |
+SignatureCreator* SignatureCreator::CreateImpl(RSAPrivateKey* key, |
+ HashAlgorithm hash_alg, |
+ bool use_pss) { |
OpenSSLErrStackTracer err_tracer(FROM_HERE); |
scoped_ptr<SignatureCreator> result(new SignatureCreator); |
const EVP_MD* const digest = ToOpenSSLDigest(hash_alg); |
@@ -50,10 +61,20 @@ SignatureCreator* SignatureCreator::Create(RSAPrivateKey* key, |
if (!digest) { |
return NULL; |
} |
- if (!EVP_DigestSignInit(result->sign_context_, NULL, digest, NULL, |
+ EVP_PKEY_CTX* pkey_ctx; |
+ if (!EVP_DigestSignInit(result->sign_context_, &pkey_ctx, digest, NULL, |
key->key())) { |
return NULL; |
} |
+ if (use_pss) { |
+ if (1 != EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, RSA_PKCS1_PSS_PADDING)) { |
davidben
2015/08/21 21:52:23
You can just use ! now. BoringSSL narrowed both of
|
+ LOG(FATAL) << "EVP_PKEY_CTX_set_rsa_padding"; |
+ } |
+ // -1 sets the salt length to the digest length. |
+ if (1 != EVP_PKEY_CTX_set_rsa_pss_saltlen(pkey_ctx, -1)) { |
+ LOG(FATAL) << "EVP_PKEY_CTX_set_rsa_pss_saltlen"; |
+ } |
+ } |
return result.release(); |
} |