blob: b4c6ded96bcef76952b0901b5ad1b16709bb30d5 [file] [log] [blame]
Alexander Afanasyev0db0feb2018-06-13 20:33:10 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014-2018, Regents of the University of California
4 *
5 * This file is part of NAC (Name-Based Access Control for NDN).
6 * See AUTHORS.md for complete list of NAC authors and contributors.
7 *
8 * NAC is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * NAC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * NAC, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "encrypted-content.hpp"
21
22#include "tests-common.hpp"
23
24#include <iostream>
25
26namespace ndn {
27namespace nac {
28namespace tests {
29
30class EncryptedContentFixture
31{
32public:
33 EncryptedContentFixture()
34 {
35 BOOST_CHECK_EQUAL(randomBlock.value_size(), 3);
36 BOOST_CHECK_EQUAL(randomBuffer->size(), 10);
37 }
38
39public:
40 EncryptedContent content;
41 Block randomBlock = "01 03 000000"_block;
42 ConstBufferPtr randomBuffer = make_shared<Buffer>(10);
43};
44
45BOOST_FIXTURE_TEST_SUITE(TestEncryptedContent, EncryptedContentFixture)
46
47BOOST_AUTO_TEST_CASE(Constructor)
48{
49 BOOST_CHECK_THROW(content.wireEncode(), tlv::Error);
50 content.setPayload(randomBlock);
51
52 BOOST_CHECK(!content.hasIv());
53 BOOST_CHECK(!content.hasPayloadKey());
54 BOOST_CHECK(!content.hasKeyLocator());
55
56 BOOST_CHECK_EQUAL(content.wireEncode(), "82 07 84050103000000"_block);
57
58 content.setIv(randomBlock);
59 BOOST_CHECK_EQUAL(content.wireEncode(), "82[0E]=8405010300000085050103000000"_block);
60
61 content.setKeyLocator("/random/name");
62 BOOST_CHECK_EQUAL(content.wireEncode(), "82[1E]=8405010300000085050103000000070E080672616E646F6D08046E616D65"_block);
63
64 content = EncryptedContent("82 07 84050103000000"_block);
65 BOOST_CHECK(!content.hasIv());
66 BOOST_CHECK(!content.hasPayloadKey());
67 BOOST_CHECK(!content.hasKeyLocator());
68
69 content = EncryptedContent("82 1E 8505010300000084050103000000070E080672616E646F6D08046E616D65"_block);
70 BOOST_CHECK(content.hasIv());
71 BOOST_CHECK(!content.hasPayloadKey());
72 BOOST_CHECK(content.hasKeyLocator());
73}
74
75BOOST_AUTO_TEST_SUITE(SetterGetter)
76
77BOOST_AUTO_TEST_CASE(Iv)
78{
79 content.setPayload(randomBlock);
80
81 content.setIv(randomBlock);
82 BOOST_REQUIRE(content.hasIv());
Alexander Afanasyev1a21e102018-06-13 20:33:21 -040083 BOOST_CHECK_EQUAL(content.getIv().type(), tlv::InitializationVector);
Alexander Afanasyev0db0feb2018-06-13 20:33:10 -040084 BOOST_CHECK_EQUAL(content.getIv().blockFromValue(), randomBlock);
85
86 content.unsetIv();
87 BOOST_CHECK(!content.hasIv());
88
89 content.setIv(randomBuffer);
90 BOOST_REQUIRE(content.hasIv());
Alexander Afanasyev1a21e102018-06-13 20:33:21 -040091 BOOST_CHECK_EQUAL(content.getIv().type(), tlv::InitializationVector);
Alexander Afanasyev0db0feb2018-06-13 20:33:10 -040092 BOOST_CHECK_THROW(content.getIv().blockFromValue(), tlv::Error);
93 BOOST_CHECK_EQUAL(content.getIv().value_size(), randomBuffer->size());
94
95 content = EncryptedContent("82[13]=84050103000000850A00000000000000000000"_block);
96 BOOST_REQUIRE(content.hasIv());
Alexander Afanasyev1a21e102018-06-13 20:33:21 -040097 BOOST_CHECK_EQUAL(content.getIv().type(), tlv::InitializationVector);
Alexander Afanasyev0db0feb2018-06-13 20:33:10 -040098 BOOST_CHECK_THROW(content.getIv().blockFromValue(), tlv::Error);
99 BOOST_CHECK_EQUAL(content.getIv().value_size(), randomBuffer->size());
100}
101
102BOOST_AUTO_TEST_CASE(Payload)
103{
104 content.setPayload(randomBlock);
105 BOOST_CHECK_EQUAL(content.getPayload().type(), tlv::EncryptedPayload);
106 BOOST_CHECK_EQUAL(content.getPayload().blockFromValue(), randomBlock);
107
108 content.setPayload(randomBuffer);
109 BOOST_CHECK_EQUAL(content.getPayload().type(), tlv::EncryptedPayload);
110 BOOST_CHECK_THROW(content.getPayload().blockFromValue(), tlv::Error);
111 BOOST_CHECK_EQUAL(content.getPayload().value_size(), randomBuffer->size());
112
113 content = EncryptedContent("82[0C]=840A00000000000000000000"_block);
114 BOOST_CHECK_EQUAL(content.getPayload().type(), tlv::EncryptedPayload);
115 BOOST_CHECK_THROW(content.getPayload().blockFromValue(), tlv::Error);
116 BOOST_CHECK_EQUAL(content.getPayload().value_size(), randomBuffer->size());
117}
118
119BOOST_AUTO_TEST_CASE(PayloadKey)
120{
121 content.setPayload(randomBlock);
122
123 content.setPayloadKey(randomBlock);
124 BOOST_REQUIRE(content.hasPayloadKey());
125 BOOST_CHECK_EQUAL(content.getPayloadKey().type(), tlv::EncryptedPayloadKey);
126 BOOST_CHECK_EQUAL(content.getPayloadKey().blockFromValue(), randomBlock);
127
128 content.unsetPayloadKey();
129 BOOST_CHECK(!content.hasPayloadKey());
130
131 content.setPayloadKey(randomBuffer);
132 BOOST_REQUIRE(content.hasPayloadKey());
133 BOOST_CHECK_EQUAL(content.getPayloadKey().type(), tlv::EncryptedPayloadKey);
134 BOOST_CHECK_THROW(content.getPayloadKey().blockFromValue(), tlv::Error);
135 BOOST_CHECK_EQUAL(content.getPayloadKey().value_size(), randomBuffer->size());
136
137 content = EncryptedContent("82[13]=84050103000000860A00000000000000000000"_block);
138 BOOST_CHECK_EQUAL(content.getPayloadKey().type(), tlv::EncryptedPayloadKey);
139 BOOST_CHECK_THROW(content.getPayloadKey().blockFromValue(), tlv::Error);
140 BOOST_CHECK_EQUAL(content.getPayloadKey().value_size(), randomBuffer->size());
141}
142
143BOOST_AUTO_TEST_CASE(KeyLocator)
144{
145 content.setPayload(randomBlock);
146
147 content.setKeyLocator("/random/name");
148 BOOST_REQUIRE(content.hasKeyLocator());
149 BOOST_CHECK_EQUAL(content.getKeyLocator(), "/random/name");
150
151 content.unsetPayloadKey();
152 BOOST_CHECK(!content.hasPayloadKey());
153
154 content = EncryptedContent("82[17]=84050103000000070E080672616E646F6D08046E616D65"_block);
155 BOOST_REQUIRE(content.hasKeyLocator());
156 BOOST_CHECK_EQUAL(content.getKeyLocator(), "/random/name");
157}
158
159BOOST_AUTO_TEST_SUITE_END() // SetterGetter
160
161BOOST_AUTO_TEST_SUITE_END()
162
163} // namespace tests
164} // namespace nac
165} // namespace ndn