Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "components/gcm_driver/crypto/message_payload_parser.h" | |
| 6 | |
| 7 #include "base/big_endian.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 | |
| 10 namespace gcm { | |
| 11 | |
| 12 namespace { | |
| 13 | |
| 14 const uint8_t kValidMessage[] = { | |
| 15 // salt (16 bytes) | |
| 16 0x59, 0xFD, 0x35, 0x97, 0x3B, 0xF3, 0x66, 0xA7, 0xEB, 0x8D, 0x44, 0x1E, | |
| 17 0xCB, 0x4D, 0xFC, 0xD8, | |
| 18 // rs (4 bytes) | |
|
johnme
2017/05/22 16:18:39
Nit: add "in network byte order"
Peter Beverloo
2017/05/22 17:25:13
Done.
| |
| 19 0x00, 0x00, 0x00, 0x12, | |
| 20 // idlen (1 byte) | |
| 21 0x41, | |
| 22 // public key (65 bytes) | |
| 23 0x04, 0x35, 0x02, 0x67, 0xB9, 0x10, 0x8F, 0x9B, 0xF1, 0x85, 0xF5, 0x1B, | |
| 24 0xD7, 0xA4, 0xEF, 0xBD, 0x28, 0xB3, 0x11, 0x40, 0xBA, 0xD0, 0xEE, 0xB2, | |
| 25 0x97, 0xDA, 0x6A, 0x93, 0x2D, 0x26, 0x45, 0xBD, 0xB2, 0x9A, 0x9F, 0xB8, | |
| 26 0x19, 0xD8, 0x21, 0x6F, 0x66, 0xE3, 0xF6, 0x0B, 0x74, 0xB2, 0x28, 0x38, | |
| 27 0xDC, 0xA7, 0x8A, 0x58, 0x0D, 0x56, 0x47, 0x3E, 0xD0, 0x5B, 0x5C, 0x93, | |
| 28 0x4E, 0xB3, 0x89, 0x87, 0x64, | |
| 29 // payload (18 bytes) | |
| 30 0x3F, 0xD8, 0x95, 0x2C, 0xA2, 0x11, 0xBD, 0x7B, 0x57, 0xB2, 0x00, 0xBD, | |
| 31 0x57, 0x68, 0x3F, 0xF0, 0x14, 0x57}; | |
| 32 | |
| 33 static_assert(arraysize(kValidMessage) == 104, | |
| 34 "The smallest valid message is 104 bytes in size."); | |
| 35 | |
| 36 // Creates an std::string for the |kValidMessage| constant. | |
|
johnme
2017/05/22 16:18:39
Nit: s/an/a/
Peter Beverloo
2017/05/22 17:25:13
No, "an" is correct :). Esteedee.
| |
| 37 std::string CreateMessageString() { | |
| 38 return std::string(reinterpret_cast<const char*>(kValidMessage), | |
| 39 arraysize(kValidMessage)); | |
| 40 } | |
| 41 | |
| 42 TEST(MessagePayloadParserTest, ValidMessage) { | |
| 43 MessagePayloadParser parser(CreateMessageString()); | |
| 44 EXPECT_TRUE(parser.IsValid()); | |
|
johnme
2017/05/22 16:18:39
Consider exercising the getters here?
Peter Beverloo
2017/05/22 17:25:13
Done.
| |
| 45 } | |
| 46 | |
| 47 TEST(MessagePayloadParserTest, MinimumMessageSize) { | |
| 48 std::string message = CreateMessageString(); | |
| 49 message.resize(arraysize(kValidMessage) / 2); | |
| 50 | |
| 51 MessagePayloadParser parser(message); | |
| 52 EXPECT_FALSE(parser.IsValid()); | |
| 53 } | |
| 54 | |
| 55 TEST(MessagePayloadParserTest, MinimumRecordSize) { | |
| 56 std::string message = CreateMessageString(); | |
| 57 | |
| 58 uint32_t invalid_record_size = 11; | |
| 59 base::WriteBigEndian(&message[0] + 16 /* salt */, invalid_record_size); | |
| 60 | |
| 61 MessagePayloadParser parser(message); | |
| 62 EXPECT_FALSE(parser.IsValid()); | |
| 63 } | |
| 64 | |
| 65 TEST(MessagePayloadParserTest, InvalidPublicKey) { | |
| 66 std::string message = CreateMessageString(); | |
| 67 | |
| 68 uint8_t invalid_public_key_size = 42; | |
| 69 base::WriteBigEndian(&message[0] + 16 /* salt */ + 4 /* rs */, | |
| 70 invalid_public_key_size); | |
| 71 | |
| 72 MessagePayloadParser parser(message); | |
| 73 EXPECT_FALSE(parser.IsValid()); | |
| 74 } | |
| 75 | |
| 76 } // namespace | |
| 77 | |
| 78 } // namespace gcm | |
| OLD | NEW |