From 60b93ac3a1ff2b65d719a2840609e4b6016863b1 Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 24 Feb 2017 22:23:48 -0500 Subject: [PATCH] regaddr added --- Makefile | 7 +++++-- i2pd | 2 +- regaddr.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 regaddr.cpp diff --git a/Makefile b/Makefile index a208970..82eb483 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ OBJECTS = $(SOURCES:.cpp=.o) I2PD_LIB = libi2pd.a -all: keygen keyinfo famtool routerinfo +all: keygen keyinfo famtool routerinfo regaddr routerinfo: $(OBJECTS) $(CXX) -o routerinfo routerinfo.o $(LDFLAGS) $(LIBS) @@ -25,6 +25,9 @@ keyinfo: $(OBJECTS) famtool: $(OBJECTS) $(CXX) -o famtool famtool.o $(LDFLAGS) $(LIBS) +regaddr: $(OBJECTS) + $(CXX) -o regaddr regaddr.o $(LDFLAGS) $(LIBS) + $(OBJECTS): libi2pd.a .SUFFIXES: @@ -46,7 +49,7 @@ clean-obj: rm -f $(OBJECTS) clean-bin: - rm -f keyinfo keygen famtool + rm -f keyinfo keygen famtool regaddr clean: clean-i2pd clean-obj clean-bin diff --git a/i2pd b/i2pd index 6fc80e9..1ce6ad5 160000 --- a/i2pd +++ b/i2pd @@ -1 +1 @@ -Subproject commit 6fc80e9b67c8ee0a4c2c82c9173d2c1fb56b0efb +Subproject commit 1ce6ad5ccc812599728e0a6f07767e52b48ecbee diff --git a/regaddr.cpp b/regaddr.cpp new file mode 100644 index 0000000..53672be --- /dev/null +++ b/regaddr.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include "Identity.h" +#include "Base.h" + +int main (int argc, char * argv[]) +{ + if (argc < 2) + { + std::cout << "Usage: regaddr filename address" << std::endl; + return -1; + } + + i2p::crypto::InitCrypto (false); + + i2p::data::PrivateKeys keys; + std::ifstream s(argv[1], std::ifstream::binary); + if (s.is_open ()) + { + s.seekg (0, std::ios::end); + size_t len = s.tellg(); + s.seekg (0, std::ios::beg); + uint8_t * buf = new uint8_t[len]; + s.read ((char *)buf, len); + if(keys.FromBuffer (buf, len)) + { + auto signatureLen = keys.GetPublic ()->GetSignatureLen (); + uint8_t * signature = new uint8_t[signatureLen]; + char * sig = new char[signatureLen*2]; + std::stringstream out; + out << argv[2] << "="; // address + out << keys.GetPublic ()->ToBase64 (); + keys.Sign ((uint8_t *)out.str ().c_str (), out.str ().length (), signature); + auto len = i2p::data::ByteStreamToBase64 (signature, signatureLen, sig, signatureLen*2); + sig[len] = 0; + out << "#!sig=" << sig; + delete[] signature; + delete[] sig; + std::cout << out.str () << std::endl; + } + else + std::cout << "Failed to load keyfile " << argv[1] << std::endl; + delete[] buf; + } + + i2p::crypto::TerminateCrypto (); + + return 0; +}