Browse Source

Keys added

pull/6/head
orignal 11 years ago
parent
commit
6341b10556
  1. 39
      Identity.cpp
  2. 19
      Identity.h
  3. 2
      Makefile
  4. 35
      RouterContext.cpp
  5. 8
      RouterContext.h

39
Identity.cpp

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
#include <cryptopp/sha.h>
#include <cryptopp/osrng.h>
#include <cryptopp/dh.h>
#include <cryptopp/dsa.h>
#include "CryptoConst.h"
#include "Identity.h"
namespace i2p
{
namespace data
{
IdentHash CalculateIdentHash (const Identity& identity)
{
IdentHash hash;
CryptoPP::SHA256().CalculateDigest((uint8_t *)hash, (uint8_t *)&identity, sizeof (Identity));
return hash;
}
Keys CreateRandomKeys ()
{
Keys keys;
CryptoPP::AutoSeededRandomPool rnd;
// encryption
CryptoPP::DH dh (i2p::crypto::elgp, i2p::crypto::elgg);
dh.GenerateKeyPair(rnd, keys.privateKey, keys.publicKey);
// signing
CryptoPP::DSA::PrivateKey privateKey;
CryptoPP::DSA::PublicKey publicKey;
privateKey.Initialize (rnd, i2p::crypto::dsap, i2p::crypto::dsaq, i2p::crypto::dsag);
privateKey.MakePublicKey (publicKey);
privateKey.GetPrivateExponent ().Encode (keys.signingPrivateKey, 20);
publicKey.GetPublicElement ().Encode (keys.signingKey, 128);
return keys;
}
}
}

19
Identity.h

