blob: 27f098a11d4f542e7430469362e65ccc3cd30bc0 [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/*
Davide Pesavento47ce2ee2023-05-09 01:33:33 -04003 * Copyright (c) 2013-2023 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
Davide Pesavento47ce2ee2023-05-09 01:33:33 -040028namespace ndn::tests {
Yingdi Yu7036ce22014-06-19 18:53:37 -070029
Davide Pesaventoeee3e822016-11-26 19:19:34 +010030BOOST_AUTO_TEST_SUITE(Security)
31BOOST_AUTO_TEST_SUITE(TestKeyParams)
Yingdi Yu7036ce22014-06-19 18:53:37 -070032
Davide Pesaventoeee3e822016-11-26 19:19:34 +010033BOOST_AUTO_TEST_CASE(Rsa)
Yingdi Yu7036ce22014-06-19 18:53:37 -070034{
35 RsaKeyParams params;
Yingdi Yu99b2a002015-08-12 12:47:44 -070036 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::RSA);
Yingdi Yu7036ce22014-06-19 18:53:37 -070037 BOOST_CHECK_EQUAL(params.getKeySize(), 2048);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050038 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::RANDOM);
Yingdi Yu7036ce22014-06-19 18:53:37 -070039
Davide Pesavento648ae9e2018-09-08 15:40:02 -040040 RsaKeyParams params2(4096, KeyIdType::SHA256);
Yingdi Yu99b2a002015-08-12 12:47:44 -070041 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::RSA);
Davide Pesavento648ae9e2018-09-08 15:40:02 -040042 BOOST_CHECK_EQUAL(params2.getKeySize(), 4096);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050043 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::SHA256);
Yingdi Yu7036ce22014-06-19 18:53:37 -070044
Davide Pesavento648ae9e2018-09-08 15:40:02 -040045 BOOST_CHECK_THROW(RsaKeyParams(1024), KeyParams::Error);
Davide Pesaventobbe79422022-06-01 00:55:02 -040046 BOOST_CHECK_THROW(RsaKeyParams(2000), KeyParams::Error);
47 BOOST_CHECK_THROW(RsaKeyParams(16500), KeyParams::Error);
48 BOOST_CHECK_THROW(RsaKeyParams(20480), KeyParams::Error);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070049
50 name::Component keyId("keyId");
51 RsaKeyParams params4(keyId);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050052 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::RSA);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070053 BOOST_CHECK_EQUAL(params4.getKeySize(), 2048);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050054 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::USER_SPECIFIED);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070055 BOOST_CHECK_EQUAL(params4.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070056}
57
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070058BOOST_AUTO_TEST_CASE(Ec)
Yingdi Yu7036ce22014-06-19 18:53:37 -070059{
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070060 EcKeyParams params;
Yingdi Yu99b2a002015-08-12 12:47:44 -070061 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::EC);
Yingdi Yu7036ce22014-06-19 18:53:37 -070062 BOOST_CHECK_EQUAL(params.getKeySize(), 256);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050063 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::RANDOM);
Yingdi Yu7036ce22014-06-19 18:53:37 -070064
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070065 EcKeyParams params2(384, KeyIdType::SHA256);
Yingdi Yu99b2a002015-08-12 12:47:44 -070066 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::EC);
Yingdi Yu7036ce22014-06-19 18:53:37 -070067 BOOST_CHECK_EQUAL(params2.getKeySize(), 384);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050068 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::SHA256);
Yingdi Yu7036ce22014-06-19 18:53:37 -070069
Laqin Fan0fe72ea2019-05-22 16:42:59 -050070 BOOST_CHECK_THROW(EcKeyParams(64), KeyParams::Error);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070071
72 name::Component keyId("keyId");
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070073 EcKeyParams params4(keyId);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050074 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::EC);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070075 BOOST_CHECK_EQUAL(params4.getKeySize(), 256);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050076 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::USER_SPECIFIED);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070077 BOOST_CHECK_EQUAL(params4.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070078}
79
Davide Pesaventoeee3e822016-11-26 19:19:34 +010080BOOST_AUTO_TEST_CASE(Aes)
Yingdi Yu7036ce22014-06-19 18:53:37 -070081{
Yingdi Yuc08d7d62015-07-16 21:05:11 -070082 name::Component keyId("keyId");
83 AesKeyParams params(keyId);
Yingdi Yu99b2a002015-08-12 12:47:44 -070084 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::AES);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070085 BOOST_CHECK_EQUAL(params.getKeySize(), 128);
86 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::USER_SPECIFIED);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050087 BOOST_CHECK_EQUAL(params.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070088
Yingdi Yuc08d7d62015-07-16 21:05:11 -070089 AesKeyParams params2(keyId, 192);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050090 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::AES);
Yingdi Yuc08d7d62015-07-16 21:05:11 -070091 BOOST_CHECK_EQUAL(params2.getKeySize(), 192);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050092 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::USER_SPECIFIED);
93 BOOST_CHECK_EQUAL(params2.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -070094
Yingdi Yuc08d7d62015-07-16 21:05:11 -070095 AesKeyParams params3(keyId, 256);
Yingdi Yu99b2a002015-08-12 12:47:44 -070096 BOOST_CHECK_EQUAL(params3.getKeyType(), KeyType::AES);
Yingdi Yu7036ce22014-06-19 18:53:37 -070097 BOOST_CHECK_EQUAL(params3.getKeySize(), 256);
Laqin Fan0fe72ea2019-05-22 16:42:59 -050098 BOOST_CHECK_EQUAL(params3.getKeyIdType(), KeyIdType::USER_SPECIFIED);
99 BOOST_CHECK_EQUAL(params3.getKeyId(), keyId);
Yingdi Yu7036ce22014-06-19 18:53:37 -0700100
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500101 BOOST_CHECK_THROW(AesKeyParams(keyId, 64), KeyParams::Error);
Yingdi Yuc08d7d62015-07-16 21:05:11 -0700102
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500103 AesKeyParams params4;
104 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::AES);
105 BOOST_CHECK_EQUAL(params4.getKeySize(), 128);
106 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::RANDOM);
107
108 AesKeyParams params5(192);
Yingdi Yuc08d7d62015-07-16 21:05:11 -0700109 BOOST_CHECK_EQUAL(params5.getKeyType(), KeyType::AES);
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500110 BOOST_CHECK_EQUAL(params5.getKeySize(), 192);
111 BOOST_CHECK_EQUAL(params5.getKeyIdType(), KeyIdType::RANDOM);
Yingdi Yu7036ce22014-06-19 18:53:37 -0700112}
113
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500114BOOST_AUTO_TEST_CASE(Hmac)
115{
116 name::Component keyId("keyId");
117 HmacKeyParams params(keyId);
118 BOOST_CHECK_EQUAL(params.getKeyType(), KeyType::HMAC);
119 BOOST_CHECK_EQUAL(params.getKeySize(), 256);
120 BOOST_CHECK_EQUAL(params.getKeyIdType(), KeyIdType::USER_SPECIFIED);
121 BOOST_CHECK_EQUAL(params.getKeyId(), keyId);
122
123 HmacKeyParams params2(keyId, 384);
124 BOOST_CHECK_EQUAL(params2.getKeyType(), KeyType::HMAC);
125 BOOST_CHECK_EQUAL(params2.getKeySize(), 384);
126 BOOST_CHECK_EQUAL(params2.getKeyIdType(), KeyIdType::USER_SPECIFIED);
127 BOOST_CHECK_EQUAL(params2.getKeyId(), keyId);
128
Davide Pesavento5e494c02019-09-29 16:30:19 -0400129 BOOST_CHECK_THROW(HmacKeyParams(keyId, 0), KeyParams::Error);
Laqin Fan0fe72ea2019-05-22 16:42:59 -0500130 BOOST_CHECK_THROW(HmacKeyParams(keyId, 300), KeyParams::Error); // not a multiple of 8
131
132 HmacKeyParams params3;
133 BOOST_CHECK_EQUAL(params3.getKeyType(), KeyType::HMAC);
134 BOOST_CHECK_EQUAL(params3.getKeySize(), 256);
135 BOOST_CHECK_EQUAL(params3.getKeyIdType(), KeyIdType::RANDOM);
136
137 HmacKeyParams params4(1024);
138 BOOST_CHECK_EQUAL(params4.getKeyType(), KeyType::HMAC);
139 BOOST_CHECK_EQUAL(params4.getKeySize(), 1024);
140 BOOST_CHECK_EQUAL(params4.getKeyIdType(), KeyIdType::RANDOM);
141}
142
143BOOST_AUTO_TEST_CASE(KeyTypeToString)
144{
145 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::NONE), "NONE");
146 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::RSA), "RSA");
147 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::EC), "EC");
148 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::AES), "AES");
149 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyType::HMAC), "HMAC");
150 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(static_cast<KeyType>(12345)), "12345");
151}
152
153BOOST_AUTO_TEST_CASE(KeyIdTypeToString)
Yingdi Yu7036ce22014-06-19 18:53:37 -0700154{
Davide Pesavento77d9e812019-06-03 22:05:54 -0400155 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyIdType::USER_SPECIFIED), "USER-SPECIFIED");
Yingdi Yuc08d7d62015-07-16 21:05:11 -0700156 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyIdType::SHA256), "SHA256");
157 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(KeyIdType::RANDOM), "RANDOM");
158 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(static_cast<KeyIdType>(12345)), "12345");
Yingdi Yu7036ce22014-06-19 18:53:37 -0700159}
160
Davide Pesaventoeee3e822016-11-26 19:19:34 +0100161BOOST_AUTO_TEST_SUITE_END() // TestKeyParams
162BOOST_AUTO_TEST_SUITE_END() // Security
Yingdi Yu7036ce22014-06-19 18:53:37 -0700163
Davide Pesavento47ce2ee2023-05-09 01:33:33 -0400164} // namespace ndn::tests