26 #include "../crypto/fipsmodule/tls/internal.h"
27 #include "../crypto/test/file_test.h"
28 #include "../crypto/test/test_util.h"
34 if (t->HasInstruction(
"TLS 1.0/1.1")) {
36 }
else if (t->HasInstruction(
"TLS 1.2")) {
37 if (t->HasInstruction(
"SHA-256")) {
39 }
else if (t->HasInstruction(
"SHA-384")) {
41 }
else if (t->HasInstruction(
"SHA-512")) {
51 std::vector<uint8_t> premaster, server_random, client_random,
52 key_block_server_random, key_block_client_random;
53 if (!t->GetBytes(&premaster,
"pre_master_secret") ||
54 !t->GetBytes(&server_random,
"serverHello_random") ||
55 !t->GetBytes(&client_random,
"clientHello_random") ||
58 !t->GetBytes(&key_block_server_random,
"server_random") ||
59 !t->GetBytes(&key_block_client_random,
"client_random") ||
60 !t->GetInstruction(&key_block_len_str,
"key block length") ||
62 !t->HasAttribute(
"COUNT") ||
63 !t->HasInstruction(
"pre-master secret length")) {
68 static const char kMasterSecretLabel[] =
"master secret";
70 premaster.data(), premaster.size(), kMasterSecretLabel,
71 sizeof(kMasterSecretLabel) - 1, client_random.data(),
72 client_random.size(), server_random.data(),
73 server_random.size())) {
78 const long int key_block_bits =
79 strtol(key_block_len_str.c_str(),
nullptr, 10);
80 if (errno != 0 || key_block_bits <= 0 || (key_block_bits & 7) != 0) {
83 const size_t key_block_len = key_block_bits / 8;
84 std::vector<uint8_t> key_block(key_block_len);
85 static const char kLabel[] =
"key expansion";
87 md, key_block.data(), key_block.size(), master_secret,
88 sizeof(master_secret), kLabel,
sizeof(kLabel) - 1,
89 key_block_server_random.data(), key_block_server_random.size(),
90 key_block_client_random.data(), key_block_client_random.size())) {
94 printf(
"%smaster_secret = %s\r\nkey_block = %s\r\n\r\n",
95 t->CurrentTestToString().c_str(),
EncodeHex(master_secret).
c_str(),
103 fprintf(
stderr,
"usage: %s <test file>\n", argv[0]);