add keyinfo tool

This commit is contained in:
Jeff Becker 2016-10-05 10:06:06 -04:00
parent 526ba37435
commit 71d4221af2
No known key found for this signature in database
GPG Key ID: AB950234D6EA286B
7 changed files with 112 additions and 2 deletions

10
.gitignore vendored
View File

@ -14,7 +14,7 @@ netDb
autom4te.cache
.deps
stamp-h1
Makefile
#Makefile
config.h
config.h.in~
config.log
@ -238,3 +238,11 @@ pip-log.txt
# Sphinx
docs/_build
/androidIdea/
# emacs files
*~
*\#*
# gdb files
.gdb_history

View File

@ -80,7 +80,13 @@ $(ARLIB): $(patsubst %.cpp,obj/%.o,$(LIB_SRC))
$(ARLIB_CLIENT): $(patsubst %.cpp,obj/%.o,$(LIB_CLIENT_SRC))
ar -r $@ $^
clean:
tools: $(ARLIB)
$(MAKE) -C contrib/tools/
clean-tools:
$(MAKE) -C contrib/tools/ clean
clean: clean-tools
rm -rf obj
rm -rf docs/generated
$(RM) $(I2PD) $(SHLIB) $(ARLIB) $(SHLIB_CLIENT) $(ARLIB_CLIENT)

7
contrib/tools/Makefile Normal file
View File

@ -0,0 +1,7 @@
all:
$(MAKE) -C keyinfo keyinfo
clean:
$(MAKE) -C keyinfo clean

6
contrib/tools/README.md Normal file
View File

@ -0,0 +1,6 @@
Collection of i2pd related tools
# Buildling
run `make tools` in the root of the repo

View File

@ -0,0 +1,8 @@
CXXFLAGS = -I ../../../
all: keyinfo
keyinfo:
$(CXX) -o keyinfo keyinfo.cpp $(CXXFLAGS) -std=c++11 ../../../libi2pd.a -lssl -lcrypto -lboost_system
clean:
$(RM) keyinfo

View File

@ -0,0 +1,5 @@
# keyinfo
print information about a private key file

View File

@ -0,0 +1,70 @@
#include "Identity.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <unistd.h>
int main(int argc, char * argv[])
{
if(argc == 1) {
std::cout << "usage: " << argv[0] << " [-v] [-d] privatekey.dat" << std::endl;
return -1;
}
int opt;
bool print_full = false;
bool verbose = false;
while((opt = getopt(argc, argv, "vd"))!=-1) {
switch(opt){
case 'v':
verbose = true;
break;
case 'd':
print_full = true;
break;
default:
std::cout << "usage: " << argv[0] << " [-v] [-d] privatekey.dat" << std::endl;
return -1;
}
}
std::string fname(argv[optind]);
i2p::data::PrivateKeys keys;
{
std::vector<uint8_t> buff;
std::ifstream inf;
inf.open(fname);
if (!inf.is_open()) {
std::cout << "cannot open private key file " << fname << std::endl;
return 2;
}
inf.seekg(0, std::ios::end);
const std::size_t len = inf.tellg();
inf.seekg(0, std::ios::beg);
buff.resize(len);
inf.read((char*)buff.data(), buff.size());
if (!keys.FromBuffer(buff.data(), buff.size())) {
std::cout << "bad key file format" << std::endl;
return 3;
}
}
auto dest = keys.GetPublic();
if(!dest) {
std::cout << "failed to extract public key" << std::endl;
return 3;
}
const auto & ident = dest->GetIdentHash();
if (verbose) {
std::cout << "Destination: " << dest->ToBase64() << std::endl;
std::cout << "Destination Hash: " << ident.ToBase64() << std::endl;
std::cout << "B32 Address: " << ident.ToBase32() << ".b32.i2p" << std::endl;
std::cout << "Signature Type: " << (int) dest->GetSigningKeyType() << std::endl;
std::cout << "Encryption Type: " << (int) dest->GetCryptoKeyType() << std::endl;
} else {
if(print_full) {
std::cout << dest->ToBase64() << std::endl;
} else {
std::cout << ident.ToBase32() << ".b32.i2p" << std::endl;
}
}
}