blob: 91f9b09472e78284b0a20667e63df801d3aa4d5b [file] [log] [blame]
Yingdi Yu5ec0ee32014-06-24 16:26:09 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2014 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#include "security/sec-rule-specific.hpp"
23#include "security/sec-rule-relative.hpp"
24#include "security/key-chain.hpp"
Yingdi Yu3ed09d02014-10-13 16:24:08 -070025#include "identity-management-fixture.hpp"
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070026
27#include "boost-test.hpp"
28
29namespace ndn {
30
Yingdi Yu3ed09d02014-10-13 16:24:08 -070031BOOST_FIXTURE_TEST_SUITE(SecurityTestSecRule, security::IdentityManagementFixture)
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070032
33BOOST_AUTO_TEST_CASE(SecRuleSpecificTest)
34{
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070035 Name rsaIdentity("/SecurityTestSecRule/Basic/Rsa");
Yingdi Yu3ed09d02014-10-13 16:24:08 -070036 BOOST_REQUIRE(addIdentity(rsaIdentity, RsaKeyParams()));
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070037 Name ecdsaIdentity("/SecurityTestSecRule/Basic/Ecdsa");
Yingdi Yu3ed09d02014-10-13 16:24:08 -070038 BOOST_REQUIRE(addIdentity(ecdsaIdentity, EcdsaKeyParams()));
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070039
40 Name dataName("SecurityTestSecRule/Basic");
41 Data rsaData(dataName);
Yingdi Yu3ed09d02014-10-13 16:24:08 -070042 m_keyChain.signByIdentity(rsaData, rsaIdentity);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070043 Data ecdsaData(dataName);
Yingdi Yu3ed09d02014-10-13 16:24:08 -070044 m_keyChain.signByIdentity(ecdsaData, ecdsaIdentity);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070045 Data sha256Data(dataName);
Yingdi Yu3ed09d02014-10-13 16:24:08 -070046 m_keyChain.signWithSha256(sha256Data);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070047
48 shared_ptr<Regex> dataRegex =
49 make_shared<Regex>("^<SecurityTestSecRule><Basic>$");
50 shared_ptr<Regex> signerRegex =
51 make_shared<Regex>("^<SecurityTestSecRule><Basic><><KEY><><>$");
52
53 SecRuleSpecific rule(dataRegex, signerRegex);
54 BOOST_CHECK(rule.satisfy(rsaData));
55 BOOST_CHECK(rule.satisfy(ecdsaData));
56 BOOST_CHECK_EQUAL(rule.satisfy(sha256Data), false);
57
58 BOOST_CHECK(rule.matchSignerName(rsaData));
59 BOOST_CHECK(rule.matchSignerName(ecdsaData));
60 BOOST_CHECK_EQUAL(rule.matchSignerName(sha256Data), false);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070061}
62
63BOOST_AUTO_TEST_CASE(SecRuleRelativeTest)
64{
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070065 Name rsaIdentity("/SecurityTestSecRule/Basic/Rsa");
Yingdi Yu3ed09d02014-10-13 16:24:08 -070066 BOOST_REQUIRE(addIdentity(rsaIdentity, RsaKeyParams()));
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070067 Name ecdsaIdentity("/SecurityTestSecRule/Basic/Ecdsa");
Yingdi Yu3ed09d02014-10-13 16:24:08 -070068 BOOST_REQUIRE(addIdentity(ecdsaIdentity, EcdsaKeyParams()));
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070069
70 Name dataName("SecurityTestSecRule/Basic");
71 Data rsaData(dataName);
Yingdi Yu3ed09d02014-10-13 16:24:08 -070072 m_keyChain.signByIdentity(rsaData, rsaIdentity);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070073 Data ecdsaData(dataName);
Yingdi Yu3ed09d02014-10-13 16:24:08 -070074 m_keyChain.signByIdentity(ecdsaData, ecdsaIdentity);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070075 Data sha256Data(dataName);
Yingdi Yu3ed09d02014-10-13 16:24:08 -070076 m_keyChain.signWithSha256(sha256Data);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070077
78 SecRuleRelative rule("^(<SecurityTestSecRule><Basic>)$",
79 "^(<SecurityTestSecRule><Basic>)<><KEY><><>$",
80 "==", "\\1", "\\1", true);
81 BOOST_CHECK(rule.satisfy(rsaData));
82 BOOST_CHECK(rule.satisfy(ecdsaData));
83 BOOST_CHECK_EQUAL(rule.satisfy(sha256Data), false);
84
85 BOOST_CHECK(rule.matchSignerName(rsaData));
86 BOOST_CHECK(rule.matchSignerName(ecdsaData));
87 BOOST_CHECK_EQUAL(rule.matchSignerName(sha256Data), false);
Yingdi Yu5ec0ee32014-06-24 16:26:09 -070088}
89
90BOOST_AUTO_TEST_SUITE_END()
91
92} // namespace ndn