blob: 58690ca4941e69f28536540551b054e2b38e05d3 [file] [log] [blame]
Yingdi Yuae734272015-07-04 17:38:48 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Davide Pesaventof45fa212017-09-14 17:23:56 -04002/*
3 * Copyright (c) 2013-2017 Regents of the University of California.
Yingdi Yuae734272015-07-04 17:38:48 -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#ifndef NDN_CXX_SECURITY_DETAIL_OPENSSL_HELPER_HPP
23#define NDN_CXX_SECURITY_DETAIL_OPENSSL_HELPER_HPP
24
Yingdi Yuae734272015-07-04 17:38:48 -070025#include "openssl.hpp"
Davide Pesaventof45fa212017-09-14 17:23:56 -040026#include "../security-common.hpp"
Yingdi Yuae734272015-07-04 17:38:48 -070027
28namespace ndn {
29namespace security {
30namespace detail {
31
32const EVP_MD*
Davide Pesavento87039532017-09-16 15:15:39 -040033digestAlgorithmToEvpMd(DigestAlgorithm algo);
Yingdi Yuae734272015-07-04 17:38:48 -070034
Davide Pesaventoc21979d2017-09-16 14:52:17 -040035int
36getEvpPkeyType(EVP_PKEY* key);
37
Davide Pesavento3504cc42017-09-17 15:28:10 -040038class EvpMdCtx : noncopyable
39{
40public:
41 EvpMdCtx();
42
43 ~EvpMdCtx();
44
45 operator EVP_MD_CTX*() const
46 {
47 return m_ctx;
48 }
49
50private:
51 EVP_MD_CTX* m_ctx;
52};
53
Davide Pesaventof45fa212017-09-14 17:23:56 -040054class EvpPkeyCtx : noncopyable
Yingdi Yu202a2e92015-07-12 16:49:25 -070055{
56public:
57 explicit
58 EvpPkeyCtx(EVP_PKEY* key);
59
60 explicit
61 EvpPkeyCtx(int id);
62
63 ~EvpPkeyCtx();
64
Davide Pesaventof45fa212017-09-14 17:23:56 -040065 operator EVP_PKEY_CTX*() const
Yingdi Yu202a2e92015-07-12 16:49:25 -070066 {
67 return m_ctx;
68 }
69
70private:
71 EVP_PKEY_CTX* m_ctx;
72};
73
Davide Pesaventof45fa212017-09-14 17:23:56 -040074class Bio : noncopyable
Yingdi Yu202a2e92015-07-12 16:49:25 -070075{
76public:
Alexander Afanasyev02948ec2016-09-12 18:04:50 -070077#if OPENSSL_VERSION_NUMBER < 0x1010000fL
Davide Pesaventof45fa212017-09-14 17:23:56 -040078 using MethodPtr = BIO_METHOD*;
Alexander Afanasyev02948ec2016-09-12 18:04:50 -070079#else
Davide Pesaventof45fa212017-09-14 17:23:56 -040080 using MethodPtr = const BIO_METHOD*;
Alexander Afanasyev02948ec2016-09-12 18:04:50 -070081#endif // OPENSSL_VERSION_NUMBER < 0x1010000fL
Yingdi Yu202a2e92015-07-12 16:49:25 -070082
Davide Pesaventof45fa212017-09-14 17:23:56 -040083 explicit
84 Bio(MethodPtr method);
85
Yingdi Yu202a2e92015-07-12 16:49:25 -070086 ~Bio();
87
Davide Pesaventof45fa212017-09-14 17:23:56 -040088 operator BIO*() const
Yingdi Yu202a2e92015-07-12 16:49:25 -070089 {
90 return m_bio;
91 }
92
Davide Pesaventof45fa212017-09-14 17:23:56 -040093 bool
94 read(uint8_t* buf, size_t buflen) const noexcept;
95
96 bool
97 write(const uint8_t* buf, size_t buflen) noexcept;
98
Yingdi Yu202a2e92015-07-12 16:49:25 -070099private:
100 BIO* m_bio;
101};
102
Yingdi Yuae734272015-07-04 17:38:48 -0700103} // namespace detail
104} // namespace security
105} // namespace ndn
106
107#endif // NDN_CXX_SECURITY_DETAIL_OPENSSL_HELPER_HPP