Skip to content

Commit e84c7f7

Browse files
committed
Refactored test scripts into homo folder
1 parent da27ced commit e84c7f7

File tree

9 files changed

+2132
-36
lines changed

9 files changed

+2132
-36
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
deps/*
22
build/*
33
build*/*
4+
bin/*
45
*.txt
56
!CMakeLists.txt
67
!*/*CMakeLists.txt

Makefile

-36
This file was deleted.

bin/.placeholder

Whitespace-only changes.

homo/Makefile

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
BIN_DIR=../bin
2+
LIB_DIR=../SEAL/bin
3+
INCLUDE_DIR=../SEAL/SEAL
4+
CXX=g++-7
5+
CXXFLAGS=-march=native -O3 -DHAVE_CONFIG_H -std=c++11 -pthread
6+
LDFLAGS=-g
7+
8+
.PHONY : all clean
9+
10+
all : raymond dct encode
11+
12+
13+
raymond : raymond.cpp
14+
$(CXX) raymond.cpp $(CXXFLAGS) $(LDFLAGS) $(addprefix -I,$(INCLUDE_DIR)) $(addprefix -L,$(LIB_DIR)) -lseal -o $(BIN_DIR)/raymond
15+
16+
dct : dct.cpp
17+
@-mkdir -p $(dir $@)
18+
$(CXX) dct.cpp $(CXXFLAGS) $(LDFLAGS) $(addprefix -I,$(INCLUDE_DIR)) $(addprefix -L,$(LIB_DIR)) -lseal -o $(BIN_DIR)/dct
19+
20+
encode : encode.cpp
21+
@-mkdir -p $(dir $@)
22+
$(CXX) jpge.cpp encode.cpp $(CXXFLAGS) $(LDFLAGS) $(addprefix -I,$(INCLUDE_DIR)) $(addprefix -L,$(LIB_DIR)) -lseal -o $(BIN_DIR)/encode
23+
24+
25+
clean :
26+
@-rm -f ../bin/*

homo/dct.cpp

+214
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
#include <iostream>
2+
#include <iomanip>
3+
#include <vector>
4+
#include <string>
5+
#include <chrono>
6+
#include <random>
7+
#include <thread>
8+
#include <mutex>
9+
#include <random>
10+
#include <limits>
11+
#include <fstream>
12+
13+
14+
#include "seal/seal.h"
15+
16+
using namespace seal;
17+
18+
auto start = std::chrono::steady_clock::now();
19+
20+
const std::vector<int> S_ZAG = { 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63 };
21+
const std::vector<double> S_STD_LUM_QUANT = { 16,11,12,14,12,10,16,14,13,14,18,17,16,19,24,40,26,24,22,22,24,49,35,37,29,40,58,51,61,60,57,51,56,55,64,72,92,78,64,68,87,69,55,56,80,109,81,87,95,98,103,104,103,62,77,113,121,112,100,120,92,101,103,99 };
22+
const std::vector<double> S_STD_CROMA_QUANT = { 17,18,18,24,21,24,47,26,26,47,99,66,56,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 };
23+
24+
25+
void raymond_average();
26+
void dct(double *data);
27+
std::vector<double> read_image(std::string fname);
28+
29+
void print_parameters(const SEALContext &context) {
30+
std::cout << "/ Encryption parameters:" << std::endl;
31+
std::cout << "| poly_modulus: " << context.poly_modulus().to_string() << std::endl;
32+
33+
/*
34+
Print the size of the true (product) coefficient modulus
35+
*/
36+
std::cout << "| coeff_modulus size: "
37+
<< context.total_coeff_modulus().significant_bit_count() << " bits" << std::endl;
38+
39+
std::cout << "| plain_modulus: " << context.plain_modulus().value() << std::endl;
40+
std::cout << "\\ noise_standard_deviation: " << context.noise_standard_deviation() << std::endl;
41+
std::cout << std::endl;
42+
}
43+
44+
int main()
45+
{
46+
std::cout << "\nTotal memory allocated by global memory pool: "
47+
<< (MemoryPoolHandle::Global().alloc_byte_count() >> 20)
48+
<< " MB" << std::endl;
49+
50+
raymond_average();
51+
52+
return 0;
53+
}
54+
55+
std::vector<double> read_image(std::string fname) {
56+
int w, h;
57+
std::vector<double> im;
58+
std::ifstream myfile;
59+
60+
myfile.open(fname.c_str());
61+
myfile >> w;
62+
myfile >> h;
63+
std::cout << "Read in " << fname << "with dimensions: " << w << " x " << h << std::endl;
64+
65+
float tmp;
66+
for (int i = 0; i < w*h; i++) {
67+
myfile >> tmp;
68+
im.push_back(tmp);
69+
}
70+
return im;
71+
}
72+
73+
const int BLOCK_SIZE = 8;
74+
std::vector<std::vector<double>> split_image_eight_block(std::vector<double> im, int w, int h) {
75+
std::vector<std::vector<double>> lst;
76+
for (int i = 0; i < w; i += BLOCK_SIZE) {
77+
for (int j = 0; j < h; j += BLOCK_SIZE) {
78+
std::vector<double> new_lst;
79+
for (int k = 0; k < BLOCK_SIZE; k++)
80+
for (int l = 0; l < BLOCK_SIZE; l++) {
81+
int index = (j+k)*w + i + l;
82+
new_lst.push_back(im[index]);
83+
}
84+
lst.push_back(new_lst);
85+
}
86+
}
87+
return lst;
88+
}
89+
90+
void print_image(std::vector<double> &im, int w, int h) {
91+
std::cout << "Printing Image dim: (" << w << "," << h << ")" << std::endl;
92+
for (int i = 0; i < im.size(); i++) {
93+
std::cout << std::setw(5) << im[i] << " ";
94+
if ((i + 1) % w == 0) std::cout << std::endl;
95+
}
96+
}
97+
98+
void print_blocks(std::vector<std::vector<double>> &blocks) {
99+
for (int a = 0; a < blocks.size(); a++) {
100+
std::cout << "Printing block " << a << std::endl;
101+
for (int i = 0; i < blocks[a].size(); i++) {
102+
std::cout << std::setw(11) << blocks[a][i] << " ";
103+
if ((i + 1) % BLOCK_SIZE == 0) std::cout << std::endl;
104+
}
105+
std::cout << "---------------" << std::endl;
106+
}
107+
}
108+
109+
void dct_blocks(std::vector<std::vector<double>> &blocks) {
110+
for (int a = 0; a < blocks.size(); a++) {
111+
dct(&blocks[a][0]);
112+
}
113+
}
114+
115+
116+
void raymond_average() {
117+
std::vector<double> im = read_image("image/kung.txt");
118+
print_image(im, 16, 16);
119+
std::vector<std::vector<double>> blocks = split_image_eight_block(im, 16, 16);
120+
dct_blocks(blocks);
121+
print_blocks(blocks);
122+
return;
123+
}
124+
125+
126+
// Forward DCT
127+
void dct(double *data)
128+
{
129+
double z1, z2, z3, z4, z5, tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp10, tmp11, tmp12, tmp13, *data_ptr;
130+
131+
data_ptr = data;
132+
133+
for (int c=0; c < 8; c++) {
134+
tmp0 = data_ptr[0] + data_ptr[7];
135+
tmp7 = data_ptr[0] - data_ptr[7];
136+
tmp1 = data_ptr[1] + data_ptr[6];
137+
tmp6 = data_ptr[1] - data_ptr[6];
138+
tmp2 = data_ptr[2] + data_ptr[5];
139+
tmp5 = data_ptr[2] - data_ptr[5];
140+
tmp3 = data_ptr[3] + data_ptr[4];
141+
tmp4 = data_ptr[3] - data_ptr[4];
142+
tmp10 = tmp0 + tmp3;
143+
tmp13 = tmp0 - tmp3;
144+
tmp11 = tmp1 + tmp2;
145+
tmp12 = tmp1 - tmp2;
146+
data_ptr[0] = tmp10 + tmp11;
147+
data_ptr[4] = tmp10 - tmp11;
148+
z1 = (tmp12 + tmp13) * 0.541196100;
149+
data_ptr[2] = z1 + tmp13 * 0.765366865;
150+
data_ptr[6] = z1 + tmp12 * - 1.847759065;
151+
z1 = tmp4 + tmp7;
152+
z2 = tmp5 + tmp6;
153+
z3 = tmp4 + tmp6;
154+
z4 = tmp5 + tmp7;
155+
z5 = (z3 + z4) * 1.175875602;
156+
tmp4 *= 0.298631336;
157+
tmp5 *= 2.053119869;
158+
tmp6 *= 3.072711026;
159+
tmp7 *= 1.501321110;
160+
z1 *= -0.899976223;
161+
z2 *= -2.562915447;
162+
z3 *= -1.961570560;
163+
z4 *= -0.390180644;
164+
z3 += z5;
165+
z4 += z5;
166+
data_ptr[7] = tmp4 + z1 + z3;
167+
data_ptr[5] = tmp5 + z2 + z4;
168+
data_ptr[3] = tmp6 + z2 + z3;
169+
data_ptr[1] = tmp7 + z1 + z4;
170+
data_ptr += 8;
171+
}
172+
173+
data_ptr = data;
174+
175+
for (int c=0; c < 8; c++) {
176+
tmp0 = data_ptr[8*0] + data_ptr[8*7];
177+
tmp7 = data_ptr[8*0] - data_ptr[8*7];
178+
tmp1 = data_ptr[8*1] + data_ptr[8*6];
179+
tmp6 = data_ptr[8*1] - data_ptr[8*6];
180+
tmp2 = data_ptr[8*2] + data_ptr[8*5];
181+
tmp5 = data_ptr[8*2] - data_ptr[8*5];
182+
tmp3 = data_ptr[8*3] + data_ptr[8*4];
183+
tmp4 = data_ptr[8*3] - data_ptr[8*4];
184+
tmp10 = tmp0 + tmp3;
185+
tmp13 = tmp0 - tmp3;
186+
tmp11 = tmp1 + tmp2;
187+
tmp12 = tmp1 - tmp2;
188+
data_ptr[8*0] = (tmp10 + tmp11) / 8.0;
189+
data_ptr[8*4] = (tmp10 - tmp11) / 8.0;
190+
z1 = (tmp12 + tmp13) * 0.541196100;
191+
data_ptr[8*2] = (z1 + tmp13 * 0.765366865) / 8.0;
192+
data_ptr[8*6] = (z1 + tmp12 * -1.847759065) / 8.0;
193+
z1 = tmp4 + tmp7;
194+
z2 = tmp5 + tmp6;
195+
z3 = tmp4 + tmp6;
196+
z4 = tmp5 + tmp7;
197+
z5 = (z3 + z4) * 1.175875602;
198+
tmp4 *= 0.298631336;
199+
tmp5 *= 2.053119869;
200+
tmp6 *= 3.072711026;
201+
tmp7 *= 1.501321110;
202+
z1 *= -0.899976223;
203+
z2 *= -2.562915447;
204+
z3 *= -1.961570560;
205+
z4 *= -0.390180644;
206+
z3 += z5;
207+
z4 += z5;
208+
data_ptr[8*7] = (tmp4 + z1 + z3) / 8.0;
209+
data_ptr[8*5] = (tmp5 + z2 + z4) / 8.0;
210+
data_ptr[8*3] = (tmp6 + z2 + z3) / 8.0;
211+
data_ptr[8*1] = (tmp7 + z1 + z4) / 8.0;
212+
data_ptr++;
213+
}
214+
}

homo/encode.cpp

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#include <iostream>
2+
#include <iomanip>
3+
#include <vector>
4+
#include <string>
5+
#include <chrono>
6+
#include <random>
7+
#include <thread>
8+
#include <mutex>
9+
#include <random>
10+
#include <limits>
11+
#include <fstream>
12+
13+
14+
#include "seal/seal.h"
15+
#include "jpge.h"
16+
17+
using namespace seal;
18+
19+
auto start = std::chrono::steady_clock::now();
20+
21+
const std::vector<int> S_ZAG = { 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63 };
22+
const std::vector<double> S_STD_LUM_QUANT = { 16,11,12,14,12,10,16,14,13,14,18,17,16,19,24,40,26,24,22,22,24,49,35,37,29,40,58,51,61,60,57,51,56,55,64,72,92,78,64,68,87,69,55,56,80,109,81,87,95,98,103,104,103,62,77,113,121,112,100,120,92,101,103,99 };
23+
const std::vector<double> S_STD_CROMA_QUANT = { 17,18,18,24,21,24,47,26,26,47,99,66,56,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 };
24+
25+
26+
void raymond_average();
27+
std::vector<unsigned char> read_image(std::string fname);
28+
29+
void print_parameters(const SEALContext &context) {
30+
std::cout << "/ Encryption parameters:" << std::endl;
31+
std::cout << "| poly_modulus: " << context.poly_modulus().to_string() << std::endl;
32+
33+
/*
34+
Print the size of the true (product) coefficient modulus
35+
*/
36+
std::cout << "| coeff_modulus size: "
37+
<< context.total_coeff_modulus().significant_bit_count() << " bits" << std::endl;
38+
39+
std::cout << "| plain_modulus: " << context.plain_modulus().value() << std::endl;
40+
std::cout << "\\ noise_standard_deviation: " << context.noise_standard_deviation() << std::endl;
41+
std::cout << std::endl;
42+
}
43+
44+
int main()
45+
{
46+
std::cout << "\nTotal memory allocated by global memory pool: "
47+
<< (MemoryPoolHandle::Global().alloc_byte_count() >> 20)
48+
<< " MB" << std::endl;
49+
50+
raymond_average();
51+
52+
return 0;
53+
}
54+
55+
std::vector<unsigned char> read_image(std::string fname) {
56+
int w, h;
57+
std::vector<unsigned char> im;
58+
std::ifstream myfile;
59+
60+
myfile.open(fname.c_str());
61+
myfile >> w;
62+
myfile >> h;
63+
std::cout << "Read in " << fname << "with dimensions: " << w << " x " << h << std::endl;
64+
65+
int tmp;
66+
for (int i = 0; i < w*h; i++) {
67+
myfile >> tmp;
68+
im.push_back((unsigned char) tmp);
69+
}
70+
return im;
71+
}
72+
73+
void print_image(std::vector<unsigned char> &im, int w, int h) {
74+
std::cout << "Printing Image dim: (" << w << "," << h << ")" << std::endl;
75+
for (int i = 0; i < im.size(); i++) {
76+
std::cout << std::setw(5) << (int) im[i] << " ";
77+
if ((i + 1) % w == 0) std::cout << std::endl;
78+
}
79+
}
80+
81+
void raymond_average() {
82+
int width = 16;
83+
int height = 16;
84+
std::vector<unsigned char> im = read_image("image/kung.txt");
85+
print_image(im, width, height);
86+
int buf_size = 1024;
87+
void *pBuf = malloc(buf_size);
88+
jpge::params params;
89+
params.m_quality = 90;
90+
params.m_subsampling = jpge::Y_ONLY;
91+
jpge::compress_image_to_jpeg_file_in_memory(pBuf, buf_size, width, height, 1, &im[0], params);
92+
std::ofstream myfile;
93+
unsigned char* buf = (unsigned char*) pBuf;
94+
myfile.open("blunt.jpg");
95+
for (int i = 0; i < buf_size; i++) {
96+
myfile << buf[i];
97+
}
98+
return;
99+
}

0 commit comments

Comments
 (0)