1 #include "../../include/freenet/frostidentity.h"
\r
2 #include "../../include/stringfunctions.h"
\r
3 #include "../../include/base64.h"
\r
7 FrostIdentity::FrostIdentity()
\r
9 std::memset(&m_rsa,0,sizeof(m_rsa));
\r
12 FrostIdentity::~FrostIdentity()
\r
17 const bool FrostIdentity::FromPublicKey(const std::string &publickey)
\r
19 std::vector<std::string> keyparts;
\r
20 std::vector<unsigned char> edata;
\r
21 std::vector<unsigned char> ndata;
\r
24 std::memset(&m_rsa,0,sizeof(m_rsa));
\r
26 StringFunctions::Split(publickey,":",keyparts);
\r
28 if(keyparts.size()==2)
\r
30 Base64::Decode(keyparts[0],edata);
\r
31 Base64::Decode(keyparts[1],ndata);
\r
33 m_rsa.type=PK_PUBLIC;
\r
37 mp_read_unsigned_bin(m_rsa.N,&ndata[0],ndata.size());
\r
38 mp_read_unsigned_bin(m_rsa.e,&edata[0],edata.size());
\r
40 ltm_desc.init(&m_rsa.N);
\r
41 ltm_desc.init(&m_rsa.e);
\r
42 ltm_desc.unsigned_read(m_rsa.N,&ndata[0],ndata.size());
\r
43 ltm_desc.unsigned_read(m_rsa.e,&edata[0],edata.size());
\r
46 m_publickey=publickey;
\r
56 const bool FrostIdentity::VerifyAuthor(const std::string &author)
\r
58 std::vector<std::string> authorparts;
\r
59 std::vector<unsigned char> authorhash(100,0);
\r
60 unsigned long authorhashlen=authorhash.size();
\r
61 std::string authorhashstr="";
\r
62 std::vector<unsigned char> publickeydata(m_publickey.begin(),m_publickey.end());
\r
64 StringFunctions::Split(author,"@",authorparts);
\r
66 if(m_publickey!="" && authorparts.size()==2)
\r
68 hash_memory(find_hash("sha1"),&publickeydata[0],publickeydata.size(),&authorhash[0],&authorhashlen);
\r
69 authorhash.resize(authorhashlen);
\r
71 Base64::Encode(authorhash,authorhashstr);
\r
73 authorhashstr.erase(27);
\r
74 authorhashstr=StringFunctions::Replace(authorhashstr,"/","_");
\r
76 return (authorhashstr==authorparts[1]);
\r
86 const bool FrostIdentity::VerifySignature(const std::vector<unsigned char> &data, const std::string &signature)
\r
88 std::vector<unsigned char> sigdata;
\r
89 std::vector<unsigned char> hashdata(100,0);
\r
90 unsigned long hashlen=hashdata.size();
\r
95 Base64::Decode(signature,sigdata);
\r
97 hash_memory(find_hash("sha1"),&data[0],data.size(),&hashdata[0],&hashlen);
\r
98 hashdata.resize(hashlen);
\r
100 rval=rsa_verify_hash_ex(&sigdata[0],sigdata.size(),&hashdata[0],hashdata.size(),LTC_PKCS_1_PSS,find_hash("sha1"),16,&status,&m_rsa);
\r
102 return (rval==0 && status==1) ? true : false;
\r