blob: a908b432ca75360b50292ebe011b5cc09e8f6d9d [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/*
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -07003 * Copyright (c) 2013-2017 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
22#include "key-params.hpp"
23
24namespace ndn {
25
Yingdi Yuc08d7d62015-07-16 21:05:11 -070026static const uint32_t MIN_RSA_KEY_SIZE = 1024;
27static const uint32_t DEFAULT_RSA_KEY_SIZE = 2048;
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070028static const uint32_t EC_KEY_SIZES[] = {256, 384};
Yingdi Yuc08d7d62015-07-16 21:05:11 -070029static const uint32_t AES_KEY_SIZES[] = {128, 192, 256};
30
Yingdi Yuc08d7d62015-07-16 21:05:11 -070031KeyParams::KeyParams(KeyType keyType, KeyIdType keyIdType)
32 : m_keyType(keyType)
33 , m_keyIdType(keyIdType)
34{
35 BOOST_ASSERT(keyIdType != KeyIdType::USER_SPECIFIED);
36}
37
38KeyParams::KeyParams(KeyType keyType, const name::Component& keyId)
39 : m_keyType(keyType)
40 , m_keyIdType(KeyIdType::USER_SPECIFIED)
41 , m_keyId(keyId)
42{
43 BOOST_ASSERT(!keyId.empty());
44}
Yingdi Yu7036ce22014-06-19 18:53:37 -070045
Davide Pesaventoc3dfc242017-09-14 20:18:48 -040046KeyParams::~KeyParams() = default;
47
48namespace detail {
49
Yingdi Yu7036ce22014-06-19 18:53:37 -070050uint32_t
51RsaKeyParamsInfo::checkKeySize(uint32_t size)
52{
Yingdi Yuc08d7d62015-07-16 21:05:11 -070053 if (size < MIN_RSA_KEY_SIZE)
Davide Pesaventoc3dfc242017-09-14 20:18:48 -040054 BOOST_THROW_EXCEPTION(KeyParams::Error("Unsupported RSA key size"));
Yingdi Yuc08d7d62015-07-16 21:05:11 -070055 return size;
Yingdi Yu7036ce22014-06-19 18:53:37 -070056}
57
58uint32_t
59RsaKeyParamsInfo::getDefaultSize()
60{
Yingdi Yuc08d7d62015-07-16 21:05:11 -070061 return DEFAULT_RSA_KEY_SIZE;
Yingdi Yu7036ce22014-06-19 18:53:37 -070062}
63
64uint32_t
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070065EcKeyParamsInfo::checkKeySize(uint32_t size)
Yingdi Yu7036ce22014-06-19 18:53:37 -070066{
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070067 for (size_t i = 0; i < (sizeof(EC_KEY_SIZES) / sizeof(EC_KEY_SIZES[0])); i++) {
68 if (EC_KEY_SIZES[i] == size)
Yingdi Yuc08d7d62015-07-16 21:05:11 -070069 return size;
70 }
Davide Pesaventoc3dfc242017-09-14 20:18:48 -040071 BOOST_THROW_EXCEPTION(KeyParams::Error("Unsupported EC key size"));
Yingdi Yu7036ce22014-06-19 18:53:37 -070072}
73
74uint32_t
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070075EcKeyParamsInfo::getDefaultSize()
Yingdi Yu7036ce22014-06-19 18:53:37 -070076{
Spyridon Mastorakis1ece2e32015-08-27 18:52:21 -070077 return EC_KEY_SIZES[0];
Yingdi Yu7036ce22014-06-19 18:53:37 -070078}
79
Yingdi Yu7036ce22014-06-19 18:53:37 -070080uint32_t
81AesKeyParamsInfo::checkKeySize(uint32_t size)
82{
Yingdi Yuc08d7d62015-07-16 21:05:11 -070083 for (size_t i = 0; i < (sizeof(AES_KEY_SIZES) / sizeof(AES_KEY_SIZES[0])); i++) {
84 if (AES_KEY_SIZES[i] == size)
85 return size;
86 }
Davide Pesaventoc3dfc242017-09-14 20:18:48 -040087 BOOST_THROW_EXCEPTION(KeyParams::Error("Unsupported AES key size"));
Yingdi Yu7036ce22014-06-19 18:53:37 -070088}
89
90uint32_t
91AesKeyParamsInfo::getDefaultSize()
92{
93 return AES_KEY_SIZES[0];
94}
95
Davide Pesaventoc3dfc242017-09-14 20:18:48 -040096} // namespace detail
Yingdi Yu7036ce22014-06-19 18:53:37 -070097} // namespace ndn