blob: 8686b2dced5ddda8d268857f2c2defe6a3da2df9 [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"
25
26#include "boost-test.hpp"
27
28namespace ndn {
29
30BOOST_AUTO_TEST_SUITE(SecurityTestSecRule)
31
32BOOST_AUTO_TEST_CASE(SecRuleSpecificTest)
33{
34 KeyChain keyChain("sqlite3", "file");
35
36 Name rsaIdentity("/SecurityTestSecRule/Basic/Rsa");
37 keyChain.createIdentity(rsaIdentity);
38 Name ecdsaIdentity("/SecurityTestSecRule/Basic/Ecdsa");
39 keyChain.createIdentity(ecdsaIdentity);
40
41 Name dataName("SecurityTestSecRule/Basic");
42 Data rsaData(dataName);
43 keyChain.signByIdentity(rsaData, rsaIdentity);
44 Data ecdsaData(dataName);
45 keyChain.signByIdentity(ecdsaData, ecdsaIdentity);
46 Data sha256Data(dataName);
47 keyChain.signWithSha256(sha256Data);
48
49 shared_ptr<Regex> dataRegex =
50 make_shared<Regex>("^<SecurityTestSecRule><Basic>$");
51 shared_ptr<Regex> signerRegex =
52 make_shared<Regex>("^<SecurityTestSecRule><Basic><><KEY><><>$");
53
54 SecRuleSpecific rule(dataRegex, signerRegex);
55 BOOST_CHECK(rule.satisfy(rsaData));
56 BOOST_CHECK(rule.satisfy(ecdsaData));
57 BOOST_CHECK_EQUAL(rule.satisfy(sha256Data), false);
58
59 BOOST_CHECK(rule.matchSignerName(rsaData));
60 BOOST_CHECK(rule.matchSignerName(ecdsaData));
61 BOOST_CHECK_EQUAL(rule.matchSignerName(sha256Data), false);
62
63 keyChain.deleteIdentity(rsaIdentity);
64 keyChain.deleteIdentity(ecdsaIdentity);
65}
66
67BOOST_AUTO_TEST_CASE(SecRuleRelativeTest)
68{
69 KeyChain keyChain("sqlite3", "file");
70
71 Name rsaIdentity("/SecurityTestSecRule/Basic/Rsa");
72 keyChain.createIdentity(rsaIdentity);
73 Name ecdsaIdentity("/SecurityTestSecRule/Basic/Ecdsa");
74 keyChain.createIdentity(ecdsaIdentity);
75
76 Name dataName("SecurityTestSecRule/Basic");
77 Data rsaData(dataName);
78 keyChain.signByIdentity(rsaData, rsaIdentity);
79 Data ecdsaData(dataName);
80 keyChain.signByIdentity(ecdsaData, ecdsaIdentity);
81 Data sha256Data(dataName);
82 keyChain.signWithSha256(sha256Data);
83
84 SecRuleRelative rule("^(<SecurityTestSecRule><Basic>)$",
85 "^(<SecurityTestSecRule><Basic>)<><KEY><><>$",
86 "==", "\\1", "\\1", true);
87 BOOST_CHECK(rule.satisfy(rsaData));
88 BOOST_CHECK(rule.satisfy(ecdsaData));
89 BOOST_CHECK_EQUAL(rule.satisfy(sha256Data), false);
90
91 BOOST_CHECK(rule.matchSignerName(rsaData));
92 BOOST_CHECK(rule.matchSignerName(ecdsaData));
93 BOOST_CHECK_EQUAL(rule.matchSignerName(sha256Data), false);
94
95 keyChain.deleteIdentity(rsaIdentity);
96 keyChain.deleteIdentity(ecdsaIdentity);
97}
98
99BOOST_AUTO_TEST_SUITE_END()
100
101} // namespace ndn