blob: 78f3a4e702a28b890fe86f91b7c8bde9cd9b5ba6 [file] [log] [blame]
Yingdi Yu7036ce22014-06-19 18:53:37 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventoc3dfc242017-09-14 20:18:48 -04002/*
Laqin Fan0fe72ea2019-05-22 16:42:59 -05003 * Copyright (c) 2013-2019 Regents of the University of California.
Yingdi Yu7036ce22014-06-19 18:53:37 -07004 *
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
Davide Pesavento7e780642018-11-24 15:51:34 -050022#include "ndn-cxx/security/key-params.hpp"
Yingdi Yu7036ce22014-06-19 18:53:37 -070023
Davide Pesavento7e780642018-11-24 15:51:34 -050024#include "tests/boost-test.hpp"
Yingdi Yu7036ce22014-06-19 18:53:37 -070025
Yingdi Yuc08d7d62015-07-16 21:05:11 -070026#include <boost/lexical_cast.hpp>
27
Yingdi Yu7036ce22014-06-19 18:53:37 -070028namespace ndn {
Spyridon Mastorakis429634f2015-02-19 17:35:33 -080029namespace tests {
Yingdi Yu7036ce22014-06-19 18:53:37 -070030
Davide Pesaventoeee3e822016-11-26 19:19:34 +010031BOOST_AUTO_TEST_SUITE(Security)
32BOOST_AUTO_TEST_SUITE(TestKeyParams)
Yingdi Yu7036ce22014-06-19 18:53:37 -070033
Davide Pesaventoeee3e822016-11-26 19:19:34 +010034BOOST_AUTO_TEST_CASE(Rsa)
Yingdi Yu7036ce22014-06-19 18:53:37 -070035{
36 RsaKeyParams params;
Yingdi Yu99b2a002015-08-12 12:47:44 -070037 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::RSA);
Yingdi Yu7036ce22014-06-19 18:53:37 -070038 BOOST_CHECK_EQUAL(params.getKeySize(), 2048);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050039 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::RANDOM);
Yingdi Yu7036ce22014-06-19 18:53:37 -070040
Davide Pesavento648ae9e2018-09-08 15:40:02 -040041 RsaKeyParams params2(4096, KeyIdType::SHA256);
Yingdi Yu99b2a002015-08-12 12:47:44 -070042 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::RSA);
Davide Pesavento648ae9e2018-09-08 15:40:02 -040043 BOOST_CHECK_EQUAL(params2.getKeySize(), 4096);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050044 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::SHA256);
Yingdi Yu7036ce22014-06-19 18:53:37 -070045
Davide Pesavento648ae9e2018-09-08 15:40:02 -040046 BOOST_CHECK_THROW(RsaKeyParams(1024), KeyParams::Error);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070047
48 name::Component keyId("keyId");
49 RsaKeyParams params4(keyId);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050050 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::RSA);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070051 BOOST_CHECK_EQUAL(params4.getKeySize(), 2048);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050052 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::USER_SPECIFIED);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070053 BOOST_CHECK_EQUAL(params4.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070054}
55
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070056BOOST_AUTO_TEST_CASE(Ec)
Yingdi Yu7036ce22014-06-19 18:53:37 -070057{
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070058 EcKeyParams params;
Yingdi Yu99b2a002015-08-12 12:47:44 -070059 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::EC);
Yingdi Yu7036ce22014-06-19 18:53:37 -070060 BOOST_CHECK_EQUAL(params.getKeySize(), 256);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050061 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::RANDOM);
Yingdi Yu7036ce22014-06-19 18:53:37 -070062
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070063 EcKeyParams params2(384, KeyIdType::SHA256);
Yingdi Yu99b2a002015-08-12 12:47:44 -070064 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::EC);
Yingdi Yu7036ce22014-06-19 18:53:37 -070065 BOOST_CHECK_EQUAL(params2.getKeySize(), 384);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050066 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::SHA256);
Yingdi Yu7036ce22014-06-19 18:53:37 -070067
Laqin Fan0fe72ea2019-05-22 16:42:59 -050068 BOOST_CHECK_THROW(EcKeyParams(64), KeyParams::Error);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070069
70 name::Component keyId("keyId");
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070071 EcKeyParams params4(keyId);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050072 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::EC);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070073 BOOST_CHECK_EQUAL(params4.getKeySize(), 256);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050074 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::USER_SPECIFIED);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070075 BOOST_CHECK_EQUAL(params4.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070076}
77
Davide Pesaventoeee3e822016-11-26 19:19:34 +010078BOOST_AUTO_TEST_CASE(Aes)
Yingdi Yu7036ce22014-06-19 18:53:37 -070079{
Yingdi Yuc08d7d62015-07-16 21:05:11 -070080 name::Component keyId("keyId");
81 AesKeyParams params(keyId);
Yingdi Yu99b2a002015-08-12 12:47:44 -070082 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::AES);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070083 BOOST_CHECK_EQUAL(params.getKeySize(), 128);
84 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::USER_SPECIFIED);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050085 BOOST_CHECK_EQUAL(params.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070086
Yingdi Yuc08d7d62015-07-16 21:05:11 -070087 AesKeyParams params2(keyId, 192);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050088 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::AES);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070089 BOOST_CHECK_EQUAL(params2.getKeySize(), 192);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050090 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::USER_SPECIFIED);
91 BOOST_CHECK_EQUAL(params2.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070092
Yingdi Yuc08d7d62015-07-16 21:05:11 -070093 AesKeyParams params3(keyId, 256);
Yingdi Yu99b2a002015-08-12 12:47:44 -070094 BOOST_CHECK_EQUAL(params3.getKeyType(), KeyType::AES);
Yingdi Yu7036ce22014-06-19 18:53:37 -070095 BOOST_CHECK_EQUAL(params3.getKeySize(), 256);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050096 BOOST_CHECK_EQUAL(params3.getKeyIdType(), KeyIdType::USER_SPECIFIED);
97 BOOST_CHECK_EQUAL(params3.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070098
Laqin Fan0fe72ea2019-05-22 16:42:59 -050099 BOOST_CHECK_THROW(AesKeyParams(keyId, 64), KeyParams::Error);
Yingdi Yuc08d7d62015-07-16 21:05:11 -0700100
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500101 AesKeyParams params4;
102 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::AES);
103 BOOST_CHECK_EQUAL(params4.getKeySize(), 128);
104 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::RANDOM);
105
106 AesKeyParams params5(192);
Yingdi Yuc08d7d62015-07-16 21:05:11 -0700107 BOOST_CHECK_EQUAL(params5.getKeyType(), KeyType::AES);
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500108 BOOST_CHECK_EQUAL(params5.getKeySize(), 192);
109 BOOST_CHECK_EQUAL(params5.getKeyIdType(), KeyIdType::RANDOM);
Yingdi Yu7036ce22014-06-19 18:53:37 -0700110}
111
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500112BOOST_AUTO_TEST_CASE(Hmac)
113{
114 name::Component keyId("keyId");
115 HmacKeyParams params(keyId);
116 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::HMAC);
117 BOOST_CHECK_EQUAL(params.getKeySize(), 256);
118 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::USER_SPECIFIED);
119 BOOST_CHECK_EQUAL(params.getKeyId(), keyId);
120
121 HmacKeyParams params2(keyId, 384);
122 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::HMAC);
123 BOOST_CHECK_EQUAL(params2.getKeySize(), 384);
124 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::USER_SPECIFIED);
125 BOOST_CHECK_EQUAL(params2.getKeyId(), keyId);
126
127 BOOST_CHECK_THROW(HmacKeyParams(keyId, 192), KeyParams::Error); // too short
128 BOOST_CHECK_THROW(HmacKeyParams(keyId, 300), KeyParams::Error); // not a multiple of 8
129
130 HmacKeyParams params3;
131 BOOST_CHECK_EQUAL(params3.getKeyType(), KeyType::HMAC);
132 BOOST_CHECK_EQUAL(params3.getKeySize(), 256);
133 BOOST_CHECK_EQUAL(params3.getKeyIdType(), KeyIdType::RANDOM);
134
135 HmacKeyParams params4(1024);
136 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::HMAC);
137 BOOST_CHECK_EQUAL(params4.getKeySize(), 1024);
138 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::RANDOM);
139}
140
141BOOST_AUTO_TEST_CASE(KeyTypeToString)
142{
143 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::NONE), "NONE");
144 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::RSA), "RSA");
145 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::EC), "EC");
146 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::AES), "AES");
147 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::HMAC), "HMAC");
148 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(static_cast<KeyType>(12345)), "12345");
149}
150
151BOOST_AUTO_TEST_CASE(KeyIdTypeToString)
Yingdi Yu7036ce22014-06-19 18:53:37 -0700152{
Davide Pesavento77d9e812019-06-03 22:05:54 -0400153 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyIdType::USER_SPECIFIED), "USER-SPECIFIED");
Yingdi Yuc08d7d62015-07-16 21:05:11 -0700154 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyIdType::SHA256), "SHA256");
155 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyIdType::RANDOM), "RANDOM");
156 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(static_cast<KeyIdType>(12345)), "12345");
Yingdi Yu7036ce22014-06-19 18:53:37 -0700157}
158
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100159BOOST_AUTO_TEST_SUITE_END() // TestKeyParams
160BOOST_AUTO_TEST_SUITE_END() // Security
Yingdi Yu7036ce22014-06-19 18:53:37 -0700161
Spyridon Mastorakis429634f2015-02-19 17:35:33 -0800162} // namespace tests
Yingdi Yu7036ce22014-06-19 18:53:37 -0700163} // namespace ndn