Forbid PKCS1 in TLS 1.3.
BUG=84
Change-Id: Ie5eaefddd161488996033de28c0ebd1064bb793d
Reviewed-on: https://boringssl-review.googlesource.com/10484
Commit-Queue: Steven Valdez <svaldez@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/ssl/ssl_rsa.c b/ssl/ssl_rsa.c
index c06207f..a34d1e2 100644
--- a/ssl/ssl_rsa.c
+++ b/ssl/ssl_rsa.c
@@ -653,7 +653,8 @@
}
const EVP_MD *md;
- if (is_rsa_pkcs1(&md, signature_algorithm)) {
+ if (is_rsa_pkcs1(&md, signature_algorithm) &&
+ ssl3_protocol_version(ssl) < TLS1_3_VERSION) {
return ssl_sign_rsa_pkcs1(ssl, out, out_len, max_out, md, in, in_len)
? ssl_private_key_success
: ssl_private_key_failure;
@@ -681,7 +682,8 @@
size_t signature_len, uint16_t signature_algorithm,
EVP_PKEY *pkey, const uint8_t *in, size_t in_len) {
const EVP_MD *md;
- if (is_rsa_pkcs1(&md, signature_algorithm)) {
+ if (is_rsa_pkcs1(&md, signature_algorithm) &&
+ ssl3_protocol_version(ssl) < TLS1_3_VERSION) {
return ssl_verify_rsa_pkcs1(ssl, signature, signature_len, md, pkey, in,
in_len);
}
@@ -735,7 +737,8 @@
int ssl_private_key_supports_signature_algorithm(SSL *ssl,
uint16_t signature_algorithm) {
const EVP_MD *md;
- if (is_rsa_pkcs1(&md, signature_algorithm)) {
+ if (is_rsa_pkcs1(&md, signature_algorithm) &&
+ ssl3_protocol_version(ssl) < TLS1_3_VERSION) {
return ssl_private_key_type(ssl) == NID_rsaEncryption;
}
diff --git a/ssl/test/runner/runner.go b/ssl/test/runner/runner.go
index 8221286..3e4ba2e 100644
--- a/ssl/test/runner/runner.go
+++ b/ssl/test/runner/runner.go
@@ -5484,6 +5484,10 @@
if ver.version == VersionTLS12 && hasComponent(alg.name, "PSS") {
shouldFail = true
}
+ // RSA-PKCS1 does not exist in TLS 1.3.
+ if ver.version == VersionTLS13 && hasComponent(alg.name, "PKCS1") {
+ shouldFail = true
+ }
var signError, verifyError string
if shouldFail {
diff --git a/ssl/test/runner/sign.go b/ssl/test/runner/sign.go
index 1674c4a..77ceb79 100644
--- a/ssl/test/runner/sign.go
+++ b/ssl/test/runner/sign.go
@@ -258,15 +258,25 @@
// TODO(davidben): Forbid RSASSA-PKCS1-v1_5 in TLS 1.3.
switch sigAlg {
case signatureRSAPKCS1WithMD5:
- return &rsaPKCS1Signer{crypto.MD5}, nil
+ if version < VersionTLS13 || config.Bugs.IgnoreSignatureVersionChecks {
+ return &rsaPKCS1Signer{crypto.MD5}, nil
+ }
case signatureRSAPKCS1WithSHA1:
- return &rsaPKCS1Signer{crypto.SHA1}, nil
+ if version < VersionTLS13 || config.Bugs.IgnoreSignatureVersionChecks {
+ return &rsaPKCS1Signer{crypto.SHA1}, nil
+ }
case signatureRSAPKCS1WithSHA256:
- return &rsaPKCS1Signer{crypto.SHA256}, nil
+ if version < VersionTLS13 || config.Bugs.IgnoreSignatureVersionChecks {
+ return &rsaPKCS1Signer{crypto.SHA256}, nil
+ }
case signatureRSAPKCS1WithSHA384:
- return &rsaPKCS1Signer{crypto.SHA384}, nil
+ if version < VersionTLS13 || config.Bugs.IgnoreSignatureVersionChecks {
+ return &rsaPKCS1Signer{crypto.SHA384}, nil
+ }
case signatureRSAPKCS1WithSHA512:
- return &rsaPKCS1Signer{crypto.SHA512}, nil
+ if version < VersionTLS13 || config.Bugs.IgnoreSignatureVersionChecks {
+ return &rsaPKCS1Signer{crypto.SHA512}, nil
+ }
case signatureECDSAWithSHA1:
return &ecdsaSigner{version, config, nil, crypto.SHA1}, nil
case signatureECDSAWithP256AndSHA256: