Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
Practical-Cryptdb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Zhaozhen
Practical-Cryptdb
Commits
a5135821
Commit
a5135821
authored
Jan 19, 2018
by
yiwenshao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
able to use loadAll
parent
bb8d4480
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
172 additions
and
77 deletions
+172
-77
final_load.cc
debug/final_load.cc
+74
-76
.common.cc.swp
wrapper/.common.cc.swp
+0
-0
common.cc
wrapper/common.cc
+37
-0
common.hh
wrapper/common.hh
+8
-1
reuse.cc
wrapper/reuse.cc
+31
-0
reuse.hh
wrapper/reuse.hh
+22
-0
No files found.
debug/final_load.cc
View file @
a5135821
...
@@ -52,6 +52,11 @@ static void init(){
...
@@ -52,6 +52,11 @@ static void init(){
globalConn
=
new
Connect
(
ci
.
server
,
ci
.
user
,
ci
.
passwd
,
ci
.
port
);
globalConn
=
new
Connect
(
ci
.
server
,
ci
.
user
,
ci
.
passwd
,
ci
.
port
);
}
}
//========================================================================================//
fullBackUp
gfb
;
struct
batch
{
struct
batch
{
vector
<
string
>
field_names
;
vector
<
string
>
field_names
;
vector
<
int
>
field_types
;
vector
<
int
>
field_types
;
...
@@ -79,95 +84,98 @@ std::shared_ptr<ReturnMeta> getReturnMeta(std::vector<FieldMeta*> fms,
...
@@ -79,95 +84,98 @@ std::shared_ptr<ReturnMeta> getReturnMeta(std::vector<FieldMeta*> fms,
ggbt
.
field_types
.
push_back
(
tfds
[
i
].
getChoosenFieldTypes
()[
index
]);
ggbt
.
field_types
.
push_back
(
tfds
[
i
].
getChoosenFieldTypes
()[
index
]);
ggbt
.
field_names
.
push_back
(
tfds
[
i
].
getChoosenOnionName
()[
index
]);
ggbt
.
field_names
.
push_back
(
tfds
[
i
].
getChoosenOnionName
()[
index
]);
ggbt
.
field_lengths
.
push_back
(
tfds
[
i
].
getChoosenFieldLengths
()[
index
]);
ggbt
.
field_lengths
.
push_back
(
tfds
[
i
].
getChoosenFieldLengths
()[
index
]);
ggbt
.
field_types
.
push_back
(
tfds
[
i
].
getSaltType
());
ggbt
.
field_types
.
push_back
(
tfds
[
i
].
getSaltType
());
ggbt
.
field_names
.
push_back
(
tfds
[
i
].
getSaltName
());
ggbt
.
field_names
.
push_back
(
tfds
[
i
].
getSaltName
());
ggbt
.
field_lengths
.
push_back
(
tfds
[
i
].
getSaltLength
());
ggbt
.
field_lengths
.
push_back
(
tfds
[
i
].
getSaltLength
());
}
}
return
myReturnMeta
;
return
myReturnMeta
;
}
}
static
static
TableMetaTrans
load_meta
(
string
db
=
"tdb"
,
string
table
=
"student"
,
string
filename
=
"metadata.data"
){
void
initGfb
(
std
::
vector
<
FieldMetaTrans
>
&
res
,
std
::
string
db
,
std
::
string
table
){
TableMetaTrans
mf
;
vector
<
string
>
field_names
;
mf
.
set_db_table
(
db
,
table
);
vector
<
int
>
field_types
;
mf
.
deserialize
();
vector
<
int
>
field_lengths
;
return
mf
;
for
(
auto
&
item
:
res
){
}
for
(
auto
i
:
item
.
getChoosenOnionName
()){
field_names
.
push_back
(
i
);
static
void
load_num
(
string
filename
,
vector
<
string
>
&
res
){
}
std
::
ifstream
infile
(
filename
);
for
(
auto
i
:
item
.
getChoosenFieldTypes
()){
string
line
;
field_types
.
push_back
(
i
);
while
(
std
::
getline
(
infile
,
line
)){
}
res
.
push_back
(
line
);
for
(
auto
i
:
item
.
getChoosenFieldLengths
()){
field_lengths
.
push_back
(
i
);
}
if
(
item
.
getHasSalt
()){
field_names
.
push_back
(
item
.
getSaltName
());
field_types
.
push_back
(
item
.
getSaltType
());
field_lengths
.
push_back
(
item
.
getSaltLength
());
}
}
}
infile
.
close
();
gfb
.
field_names
=
field_names
;
}
gfb
.
field_types
=
field_types
;
gfb
.
field_lengths
=
field_lengths
;
static
void
load_string
(
string
filename
,
vector
<
string
>
&
res
,
unsigned
long
length
){
//then we should read the vector
char
*
buf
=
new
char
[
length
];
std
::
string
prefix
=
std
::
string
(
"data/"
)
+
db
+
"/"
+
table
+
"/"
;
int
fd
=
open
(
filename
.
c_str
(),
O_RDONLY
);
for
(
unsigned
int
i
=
0u
;
i
<
gfb
.
field_names
.
size
();
i
++
)
{
while
(
read
(
fd
,
buf
,
length
)
!=
0
){
std
::
string
filename
=
prefix
+
gfb
.
field_names
[
i
];
res
.
push_back
(
string
(
buf
,
length
));
std
::
vector
<
std
::
string
>
column
;
if
(
IS_NUM
(
gfb
.
field_types
[
i
])){
load_num_file
(
filename
,
column
);
}
else
{
load_string_file
(
filename
,
column
,
gfb
.
field_lengths
[
i
]);
}
gfb
.
annoOnionNameToFileVector
[
gfb
.
field_names
[
i
]]
=
std
::
move
(
column
);
}
}
close
(
fd
);
}
}
/*load fields in string, only part of it can be decrypted*/
static
vector
<
vector
<
string
>>
load_table_fields
(
TableMetaTrans
&
input
,
std
::
vector
<
FieldMetaTrans
>
&
tfms
)
{
string
db
=
input
.
get_db
();
string
table
=
input
.
get_table
();
vector
<
vector
<
string
>>
res
;
string
prefix
=
string
(
"data/"
)
+
db
+
"/"
+
table
+
"/"
;
vector
<
string
>
field_names
=
ggbt
.
field_names
;
vector
<
int
>
field_types
=
ggbt
.
field_types
;
vector
<
int
>
field_lengths
=
ggbt
.
field_lengths
;
vector
<
string
>
datafiles
;
for
(
auto
item
:
field_names
){
datafiles
.
push_back
(
prefix
+
item
);
}
for
(
unsigned
int
i
=
0u
;
i
<
field_names
.
size
();
i
++
){
vector
<
string
>
column
;
if
(
IS_NUM
(
field_types
[
i
])){
load_num
(
datafiles
[
i
],
column
);
}
else
{
load_string
(
datafiles
[
i
],
column
,
field_lengths
[
i
]);
}
for
(
unsigned
int
j
=
0u
;
j
<
column
.
size
();
j
++
){
if
(
j
>=
res
.
size
()){
res
.
push_back
(
vector
<
string
>
());
}
res
[
j
].
push_back
(
column
[
j
]);
}
}
return
res
;
}
static
ResType
load_files
(
std
::
string
db
=
"tdb"
,
std
::
string
table
=
"student"
){
static
ResType
load_files
(
std
::
string
db
=
"tdb"
,
std
::
string
table
=
"student"
){
std
::
unique_ptr
<
SchemaInfo
>
schema
=
myLoadSchemaInfo
(
embeddedDir
);
std
::
unique_ptr
<
SchemaInfo
>
schema
=
myLoadSchemaInfo
(
embeddedDir
);
//get all the fields in the tables.
//get all the fields in the tables.
std
::
vector
<
FieldMeta
*>
fms
=
getFieldMeta
(
*
schema
,
db
,
table
);
std
::
vector
<
FieldMeta
*>
fms
=
getFieldMeta
(
*
schema
,
db
,
table
);
TableMetaTrans
res_meta
=
load
_meta
(
db
,
table
);
TableMetaTrans
res_meta
=
load
TableMetaTrans
(
db
,
table
);
std
::
vector
<
FieldMetaTrans
>
res
2
=
res_meta
.
getFts
();
std
::
vector
<
FieldMetaTrans
>
res
=
res_meta
.
getFts
();
for
(
unsigned
int
i
=
0
;
i
<
fms
.
size
();
i
++
){
for
(
unsigned
int
i
=
0
;
i
<
fms
.
size
();
i
++
){
res
2
[
i
].
trans
(
fms
[
i
]);
res
[
i
].
trans
(
fms
[
i
]);
}
}
std
::
shared_ptr
<
ReturnMeta
>
rm
=
getReturnMeta
(
fms
,
res2
);
//then we should load all the fields available
initGfb
(
res
,
db
,
table
);
std
::
shared_ptr
<
ReturnMeta
>
rm
=
getReturnMeta
(
fms
,
res
);
vector
<
string
>
field_names
=
ggbt
.
field_names
;
vector
<
int
>
field_types
=
ggbt
.
field_types
;
vector
<
int
>
field_lengths
=
ggbt
.
field_lengths
;
//why do we need this??
//why do we need this??
create_embedded_thd
(
0
);
create_embedded_thd
(
0
);
rawMySQLReturnValue
resraw
;
rawMySQLReturnValue
resraw
;
//db = res_meta.get_db();
//table = res_meta.get_table();
//load fields in the stored file
//load fields in the stored file
vector
<
vector
<
string
>>
res_field
=
load_table_fields
(
res_meta
,
res2
);
resraw
.
rowValues
=
res_field
;
//Fast version
vector
<
vector
<
string
>>
resss_field
=
loadTableFieldsForDecryption
(
db
,
table
,
field_names
,
field_types
,
field_lengths
);
vector
<
string
>
field_names
=
ggbt
.
field_names
;
vector
<
vector
<
string
>>
res_field
;
vector
<
int
>
field_types
=
ggbt
.
field_types
;
for
(
auto
item
:
field_names
){
vector
<
int
>
field_lengths
=
ggbt
.
field_lengths
;
res_field
.
push_back
(
gfb
.
annoOnionNameToFileVector
[
item
]);
}
//then transform it to ress_fields
unsigned
int
length
=
res_field
[
0
].
size
();
vector
<
vector
<
string
>>
ress_field
;
for
(
unsigned
int
i
=
0u
;
i
<
length
;
i
++
){
vector
<
string
>
row
;
for
(
unsigned
int
j
=
0u
;
j
<
res_field
.
size
();
j
++
){
row
.
push_back
(
res_field
[
j
][
i
]);
}
ress_field
.
push_back
(
row
);
}
resraw
.
rowValues
=
ress_field
;
resraw
.
fieldNames
=
field_names
;
resraw
.
fieldNames
=
field_names
;
for
(
unsigned
int
i
=
0
;
i
<
field_types
.
size
();
++
i
){
for
(
unsigned
int
i
=
0
;
i
<
field_types
.
size
();
++
i
){
resraw
.
fieldTypes
.
push_back
(
static_cast
<
enum_field_types
>
(
field_types
[
i
]));
resraw
.
fieldTypes
.
push_back
(
static_cast
<
enum_field_types
>
(
field_types
[
i
]));
...
@@ -177,14 +185,6 @@ static ResType load_files(std::string db="tdb", std::string table="student"){
...
@@ -177,14 +185,6 @@ static ResType load_files(std::string db="tdb", std::string table="student"){
return
finalresults
;
return
finalresults
;
}
}
static
std
::
ostream
&
insert_list_show
(
std
::
ostream
&
out
,
List
<
List_item
>
&
newList
){
out
<<
" VALUES "
<<
noparen
(
newList
)
<<
";"
;
return
out
;
}
static
static
void
local_wrapper
(
const
Item
&
i
,
const
FieldMeta
&
fm
,
Analysis
&
a
,
void
local_wrapper
(
const
Item
&
i
,
const
FieldMeta
&
fm
,
Analysis
&
a
,
List
<
Item
>
*
const
append_list
){
List
<
Item
>
*
const
append_list
){
...
@@ -203,8 +203,6 @@ void local_wrapper(const Item &i, const FieldMeta &fm, Analysis &a,
...
@@ -203,8 +203,6 @@ void local_wrapper(const Item &i, const FieldMeta &fm, Analysis &a,
l
.
push_back
(
new
Item_int
(
static_cast
<
ulonglong
>
(
salt
)));
l
.
push_back
(
new
Item_int
(
static_cast
<
ulonglong
>
(
salt
)));
}
}
for
(
auto
it
:
l
)
{
for
(
auto
it
:
l
)
{
append_list
->
push_back
(
it
);
append_list
->
push_back
(
it
);
}
}
...
@@ -239,7 +237,7 @@ main(int argc, char* argv[]){
...
@@ -239,7 +237,7 @@ main(int argc, char* argv[]){
}
}
newList
.
push_back
(
newList0
);
newList
.
push_back
(
newList0
);
std
::
ostringstream
o
;
std
::
ostringstream
o
;
insert
_list_show
(
o
,
newList
);
insert
ManyValues
(
o
,
newList
);
std
::
cout
<<
(
head
+
o
.
str
())
<<
std
::
endl
;
std
::
cout
<<
(
head
+
o
.
str
())
<<
std
::
endl
;
}
}
return
0
;
return
0
;
...
...
wrapper/.common.cc.swp
0 → 100644
View file @
a5135821
File added
wrapper/common.cc
View file @
a5135821
...
@@ -323,3 +323,40 @@ void TableMetaTrans::deserialize(std::string filename, std::string prefix){
...
@@ -323,3 +323,40 @@ void TableMetaTrans::deserialize(std::string filename, std::string prefix){
infile
.
close
();
infile
.
close
();
}
}
TableMetaTrans
loadTableMetaTrans
(
string
db
,
string
table
,
string
filename
){
TableMetaTrans
mf
;
mf
.
set_db_table
(
db
,
table
);
mf
.
deserialize
();
return
mf
;
}
std
::
vector
<
std
::
vector
<
std
::
string
>>
loadTableFieldsForDecryption
(
std
::
string
db
,
std
::
string
table
,
std
::
vector
<
std
::
string
>
field_names
,
std
::
vector
<
int
>
field_types
,
std
::
vector
<
int
>
field_lengths
){
std
::
string
prefix
=
std
::
string
(
"data/"
)
+
db
+
"/"
+
table
+
"/"
;
std
::
vector
<
std
::
vector
<
std
::
string
>>
res
;
std
::
vector
<
std
::
string
>
datafiles
;
for
(
auto
item
:
field_names
){
datafiles
.
push_back
(
prefix
+
item
);
}
for
(
unsigned
int
i
=
0u
;
i
<
field_names
.
size
();
i
++
){
std
::
vector
<
std
::
string
>
column
;
if
(
IS_NUM
(
field_types
[
i
])){
load_num_file
(
datafiles
[
i
],
column
);
}
else
{
load_string_file
(
datafiles
[
i
],
column
,
field_lengths
[
i
]);
}
for
(
unsigned
int
j
=
0u
;
j
<
column
.
size
();
j
++
){
if
(
j
>=
res
.
size
()){
res
.
push_back
(
std
::
vector
<
std
::
string
>
());
}
res
[
j
].
push_back
(
column
[
j
]);
}
}
return
std
::
move
(
res
);
}
wrapper/common.hh
View file @
a5135821
...
@@ -63,7 +63,7 @@ public:
...
@@ -63,7 +63,7 @@ public:
class
TableMetaTrans
{
class
TableMetaTrans
{
string
db
,
table
;
string
db
,
table
;
/*plain name*/
std
::
vector
<
FieldMetaTrans
>
fts
;
std
::
vector
<
FieldMetaTrans
>
fts
;
string
serialize_vec_int
(
string
s
,
vector
<
int
>
vec_int
);
string
serialize_vec_int
(
string
s
,
vector
<
int
>
vec_int
);
...
@@ -89,4 +89,11 @@ public:
...
@@ -89,4 +89,11 @@ public:
TableMetaTrans
loadTableMetaTrans
(
string
db
=
"tdb"
,
string
table
=
"student"
,
string
filename
=
"metadata.data"
);
std
::
vector
<
std
::
vector
<
std
::
string
>>
loadTableFieldsForDecryption
(
std
::
string
db
,
std
::
string
table
,
std
::
vector
<
std
::
string
>
field_names
,
std
::
vector
<
int
>
field_types
,
std
::
vector
<
int
>
field_lengths
);
wrapper/reuse.cc
View file @
a5135821
...
@@ -400,6 +400,10 @@ void storeStrategies(std::vector<FieldMetaTrans>& res){
...
@@ -400,6 +400,10 @@ void storeStrategies(std::vector<FieldMetaTrans>& res){
}
else
{
}
else
{
exit
(
0
);
exit
(
0
);
}
}
//Stored onions should be showed here
for
(
auto
&
item
:
res
){
item
.
showChoosenOnionO
();
}
}
}
...
@@ -428,3 +432,30 @@ int getDecryptionOnionIndex(FieldMetaTrans& fdtrans) {
...
@@ -428,3 +432,30 @@ int getDecryptionOnionIndex(FieldMetaTrans& fdtrans) {
return
res
;
return
res
;
}
}
void
load_num_file
(
std
::
string
filename
,
std
::
vector
<
std
::
string
>
&
res
){
std
::
ifstream
infile
(
filename
);
std
::
string
line
;
while
(
std
::
getline
(
infile
,
line
)){
res
.
push_back
(
line
);
}
infile
.
close
();
}
void
load_string_file
(
std
::
string
filename
,
std
::
vector
<
std
::
string
>
&
res
,
unsigned
long
length
){
char
*
buf
=
new
char
[
length
];
int
fd
=
open
(
filename
.
c_str
(),
O_RDONLY
);
while
(
read
(
fd
,
buf
,
length
)
!=
0
){
res
.
push_back
(
std
::
string
(
buf
,
length
));
}
close
(
fd
);
}
std
::
ostream
&
insertManyValues
(
std
::
ostream
&
out
,
List
<
List_item
>
&
newList
){
out
<<
" VALUES "
<<
noparen
(
newList
)
<<
";"
;
return
out
;
}
wrapper/reuse.hh
View file @
a5135821
...
@@ -79,6 +79,12 @@ class FieldMetaTrans{
...
@@ -79,6 +79,12 @@ class FieldMetaTrans{
std
::
vector
<
int
>
choosenFieldLengths
;
std
::
vector
<
int
>
choosenFieldLengths
;
public
:
public
:
FieldMeta
*
getOriginalFieldMeta
(){
return
originalFm
;}
FieldMeta
*
getOriginalFieldMeta
(){
return
originalFm
;}
void
showChoosenOnionO
(){
std
::
cout
<<
"for field "
<<
originalFm
->
getFieldName
()
<<
std
::
endl
;
for
(
auto
item
:
choosenOnionO
){
std
::
cout
<<
TypeText
<
onion
>::
toText
(
item
)
<<
", "
;
}
std
::
cout
<<
std
::
endl
;
}
void
trans
(
FieldMeta
*
fm
);
void
trans
(
FieldMeta
*
fm
);
void
choose
(
std
::
vector
<
onion
>
onionSet
);
void
choose
(
std
::
vector
<
onion
>
onionSet
);
void
choose
(
std
::
vector
<
int
>
onionIndexSet
);
void
choose
(
std
::
vector
<
int
>
onionIndexSet
);
...
@@ -155,3 +161,19 @@ enum class STORE_STRATEGY{
...
@@ -155,3 +161,19 @@ enum class STORE_STRATEGY{
int
getDecryptionOnionIndex
(
FieldMetaTrans
&
fdtrans
);
int
getDecryptionOnionIndex
(
FieldMetaTrans
&
fdtrans
);
struct
fullBackUp
{
std
::
vector
<
std
::
string
>
field_names
;
//can either be anno onion name or field name
std
::
vector
<
int
>
field_types
;
std
::
vector
<
int
>
field_lengths
;
std
::
map
<
std
::
string
,
std
::
vector
<
std
::
string
>>
annoOnionNameToFileVector
;
//field name to vector of string
};
void
load_num_file
(
std
::
string
filename
,
std
::
vector
<
std
::
string
>
&
res
);
void
load_string_file
(
std
::
string
filename
,
std
::
vector
<
std
::
string
>
&
res
,
unsigned
long
length
);
std
::
ostream
&
insertManyValues
(
std
::
ostream
&
out
,
List
<
List_item
>
&
newList
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment