libDwmAuth-0.3.6
DwmAuthECDHAgreement.hh
Go to the documentation of this file.
1 //===========================================================================
2 // @(#) $Name:$
3 // @(#) $Id: DwmAuthECDHAgreement.hh 10962 2020-08-23 07:48:41Z 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 _DWMAUTHECDHAGREEMENT_HH_
43 #define _DWMAUTHECDHAGREEMENT_HH_
44 
45 #include <cryptopp/xed25519.h>
46 #include <cryptopp/eccrypto.h>
47 #include <cryptopp/osrng.h>
48 
49 namespace Dwm {
50 
51  namespace Auth {
52 
53  //------------------------------------------------------------------------
56  //------------------------------------------------------------------------
58  {
59  public:
60  //----------------------------------------------------------------------
63  //----------------------------------------------------------------------
64  ECDHAgreement();
65 
66  //----------------------------------------------------------------------
68  //----------------------------------------------------------------------
69  const CryptoPP::SecByteBlock & Public() const;
70 
71  //----------------------------------------------------------------------
73  //----------------------------------------------------------------------
74  const CryptoPP::SecByteBlock & Private() const;
75 
76  //----------------------------------------------------------------------
80  //----------------------------------------------------------------------
81  const CryptoPP::SecByteBlock & TheirPublic() const;
82 
83  //----------------------------------------------------------------------
85  //----------------------------------------------------------------------
86  const CryptoPP::SecByteBlock &
87  TheirPublic(const CryptoPP::SecByteBlock & theirPub);
88 
89  //----------------------------------------------------------------------
95  //----------------------------------------------------------------------
96  bool Agree();
97 
98  //----------------------------------------------------------------------
102  //----------------------------------------------------------------------
103  const CryptoPP::SecByteBlock & AgreedKey() const;
104 
105  private:
106  CryptoPP::AutoSeededRandomPool _rng;
107  CryptoPP::x25519 _x25519;
108  CryptoPP::SecByteBlock _mypriv;
109  CryptoPP::SecByteBlock _mypub;
110  CryptoPP::SecByteBlock _theirpub;
111  CryptoPP::SecByteBlock _agreedKey;
112  };
113 
114  } // namespace Auth
115 
116 } // namespace Dwm
117 
118 #endif // _DWMAUTHECDHAGREEMENT_HH_
const CryptoPP::SecByteBlock & Private() const
Returns a const reference to the private half of our ECDH key.
const CryptoPP::SecByteBlock & AgreedKey() const
If we stored the public half of the other side's ECDH key with TheirPublic(SecByteBlock &) and then c...
Encapsulates information used in an ECDH key agreement.
Definition: DwmAuthECDHAgreement.hh:57
ECDHAgreement()
constructor.
const CryptoPP::SecByteBlock & TheirPublic() const
Returns a const reference to the other side's public key.
const CryptoPP::SecByteBlock & Public() const
Returns a const reference to the public half of our ECDH key.
bool Agree()
Once we have our private and public keys and the other side's public key has been saved with TheirPub...