20 Letter::Letter(
const string &fqrn,
23 : fqrn_(fqrn), text_(text), signature_manager_(signature_manager) { }
27 unsigned char *cert_buf = NULL;
28 unsigned cert_buf_size;
32 string cert_base64 =
Base64(
33 string(reinterpret_cast<char *>(cert_buf), cert_buf_size));
36 string output =
text_;
37 output += string(
"\n##\n") +
"V1" +
"\n" +
"N" +
fqrn_ +
"\n" +
"T"
38 +
StringifyInt(time(NULL)) +
"\n" +
"X" + cert_base64 +
"\n";
40 shash::HashMem(reinterpret_cast<const unsigned char *>(output.data()),
41 output.length(), &output_hash);
42 output +=
"--\n" + output_hash.
ToString() +
"\n";
47 reinterpret_cast<const unsigned char *>(output_hash.
ToString().data()),
50 output.append(reinterpret_cast<char *>(sig), sig_size);
73 const unsigned char *data_ptr =
reinterpret_cast<const unsigned char *
>(
77 if (env_pos >= dec.length())
82 *msg = dec.substr(0, msg_len - 1);
84 data_ptr + env_pos, dec.length() - env_pos,
'-', &env_len, &sig_pos);
85 if (sig_pos >= dec.length())
88 map<char, string> env;
90 map<char, string>::const_iterator iter;
91 if ((iter = env.find(
'T')) == env.end())
95 if (timestamp + max_age < static_cast<uint64_t>(time(NULL)))
98 if ((iter = env.find(
'N')) == env.end())
100 if (iter->second !=
fqrn_)
102 if ((iter = env.find(
'X')) == env.end())
104 string cert_b64 = iter->second;
109 reinterpret_cast<const unsigned char *>(cert->data()), cert->length());
std::string ToString(const bool with_suffix=false) const
Failures Verify(uint64_t max_age, std::string *msg, std::string *cert)
bool LoadCertificateMem(const unsigned char *buffer, const unsigned buffer_size)
assert((mem||(size==0))&&"Out Of Memory")
static void CutLetter(const unsigned char *buffer, const unsigned buffer_size, const char separator, unsigned *letter_length, unsigned *pos_after_mark)
bool Debase64(const string &data, string *decoded)
bool Sign(const unsigned char *buffer, const unsigned buffer_size, unsigned char **signature, unsigned *signature_size)
std::string Sign(const shash::Algorithms hash_algorithm)
string StringifyInt(const int64_t value)
bool WriteCertificateMem(unsigned char **buffer, unsigned *buffer_size)
void HashMem(const unsigned char *buffer, const unsigned buffer_size, Any *any_digest)
string Base64(const string &data)
uint64_t String2Uint64(const string &value)
unsigned GetHexSize() const
signature::SignatureManager * signature_manager_
void ParseKeyvalMem(const unsigned char *buffer, const unsigned buffer_size, map< char, string > *content)
bool VerifyLetter(const unsigned char *buffer, const unsigned buffer_size, const bool by_rsa)