Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Side by Side Diff: device/u2f/u2f_message_unittest.cc

Issue 2502103002: Add FIDO U2F message and packet classes (Closed)
Patch Set: Add FIDO U2F message and packet classes Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 "device/u2f/u2f_message.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 class U2fMessageTest : public testing::Test {};
9
10 // Packets should be 64 bytes + 1 report ID byte
11 TEST_F(U2fMessageTest, TestPacketSize) {
12 char channel_id[4] = {5, 6, 7, 8};
13 std::vector<uint8_t> data;
14
15 scoped_refptr<device::U2fPacket> init_packet(
16 new device::U2fInitPacket(channel_id, 0, data, data.size()));
17 ASSERT_EQ(init_packet->GetBuffer()->size(), 65);
18
19 scoped_refptr<device::U2fPacket> cont_packet(
20 new device::U2fContPacket(channel_id, 0, data));
21 ASSERT_EQ(init_packet->GetBuffer()->size(), 65);
22 }
23
24 /*
25 * U2f Init Packets are of the format:
26 * Byte 0: 0
27 * Byte 1-4: Channel ID
28 * Byte 5: Command byte
29 * Byte 6-7: Big Endian size of data
30 * Byte 8-n: Data block
31 *
32 * Remaining buffer is padded with 0
33 */
34 TEST_F(U2fMessageTest, TestPacketData) {
35 char channel_id[4] = {5, 6, 7, 8};
36 std::vector<uint8_t> data{10, 11};
37 char cmd = 0x88;
38 scoped_refptr<device::U2fPacket> init_packet(
39 new device::U2fInitPacket(channel_id, cmd, data, data.size()));
40 int index = 0;
41
42 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], 0);
43 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[0]);
44 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[1]);
45 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[2]);
46 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[3]);
47 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], cmd);
48 ASSERT_EQ(init_packet->GetBuffer()->data()[index++],
49 (char)(data.size() >> 8));
50 ASSERT_EQ(init_packet->GetBuffer()->data()[index++],
51 (char)(data.size() & 0xff));
52 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], data.at(0));
53 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], data.at(1));
54 for (; index < init_packet->GetBuffer()->size(); index++) {
55 ASSERT_EQ(init_packet->GetBuffer()->data()[index], 0);
56 }
57 }
58
59 TEST_F(U2fMessageTest, TestMessagePartioning) {
60 char channel_id[4] = {1, 1, 2, 3};
61 std::vector<uint8_t> data(device::U2fMessage::kInitPacketDataSize + 1);
62 scoped_refptr<device::U2fMessage> two_packet_message =
63 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
64 data);
65 ASSERT_EQ(two_packet_message->NumPackets(), 2U);
66
67 data.resize(device::U2fMessage::kInitPacketDataSize);
68 scoped_refptr<device::U2fMessage> one_packet_message =
69 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
70 data);
71 ASSERT_EQ(one_packet_message->NumPackets(), 1U);
72
73 data.resize(device::U2fMessage::kInitPacketDataSize +
74 device::U2fMessage::kContPacketDataSize + 1);
75 scoped_refptr<device::U2fMessage> three_packet_message =
76 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
77 data);
78 ASSERT_EQ(three_packet_message->NumPackets(), 3U);
79 }
80
81 TEST_F(U2fMessageTest, TestMaxSize) {
82 char channel_id[4] = {0, 1, 2, 3};
83 std::vector<uint8_t> data(device::U2fMessage::kMaxMessageSize + 1);
84 scoped_refptr<device::U2fMessage> oversize_message =
85 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
86 data);
87 ASSERT_EQ(oversize_message, nullptr);
88 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698