proxygen
fizz::testing Namespace Reference

Classes

class  ECDSA256Test
 
class  ECDSA384Test
 
class  ECDSA521Test
 
class  ECDSATest
 
struct  KdfParams
 
class  KeyDerivationTest
 
struct  Params
 

Functions

void setPoint (EcKeyUniquePtr &key, std::string x, std::string y)
 
EvpPkeyUniquePtr getKey (int nid, const Params &param)
 
void modifySig (folly::IOBuf *sig)
 
void modifyData (folly::IOBuf *sig, std::string &msg)
 
 TEST_P (ECDSA256Test, TestSignature)
 
 TEST_P (ECDSA384Test, TestSignature)
 
 TEST_P (ECDSA521Test, TestSignature)
 
 INSTANTIATE_TEST_CASE_P (TestVectors, ECDSA256Test,::testing::Values(Params{"sample","C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721","60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6","7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299"}))
 
 INSTANTIATE_TEST_CASE_P (TestVectors, ECDSA384Test,::testing::Values(Params{"sample","6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D8""96D5724E4C70A825F872C9EA60D2EDF5","EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64""DEF8F0EA9055866064A254515480BC13","8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1""288B231C3AE0D4FE7344FD2533264720"}))
 
 INSTANTIATE_TEST_CASE_P (TestVectors, ECDSA521Test,::testing::Values(Params{"sample","00FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75C""AA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83""538","01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD3""71123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F502""3A4","00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A2""8A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDF""CF5"}))
 
 TEST_P (KeyDerivationTest, ExpandLabel)
 
 TEST (KeyDerivation, DeriveSecret)
 
 TEST (KeyDerivation, Sha256BlankHash)
 
 INSTANTIATE_TEST_CASE_P (KeyDerivation, KeyDerivationTest,::testing::Values(KdfParams{"09cf566b0a8cb6910fd56947fd030027f8195fc6c5b18ded76d758b436f5db2b","handshake key expansion, client write iv","b89ff73312c94b89fadc3320689fd2316a9fd04116b6742e5920a35aaed072a5","0788c228aca5f4b6873b7b57"}, KdfParams{"6174b457f0282fcad096afd50eb92d172638b6fa9baaf8e23ef6b23fe551df73","server finished","","e1ad4d2331428327317047fbf73f3545a8c46fc17b1db445586e9e9b4249c00d"}, KdfParams{"09cf566b0a8cb6910fd56947fd030027f8195fc6c5b18ded76d758b436f5db2b","handshake key expansion, client write key","b89ff73312c94b89fadc3320689fd2316a9fd04116b6742e5920a35aaed072a5","93f640530d77b1d386e1d1089ec86382"}))
 

Function Documentation

EvpPkeyUniquePtr fizz::testing::getKey ( int  nid,
const Params param 
)

Definition at line 46 of file ECSignatureTest.cpp.

References fizz::testing::Params::priv, fizz::testing::Params::pubX, fizz::testing::Params::pubY, setPoint(), uint8_t, and folly::unhexlify().

46  {
47  auto privKeyBin = unhexlify(param.priv);
48  BIGNUMUniquePtr privateBn(
49  BN_bin2bn((uint8_t*)privKeyBin.c_str(), privKeyBin.size(), nullptr));
50  EcKeyUniquePtr privateKey(EC_KEY_new_by_curve_name(nid));
51  EC_KEY_set_private_key(privateKey.get(), privateBn.get());
52  setPoint(privateKey, param.pubX, param.pubY);
53  EvpPkeyUniquePtr pkeyPrivateKey(EVP_PKEY_new());
54  EVP_PKEY_set1_EC_KEY(pkeyPrivateKey.get(), privateKey.get());
55  return pkeyPrivateKey;
56 }
bool unhexlify(const InputString &input, OutputString &output)
Definition: String-inl.h:616
void setPoint(EcKeyUniquePtr &key, std::string x, std::string y)
std::unique_ptr< EVP_PKEY, EvpPkeyDeleter > EvpPkeyUniquePtr
std::unique_ptr< BIGNUM, BIGNUMDeleter > BIGNUMUniquePtr
std::unique_ptr< EC_KEY, EcKeyDeleter > EcKeyUniquePtr
fizz::testing::INSTANTIATE_TEST_CASE_P ( KeyDerivation  ,
KeyDerivationTest  ,
::testing::Values(KdfParams{"09cf566b0a8cb6910fd56947fd030027f8195fc6c5b18ded76d758b436f5db2b","handshake key expansion, client write iv","b89ff73312c94b89fadc3320689fd2316a9fd04116b6742e5920a35aaed072a5","0788c228aca5f4b6873b7b57"}, KdfParams{"6174b457f0282fcad096afd50eb92d172638b6fa9baaf8e23ef6b23fe551df73","server finished","","e1ad4d2331428327317047fbf73f3545a8c46fc17b1db445586e9e9b4249c00d"}, KdfParams{"09cf566b0a8cb6910fd56947fd030027f8195fc6c5b18ded76d758b436f5db2b","handshake key expansion, client write key","b89ff73312c94b89fadc3320689fd2316a9fd04116b6742e5920a35aaed072a5","93f640530d77b1d386e1d1089ec86382"})   
)

Referenced by TEST().

fizz::testing::INSTANTIATE_TEST_CASE_P ( TestVectors  ,
ECDSA256Test  ,
::testing::Values(Params{"sample","C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721","60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6","7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299"})   
)
fizz::testing::INSTANTIATE_TEST_CASE_P ( TestVectors  ,
ECDSA384Test  ,
::testing::Values(Params{"sample","6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D8""96D5724E4C70A825F872C9EA60D2EDF5","EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64""DEF8F0EA9055866064A254515480BC13","8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1""288B231C3AE0D4FE7344FD2533264720"})   
)
fizz::testing::INSTANTIATE_TEST_CASE_P ( TestVectors  ,
ECDSA521Test  ,
::testing::Values(Params{"sample","00FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75C""AA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83""538","01894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD3""71123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F502""3A4","00493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A2""8A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDF""CF5"})   
)

Referenced by TEST_P().

void fizz::testing::modifyData ( folly::IOBuf sig,
std::string msg 
)

Definition at line 67 of file ECSignatureTest.cpp.

References folly::IOBuf::writableData().

Referenced by TEST_P().

67  {
68  auto& sigPtr = sig->writableData()[10];
69  if (sigPtr == 1) {
70  sigPtr = 2;
71  } else {
72  sigPtr = 1;
73  }
74  auto& msgPtr = msg[2];
75  if (msgPtr == 1) {
76  msgPtr = 2;
77  } else {
78  msgPtr = 1;
79  }
80 }
uint8_t * writableData()
Definition: IOBuf.h:509
void fizz::testing::modifySig ( folly::IOBuf sig)

Definition at line 58 of file ECSignatureTest.cpp.

References folly::IOBuf::writableData().

Referenced by TEST_P().

58  {
59  auto& sigPtr = sig->writableData()[10];
60  if (sigPtr == 1) {
61  sigPtr = 2;
62  } else {
63  sigPtr = 1;
64  }
65 }
uint8_t * writableData()
Definition: IOBuf.h:509
void fizz::testing::setPoint ( EcKeyUniquePtr key,
std::string  x,
std::string  y 
)

Definition at line 38 of file ECSignatureTest.cpp.

References uint8_t, and folly::unhexlify().

Referenced by getKey().

38  {
39  auto binX = unhexlify(x);
40  auto binY = unhexlify(y);
41  BIGNUMUniquePtr numX(BN_bin2bn((uint8_t*)binX.data(), binX.size(), nullptr));
42  BIGNUMUniquePtr numY(BN_bin2bn((uint8_t*)binY.data(), binY.size(), nullptr));
43  EC_KEY_set_public_key_affine_coordinates(key.get(), numX.get(), numY.get());
44 }
Definition: InvokeTest.cpp:58
bool unhexlify(const InputString &input, OutputString &output)
Definition: String-inl.h:616
std::unique_ptr< BIGNUM, BIGNUMDeleter > BIGNUMUniquePtr
Definition: InvokeTest.cpp:65
fizz::testing::TEST ( KeyDerivation  ,
DeriveSecret   
)

Definition at line 47 of file KeyDerivationTest.cpp.

References fizz::kHkdfLabelPrefix, folly::range(), secret, and folly::Range< Iter >::str().

47  {
48  // dummy prk
49  std::vector<uint8_t> secret(
50  KeyDerivationImpl<Sha256>(kHkdfLabelPrefix.str()).hashLength());
51  std::vector<uint8_t> messageHash(
52  KeyDerivationImpl<Sha256>(kHkdfLabelPrefix.str()).hashLength());
53  auto deriver = KeyDerivationImpl<Sha256>(kHkdfLabelPrefix.str());
54  deriver.deriveSecret(range(secret), "hey", range(messageHash));
55 }
std::string str() const
Definition: Range.h:591
Gen range(Value begin, Value end)
Definition: Base.h:467
static constexpr StringPiece secret
constexpr folly::StringPiece kHkdfLabelPrefix
Definition: Types.h:20
fizz::testing::TEST ( KeyDerivation  ,
Sha256BlankHash   
)

