13daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// 23daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// Copyright (C) 2015 The Android Open Source Project 33daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// 43daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 53daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// you may not use this file except in compliance with the License. 63daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// You may obtain a copy of the License at 73daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// 83daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 93daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// 103daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 113daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 123daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// See the License for the specific language governing permissions and 143daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// limitations under the License. 153daa5a0d71ba8facd8be9370df54c20c23be6d8dUtkarsh Sanghi// 16d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 17d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn#include <memory> 18d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn#include <string> 196222defa52eb13c0d90673f642f2647f7753478bDarren Krahn#include <vector> 20d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 216222defa52eb13c0d90673f642f2647f7753478bDarren Krahn#include <base/logging.h> 226222defa52eb13c0d90673f642f2647f7753478bDarren Krahn#include <base/strings/string_number_conversions.h> 23d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn#include <gmock/gmock.h> 24d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn#include <gtest/gtest.h> 25d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 26745de272a4afde07cd3b3a7c376976bd0a972b36Darren Krahn#include "attestation/common/crypto_utility_impl.h" 27745de272a4afde07cd3b3a7c376976bd0a972b36Darren Krahn#include "attestation/common/mock_tpm_utility.h" 28d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 29d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahnusing testing::_; 30d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahnusing testing::NiceMock; 31d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahnusing testing::Return; 32d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 336222defa52eb13c0d90673f642f2647f7753478bDarren Krahnnamespace { 346222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 356222defa52eb13c0d90673f642f2647f7753478bDarren Krahnconst char kValidPublicKeyHex[] = 366222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "3082010A0282010100" 376222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "961037BC12D2A298BEBF06B2D5F8C9B64B832A2237F8CF27D5F96407A6041A4D" 386222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "AD383CB5F88E625F412E8ACD5E9D69DF0F4FA81FCE7955829A38366CBBA5A2B1" 396222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "CE3B48C14B59E9F094B51F0A39155874C8DE18A0C299EBF7A88114F806BE4F25" 406222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "3C29A509B10E4B19E31675AFE3B2DA77077D94F43D8CE61C205781ED04D183B4" 416222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "C349F61B1956C64B5398A3A98FAFF17D1B3D9120C832763EDFC8F4137F6EFBEF" 426222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "46D8F6DE03BD00E49DEF987C10BDD5B6F8758B6A855C23C982DDA14D8F0F2B74" 436222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "E6DEFA7EEE5A6FC717EB0FF103CB8049F693A2C8A5039EF1F5C025DC44BD8435" 446222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "E8D8375DADE00E0C0F5C196E04B8483CC98B1D5B03DCD7E0048B2AB343FFC11F" 456222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "0203" 466222defa52eb13c0d90673f642f2647f7753478bDarren Krahn "010001"; 476222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 486222defa52eb13c0d90673f642f2647f7753478bDarren Krahnstd::string HexDecode(const std::string hex) { 496222defa52eb13c0d90673f642f2647f7753478bDarren Krahn std::vector<uint8_t> output; 506222defa52eb13c0d90673f642f2647f7753478bDarren Krahn CHECK(base::HexStringToBytes(hex, &output)); 516222defa52eb13c0d90673f642f2647f7753478bDarren Krahn return std::string(reinterpret_cast<char*>(output.data()), output.size()); 526222defa52eb13c0d90673f642f2647f7753478bDarren Krahn} 536222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 546222defa52eb13c0d90673f642f2647f7753478bDarren Krahn} // namespace 556222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 56d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahnnamespace attestation { 57d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 58d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahnclass CryptoUtilityImplTest : public testing::Test { 59d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn public: 60d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn ~CryptoUtilityImplTest() override = default; 61d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn void SetUp() override { 62d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn crypto_utility_.reset(new CryptoUtilityImpl(&mock_tpm_utility_)); 63d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn } 64d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 65d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn protected: 66d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn NiceMock<MockTpmUtility> mock_tpm_utility_; 67d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::unique_ptr<CryptoUtilityImpl> crypto_utility_; 68d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn}; 69d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 70d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, GetRandomSuccess) { 71d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string random1; 72d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->GetRandom(20, &random1)); 73d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string random2; 74d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->GetRandom(20, &random2)); 75d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_NE(random1, random2); 76d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 77d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 78d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, GetRandomIntOverflow) { 79d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn size_t num_bytes = -1; 80d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string buffer; 81d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->GetRandom(num_bytes, &buffer)); 82d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 83d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 84d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, PairwiseSealedEncryption) { 85d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key; 86d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string sealed_key; 87d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->CreateSealedKey(&key, &sealed_key)); 88d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string data("test"); 89d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string encrypted_data; 904dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_TRUE( 914dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn crypto_utility_->EncryptData(data, key, sealed_key, &encrypted_data)); 92d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn key.clear(); 93d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn sealed_key.clear(); 94d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn data.clear(); 95d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->UnsealKey(encrypted_data, &key, &sealed_key)); 96d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->DecryptData(encrypted_data, key, &data)); 97d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_EQ("test", data); 98d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 99d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 100d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, SealFailure) { 101d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_CALL(mock_tpm_utility_, SealToPCR0(_, _)) 102d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn .WillRepeatedly(Return(false)); 103d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key; 104d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string sealed_key; 105d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->CreateSealedKey(&key, &sealed_key)); 106d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 107d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 108d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, EncryptNoData) { 109d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key(32, 0); 110d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 111d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->EncryptData(std::string(), key, key, &output)); 112d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 113d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 114d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, EncryptInvalidKey) { 115d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key(12, 0); 116d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 117d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->EncryptData(std::string(), key, key, &output)); 118d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 119d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 120d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, UnsealInvalidData) { 121d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 122d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->UnsealKey("invalid", &output, &output)); 123d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 124d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 125d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, UnsealError) { 1264dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_CALL(mock_tpm_utility_, Unseal(_, _)).WillRepeatedly(Return(false)); 127d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key(32, 0); 128d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string data; 129d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_TRUE(crypto_utility_->EncryptData("data", key, key, &data)); 130d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 131d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->UnsealKey(data, &output, &output)); 132d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 133d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 134d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, DecryptInvalidKey) { 135d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key(12, 0); 136d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 137d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->DecryptData(std::string(), key, &output)); 138d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 139d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 140d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, DecryptInvalidData) { 141d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key(32, 0); 142d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 143d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->DecryptData("invalid", key, &output)); 144d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 145d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 146d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren KrahnTEST_F(CryptoUtilityImplTest, DecryptInvalidData2) { 147d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string key(32, 0); 148d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string output; 149d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EncryptedData proto; 150d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn std::string input; 151d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn proto.SerializeToString(&input); 152d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn EXPECT_FALSE(crypto_utility_->DecryptData(input, key, &output)); 153d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} 154d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn 1556222defa52eb13c0d90673f642f2647f7753478bDarren KrahnTEST_F(CryptoUtilityImplTest, GetRSASubjectPublicKeyInfo) { 1566222defa52eb13c0d90673f642f2647f7753478bDarren Krahn std::string public_key = HexDecode(kValidPublicKeyHex); 1576222defa52eb13c0d90673f642f2647f7753478bDarren Krahn std::string output; 1586222defa52eb13c0d90673f642f2647f7753478bDarren Krahn EXPECT_TRUE(crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, &output)); 1596222defa52eb13c0d90673f642f2647f7753478bDarren Krahn} 1606222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 1616222defa52eb13c0d90673f642f2647f7753478bDarren KrahnTEST_F(CryptoUtilityImplTest, GetRSASubjectPublicKeyInfoBadInput) { 1626222defa52eb13c0d90673f642f2647f7753478bDarren Krahn std::string public_key = "bad_public_key"; 1636222defa52eb13c0d90673f642f2647f7753478bDarren Krahn std::string output; 1644dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_FALSE( 1654dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, &output)); 1666222defa52eb13c0d90673f642f2647f7753478bDarren Krahn} 1676222defa52eb13c0d90673f642f2647f7753478bDarren Krahn 1682e89ba764046e015ae90a1668f7cb3eb29cf509dDarren KrahnTEST_F(CryptoUtilityImplTest, GetRSASubjectPublicKeyInfoPairWise) { 1692e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn std::string public_key = HexDecode(kValidPublicKeyHex); 1702e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn std::string output; 1712e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, &output)); 1722e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn std::string public_key2; 1732e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(crypto_utility_->GetRSAPublicKey(output, &public_key2)); 1742e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_EQ(public_key, public_key2); 1752e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn} 1762e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn 1772e89ba764046e015ae90a1668f7cb3eb29cf509dDarren KrahnTEST_F(CryptoUtilityImplTest, EncryptIdentityCredential) { 1782e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn std::string public_key = HexDecode(kValidPublicKeyHex); 1792e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn std::string public_key_info; 1802e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, 1812e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn &public_key_info)); 1822e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EncryptedIdentityCredential output; 1834dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_TRUE(crypto_utility_->EncryptIdentityCredential( 1844dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn "credential", public_key_info, "aik", &output)); 1852e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(output.has_asym_ca_contents()); 1862e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EXPECT_TRUE(output.has_sym_ca_attestation()); 1872e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn} 1882e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn 1892e89ba764046e015ae90a1668f7cb3eb29cf509dDarren KrahnTEST_F(CryptoUtilityImplTest, EncryptIdentityCredentialBadEK) { 1902e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn EncryptedIdentityCredential output; 1914dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_FALSE(crypto_utility_->EncryptIdentityCredential( 1924dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn "credential", "bad_ek", "aik", &output)); 1932e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn} 1942e89ba764046e015ae90a1668f7cb3eb29cf509dDarren Krahn 195bc0c74963418442991072b2c87baec839eec9c20Darren KrahnTEST_F(CryptoUtilityImplTest, EncryptForUnbind) { 196bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string public_key = HexDecode(kValidPublicKeyHex); 197bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string public_key_info; 198bc0c74963418442991072b2c87baec839eec9c20Darren Krahn EXPECT_TRUE(crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, 199bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &public_key_info)); 200bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string output; 2014dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_TRUE( 2024dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn crypto_utility_->EncryptForUnbind(public_key_info, "input", &output)); 203bc0c74963418442991072b2c87baec839eec9c20Darren Krahn EXPECT_FALSE(output.empty()); 204bc0c74963418442991072b2c87baec839eec9c20Darren Krahn} 205bc0c74963418442991072b2c87baec839eec9c20Darren Krahn 206bc0c74963418442991072b2c87baec839eec9c20Darren KrahnTEST_F(CryptoUtilityImplTest, EncryptForUnbindBadKey) { 207bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string output; 208bc0c74963418442991072b2c87baec839eec9c20Darren Krahn EXPECT_FALSE(crypto_utility_->EncryptForUnbind("bad_key", "input", &output)); 209bc0c74963418442991072b2c87baec839eec9c20Darren Krahn} 210bc0c74963418442991072b2c87baec839eec9c20Darren Krahn 211bc0c74963418442991072b2c87baec839eec9c20Darren KrahnTEST_F(CryptoUtilityImplTest, EncryptForUnbindLargeInput) { 212bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string public_key = HexDecode(kValidPublicKeyHex); 213bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string public_key_info; 214bc0c74963418442991072b2c87baec839eec9c20Darren Krahn EXPECT_TRUE(crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, 215bc0c74963418442991072b2c87baec839eec9c20Darren Krahn &public_key_info)); 216bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string input(1000, 'A'); 217bc0c74963418442991072b2c87baec839eec9c20Darren Krahn std::string output; 2184dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_FALSE( 2194dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn crypto_utility_->EncryptForUnbind(public_key_info, input, &output)); 220bc0c74963418442991072b2c87baec839eec9c20Darren Krahn} 221bc0c74963418442991072b2c87baec839eec9c20Darren Krahn 222ccf90703bb6989e659b12a6494e84fdb921008edDarren KrahnTEST_F(CryptoUtilityImplTest, VerifySignatureBadSignature) { 223ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn std::string public_key = HexDecode(kValidPublicKeyHex); 224ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn std::string public_key_info; 225ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn EXPECT_TRUE(crypto_utility_->GetRSASubjectPublicKeyInfo(public_key, 226ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn &public_key_info)); 227ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn std::string output; 2284dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn EXPECT_FALSE( 2294dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn crypto_utility_->VerifySignature(public_key_info, "input", "signature")); 230ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn} 231ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn 232ccf90703bb6989e659b12a6494e84fdb921008edDarren KrahnTEST_F(CryptoUtilityImplTest, VerifySignatureBadKey) { 233ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn EXPECT_FALSE(crypto_utility_->VerifySignature("bad_key", "input", "")); 234ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn} 235ccf90703bb6989e659b12a6494e84fdb921008edDarren Krahn 236d569cf62b11f74b7ca2ff2db53414927f7e2d66aDarren Krahn} // namespace attestation 237