mirror of https://github.com/PurpleI2P/i2pd.git
orignal
9 years ago
13 changed files with 206 additions and 24 deletions
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
#include "util.h" |
||||
#include <openssl/evp.h> |
||||
#include <openssl/ssl.h> |
||||
#include "Log.h" |
||||
#include "Family.h" |
||||
|
||||
namespace i2p |
||||
{ |
||||
namespace data |
||||
{ |
||||
Families::Families () |
||||
{ |
||||
} |
||||
|
||||
Families::~Families () |
||||
{ |
||||
} |
||||
|
||||
void Families::LoadCertificate (const std::string& filename) |
||||
{ |
||||
SSL_CTX * ctx = SSL_CTX_new (TLSv1_method ()); |
||||
int ret = SSL_CTX_use_certificate_file (ctx, filename.c_str (), SSL_FILETYPE_PEM); |
||||
if (ret) |
||||
{ |
||||
SSL * ssl = SSL_new (ctx); |
||||
X509 * cert = SSL_get_certificate (ssl); |
||||
// verify
|
||||
if (cert) |
||||
{ |
||||
// extract issuer name
|
||||
char name[100]; |
||||
X509_NAME_oneline (X509_get_issuer_name(cert), name, 100); |
||||
auto pkey = X509_get_pubkey (cert); |
||||
int keyType = EVP_PKEY_type(pkey->type); |
||||
switch (keyType) |
||||
{ |
||||
case EVP_PKEY_DSA: |
||||
// TODO:
|
||||
break; |
||||
case EVP_PKEY_EC: |
||||
{ |
||||
//EC_KEY * ecKey = EVP_PKEY_get0_EC_KEY (pkey);
|
||||
break; |
||||
} |
||||
default: |
||||
LogPrint (eLogWarning, "Family: Certificate key type ", keyType, " is not supported"); |
||||
} |
||||
EVP_PKEY_free (pkey); |
||||
} |
||||
SSL_free (ssl); |
||||
} |
||||
else |
||||
LogPrint (eLogError, "Family: Can't open certificate file ", filename); |
||||
SSL_CTX_free (ctx); |
||||
} |
||||
|
||||
void Families::LoadCertificates () |
||||
{ |
||||
boost::filesystem::path familyDir = i2p::util::filesystem::GetCertificatesDir() / "family"; |
||||
|
||||
if (!boost::filesystem::exists (familyDir)) return; |
||||
int numCertificates = 0; |
||||
boost::filesystem::directory_iterator end; // empty
|
||||
for (boost::filesystem::directory_iterator it (familyDir); it != end; ++it) |
||||
{ |
||||
if (boost::filesystem::is_regular_file (it->status()) && it->path ().extension () == ".crt") |
||||
{ |
||||
LoadCertificate (it->path ().string ()); |
||||
numCertificates++; |
||||
} |
||||
} |
||||
if (numCertificates > 0) |
||||
LogPrint (eLogInfo, "Family: ", numCertificates, " certificates loaded"); |
||||
} |
||||
} |
||||
} |
||||
|
@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
|
||||
#ifndef FAMILY_H__ |
||||
#define FAMILY_H_ |
||||
|
||||
#include <map> |
||||
#include <string> |
||||
#include <memory> |
||||
#include "Signature.h" |
||||
|
||||
namespace i2p |
||||
{ |
||||
namespace data |
||||
{ |
||||
class Families |
||||
{ |
||||
public: |
||||
|
||||
Families (); |
||||
~Families (); |
||||
void LoadCertificates (); |
||||
|
||||
private: |
||||
|
||||
void LoadCertificate (const std::string& filename); |
||||
|
||||
private: |
||||
|
||||
std::map<std::string, std::shared_ptr<i2p::crypto::Verifier> > m_SigningKeys; |
||||
}; |
||||
} |
||||
} |
||||
|
||||
#endif |
Loading…
Reference in new issue