blob: 150306588fe6950dab4e4ba7cfc4de464de06434 [file] [log] [blame]
Alexander Afanasyevc169a812014-05-20 20:37:29 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07002/**
Alexander Afanasyevc169a812014-05-20 20:37:29 -04003 * Copyright (c) 2013-2014 Regents of the University of California.
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07006 *
Alexander Afanasyevc169a812014-05-20 20:37:29 -04007 * 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.
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -070020 *
21 * @author Yingdi Yu <http://irl.cs.ucla.edu/~yingdi/>
Yingdi Yu8d7468f2014-02-21 14:49:45 -080022 */
23
24#ifndef NDNSEC_UTIL_HPP
25#define NDNSEC_UTIL_HPP
26
27#include <iostream>
28#include <fstream>
29#include <string>
30#include <cstring>
31
32#include <boost/program_options/options_description.hpp>
33#include <boost/program_options/variables_map.hpp>
34#include <boost/program_options/parsers.hpp>
35#include <boost/date_time/posix_time/posix_time.hpp>
36#include <boost/tokenizer.hpp>
37#include <boost/asio.hpp>
38#include <boost/exception/all.hpp>
39
40
Junxiao Shi482ccc52014-03-31 13:05:24 -070041#include "security/cryptopp.hpp"
Yingdi Yu8d7468f2014-02-21 14:49:45 -080042
43#include "security/key-chain.hpp"
Yingdi Yu64c3fb42014-02-26 17:30:04 -080044#include "util/io.hpp"
Yingdi Yu8d7468f2014-02-21 14:49:45 -080045
46bool
47getPassword(std::string& password, const std::string& prompt)
48{
Yingdi Yub61f5402014-02-26 17:46:11 -080049 bool isReady = false;
Yingdi Yu8d7468f2014-02-21 14:49:45 -080050
Yingdi Yub61f5402014-02-26 17:46:11 -080051 char* pw0 = 0;
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -070052
Yingdi Yu8d7468f2014-02-21 14:49:45 -080053 pw0 = getpass(prompt.c_str());
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -070054 if (!pw0)
Yingdi Yu8d7468f2014-02-21 14:49:45 -080055 return false;
56 std::string password1 = pw0;
57 memset(pw0, 0, strlen(pw0));
58
59 pw0 = getpass("Confirm:");
Yingdi Yub61f5402014-02-26 17:46:11 -080060 if (!pw0)
Yingdi Yu8d7468f2014-02-21 14:49:45 -080061 {
62 char* pw1 = const_cast<char*>(password1.c_str());
63 memset(pw1, 0, password1.size());
64 return false;
65 }
66
Yingdi Yub61f5402014-02-26 17:46:11 -080067 if (!password1.compare(pw0))
Yingdi Yu8d7468f2014-02-21 14:49:45 -080068 {
Yingdi Yub61f5402014-02-26 17:46:11 -080069 isReady = true;
Yingdi Yu8d7468f2014-02-21 14:49:45 -080070 password.swap(password1);
71 }
72
73 char* pw1 = const_cast<char*>(password1.c_str());
74 memset(pw1, 0, password1.size());
75 memset(pw0, 0, strlen(pw0));
76
Yingdi Yub61f5402014-02-26 17:46:11 -080077 if (password.empty())
Yingdi Yu8d7468f2014-02-21 14:49:45 -080078 return false;
79
Yingdi Yub61f5402014-02-26 17:46:11 -080080 return isReady;
Yingdi Yu8d7468f2014-02-21 14:49:45 -080081}
82
83ndn::shared_ptr<ndn::IdentityCertificate>
84getIdentityCertificate(const std::string& fileName)
85{
Yingdi Yu8d7468f2014-02-21 14:49:45 -080086
Yingdi Yub61f5402014-02-26 17:46:11 -080087 if (fileName == "-")
Yingdi Yu64c3fb42014-02-26 17:30:04 -080088 return ndn::io::load<ndn::IdentityCertificate>(std::cin);
89 else
90 return ndn::io::load<ndn::IdentityCertificate>(fileName);
Yingdi Yu8d7468f2014-02-21 14:49:45 -080091}
92
93#endif //NDNSEC_UTIL_HPP