@ -3,13 +3,20 @@ @@ -3,13 +3,20 @@
#include <inttypes.h>
#include <string.h>
#include <cryptopp/sha.h>
namespace i2p
{
namespace data
{
#pragma pack(1)
struct Keys
{
uint8_t privateKey[256];
uint8_t signingPrivateKey[20];
uint8_t publicKey[256];
uint8_t signingKey[128];
};
struct Identity
{
@ -46,13 +53,9 @@ namespace data @@ -46,13 +53,9 @@ namespace data
uint8_t m_Hash[32];
};
inline IdentHash CalculateIdentHash (const Identity& identity)
{
IdentHash hash;
CryptoPP::SHA256().CalculateDigest((uint8_t *)hash, (uint8_t *)&identity, sizeof (Identity));
return hash;
};
IdentHash CalculateIdentHash (const Identity& identity);
Keys CreateRandomKeys ();
class RoutingDestination
{
public:

2
Makefile

@ -3,7 +3,7 @@ CC = g++ @@ -3,7 +3,7 @@ CC = g++
CFLAGS = -g -Wall -std=c++0x
OBJECTS = i2p.o base64.o NTCPSession.o RouterInfo.o Transports.o RouterContext.o \
NetDb.o LeaseSet.o Tunnel.o TunnelEndpoint.o TunnelGateway.o TransitTunnel.o \
I2NPProtocol.o Log.o Garlic.o HTTPServer.o Streaming.o
I2NPProtocol.o Log.o Garlic.o HTTPServer.o Streaming.o Identity.o
INCFLAGS =
LDFLAGS = -Wl,-rpath,/usr/local/lib -lcryptopp -lboost_system -lboost_filesystem
LIBS =

35
RouterContext.cpp

@ -18,28 +18,17 @@ namespace i2p @@ -18,28 +18,17 @@ namespace i2p
CryptoPP::DH dh (i2p::crypto::elgp, i2p::crypto::elgg);
dh.GenerateKeyPair(m_Rnd, m_LeaseSetPrivateKey, m_LeaseSetPublicKey);
}
const uint8_t * RouterContext::GetSigningPrivateKey () const
{
return m_SigningPrivateKeyStr;
}
void RouterContext::CreateNewRouter ()
{
i2p::data::Identity ident;
CryptoPP::DH dh (i2p::crypto::elgp, i2p::crypto::elgg);
dh.GenerateKeyPair(m_Rnd, m_PrivateKey, ident.publicKey);
m_SigningPrivateKey.Initialize (m_Rnd, i2p::crypto::dsap, i2p::crypto::dsaq, i2p::crypto::dsag);
m_SigningPrivateKey.GetPrivateExponent ().Encode (m_SigningPrivateKeyStr, 20);
CryptoPP::DSA::PublicKey publicKey;
m_SigningPrivateKey.MakePublicKey (publicKey);
publicKey.GetPublicElement ().Encode (ident.signingKey, 128);
memset (ident.certificate, 0, sizeof (ident.certificate));
m_Keys = i2p::data::CreateRandomKeys ();
m_SigningPrivateKey.Initialize (i2p::crypto::dsap, i2p::crypto::dsaq, i2p::crypto::dsag,
CryptoPP::Integer (m_Keys.signingPrivateKey, 20));
i2p::data::Identity ident;
// copy public and signing keys together
memcpy (ident.publicKey, m_Keys.publicKey, sizeof (ident.publicKey) + sizeof (ident.signingKey));
memset (ident.certificate, 0, sizeof (ident.certificate));
m_RouterInfo.SetRouterIdentity (ident);
m_RouterInfo.AddNTCPAddress ("127.0.0.1", 17007); // TODO:
@ -76,10 +65,9 @@ namespace i2p @@ -76,10 +65,9 @@ namespace i2p
std::ifstream fk (ROUTER_KEYS);
if (!fk.is_open ()) return false;
fk.read ((char *)m_PrivateKey, 256);
fk.read ((char *)m_SigningPrivateKeyStr, 20);
fk.read ((char *)&m_Keys, sizeof (m_Keys));
m_SigningPrivateKey.Initialize (i2p::crypto::dsap, i2p::crypto::dsaq, i2p::crypto::dsag,
CryptoPP::Integer (m_SigningPrivateKeyStr, 20));
CryptoPP::Integer (m_Keys.signingPrivateKey, 20));
m_RouterInfo = i2p::data::RouterInfo (ROUTER_INFO); // TODO
@ -89,10 +77,7 @@ namespace i2p @@ -89,10 +77,7 @@ namespace i2p
void RouterContext::Save ()
{
std::ofstream fk (ROUTER_KEYS);
fk.write ((char *)m_PrivateKey, 256);
fk.write ((char *)m_SigningPrivateKeyStr, 20);
fk.write ((char *)m_RouterInfo.GetRouterIdentity ().publicKey, 256);
fk.write ((char *)m_RouterInfo.GetRouterIdentity ().signingKey, 128);
fk.write ((char *)&m_Keys, sizeof (m_Keys));
std::ofstream fi (ROUTER_INFO);
fi.write ((char *)m_RouterInfo.GetBuffer (), m_RouterInfo.GetBufferLen ());

8
RouterContext.h

@ -18,8 +18,8 @@ namespace i2p @@ -18,8 +18,8 @@ namespace i2p
RouterContext ();
i2p::data::RouterInfo& GetRouterInfo () { return m_RouterInfo; };
const uint8_t * GetPrivateKey () const { return m_PrivateKey; };
const uint8_t * GetSigningPrivateKey () const;
const uint8_t * GetPrivateKey () const { return m_Keys.privateKey; };
const uint8_t * GetSigningPrivateKey () const { return m_Keys.signingPrivateKey; };
const uint8_t * GetLeaseSetPrivateKey () const { return m_LeaseSetPrivateKey; };
const uint8_t * GetLeaseSetPublicKey () const { return m_LeaseSetPublicKey; };
const i2p::data::Identity& GetRouterIdentity () const { return m_RouterInfo.GetRouterIdentity (); };
@ -38,9 +38,9 @@ namespace i2p @@ -38,9 +38,9 @@ namespace i2p
private:
i2p::data::RouterInfo m_RouterInfo;
i2p::data::Keys m_Keys;
CryptoPP::DSA::PrivateKey m_SigningPrivateKey;
uint8_t m_PrivateKey[256], m_SigningPrivateKeyStr[20],
m_LeaseSetPublicKey[256], m_LeaseSetPrivateKey[256];
uint8_t m_LeaseSetPublicKey[256], m_LeaseSetPrivateKey[256];
CryptoPP::AutoSeededRandomPool m_Rnd;
};

Loading…
Cancel
Save