Removed unused SMTP, tiny_ini, and SHA-1 files from EPEE
Combined commit of #8172, #8173, #8174
This commit is contained in:
parent
9aab19f349
commit
c19f141942
|
@ -1,181 +0,0 @@
|
||||||
// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer in the
|
|
||||||
// documentation and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name of the Andrey N. Sabelnikov nor the
|
|
||||||
// names of its contributors may be used to endorse or promote products
|
|
||||||
// derived from this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
|
|
||||||
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include <iostream>
|
|
||||||
#include <istream>
|
|
||||||
#include <ostream>
|
|
||||||
#include <string>
|
|
||||||
#include <boost/asio.hpp>
|
|
||||||
#include <boost/bind.hpp>
|
|
||||||
#include <boost/lexical_cast.hpp>
|
|
||||||
#include <boost/archive/iterators/base64_from_binary.hpp>
|
|
||||||
#include <boost/archive/iterators/transform_width.hpp>
|
|
||||||
#include <boost/archive/iterators/ostream_iterator.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
namespace epee
|
|
||||||
{
|
|
||||||
namespace net_utils
|
|
||||||
{
|
|
||||||
namespace smtp
|
|
||||||
{
|
|
||||||
|
|
||||||
using boost::asio::ip::tcp;
|
|
||||||
using namespace boost::archive::iterators;
|
|
||||||
typedef base64_from_binary<transform_width<const char *,6,8> > base64_text;
|
|
||||||
|
|
||||||
/************************************************************************/
|
|
||||||
/* */
|
|
||||||
/************************************************************************/
|
|
||||||
class smtp_client
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
smtp_client(std::string pServer,unsigned int pPort,std::string pUser,std::string pPassword):
|
|
||||||
mServer(pServer),mPort(pPort),mUserName(pUser),mPassword(pPassword),mSocket(mIOService),mResolver(mIOService)
|
|
||||||
{
|
|
||||||
tcp::resolver::query qry(mServer,boost::lexical_cast<std::string>( mPort ));
|
|
||||||
mResolver.async_resolve(qry,boost::bind(&smtp_client::handleResolve,this,boost::asio::placeholders::error,
|
|
||||||
boost::asio::placeholders::iterator));
|
|
||||||
}
|
|
||||||
bool Send(std::string pFrom,std::string pTo,std::string pSubject,std::string pMessage)
|
|
||||||
{
|
|
||||||
mHasError = true;
|
|
||||||
mFrom=pFrom;
|
|
||||||
mTo=pTo;
|
|
||||||
mSubject=pSubject;
|
|
||||||
mMessage=pMessage;
|
|
||||||
mIOService.run();
|
|
||||||
return !mHasError;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
std::string encodeBase64(std::string pData)
|
|
||||||
{
|
|
||||||
std::stringstream os;
|
|
||||||
size_t sz=pData.size();
|
|
||||||
std::copy(base64_text(pData.c_str()),base64_text(pData.c_str()+sz),std::ostream_iterator<char>(os));
|
|
||||||
return os.str();
|
|
||||||
}
|
|
||||||
void handleResolve(const boost::system::error_code& err,tcp::resolver::iterator endpoint_iterator)
|
|
||||||
{
|
|
||||||
if(!err)
|
|
||||||
{
|
|
||||||
tcp::endpoint endpoint=*endpoint_iterator;
|
|
||||||
mSocket.async_connect(endpoint,
|
|
||||||
boost::bind(&smtp_client::handleConnect,this,boost::asio::placeholders::error,++endpoint_iterator));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mHasError=true;
|
|
||||||
mErrorMsg= err.message();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void writeLine(std::string pData)
|
|
||||||
{
|
|
||||||
std::ostream req_strm(&mRequest);
|
|
||||||
req_strm << pData << "\r\n";
|
|
||||||
boost::asio::write(mSocket,mRequest);
|
|
||||||
req_strm.clear();
|
|
||||||
}
|
|
||||||
void readLine(std::string& pData)
|
|
||||||
{
|
|
||||||
boost::asio::streambuf response;
|
|
||||||
boost::asio::read_until(mSocket, response, "\r\n");
|
|
||||||
std::istream response_stream(&response);
|
|
||||||
response_stream >> pData;
|
|
||||||
}
|
|
||||||
void handleConnect(const boost::system::error_code& err,tcp::resolver::iterator endpoint_iterator)
|
|
||||||
{
|
|
||||||
if (!err)
|
|
||||||
{
|
|
||||||
std::string read_buff;
|
|
||||||
// The connection was successful. Send the request.
|
|
||||||
std::ostream req_strm(&mRequest);
|
|
||||||
writeLine("EHLO "+mServer);
|
|
||||||
readLine(read_buff);//220
|
|
||||||
writeLine("AUTH LOGIN");
|
|
||||||
readLine(read_buff);//
|
|
||||||
writeLine(encodeBase64(mUserName));
|
|
||||||
readLine(read_buff);
|
|
||||||
writeLine(encodeBase64(mPassword));
|
|
||||||
readLine(read_buff);
|
|
||||||
writeLine( "MAIL FROM:<"+mFrom+">");
|
|
||||||
writeLine( "RCPT TO:<"+mTo+">");
|
|
||||||
writeLine( "DATA");
|
|
||||||
writeLine( "SUBJECT:"+mSubject);
|
|
||||||
writeLine( "From:"+mFrom);
|
|
||||||
writeLine( "To:"+mTo);
|
|
||||||
writeLine( "");
|
|
||||||
writeLine( mMessage );
|
|
||||||
writeLine( "\r\n.\r\n");
|
|
||||||
readLine(read_buff);
|
|
||||||
if(read_buff == "250")
|
|
||||||
mHasError = false;
|
|
||||||
writeLine( "QUIT");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mHasError=true;
|
|
||||||
mErrorMsg= err.message();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::string mServer;
|
|
||||||
std::string mUserName;
|
|
||||||
std::string mPassword;
|
|
||||||
std::string mFrom;
|
|
||||||
std::string mTo;
|
|
||||||
std::string mSubject;
|
|
||||||
std::string mMessage;
|
|
||||||
unsigned int mPort;
|
|
||||||
boost::asio::io_service mIOService;
|
|
||||||
tcp::resolver mResolver;
|
|
||||||
tcp::socket mSocket;
|
|
||||||
boost::asio::streambuf mRequest;
|
|
||||||
boost::asio::streambuf mResponse;
|
|
||||||
bool mHasError;
|
|
||||||
std::string mErrorMsg;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
bool send_mail(const std::string& server, int port, const std::string& login, const std::string& pass, const std::string& from_email, /*"STIL CRAWLER",*/
|
|
||||||
const std::string& maillist, const std::string& subject, const std::string& body)
|
|
||||||
{
|
|
||||||
STD_TRY_BEGIN();
|
|
||||||
//smtp_client mailc("yoursmtpserver.com",25,"user@yourdomain.com","password");
|
|
||||||
//mailc.Send("from@yourdomain.com","to@somewhere.com","subject","Hello from C++ SMTP Client!");
|
|
||||||
smtp_client mailc(server,port,login,pass);
|
|
||||||
return mailc.Send(from_email,maillist,subject,body);
|
|
||||||
STD_TRY_CATCH("at send_mail", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//#include "smtp.inl"
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,88 +0,0 @@
|
||||||
// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer in the
|
|
||||||
// documentation and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name of the Andrey N. Sabelnikov nor the
|
|
||||||
// names of its contributors may be used to endorse or promote products
|
|
||||||
// derived from this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
|
|
||||||
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
#include "smtp.h"
|
|
||||||
|
|
||||||
namespace epee
|
|
||||||
{
|
|
||||||
namespace net_utils
|
|
||||||
{
|
|
||||||
namespace smtp
|
|
||||||
{
|
|
||||||
|
|
||||||
inline bool send_mail(const std::string& server, int port, const std::string& login, const std::string& pass, const std::string& from_addres, const std::string& from_name, const std::string& maillist, const std::string& subject, const std::string& mail_body)
|
|
||||||
{
|
|
||||||
net_utils::smtp::CSMTPClient smtp;
|
|
||||||
|
|
||||||
if ( !smtp.ServerConnect( server.c_str(), port ) )
|
|
||||||
{
|
|
||||||
LOG_PRINT("Reporting: Failed to connect to server " << server <<":"<< port, LOG_LEVEL_0);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(login.size() && pass.size())
|
|
||||||
{
|
|
||||||
if ( !smtp.ServerLogin( login.c_str(), pass.c_str()) )
|
|
||||||
{
|
|
||||||
LOG_PRINT("Reporting: Failed to auth on server " << server <<":"<< port, LOG_LEVEL_0);
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !smtp.SendMessage( from_addres.c_str(),
|
|
||||||
from_name.c_str(),
|
|
||||||
maillist.c_str(),
|
|
||||||
subject.c_str(),
|
|
||||||
"bicycle-client",
|
|
||||||
(LPBYTE)mail_body.data(),
|
|
||||||
mail_body.size()))
|
|
||||||
{
|
|
||||||
char *szErrorText = smtp.GetLastErrorText();
|
|
||||||
if ( szErrorText )
|
|
||||||
{
|
|
||||||
LOG_PRINT("Failed to send message, error text: " << szErrorText, LOG_LEVEL_0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_PRINT("Failed to send message, error text: null", LOG_LEVEL_0);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
smtp.ServerDisconnect();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright (c) 2011, Micael Hildenborg
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of Micael Hildenborg nor the
|
|
||||||
names of its contributors may be used to endorse or promote products
|
|
||||||
derived from this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY Micael Hildenborg ''AS IS'' AND ANY
|
|
||||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL Micael Hildenborg BE LIABLE FOR ANY
|
|
||||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SHA1_DEFINED
|
|
||||||
#define SHA1_DEFINED
|
|
||||||
|
|
||||||
namespace sha1 {
|
|
||||||
|
|
||||||
/**
|
|
||||||
@param src points to any kind of data to be hashed.
|
|
||||||
@param bytelength the number of bytes to hash from the src pointer.
|
|
||||||
@param hash should point to a buffer of at least 20 bytes of size for storing the sha1 result in.
|
|
||||||
*/
|
|
||||||
void calc(const void* src, const int bytelength, unsigned char* hash);
|
|
||||||
|
|
||||||
/**
|
|
||||||
@param hash is 20 bytes of sha1 hash. This is the same data that is the result from the calc function.
|
|
||||||
@param hexstring should point to a buffer of at least 41 bytes of size for storing the hexadecimal representation of the hash. A zero will be written at position 40, so the buffer will be a valid zero ended string.
|
|
||||||
*/
|
|
||||||
void toHexString(const unsigned char* hash, char* hexstring);
|
|
||||||
|
|
||||||
} // namespace sha1
|
|
||||||
|
|
||||||
#include "sha1.inl"
|
|
||||||
|
|
||||||
#endif // SHA1_DEFINED
|
|
|
@ -1,179 +0,0 @@
|
||||||
|
|
||||||
/*
|
|
||||||
Copyright (c) 2011, Micael Hildenborg
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of Micael Hildenborg nor the
|
|
||||||
names of its contributors may be used to endorse or promote products
|
|
||||||
derived from this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY Micael Hildenborg ''AS IS'' AND ANY
|
|
||||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL Micael Hildenborg BE LIABLE FOR ANY
|
|
||||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Contributors:
|
|
||||||
Gustav
|
|
||||||
Several members in the gamedev.se forum.
|
|
||||||
Gregory Petrosyan
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "sha1.h"
|
|
||||||
|
|
||||||
namespace sha1 {
|
|
||||||
namespace {// local
|
|
||||||
// Rotate an integer value to left.
|
|
||||||
inline const unsigned int rol(const unsigned int value,
|
|
||||||
const unsigned int steps) {
|
|
||||||
return ((value << steps) | (value >> (32 - steps)));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sets the first 16 integers in the buffert to zero.
|
|
||||||
// Used for clearing the W buffert.
|
|
||||||
inline void clearWBuffert(unsigned int* buffert) {
|
|
||||||
for (int pos = 16; --pos >= 0;)
|
|
||||||
{
|
|
||||||
buffert[pos] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
void innerHash(unsigned int* result, unsigned int* w) {
|
|
||||||
unsigned int a = result[0];
|
|
||||||
unsigned int b = result[1];
|
|
||||||
unsigned int c = result[2];
|
|
||||||
unsigned int d = result[3];
|
|
||||||
unsigned int e = result[4];
|
|
||||||
|
|
||||||
int round = 0;
|
|
||||||
|
|
||||||
#define sha1macro(func,val) \
|
|
||||||
{ \
|
|
||||||
const unsigned int t = rol(a, 5) + (func) + e + val + w[round]; \
|
|
||||||
e = d; \
|
|
||||||
d = c; \
|
|
||||||
c = rol(b, 30); \
|
|
||||||
b = a; \
|
|
||||||
a = t; \
|
|
||||||
}
|
|
||||||
|
|
||||||
while (round < 16) {
|
|
||||||
sha1macro((b & c) | (~b & d), 0x5a827999)
|
|
||||||
++round;
|
|
||||||
}
|
|
||||||
while (round < 20) {
|
|
||||||
w[round] = rol(
|
|
||||||
(w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
|
|
||||||
sha1macro((b & c) | (~b & d), 0x5a827999)
|
|
||||||
++round;
|
|
||||||
}
|
|
||||||
while (round < 40) {
|
|
||||||
w[round] = rol(
|
|
||||||
(w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
|
|
||||||
sha1macro(b ^ c ^ d, 0x6ed9eba1)
|
|
||||||
++round;
|
|
||||||
}
|
|
||||||
while (round < 60) {
|
|
||||||
w[round] = rol(
|
|
||||||
(w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
|
|
||||||
sha1macro((b & c) | (b & d) | (c & d), 0x8f1bbcdc)
|
|
||||||
++round;
|
|
||||||
}
|
|
||||||
while (round < 80) {
|
|
||||||
w[round] = rol(
|
|
||||||
(w[round - 3] ^ w[round - 8] ^ w[round - 14] ^ w[round - 16]), 1);
|
|
||||||
sha1macro(b ^ c ^ d, 0xca62c1d6)
|
|
||||||
++round;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef sha1macro
|
|
||||||
|
|
||||||
result[0] += a;
|
|
||||||
result[1] += b;
|
|
||||||
result[2] += c;
|
|
||||||
result[3] += d;
|
|
||||||
result[4] += e;
|
|
||||||
}
|
|
||||||
} // namespace
|
|
||||||
|
|
||||||
inline
|
|
||||||
void calc(const void* src, const int bytelength, unsigned char* hash) {
|
|
||||||
// Init the result array.
|
|
||||||
unsigned int result[5] = { 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476,
|
|
||||||
0xc3d2e1f0 };
|
|
||||||
|
|
||||||
// Cast the void src pointer to be the byte array we can work with.
|
|
||||||
const unsigned char* sarray = (const unsigned char*) src;
|
|
||||||
|
|
||||||
// The reusable round buffer
|
|
||||||
unsigned int w[80];
|
|
||||||
|
|
||||||
// Loop through all complete 64byte blocks.
|
|
||||||
const int endOfFullBlocks = bytelength - 64;
|
|
||||||
int endCurrentBlock;
|
|
||||||
int currentBlock(0);
|
|
||||||
|
|
||||||
while (currentBlock <= endOfFullBlocks) {
|
|
||||||
endCurrentBlock = currentBlock + 64;
|
|
||||||
|
|
||||||
// Init the round buffer with the 64 byte block data.
|
|
||||||
for (int roundPos = 0; currentBlock < endCurrentBlock; currentBlock += 4)
|
|
||||||
{
|
|
||||||
// This line will swap endian on big endian and keep endian on little endian.
|
|
||||||
w[roundPos++] = (unsigned int) sarray[currentBlock + 3]
|
|
||||||
| (((unsigned int) sarray[currentBlock + 2]) << 8)
|
|
||||||
| (((unsigned int) sarray[currentBlock + 1]) << 16)
|
|
||||||
| (((unsigned int) sarray[currentBlock]) << 24);
|
|
||||||
}
|
|
||||||
innerHash(result, w);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle the last and not full 64 byte block if existing.
|
|
||||||
endCurrentBlock = bytelength - currentBlock;
|
|
||||||
clearWBuffert(w);
|
|
||||||
int lastBlockBytes = 0;
|
|
||||||
for (; lastBlockBytes < endCurrentBlock; ++lastBlockBytes) {
|
|
||||||
w[lastBlockBytes >> 2] |= (unsigned int) sarray[lastBlockBytes
|
|
||||||
+ currentBlock] << ((3 - (lastBlockBytes & 3)) << 3);
|
|
||||||
}
|
|
||||||
w[lastBlockBytes >> 2] |= 0x80 << ((3 - (lastBlockBytes & 3)) << 3);
|
|
||||||
if (endCurrentBlock >= 56) {
|
|
||||||
innerHash(result, w);
|
|
||||||
clearWBuffert(w);
|
|
||||||
}
|
|
||||||
w[15] = bytelength << 3;
|
|
||||||
innerHash(result, w);
|
|
||||||
|
|
||||||
// Store hash in result pointer, and make sure we get in in the correct order on both endian models.
|
|
||||||
for (int hashByte = 20; --hashByte >= 0;) {
|
|
||||||
hash[hashByte] = (result[hashByte >> 2] >> (((3 - hashByte) & 0x3) << 3))
|
|
||||||
& 0xff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
inline
|
|
||||||
void toHexString(const unsigned char* hash, char* hexstring) {
|
|
||||||
const char hexDigits[] = { "0123456789abcdef" };
|
|
||||||
|
|
||||||
for (int hashByte = 20; --hashByte >= 0;)
|
|
||||||
{
|
|
||||||
hexstring[hashByte << 1] = hexDigits[(hash[hashByte] >> 4) & 0xf];
|
|
||||||
hexstring[(hashByte << 1) + 1] = hexDigits[hash[hashByte] & 0xf];
|
|
||||||
}
|
|
||||||
hexstring[40] = 0;
|
|
||||||
}
|
|
||||||
} // namespace sha1
|
|
|
@ -1,61 +0,0 @@
|
||||||
// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer in the
|
|
||||||
// documentation and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name of the Andrey N. Sabelnikov nor the
|
|
||||||
// names of its contributors may be used to endorse or promote products
|
|
||||||
// derived from this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
|
|
||||||
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _TINY_INI_H_
|
|
||||||
#define _TINY_INI_H_
|
|
||||||
|
|
||||||
#include "string_tools.h"
|
|
||||||
|
|
||||||
namespace epee
|
|
||||||
{
|
|
||||||
namespace tiny_ini
|
|
||||||
{
|
|
||||||
|
|
||||||
bool get_param_value(const std::string& param_name, const std::string& ini_entry, std::string& res);
|
|
||||||
inline std::string get_param_value(const std::string& param_name, const std::string& ini_entry)
|
|
||||||
{
|
|
||||||
std::string buff;
|
|
||||||
get_param_value(param_name, ini_entry, buff);
|
|
||||||
return buff;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool get_param_value_as_t(const std::string& param_name, const std::string& ini_entry, T& res)
|
|
||||||
{
|
|
||||||
std::string str_res = get_param_value(param_name, ini_entry);
|
|
||||||
|
|
||||||
string_tools::trim(str_res);
|
|
||||||
if(!str_res.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return string_tools::get_xtype_from_string(res, str_res);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //_TINY_INI_H_
|
|
|
@ -39,7 +39,6 @@ monero_add_library(epee byte_slice.cpp byte_stream.cpp hex.cpp abstract_http_cli
|
||||||
file_io_utils.cpp
|
file_io_utils.cpp
|
||||||
net_parse_helpers.cpp
|
net_parse_helpers.cpp
|
||||||
http_base.cpp
|
http_base.cpp
|
||||||
tiny_ini.cpp
|
|
||||||
${EPEE_HEADERS_PUBLIC}
|
${EPEE_HEADERS_PUBLIC}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
// Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net
|
|
||||||
// All rights reserved.
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are met:
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer in the
|
|
||||||
// documentation and/or other materials provided with the distribution.
|
|
||||||
// * Neither the name of the Andrey N. Sabelnikov nor the
|
|
||||||
// names of its contributors may be used to endorse or promote products
|
|
||||||
// derived from this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE FOR ANY
|
|
||||||
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "string_tools.h"
|
|
||||||
#include <boost/regex.hpp>
|
|
||||||
|
|
||||||
namespace epee
|
|
||||||
{
|
|
||||||
namespace tiny_ini
|
|
||||||
{
|
|
||||||
bool get_param_value(const std::string& param_name, const std::string& ini_entry, std::string& res)
|
|
||||||
{
|
|
||||||
std::string expr_str = std::string() + "^("+ param_name +") *=(.*?)$";
|
|
||||||
const boost::regex match_ini_entry( expr_str, boost::regex::icase | boost::regex::normal);
|
|
||||||
boost::smatch result;
|
|
||||||
if(!boost::regex_search(ini_entry, result, match_ini_entry, boost::match_default))
|
|
||||||
return false;
|
|
||||||
res = result[2];
|
|
||||||
string_tools::trim(res);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue