IdentityEx::IdentityEx(const uint8_t * publicKey, const uint8_t * signingKey, SigningKeyType type) { memcpy (m_StandardIdentity.publicKey, publicKey, sizeof (m_StandardIdentity.publicKey)); if (type == SIGNING_KEY_TYPE_ECDSA_SHA256_P256) { memcpy (m_StandardIdentity.signingKey + 64, signingKey, 64); m_StandardIdentity.certificate.type = CERTIFICATE_TYPE_KEY; m_ExtendedLen = 4; // 4 bytes extra m_StandardIdentity.certificate.length = htobe16 (4); m_ExtendedBuffer = new uint8_t[m_ExtendedLen]; *(uint16_t *)m_ExtendedBuffer = htobe16 (SIGNING_KEY_TYPE_ECDSA_SHA256_P256); *(uint16_t *)(m_ExtendedBuffer + 2) = htobe16 (CRYPTO_KEY_TYPE_ELGAMAL); uint8_t buf[DEFAULT_IDENTITY_SIZE + 4]; ToBuffer (buf, DEFAULT_IDENTITY_SIZE + 4); CryptoPP::SHA256().CalculateDigest(m_IdentHash, buf, GetFullLen ()); } else // DSA-SHA1 { memcpy (m_StandardIdentity.signingKey, signingKey, sizeof (m_StandardIdentity.signingKey)); memset (&m_StandardIdentity.certificate, 0, sizeof (m_StandardIdentity.certificate)); m_IdentHash = m_StandardIdentity.Hash (); m_ExtendedLen = 0; m_ExtendedBuffer = nullptr; } CreateVerifier (); }
std::vector<boost::asio::const_buffer> Reply::toBuffers(){ std::vector<boost::asio::const_buffer> buffers; buffers.push_back(ToBuffer(status)); BOOST_FOREACH(const Header & h, headers) { buffers.push_back(boost::asio::buffer(h.name)); buffers.push_back(boost::asio::buffer(seperators)); buffers.push_back(boost::asio::buffer(h.value)); buffers.push_back(boost::asio::buffer(crlf)); }
std::vector<boost::asio::const_buffer> Reply::HeaderstoBuffers() { std::vector<boost::asio::const_buffer> buffers; buffers.push_back(ToBuffer(status)); for (std::size_t i = 0; i < headers.size(); ++i) { Header ¤t_header = headers[i]; buffers.push_back(boost::asio::buffer(current_header.name)); buffers.push_back(boost::asio::buffer(seperators)); buffers.push_back(boost::asio::buffer(current_header.value)); buffers.push_back(boost::asio::buffer(crlf)); } buffers.push_back(boost::asio::buffer(crlf)); return buffers; }
std::vector<boost::asio::const_buffer> Reply::toBuffers() { std::vector<boost::asio::const_buffer> buffers; buffers.push_back(ToBuffer(status)); for (const Header &h : headers) { buffers.push_back(boost::asio::buffer(h.name)); buffers.push_back(boost::asio::buffer(seperators)); buffers.push_back(boost::asio::buffer(h.value)); buffers.push_back(boost::asio::buffer(crlf)); } buffers.push_back(boost::asio::buffer(crlf)); buffers.push_back(boost::asio::buffer(content)); return buffers; }