Merge branch 'master' of https://github.com/InvictusInnovations/fc
This commit is contained in:
commit
8670a4722f
5 changed files with 61 additions and 25 deletions
|
|
@ -37,12 +37,12 @@ namespace fc {
|
||||||
fc::fwd<impl,96> my;
|
fc::fwd<impl,96> my;
|
||||||
};
|
};
|
||||||
|
|
||||||
int aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
|
unsigned aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
|
||||||
unsigned char *iv, unsigned char *ciphertext);
|
unsigned char *iv, unsigned char *ciphertext);
|
||||||
int aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
unsigned aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
||||||
unsigned char *iv, unsigned char *plaintext);
|
unsigned char *iv, unsigned char *plaintext);
|
||||||
int aes_cfb_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
unsigned aes_cfb_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
||||||
unsigned char *iv, unsigned char *plaintext);
|
unsigned char *iv, unsigned char *plaintext);
|
||||||
|
|
||||||
std::vector<char> aes_encrypt( const fc::sha512& key, const std::vector<char>& plain_text );
|
std::vector<char> aes_encrypt( const fc::sha512& key, const std::vector<char>& plain_text );
|
||||||
std::vector<char> aes_decrypt( const fc::sha512& key, const std::vector<char>& cipher_text );
|
std::vector<char> aes_decrypt( const fc::sha512& key, const std::vector<char>& cipher_text );
|
||||||
|
|
|
||||||
|
|
@ -19,12 +19,21 @@ struct unsigned_int {
|
||||||
|
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
friend bool operator==( const unsigned_int& i, const uint32_t& v ) { return v == i.value; }
|
friend bool operator==( const unsigned_int& i, const uint32_t& v ) { return i.value == v; }
|
||||||
friend bool operator!=( const unsigned_int& i, const uint32_t& v ) { return v != i.value; }
|
friend bool operator==( const uint32_t& i, const unsigned_int& v ) { return i == v.value; }
|
||||||
friend bool operator<( const unsigned_int& i, const uint32_t& v ) { return v < i.value; }
|
friend bool operator==( const unsigned_int& i, const unsigned_int& v ) { return i.value == v.value; }
|
||||||
friend bool operator>=( const unsigned_int& i, const uint32_t& v ) { return v >= i.value; }
|
|
||||||
friend bool operator<( const unsigned_int& i, const unsigned_int& v ) { return v < i.value; }
|
friend bool operator!=( const unsigned_int& i, const uint32_t& v ) { return i.value != v; }
|
||||||
friend bool operator>=( const unsigned_int& i, const unsigned_int& v ) { return v >= i.value; }
|
friend bool operator!=( const uint32_t& i, const unsigned_int& v ) { return i != v.value; }
|
||||||
|
friend bool operator!=( const unsigned_int& i, const unsigned_int& v ) { return i.value != v.value; }
|
||||||
|
|
||||||
|
friend bool operator<( const unsigned_int& i, const uint32_t& v ) { return i.value < v; }
|
||||||
|
friend bool operator<( const uint32_t& i, const unsigned_int& v ) { return i < v.value; }
|
||||||
|
friend bool operator<( const unsigned_int& i, const unsigned_int& v ) { return i.value < v.value; }
|
||||||
|
|
||||||
|
friend bool operator>=( const unsigned_int& i, const uint32_t& v ) { return i.value >= v; }
|
||||||
|
friend bool operator>=( const uint32_t& i, const unsigned_int& v ) { return i >= v.value; }
|
||||||
|
friend bool operator>=( const unsigned_int& i, const unsigned_int& v ) { return i.value >= v.value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -41,6 +50,22 @@ struct signed_int {
|
||||||
signed_int& operator++(){ ++value; return *this; }
|
signed_int& operator++(){ ++value; return *this; }
|
||||||
|
|
||||||
int32_t value;
|
int32_t value;
|
||||||
|
|
||||||
|
friend bool operator==( const signed_int& i, const int32_t& v ) { return i.value == v; }
|
||||||
|
friend bool operator==( const int32_t& i, const signed_int& v ) { return i == v.value; }
|
||||||
|
friend bool operator==( const signed_int& i, const signed_int& v ) { return i.value == v.value; }
|
||||||
|
|
||||||
|
friend bool operator!=( const signed_int& i, const int32_t& v ) { return i.value != v; }
|
||||||
|
friend bool operator!=( const int32_t& i, const signed_int& v ) { return i != v.value; }
|
||||||
|
friend bool operator!=( const signed_int& i, const signed_int& v ) { return i.value != v.value; }
|
||||||
|
|
||||||
|
friend bool operator<( const signed_int& i, const int32_t& v ) { return i.value < v; }
|
||||||
|
friend bool operator<( const int32_t& i, const signed_int& v ) { return i < v.value; }
|
||||||
|
friend bool operator<( const signed_int& i, const signed_int& v ) { return i.value < v.value; }
|
||||||
|
|
||||||
|
friend bool operator>=( const signed_int& i, const int32_t& v ) { return i.value >= v; }
|
||||||
|
friend bool operator>=( const int32_t& i, const signed_int& v ) { return i >= v.value; }
|
||||||
|
friend bool operator>=( const signed_int& i, const signed_int& v ) { return i.value >= v.value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class variant;
|
class variant;
|
||||||
|
|
@ -64,4 +89,13 @@ namespace std
|
||||||
return std::hash<int32_t>()(a.value);
|
return std::hash<int32_t>()(a.value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
template<>
|
||||||
|
struct hash<fc::unsigned_int>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
size_t operator()(const fc::signed_int &a) const
|
||||||
|
{
|
||||||
|
return std::hash<uint32_t>()(a.value);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@ namespace fc {
|
||||||
#if !defined(BOOST_NO_TEMPLATE_ALIASES)
|
#if !defined(BOOST_NO_TEMPLATE_ALIASES)
|
||||||
template<typename T>
|
template<typename T>
|
||||||
using signal = boost::signals2::signal<T>;
|
using signal = boost::signals2::signal<T>;
|
||||||
|
|
||||||
|
using scoped_connection = boost::signals2::scoped_connection;
|
||||||
#else
|
#else
|
||||||
/** Workaround for missing Template Aliases feature in the VS 2012.
|
/** Workaround for missing Template Aliases feature in the VS 2012.
|
||||||
\warning Class defined below cannot have defined constructor (even base class has it)
|
\warning Class defined below cannot have defined constructor (even base class has it)
|
||||||
|
|
|
||||||
|
|
@ -157,13 +157,13 @@ uint32_t aes_decoder::final_decode( char* plaintext )
|
||||||
|
|
||||||
|
|
||||||
/** example method from wiki.opensslfoundation.com */
|
/** example method from wiki.opensslfoundation.com */
|
||||||
int aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
|
unsigned aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
|
||||||
unsigned char *iv, unsigned char *ciphertext)
|
unsigned char *iv, unsigned char *ciphertext)
|
||||||
{
|
{
|
||||||
evp_cipher_ctx ctx( EVP_CIPHER_CTX_new() );
|
evp_cipher_ctx ctx( EVP_CIPHER_CTX_new() );
|
||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int ciphertext_len = 0;
|
unsigned ciphertext_len = 0;
|
||||||
|
|
||||||
/* Create and initialise the context */
|
/* Create and initialise the context */
|
||||||
if(!ctx)
|
if(!ctx)
|
||||||
|
|
@ -206,12 +206,12 @@ int aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
|
||||||
return ciphertext_len;
|
return ciphertext_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
unsigned aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
||||||
unsigned char *iv, unsigned char *plaintext)
|
unsigned char *iv, unsigned char *plaintext)
|
||||||
{
|
{
|
||||||
evp_cipher_ctx ctx( EVP_CIPHER_CTX_new() );
|
evp_cipher_ctx ctx( EVP_CIPHER_CTX_new() );
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int plaintext_len = 0;
|
unsigned plaintext_len = 0;
|
||||||
|
|
||||||
/* Create and initialise the context */
|
/* Create and initialise the context */
|
||||||
if(!ctx)
|
if(!ctx)
|
||||||
|
|
@ -255,12 +255,12 @@ int aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *ke
|
||||||
return plaintext_len;
|
return plaintext_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int aes_cfb_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
unsigned aes_cfb_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,
|
||||||
unsigned char *iv, unsigned char *plaintext)
|
unsigned char *iv, unsigned char *plaintext)
|
||||||
{
|
{
|
||||||
evp_cipher_ctx ctx( EVP_CIPHER_CTX_new() );
|
evp_cipher_ctx ctx( EVP_CIPHER_CTX_new() );
|
||||||
int len = 0;
|
int len = 0;
|
||||||
int plaintext_len = 0;
|
unsigned plaintext_len = 0;
|
||||||
|
|
||||||
/* Create and initialise the context */
|
/* Create and initialise the context */
|
||||||
if(!ctx)
|
if(!ctx)
|
||||||
|
|
@ -308,8 +308,8 @@ std::vector<char> aes_encrypt( const fc::sha512& key, const std::vector<char>& p
|
||||||
{
|
{
|
||||||
std::vector<char> cipher_text(plain_text.size()+16);
|
std::vector<char> cipher_text(plain_text.size()+16);
|
||||||
auto cipher_len = aes_encrypt( (unsigned char*)plain_text.data(), plain_text.size(),
|
auto cipher_len = aes_encrypt( (unsigned char*)plain_text.data(), plain_text.size(),
|
||||||
(unsigned char*)&key, ((unsigned char*)&key)+32,
|
(unsigned char*)&key, ((unsigned char*)&key)+32,
|
||||||
(unsigned char*)cipher_text.data() );
|
(unsigned char*)cipher_text.data() );
|
||||||
FC_ASSERT( cipher_len <= cipher_text.size() );
|
FC_ASSERT( cipher_len <= cipher_text.size() );
|
||||||
cipher_text.resize(cipher_len);
|
cipher_text.resize(cipher_len);
|
||||||
return cipher_text;
|
return cipher_text;
|
||||||
|
|
|
||||||
|
|
@ -265,7 +265,7 @@ namespace fc { namespace ecc {
|
||||||
std::string public_key::to_base58() const
|
std::string public_key::to_base58() const
|
||||||
{
|
{
|
||||||
public_key_data key = serialize();
|
public_key_data key = serialize();
|
||||||
uint32_t check = sha256::hash(key.data, sizeof(key))._hash[0];
|
uint32_t check = (uint32_t)sha256::hash(key.data, sizeof(key))._hash[0];
|
||||||
assert(key.size() + sizeof(check) == 37);
|
assert(key.size() + sizeof(check) == 37);
|
||||||
array<char, 37> data;
|
array<char, 37> data;
|
||||||
memcpy(data.data, key.begin(), key.size());
|
memcpy(data.data, key.begin(), key.size());
|
||||||
|
|
@ -280,7 +280,7 @@ namespace fc { namespace ecc {
|
||||||
FC_ASSERT( s == sizeof(data) );
|
FC_ASSERT( s == sizeof(data) );
|
||||||
|
|
||||||
public_key_data key;
|
public_key_data key;
|
||||||
uint32_t check = sha256::hash(data.data, sizeof(key))._hash[0];
|
uint32_t check = (uint32_t)sha256::hash(data.data, sizeof(key))._hash[0];
|
||||||
FC_ASSERT( memcmp( (char*)&check, data.data + sizeof(key), sizeof(check) ) == 0 );
|
FC_ASSERT( memcmp( (char*)&check, data.data + sizeof(key), sizeof(check) ) == 0 );
|
||||||
memcpy( (char*)key.data, data.data, sizeof(key) );
|
memcpy( (char*)key.data, data.data, sizeof(key) );
|
||||||
return public_key(key);
|
return public_key(key);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue