Add Unit Tests for Big RSA Keys
Merge from widevine of http://go/wvgerrit/22958/ This adds unit tests for OEMCrypto to check 3072 bit RSA keys. It also adds indicates that the mock supports them. b/32776334 Change-Id: I68a3ff56969a860602e6c230558478dc3577c8f5
This commit is contained in:
@@ -2461,6 +2461,30 @@ TEST_F(OEMCryptoLoadsCertificate, CertificateDecrypt) {
|
||||
ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR());
|
||||
}
|
||||
|
||||
// Test a 3072 bit RSA key certificate.
|
||||
TEST_F(OEMCryptoLoadsCertificate, TestLargeRSAKey3072) {
|
||||
encoded_rsa_key_.assign(kTestRSAPKCS8PrivateKeyInfo3_3072,
|
||||
kTestRSAPKCS8PrivateKeyInfo3_3072 +
|
||||
sizeof(kTestRSAPKCS8PrivateKeyInfo3_3072));
|
||||
CreateWrappedRSAKey(kSign_RSASSA_PSS, true);
|
||||
Session s;
|
||||
ASSERT_NO_FATAL_FAILURE(s.open());
|
||||
ASSERT_NO_FATAL_FAILURE(s.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_NO_FATAL_FAILURE(s.InstallRSASessionTestKey(wrapped_rsa_key_));
|
||||
ASSERT_NO_FATAL_FAILURE(s.FillSimpleMessage(kDuration, 0, 0));
|
||||
ASSERT_NO_FATAL_FAILURE(s.EncryptAndSign());
|
||||
ASSERT_NO_FATAL_FAILURE(s.LoadTestKeys());
|
||||
ASSERT_NO_FATAL_FAILURE(s.TestDecryptCTR());
|
||||
}
|
||||
|
||||
// Deivces that load certificates, should at least support RSA 2048 keys.
|
||||
TEST_F(OEMCryptoLoadsCertificate, SupportsCertificatesAPI13) {
|
||||
ASSERT_NE(0,
|
||||
OEMCrypto_Supports_RSA_2048bit & OEMCrypto_SupportedCertificates())
|
||||
<< "Supported certificates is only " << OEMCrypto_SupportedCertificates();
|
||||
}
|
||||
|
||||
class OEMCryptoUsesCertificate : public OEMCryptoLoadsCertificate {
|
||||
protected:
|
||||
virtual void SetUp() {
|
||||
@@ -2547,7 +2571,8 @@ TEST_F(OEMCryptoLoadsCertificate, RSAPerformance) {
|
||||
wrapped_rsa_key_.size()));
|
||||
vector<uint8_t> session_key;
|
||||
vector<uint8_t> enc_session_key;
|
||||
s.PreparePublicKey();
|
||||
ASSERT_NO_FATAL_FAILURE(s.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_TRUE(s.GenerateRSASessionKey(&session_key, &enc_session_key));
|
||||
vector<uint8_t> mac_context;
|
||||
vector<uint8_t> enc_context;
|
||||
@@ -2618,7 +2643,8 @@ TEST_F(OEMCryptoUsesCertificate, RSASignature) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
// In the real world, the signature above would just have been used to contact
|
||||
// the license server to get this response.
|
||||
session_.PreparePublicKey();
|
||||
ASSERT_NO_FATAL_FAILURE(session_.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_NO_FATAL_FAILURE(session_.VerifyRSASignature(
|
||||
licenseRequest, signature, signature_length, kSign_RSASSA_PSS));
|
||||
}
|
||||
@@ -2646,7 +2672,8 @@ TEST_F(OEMCryptoUsesCertificate, RSASignatureLargeBuffer) {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts);
|
||||
// In the real world, the signature above would just have been used to contact
|
||||
// the license server to get this response.
|
||||
session_.PreparePublicKey();
|
||||
ASSERT_NO_FATAL_FAILURE(session_.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_NO_FATAL_FAILURE(session_.VerifyRSASignature(
|
||||
licenseRequest, signature, signature_length, kSign_RSASSA_PSS));
|
||||
}
|
||||
@@ -2654,7 +2681,8 @@ TEST_F(OEMCryptoUsesCertificate, RSASignatureLargeBuffer) {
|
||||
TEST_F(OEMCryptoUsesCertificate, GenerateDerivedKeysLargeBuffer) {
|
||||
vector<uint8_t> session_key;
|
||||
vector<uint8_t> enc_session_key;
|
||||
session_.PreparePublicKey();
|
||||
ASSERT_NO_FATAL_FAILURE(session_.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_TRUE(session_.GenerateRSASessionKey(&session_key, &enc_session_key));
|
||||
vector<uint8_t> mac_context(kMaxMessageSize);
|
||||
vector<uint8_t> enc_context(kMaxMessageSize);
|
||||
@@ -2730,7 +2758,8 @@ class OEMCryptoLoadsCertificateAlternates : public OEMCryptoLoadsCertificate {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts)
|
||||
<< "Failed to sign with padding scheme=" << (int)scheme
|
||||
<< ", size=" << (int)size;
|
||||
s.PreparePublicKey();
|
||||
ASSERT_NO_FATAL_FAILURE(s.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_NO_FATAL_FAILURE(s.VerifyRSASignature(licenseRequest, signature,
|
||||
signature_length, scheme));
|
||||
delete[] signature;
|
||||
@@ -2746,7 +2775,8 @@ class OEMCryptoLoadsCertificateAlternates : public OEMCryptoLoadsCertificate {
|
||||
s.GenerateNonce();
|
||||
vector<uint8_t> session_key;
|
||||
vector<uint8_t> enc_session_key;
|
||||
s.PreparePublicKey();
|
||||
ASSERT_NO_FATAL_FAILURE(s.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
ASSERT_TRUE(s.GenerateRSASessionKey(&session_key, &enc_session_key));
|
||||
vector<uint8_t> mac_context;
|
||||
vector<uint8_t> enc_context;
|
||||
@@ -3013,7 +3043,8 @@ class OEMCryptoCastReceiverTest : public OEMCryptoLoadsCertificateAlternates {
|
||||
ASSERT_EQ(OEMCrypto_SUCCESS, sts)
|
||||
<< "Failed to sign with padding scheme=" << (int)scheme
|
||||
<< ", size=" << (int)message.size();
|
||||
s.PreparePublicKey(&encoded_rsa_key_[0], encoded_rsa_key_.size());
|
||||
ASSERT_NO_FATAL_FAILURE(s.PreparePublicKey(&encoded_rsa_key_[0],
|
||||
encoded_rsa_key_.size()));
|
||||
|
||||
// Verify that the signature matches the official test vector.
|
||||
ASSERT_EQ(correct_signature.size(), signature_length);
|
||||
@@ -3029,6 +3060,11 @@ class OEMCryptoCastReceiverTest : public OEMCryptoLoadsCertificateAlternates {
|
||||
}
|
||||
};
|
||||
|
||||
// CAST Receivers should report that they support cast certificates.
|
||||
TEST_F(OEMCryptoCastReceiverTest, SupportsCertificatesAPI13) {
|
||||
ASSERT_NE(0, OEMCrypto_Supports_RSA_CAST & OEMCrypto_SupportedCertificates());
|
||||
}
|
||||
|
||||
// # PKCS#1 v1.5 Signature Example 15.1
|
||||
TEST_F(OEMCryptoCastReceiverTest, TestSignaturePKCS1_15_1) {
|
||||
BuildRSAKey();
|
||||
|
||||
Reference in New Issue
Block a user