Definition at line 57 of file KeyDerivationTest.cpp.

References EXPECT_EQ, INSTANTIATE_TEST_CASE_P(), fizz::kHkdfLabelPrefix, folly::range(), and folly::Range< Iter >::str().

57  {
58  std::vector<uint8_t> computed(
59  KeyDerivationImpl<Sha256>(kHkdfLabelPrefix.str()).hashLength());
60  folly::IOBuf blankBuf;
61  Sha256::hash(blankBuf, MutableByteRange(computed.data(), computed.size()));
62  EXPECT_EQ(
64  KeyDerivationImpl<Sha256>(kHkdfLabelPrefix.str()).blankHash()),
65  StringPiece(folly::range(computed)));
66 }
std::string str() const
Definition: Range.h:591
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
Range< unsigned char * > MutableByteRange
Definition: Range.h:1164
constexpr Range< Iter > range(Iter first, Iter last)
Definition: Range.h:1114
Range< const char * > StringPiece
constexpr folly::StringPiece kHkdfLabelPrefix
Definition: Types.h:20
fizz::testing::TEST_P ( KeyDerivationTest  ,
ExpandLabel   
)

Definition at line 29 of file KeyDerivationTest.cpp.

References EXPECT_EQ, folly::hexlify(), fizz::kHkdfLabelPrefix, fizz::test::label, folly::range(), secret, folly::Range< Iter >::size(), folly::Range< Iter >::str(), string, folly::unhexlify(), and folly::IOBuf::wrapBuffer().

29  {
30  auto prk = unhexlify(GetParam().secret);
31  auto hashValue = unhexlify(GetParam().hashValue);
32 
33  auto hash = IOBuf::wrapBuffer(range(hashValue));
34 
35  auto secret = std::vector<uint8_t>(prk.begin(), prk.end());
36 
37  auto deriver = KeyDerivationImpl<Sha256>(kHkdfLabelPrefix.str());
38  auto out = deriver.expandLabel(
39  range(secret),
40  GetParam().label,
41  hash->clone(),
42  GetParam().result.size() / 2);
43  std::string hexOut = hexlify(out->coalesce());
44  EXPECT_EQ(GetParam().result, hexOut);
45 }
bool unhexlify(const InputString &input, OutputString &output)
Definition: String-inl.h:616
std::string str() const
Definition: Range.h:591
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
constexpr size_type size() const
Definition: Range.h:431
Gen range(Value begin, Value end)
Definition: Base.h:467
const char * string
Definition: Conv.cpp:212
static constexpr StringPiece secret
bool hexlify(const InputString &input, OutputString &output, bool append_output)
Definition: String-inl.h:596
constexpr folly::StringPiece kHkdfLabelPrefix
Definition: Types.h:20
StringPiece label
fizz::testing::TEST_P ( ECDSA256Test  ,
TestSignature   
)

Definition at line 82 of file ECSignatureTest.cpp.

References folly::IOBuf::copyBuffer(), EXPECT_THROW, getKey(), modifyData(), modifySig(), folly::gen::move, fizz::OpenSSLSignature< T >::setKey(), folly::sig, fizz::OpenSSLSignature< T >::sign(), string, and fizz::OpenSSLSignature< T >::verify().

82  {
83  auto key = getKey(P256::curveNid, GetParam());
84  OpenSSLSignature<KeyType::P256> ecdsa;
85  ecdsa.setKey(std::move(key));
86  {
87  std::string msg = GetParam().msg;
88  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp256r1_sha256>(
89  IOBuf::copyBuffer(msg)->coalesce());
90  ecdsa.verify<SignatureScheme::ecdsa_secp256r1_sha256>(
91  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce());
92  }
93  {
94  std::string msg = GetParam().msg;
95  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp256r1_sha256>(
96  IOBuf::copyBuffer(msg)->coalesce());
97  modifySig(sig.get());
99  ecdsa.verify<SignatureScheme::ecdsa_secp256r1_sha256>(
100  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce()),
101  std::runtime_error);
102  }
103  {
104  std::string msg = GetParam().msg;
105  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp256r1_sha256>(
106  IOBuf::copyBuffer(msg)->coalesce());
107  modifyData(sig.get(), msg);
108  EXPECT_THROW(
109  ecdsa.verify<SignatureScheme::ecdsa_secp256r1_sha256>(
110  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce()),
111  std::runtime_error);
112  }
113 }
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
constexpr detail::Sig< Sig > const sig
Definition: Poly.h:1165
std::unique_ptr< IOBuf > copyBuffer(const folly::IOBuf &buf)
TrafficKey getKey()
const char * string
Definition: Conv.cpp:212
void modifySig(folly::IOBuf *sig)
void modifyData(folly::IOBuf *sig, std::string &msg)
fizz::testing::TEST_P ( ECDSA384Test  ,
TestSignature   
)

