libDwmAuth-0.1.2
DwmAuthPeerAuthenticator.hh
Go to the documentation of this file.
1 //===========================================================================
2 // @(#) $Name:$
3 // @(#) $Id: DwmAuthPeerAuthenticator.hh 8996 2017-04-10 05:49:58Z dwm $
4 //===========================================================================
5 // Copyright (c) Daniel W. McRobb 2017
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions
10 // are met:
11 //
12 // 1. Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // 2. Redistributions in binary form must reproduce the above copyright
15 // notice, this list of conditions and the following disclaimer in the
16 // documentation and/or other materials provided with the distribution.
17 // 3. The names of the authors and copyright holders may not be used to
18 // endorse or promote products derived from this software without
19 // specific prior written permission.
20 //
21 // IN NO EVENT SHALL DANIEL W. MCROBB BE LIABLE TO ANY PARTY FOR
22 // DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
23 // INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE,
24 // EVEN IF DANIEL W. MCROBB HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
25 // DAMAGE.
26 //
27 // THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND
28 // DANIEL W. MCROBB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
29 // UPDATES, ENHANCEMENTS, OR MODIFICATIONS. DANIEL W. MCROBB MAKES NO
30 // REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY KIND, EITHER
31 // IMPLIED OR EXPRESS, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32 // WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE,
33 // OR THAT THE USE OF THIS SOFTWARE WILL NOT INFRINGE ANY PATENT,
34 // TRADEMARK OR OTHER RIGHTS.
35 //===========================================================================
36 
37 //---------------------------------------------------------------------------
40 //---------------------------------------------------------------------------
41 
42 #ifndef _DWMAUTHPEERAUTHENTICATOR_HH_
43 #define _DWMAUTHPEERAUTHENTICATOR_HH_
44 
45 #include <string>
46 
47 #include "DwmAuthPublicKeysFile.hh"
48 #include "DwmAuthECDHAgreement.hh"
49 #include "DwmAuthPKCrypto.hh"
50 
51 namespace Dwm {
52 
53  namespace Auth {
54 
55  //------------------------------------------------------------------------
67  //------------------------------------------------------------------------
69  {
70  public:
71  //----------------------------------------------------------------------
79  //----------------------------------------------------------------------
80  PeerAuthenticator(const std::string & myPrivKeyPath,
81  const std::string & pubKeysPath);
82 
83  //----------------------------------------------------------------------
89  //----------------------------------------------------------------------
90  bool Authenticate(int fd, std::string & theirId,
91  std::string & agreedKey);
92 
93  private:
94  std::string _myPrivKeyPath;
95  std::string _pubKeysPath;
96 
97  bool ECExchange(int fd, Auth::ECDHAgreement & agreement);
98  std::string
99  BuildIDAndSignature(const std::string & myId,
100  const PKCrypto::PrivateKey & myPrivRSAKey,
101  const ECDHAgreement & agreement);
102  bool IDAndSigExchange(int fd, const std::string & myId,
103  const PKCrypto::PrivateKey & myPrivRSAKey,
104  const ECDHAgreement & agreement,
105  std::string & theirId,
106  std::string & theirIdCrypted,
107  std::string & theirSig);
108  };
109 
110  } // namespace Auth
111 
112 } // namespace Dwm
113 
114 #endif // _DWMAUTHPEERAUTHENTICATOR_HH_
bool Authenticate(int fd, std::string &theirId, std::string &agreedKey)
Authenticate the peer connected to the socket fd.
A simplified peer authenticator.
Definition: DwmAuthPeerAuthenticator.hh:68
Dwm::Auth::ECDHAgreement class definition.
Public key crypto definitions.
Encapsulates information used in an ECDH key agreement.
Definition: DwmAuthECDHAgreement.hh:55
Definition: DwmAuth.hh:48
PeerAuthenticator(const std::string &myPrivKeyPath, const std::string &pubKeysPath)
Construct from a path to our RSA private key and a path to a file containing public keys...
Dwm::Auth::PublicKeysFile class definition.
Encapsulates a readable and writable private key.
Definition: DwmAuthPKCrypto.hh:109