adding aes_load and aes_save methods
This commit is contained in:
parent
8fc6f79dc9
commit
5bf5cf9219
3 changed files with 57 additions and 1 deletions
|
|
@ -6,6 +6,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace fc {
|
namespace fc {
|
||||||
|
class path;
|
||||||
|
|
||||||
class aes_encoder
|
class aes_encoder
|
||||||
{
|
{
|
||||||
|
|
@ -27,4 +28,14 @@ namespace fc {
|
||||||
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 );
|
||||||
|
|
||||||
}
|
/** encrypts plain_text and then includes a checksum that enables us to verify the integrety of
|
||||||
|
* the file / key prior to decryption.
|
||||||
|
*/
|
||||||
|
void aes_save( const fc::path& file, const fc::sha512& key, std::vector<char> plain_text );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* recovers the plain_text saved via aes_save()
|
||||||
|
*/
|
||||||
|
std::vector<char> aes_load( const fc::path& file, const fc::sha512& key );
|
||||||
|
|
||||||
|
} // namespace fc
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,8 @@ class ripemd160
|
||||||
void to_variant( const ripemd160& bi, variant& v );
|
void to_variant( const ripemd160& bi, variant& v );
|
||||||
void from_variant( const variant& v, ripemd160& bi );
|
void from_variant( const variant& v, ripemd160& bi );
|
||||||
|
|
||||||
|
typedef ripemd160 uint160_t;
|
||||||
|
|
||||||
} // namespace fc
|
} // namespace fc
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,9 @@
|
||||||
#include <fc/exception/exception.hpp>
|
#include <fc/exception/exception.hpp>
|
||||||
#include <fc/fwd_impl.hpp>
|
#include <fc/fwd_impl.hpp>
|
||||||
|
|
||||||
|
#include <fc/io/fstream.hpp>
|
||||||
|
#include <fc/io/raw.hpp>
|
||||||
|
|
||||||
namespace fc {
|
namespace fc {
|
||||||
|
|
||||||
static int init = init_openssl();
|
static int init = init_openssl();
|
||||||
|
|
@ -188,4 +191,44 @@ std::vector<char> aes_decrypt( const fc::sha512& key, const std::vector<char>& c
|
||||||
return plain_text;
|
return plain_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** encrypts plain_text and then includes a checksum that enables us to verify the integrety of
|
||||||
|
* the file / key prior to decryption.
|
||||||
|
*/
|
||||||
|
void aes_save( const fc::path& file, const fc::sha512& key, std::vector<char> plain_text )
|
||||||
|
{ try {
|
||||||
|
auto cipher = aes_encrypt( key, plain_text );
|
||||||
|
fc::sha512::encoder check_enc;
|
||||||
|
fc::raw::pack( check_enc, key );
|
||||||
|
fc::raw::pack( check_enc, cipher );
|
||||||
|
auto check = check_enc.result();
|
||||||
|
|
||||||
|
fc::ofstream out(file);
|
||||||
|
fc::raw::pack( out, check );
|
||||||
|
fc::raw::pack( out, cipher );
|
||||||
|
} FC_RETHROW_EXCEPTIONS( warn, "", ("file",file) ) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* recovers the plain_text saved via aes_save()
|
||||||
|
*/
|
||||||
|
std::vector<char> aes_load( const fc::path& file, const fc::sha512& key )
|
||||||
|
{ try {
|
||||||
|
FC_ASSERT( fc::exists( file ) );
|
||||||
|
|
||||||
|
fc::ifstream in( file, fc::ifstream::binary );
|
||||||
|
fc::sha512 check;
|
||||||
|
std::vector<char> cipher;
|
||||||
|
|
||||||
|
fc::raw::unpack( in, check );
|
||||||
|
fc::raw::unpack( in, cipher );
|
||||||
|
|
||||||
|
fc::sha512::encoder check_enc;
|
||||||
|
fc::raw::pack( check_enc, key );
|
||||||
|
fc::raw::pack( check_enc, cipher );
|
||||||
|
|
||||||
|
FC_ASSERT( check_enc.result() == check );
|
||||||
|
|
||||||
|
return aes_decrypt( key, cipher );
|
||||||
|
} FC_RETHROW_EXCEPTIONS( warn, "", ("file",file) ) }
|
||||||
|
|
||||||
} // namespace fc
|
} // namespace fc
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue