Commit 14aa33e4 authored by yiwenshao's avatar yiwenshao

rename ASHE to RAW_ASHE and add ASHE in main/rewrite_main.cc:buildTypeTextTranslator

parent dd228f42
#include "crypto/ASHE.hh" #include "crypto/ASHE.hh"
#include <iostream> #include <iostream>
const unsigned int ASHE::ASHE_MAX = 0xffffffff; const unsigned int RAW_ASHE::RAW_ASHE_MAX = 0xffffffff;
const std::string ASHE::key("11223344"); const std::string RAW_ASHE::key("11223344");
blowfish ASHE::bf(ASHE::key); blowfish RAW_ASHE::bf(RAW_ASHE::key);
ASHE::ASHE(int i):IV(i){ RAW_ASHE::RAW_ASHE(int i):IV(i){
} }
std::pair<long,uint64_t> ASHE::encrypt(unsigned int plaintext){ std::pair<long,uint64_t> RAW_ASHE::encrypt(unsigned int plaintext){
uint64_t i = Fi(IV)%ASHE_MAX, i_1=Fi_1(IV)%ASHE_MAX; uint64_t i = Fi(IV)%RAW_ASHE_MAX, i_1=Fi_1(IV)%RAW_ASHE_MAX;
long res = (long)i_1 - (long)i; long res = (long)i_1 - (long)i;
ciphertext = ((long)plaintext + res)%ASHE_MAX; ciphertext = ((long)plaintext + res)%RAW_ASHE_MAX;
return std::make_pair(ciphertext,IV); return std::make_pair(ciphertext,IV);
} }
unsigned int ASHE::decrypt(long ciphertext){ unsigned int RAW_ASHE::decrypt(long ciphertext){
uint64_t i = Fi(IV)%ASHE_MAX, i_1=Fi_1(IV)%ASHE_MAX; uint64_t i = Fi(IV)%RAW_ASHE_MAX, i_1=Fi_1(IV)%RAW_ASHE_MAX;
long res = (long)i - (long)i_1; long res = (long)i - (long)i_1;
return (ciphertext + res)%ASHE_MAX; return (ciphertext + res)%RAW_ASHE_MAX;
} }
std::pair<long,std::vector<uint64_t>> ASHE::sum(std::vector<ASHE> input){ std::pair<long,std::vector<uint64_t>> RAW_ASHE::sum(std::vector<RAW_ASHE> input){
long res=0; long res=0;
std::vector<uint64_t> ivs; std::vector<uint64_t> ivs;
for(auto &item:input){ for(auto &item:input){
long cph = item.get_ciphertext(); long cph = item.get_ciphertext();
res += cph; res += cph;
res %= ASHE_MAX; res %= RAW_ASHE_MAX;
ivs.push_back(item.get_IV()); ivs.push_back(item.get_IV());
} }
return std::make_pair(res,ivs); return std::make_pair(res,ivs);
} }
uint64_t ASHE::decrypt_sum(std::pair<long,std::vector<uint64_t>> input){ uint64_t RAW_ASHE::decrypt_sum(std::pair<long,std::vector<uint64_t>> input){
long res = input.first; long res = input.first;
for(auto item:input.second){ for(auto item:input.second){
uint64_t i = Fi(item)%ASHE_MAX, i_1=Fi_1(item)%ASHE_MAX; uint64_t i = Fi(item)%RAW_ASHE_MAX, i_1=Fi_1(item)%RAW_ASHE_MAX;
long target = (long)i - (long)i_1; long target = (long)i - (long)i_1;
res += target; res += target;
res %= ASHE_MAX; res %= RAW_ASHE_MAX;
} }
return res; return res;
} }
......
...@@ -3,14 +3,14 @@ ...@@ -3,14 +3,14 @@
#include <string> #include <string>
#include "crypto/blowfish.hh" #include "crypto/blowfish.hh"
class ASHE{ class RAW_ASHE{
static const unsigned int ASHE_MAX;/*n*/ static const unsigned int RAW_ASHE_MAX;/*n*/
static const std::string key; static const std::string key;
static blowfish bf; static blowfish bf;
uint64_t IV; uint64_t IV;
long ciphertext; long ciphertext;
public: public:
ASHE(int iv); RAW_ASHE(int iv);
long get_ciphertext(){return ciphertext;} long get_ciphertext(){return ciphertext;}
...@@ -21,6 +21,6 @@ public: ...@@ -21,6 +21,6 @@ public:
static uint64_t Fi(uint64_t IV){return bf.encrypt(IV)%100000;} static uint64_t Fi(uint64_t IV){return bf.encrypt(IV)%100000;}
static uint64_t Fi_1(uint64_t IV){return bf.encrypt(IV-1)%100000;} static uint64_t Fi_1(uint64_t IV){return bf.encrypt(IV-1)%100000;}
static std::pair<long,std::vector<uint64_t>> sum(std::vector<ASHE>); static std::pair<long,std::vector<uint64_t>> sum(std::vector<RAW_ASHE>);
static uint64_t decrypt_sum(std::pair<long,std::vector<uint64_t>>); static uint64_t decrypt_sum(std::pair<long,std::vector<uint64_t>>);
}; };
...@@ -6,12 +6,12 @@ int main(){ ...@@ -6,12 +6,12 @@ int main(){
const int num_of_tests = 100; const int num_of_tests = 100;
unsigned int seed = 1u; unsigned int seed = 1u;
std::vector<unsigned int> plain; std::vector<unsigned int> plain;
std::vector<ASHE> ass; std::vector<RAW_ASHE> ass;
for(int i=0;i<num_of_tests;i++){ for(int i=0;i<num_of_tests;i++){
plain.push_back(seed); plain.push_back(seed);
uint64_t IV = randomValue(); uint64_t IV = randomValue();
if(IV==0) IV=1; if(IV==0) IV=1;
ass.push_back(ASHE(IV)); ass.push_back(RAW_ASHE(IV));
ass.back().encrypt(seed); ass.back().encrypt(seed);
unsigned int res = ass.back().decrypt(ass.back().get_ciphertext()); unsigned int res = ass.back().decrypt(ass.back().get_ciphertext());
if(res==seed) std::cout<<"pass"<<std::endl; if(res==seed) std::cout<<"pass"<<std::endl;
...@@ -19,8 +19,8 @@ int main(){ ...@@ -19,8 +19,8 @@ int main(){
seed++; seed++;
} }
std::pair<long,std::vector<uint64_t>> enc_sum = ASHE::sum(ass); std::pair<long,std::vector<uint64_t>> enc_sum = RAW_ASHE::sum(ass);
long res = ASHE::decrypt_sum(enc_sum); long res = RAW_ASHE::decrypt_sum(enc_sum);
std::cout<<enc_sum.first<<"::"<<res<<std::endl; std::cout<<enc_sum.first<<"::"<<res<<std::endl;
return 0; return 0;
} }
......
...@@ -211,6 +211,7 @@ EncLayerFactory::encLayer(onion o, SECLEVEL sl, const Create_field &cf, ...@@ -211,6 +211,7 @@ EncLayerFactory::encLayer(onion o, SECLEVEL sl, const Create_field &cf,
case SECLEVEL::OPE:{return OPEFactory::create(cf, key);} case SECLEVEL::OPE:{return OPEFactory::create(cf, key);}
case SECLEVEL::OPEFOREIGN:{return OPEFOREIGNFactory::create(cf,key);} case SECLEVEL::OPEFOREIGN:{return OPEFOREIGNFactory::create(cf,key);}
case SECLEVEL::HOM: {return HOMFactory::create(cf, key);} case SECLEVEL::HOM: {return HOMFactory::create(cf, key);}
case SECLEVEL::ASHE: {return std::unique_ptr<EncLayer>(new ASHE(cf,key));}
case SECLEVEL::SEARCH: { case SECLEVEL::SEARCH: {
return std::unique_ptr<EncLayer>(new Search(cf, key)); return std::unique_ptr<EncLayer>(new Search(cf, key));
} }
...@@ -247,6 +248,7 @@ EncLayerFactory::deserializeLayer(unsigned int id, ...@@ -247,6 +248,7 @@ EncLayerFactory::deserializeLayer(unsigned int id,
case SECLEVEL::HOM: case SECLEVEL::HOM:
return std::unique_ptr<EncLayer>(new HOM(id, serial)); return std::unique_ptr<EncLayer>(new HOM(id, serial));
case SECLEVEL::ASHE: return std::unique_ptr<EncLayer>(new ASHE(id, serial));
case SECLEVEL::SEARCH: case SECLEVEL::SEARCH:
return std::unique_ptr<EncLayer>(new Search(id, serial)); return std::unique_ptr<EncLayer>(new Search(id, serial));
......
...@@ -642,22 +642,22 @@ static bool ...@@ -642,22 +642,22 @@ static bool
buildTypeTextTranslator(){ buildTypeTextTranslator(){
// Onions. // Onions.
const std::vector<std::string> onion_strings { const std::vector<std::string> onion_strings {
"oINVALID", "oPLAIN", "oEq", "oOrder", "oADD", "oSWP" "oINVALID", "oPLAIN", "oEq", "oOrder", "oADD", "oSWP","oASHE"
}; };
const std::vector<onion> onions { const std::vector<onion> onions {
oINVALID, oPLAIN, oDET, oOPE, oAGG, oSWP oINVALID, oPLAIN, oDET, oOPE, oAGG, oSWP,oASHE
}; };
RETURN_FALSE_IF_FALSE(onion_strings.size() == onions.size()); RETURN_FALSE_IF_FALSE(onion_strings.size() == onions.size());
translatorHelper<onion>(onion_strings, onions); translatorHelper<onion>(onion_strings, onions);
// SecLevels. // SecLevels.
const std::vector<std::string> seclevel_strings{ const std::vector<std::string> seclevel_strings{
"RND", "DET", "DETJOIN","OPEFOREIGN" ,"OPE", "HOM", "SEARCH", "PLAINVAL", "RND", "DET", "DETJOIN","OPEFOREIGN" ,"OPE", "HOM", "SEARCH", "PLAINVAL",
"INVALID" "INVALID","ASHE"
}; };
const std::vector<SECLEVEL> seclevels{ const std::vector<SECLEVEL> seclevels{
SECLEVEL::RND, SECLEVEL::DET, SECLEVEL::DETJOIN, SECLEVEL::OPEFOREIGN,SECLEVEL::OPE, SECLEVEL::RND, SECLEVEL::DET, SECLEVEL::DETJOIN, SECLEVEL::OPEFOREIGN,SECLEVEL::OPE,
SECLEVEL::HOM, SECLEVEL::SEARCH, SECLEVEL::PLAINVAL, SECLEVEL::HOM, SECLEVEL::SEARCH, SECLEVEL::PLAINVAL,
SECLEVEL::INVALID SECLEVEL::INVALID, SECLEVEL::ASHE
}; };
RETURN_FALSE_IF_FALSE(seclevel_strings.size() == seclevels.size()); RETURN_FALSE_IF_FALSE(seclevel_strings.size() == seclevels.size());
translatorHelper(seclevel_strings, seclevels); translatorHelper(seclevel_strings, seclevels);
......
...@@ -10,16 +10,17 @@ onionlayout PLAIN_ONION_LAYOUT = { ...@@ -10,16 +10,17 @@ onionlayout PLAIN_ONION_LAYOUT = {
/***************************ofthen used*******************************************************/ /***************************ofthen used*******************************************************/
onionlayout NUM_ONION_LAYOUT = { onionlayout NUM_ONION_LAYOUT = {
{oDET, std::vector<SECLEVEL>({SECLEVEL::DETJOIN, SECLEVEL::DET, // {oDET, std::vector<SECLEVEL>({SECLEVEL::DETJOIN, SECLEVEL::DET,
SECLEVEL::RND})}, // SECLEVEL::RND})},
{oOPE, std::vector<SECLEVEL>({SECLEVEL::OPEFOREIGN,SECLEVEL::OPE, SECLEVEL::RND})}, // {oOPE, std::vector<SECLEVEL>({SECLEVEL::OPEFOREIGN,SECLEVEL::OPE, SECLEVEL::RND})},
{oAGG, std::vector<SECLEVEL>({SECLEVEL::HOM})} // {oAGG, std::vector<SECLEVEL>({SECLEVEL::HOM})}
{oASHE,std::vector<SECLEVEL>({SECLEVEL::ASHE})}
}; };
onionlayout STR_ONION_LAYOUT = { onionlayout STR_ONION_LAYOUT = {
{oDET, std::vector<SECLEVEL>({SECLEVEL::DETJOIN, SECLEVEL::DET, // {oDET, std::vector<SECLEVEL>({SECLEVEL::DETJOIN, SECLEVEL::DET,
SECLEVEL::RND})}, // SECLEVEL::RND})},
{oOPE, std::vector<SECLEVEL>({SECLEVEL::OPEFOREIGN, SECLEVEL::OPE, SECLEVEL::RND})}, // {oOPE, std::vector<SECLEVEL>({SECLEVEL::OPEFOREIGN, SECLEVEL::OPE, SECLEVEL::RND})},
{oSWP, std::vector<SECLEVEL>({SECLEVEL::SEARCH})} {oSWP, std::vector<SECLEVEL>({SECLEVEL::SEARCH})}
// {oSWP, std::vector<SECLEVEL>({SECLEVEL::PLAINVAL, SECLEVEL::DET, // {oSWP, std::vector<SECLEVEL>({SECLEVEL::PLAINVAL, SECLEVEL::DET,
// SECLEVEL::RND})} // SECLEVEL::RND})}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment