blob: 8f2d6f6f43fad3817cfa4a29a2a14e988d82517a [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "hwsec-test-utils/fake_pca_agent/pca_enroll_v2.h"
#include <memory>
#include <string>
#include <vector>
#include <base/optional.h>
#include <base/strings/string_number_conversions.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace hwsec_test_utils {
namespace {
// A real challenge response from a developer-mode device.
constexpr char kEnrollRequestInHex[] =
"0A91091280022F683B1488572D3DD5D8452D0B2E85EAED13D3D6704F9C689810E1E4966A3A"
"C455424BCC2B96D4BF4BD8FBF363432899B8663B34B1B075867FBEB347BFB2835A569CFB8E"
"7856EB4420EB1B5D5CF9A50005C68339BD366E6E2CF7069140CC37B828A77EAA1C955008D2"
"9AA0072D91161AD6AAA9C36CF08A84CDA988C89E011315855AA3D45B2919CAA42489F67538"
"5206CC38349B4ACC28447278176B4EC0BCB581A40B3A7F7880F317DFB4F199C9C62B9B3AE3"
"7E530BDA52E9118CF634B59FC74A82B16D66B4189CD89108A5CC3C5591BD55AF7B77BD8DAE"
"BAD49EE860FD11A11ACA69A5AA67EB58D8AADD9D304BB37E16E7710436E9AFFA50C4098497"
"9456D31A10C5311C4A4CBCBCCC3FA6E3E655712CBC2240ACA34C0115ABE55DEEA3F0F2CFC6"
"CD9B5B341E4CE2D452E186A6ED9DB2CF3A9830E9C82820CFC27F1314CBC36472E209852C48"
"7D3361B9417F27825ECAF185392AB0064D98B35A7382B2372AC70B329C99DDCE854886AFDA"
"A0BBBF4F846A9559DC3933B1409C3028376E8604E9D0C35274DC5483F0AEA0EFC1A171559F"
"FF9B8FABF98C651629BAC24C157D9073647269B5A9737F8F40E59C326F89E1E2CBBA7BC07B"
"59003BFD90D6808E017447A67423E3CB15CF7C0F3D6849FF9422B8244072D7493B506909DB"
"573EAFA46EAD5DA0630242814DCA7032FBA08C8B8D879718B0586E467FCD2E157FEBB8DC24"
"A313B19320E1CEF1BAFF8B28A07F14DC04B3091832BF057628CE09478B4EC19A51AD825F70"
"F4659DBB4BF6B73E1710E5D203C94D3192B6CB0D5707C1CE275333057A0EB0DC3FBA4612A4"
"0346D7961A30BCEAA80E9A04E30F130728021E5E45BC5BA453C9EC3423CDE1634E4774FF8C"
"B410F9F71D06A98A3263D7DEA815E008BE417AC874FC1B30F0EE5A1B1A6457070331E0E007"
"AD472F621AC7317B59CD73B1677C35E70A2FB11EB9E246EB99C8B20C4F570078A6F8A68F48"
"15A4DDF3DD398EB705DAB069FA1586FBB4F8D4D9C1AEF4CF511C7288061804EE83556D6E75"
"BEFCED9498657080336B4BDF3F82A138515465343347754DA31975938A32E75B02973EA51B"
"ED4BA56BFB2950CF8A812BB48D6D661B1947550FE56838B7A35E2AB7E84A3A97A87C8CF09D"
"5A84E70AB1A7934A8154060A3CB34FEDACA5B8A6E46F584BF67C39E42331BB919E5653F51D"
"52C6EC57388D829A616796705417E489B2EB037D78F30EC5D379FF85F6A1AD87771127B7C2"
"449826BCB23F82B74438A75AFA7923052F50C3857F7054E843143916A3E7825FD3D56F4E01"
"B524723617FE0FBDB165C6E54927D814E3989CBAC1C9433580193E6A93D99ABB16EBC6BC78"
"093C10DE080140647F182FE2DD9A2E16E556631F75ACE1E0EC9844ABCDF663A9F2CFB3279A"
"58AC2501B7FBF6BE906408016D3D2021FFD47020FB1C5CB50D91C88B1C2CCB874D0557CD80"
"E31C74AF54C2F0032CF6C29D1E20D6643BE280C045E4D9F8DEF8DED56790C0411C8BED92DB"
"184EF09AAB9E2DB7F901C9BA103108DB2E92549CA87EFEC922DDE74C5FA5DBC59A8E2E8087"
"B69088373412AA1BE61897D9A757EAA35D895B281628DFAF285534F08B4273DA1C5A831957"
"07E6F9BDCF296A78BAB0206D19BF178CAC1732054361456E6312580023000B000504720000"
"00100018000B000300100020A93378E6A089B7211C8FBC62E33B3A566D0BDAB6544174FAB6"
"E389E582FE791300205CD6CD8DE23829D1F381A5B911F37F7DEA42026AA530185F8AA342B9"
"9A23FAD01ADE010A47304502210098F97D25A48732A8840D5F8C03BB81D8C322330E65B98E"
"C10C6FECA1AA195553022062967D53F1EB7192406A42B32820ADB1E8CE3C4D25DC967CFB68"
"DF377B0563441271FF54434780180022000B1EAEE68EAF1FF2E8A225B90D5505C1FFB8D550"
"55C72FFC3310A147EC101B9E200000026C684FBC42F45A80805DCEBFF9EAC7010FFB0F289B"
"1D64EA00000001000B0301000000203E48626DA845338A6560801F8EF5E2338BF8DFCF8596"
"AD107E228ADD67FC142A1A2023E14DD9BB51A50E16911F7E11DF1E1AAF0B17134DC739C565"
"3607A1EC8DD37A22F1010A483046022100D48A0C61983BA688E759A71BD1EDA90F6C3D9C94"
"6084C43AB9F2D2F36F4E5B7902210084258D17E6AE5515D83D0DC81BCD2D3E331CA8D23BFF"
"7B5FF83E58F69EF8F4DC1271FF54434780180022000B1EAEE68EAF1FF2E8A225B90D5505C1"
"FFB8D55055C72FFC3310A147EC101B9E200000026C684FBC42F51680805DCEBFF9EAC7010F"
"FB0F289B1D64EA00000001000B030200000020D73110549FD101849611D96BE29B2C3A3CB7"
"D511255E02547FE34989F5BCE8A91A20239E7396CAF5F0A15F73B05DA4E563FB00994A2362"
"0BD36E3E09C3DC15A41A612210534F52414B41205445535420313836392A20F2526B31A6C6"
"12D67D0BD0A950E5E2AA7AD0C88453E2CA5CCA68171E8A09DF5730023A910C128002147D15"
"D584C7B0E13DCC37B22ECA178AF874394218047ABC7560971F2A383C6A8B9A40EA3E50DC30"
"5AEA1152479F10B08A6E15A27D4E40B42EF67576C7D57CFE9A989C6F3F951FFEF53EA288AF"
"6F00ECA3E73E7F23E62DE8731D8E8142FF722F36C62D775E16C495169101866E2931CC047F"
"695B62F45B65D39406CC066794D9257843D30193C60240DB47B6E62FC5E8FCB9CAEAB3C771"
"8781DC7A6E67C95F3236C59C9D056D6E5C08F911A77B490D7B1685D6913FA274B0DA817192"
"DB8493E1B5C1CF11DA2FEDE897A18F1D827477A08A6FAF9AED6982C3B0F8F76404F2A7F380"
"F96FFED48607F6D1CE05569F0D7A7B82E53BF5A220DE42013289C12B38C97E1A10C17DA2A2"
"BEC08BF0CBE2231C4B32C1A0224051A8E8FBA907D354C01FF41CF02A76F24156E070C0DC27"
"F3BDAD3A4727A1AD360E0C4E7F1E7CBBE2F1782966AA3D09F40586E16469E62ACDB98D8D87"
"EFD054E02AB009B2871B7EC53100C0963200C1970976BB98E00B2B1DD34BCFA93D4E296292"
"13A2E5B267566168FD3B294C489192319DE80FA7096B7C5F4CE846F7573E6452EC2D2E7DC2"
"F7E92393B951644AC21D12B683A5A37F2DD5BCDA92B07EC40A000AAEDF4BC1E2A6EFF67A06"
"DACE9CD5886EAAAA1DED1EC841A9898450EE7381A373DDDCAD3D0A3CC708E94B363CE8E1A0"
"668B4376BF20DD08956E0EA0E650A9C3DAE60A308B251E075FB21E4DE4BA1FA5DFB5A431CF"
"87F18A531A349DECAB58A84A9F9FC2F39FB034ED29111E6A4AC9E27120CD8CA792281D564C"
"926D11B0596E9A7B2D030E14E65742096857C94699298D44A7F23C94DF1E145758E963D02E"
"B3ADC32217A6C5FBED82449ACD3391097D097353E4C837A766C8A3CFBDCD1E155983936DEC"
"FCF6CA4D86D4C2FE8ABE2C5908D8F5D34353348173AEB6EDB7524F1A3BE35718E3D3EE07FB"
"3777BF4A45086C935F87AB8F479D6BA51365E9D76319C68C6F5602BA4F9D95F22A0706C305"
"8A13C558D7603FAAF5089830E72893FCFB2CD35D680EF9742F6F023CFF5B9F68738FD583CC"
"67E055D5F30213119FBAAEEB45278DD0AB1776BA2113448FEB8E797314B5BFA0EBD7959A05"
"015DD18CBD2A3559E7312764A0E22A82E9F5EFACED52EE61024AB5EC3AC708E493885022EA"
"D0191B8DFEAB5633AA7620B1194EC970CD4A13F81A1A1BEC26ED46887D020BFDC6A95E0A50"
"37027EE096170927A262985A68F46E2F9A337AD7A828CF9FD3B054B42D76B885F0E8D31280"
"698B263E9ECB1103A2569D8F45E7CC0BE6A26AB0747B08C64033E501D812296314E3A5B118"
"9BBB5B442B260990D46C808C70FCDCF9D9DA4517741B88346FB79554378BE5556F9C6BBB24"
"19F638AD2CEE51B944ACF40B59618DAD3624DF82EA45FCDAC51B722BC1B490A490C503583A"
"EFB28435FD80944EB1B6592ABB452FD55B04C4DD89FDBBF92BC509337B50F18E406C4F1E54"
"1E77DAD0389982E9916DFE0AD4FBE0BD3D2E0A774B99BC003E0DBFF8454AB565E3D54A62FC"
"921FF9324BE4829B362BE5BA3231DF0482112BE4EDA8B2953A81425A78E142C08EAF7978DF"
"C595B696AFEDDB4EC85A1607952258E5255F79FE173898FF5658562634C1E75317DB91D055"
"784134018FE69DF9A7A6CC84EDCA6B485990415A8E48CD04ACA0C20E9993A5B7E2472AA9C1"
"AF94325B5999D9F267F9EA1FC18B003D97F56C1AB9DF3684C72AAA619A641BF72E0C2117E3"
"407CD1930E3E707CB93FDFA10E34A68282224B868157BE0C7560A381BEC6BB09ED38ADC924"
"009B6B7FF3A90F637D5E58EEDC4941B9D4F393490A2B4ABB7E95FA380734581BB546C9E442"
"B837975B687C1C01F15FFD4530DA36CFFDCE85BD76C486B9B909E212428452311BB91675FA"
"54FD5EAE933F6CFE21F0B1C82B0318A7457F6D04B317874464C3422BE7B5874BCF1DDB1818"
"1B173FC4BCC2503E0DF0703CB9D233240D31EEFAB06DC7C6A271E30DA90833A841AD1C979C"
"C624437F1FEE83CD4F88811B3C2E8318652FEB5E6D00E2D482563D4C082BC02B3A3823DD8E"
"FD4F0337165B51FE03CF3D98DB7D77D895A2A55A154D0D5658D363B90806C0622757B4B1AB"
"B3535718216D4B56068A52E160C5F4A79ECD2A9E6466A209CC21D4A2AC7B80BA606A2ABE41"
"486256E0211C0926E63167B011C904EE48BEAD3CDD4ACD32054361456E63";
} // namespace
class PcaEnrollV2Test : public testing::Test {
public:
PcaEnrollV2Test() {
SetupEnrollRequestToVerify();
pca_enroll_ = std::make_unique<fake_pca_agent::PcaEnrollV2>(request_);
}
~PcaEnrollV2Test() override = default;
protected:
attestation::AttestationEnrollmentRequest request_;
std::unique_ptr<fake_pca_agent::PcaEnrollV2> pca_enroll_;
void SetupEnrollRequestToVerify() {
std::vector<uint8_t> output;
ASSERT_TRUE(base::HexStringToBytes(kEnrollRequestInHex, &output));
ASSERT_TRUE(
request_.ParseFromString(std::string(output.begin(), output.end())));
}
};
TEST_F(PcaEnrollV2Test, Enroll) {
EXPECT_TRUE(pca_enroll_->Preprocess());
EXPECT_TRUE(pca_enroll_->Verify());
EXPECT_TRUE(pca_enroll_->Generate());
}
} // namespace hwsec_test_utils