Definition at line 115 of file ECSignatureTest.cpp.

References folly::IOBuf::copyBuffer(), EXPECT_THROW, getKey(), modifyData(), modifySig(), folly::gen::move, fizz::OpenSSLSignature< T >::setKey(), folly::sig, fizz::OpenSSLSignature< T >::sign(), string, and fizz::OpenSSLSignature< T >::verify().

115  {
116  auto key = getKey(P384::curveNid, GetParam());
117  OpenSSLSignature<KeyType::P384> ecdsa;
118  ecdsa.setKey(std::move(key));
119  {
120  std::string msg = GetParam().msg;
121  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp384r1_sha384>(
122  IOBuf::copyBuffer(msg)->coalesce());
123  ecdsa.verify<SignatureScheme::ecdsa_secp384r1_sha384>(
124  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce());
125  }
126  {
127  std::string msg = GetParam().msg;
128  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp384r1_sha384>(
129  IOBuf::copyBuffer(msg)->coalesce());
130  modifySig(sig.get());
131  EXPECT_THROW(
132  ecdsa.verify<SignatureScheme::ecdsa_secp384r1_sha384>(
133  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce()),
134  std::runtime_error);
135  }
136  {
137  std::string msg = GetParam().msg;
138  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp384r1_sha384>(
139  IOBuf::copyBuffer(msg)->coalesce());
140  modifyData(sig.get(), msg);
141  EXPECT_THROW(
142  ecdsa.verify<SignatureScheme::ecdsa_secp384r1_sha384>(
143  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce()),
144  std::runtime_error);
145  }
146 }
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
constexpr detail::Sig< Sig > const sig
Definition: Poly.h:1165
std::unique_ptr< IOBuf > copyBuffer(const folly::IOBuf &buf)
TrafficKey getKey()
const char * string
Definition: Conv.cpp:212
void modifySig(folly::IOBuf *sig)
void modifyData(folly::IOBuf *sig, std::string &msg)
fizz::testing::TEST_P ( ECDSA521Test  ,
TestSignature   
)

Definition at line 148 of file ECSignatureTest.cpp.

References folly::IOBuf::copyBuffer(), EXPECT_THROW, getKey(), INSTANTIATE_TEST_CASE_P(), modifyData(), modifySig(), folly::gen::move, fizz::OpenSSLSignature< T >::setKey(), folly::sig, fizz::OpenSSLSignature< T >::sign(), string, and fizz::OpenSSLSignature< T >::verify().

148  {
149  auto key = getKey(P521::curveNid, GetParam());
150  OpenSSLSignature<KeyType::P521> ecdsa;
151  ecdsa.setKey(std::move(key));
152  {
153  std::string msg = GetParam().msg;
154  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp521r1_sha512>(
155  IOBuf::copyBuffer(msg)->coalesce());
156  ecdsa.verify<SignatureScheme::ecdsa_secp521r1_sha512>(
157  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce());
158  }
159  {
160  std::string msg = GetParam().msg;
161  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp521r1_sha512>(
162  IOBuf::copyBuffer(msg)->coalesce());
163  modifySig(sig.get());
164  EXPECT_THROW(
165  ecdsa.verify<SignatureScheme::ecdsa_secp521r1_sha512>(
166  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce()),
167  std::runtime_error);
168  }
169  {
170  std::string msg = GetParam().msg;
171  auto sig = ecdsa.sign<SignatureScheme::ecdsa_secp521r1_sha512>(
172  IOBuf::copyBuffer(msg)->coalesce());
173  modifyData(sig.get(), msg);
174  EXPECT_THROW(
175  ecdsa.verify<SignatureScheme::ecdsa_secp521r1_sha512>(
176  IOBuf::copyBuffer(msg)->coalesce(), sig->coalesce()),
177  std::runtime_error);
178  }
179 }
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
constexpr detail::Sig< Sig > const sig
Definition: Poly.h:1165
std::unique_ptr< IOBuf > copyBuffer(const folly::IOBuf &buf)
TrafficKey getKey()
const char * string
Definition: Conv.cpp:212
void modifySig(folly::IOBuf *sig)
void modifyData(folly::IOBuf *sig, std::string &msg)