22.04.2014 Views

a590003

a590003

a590003

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

EncryptedArrayMod2r ea(context);<br />

long nslots = ea.size();<br />

// An EncryptedArrayMod2r object<br />

// number of plaintext slots<br />

/*** Encrypt random arrays over Z_{32} ***/<br />

vector p0, p1, p2, p3;<br />

ea.random(p0);<br />

ea.random(p1);<br />

ea.random(p2);<br />

ea.random(p3);<br />

vector const1, const2;<br />

ea.random(const1);<br />

ea.random(const2);<br />

// Choose random arrays<br />

// two more random "constants"<br />

ZZX const1_poly, const2_poly; // encode constants as polynomials<br />

ea.encode(const1_poly, const1);<br />

ea.encode(const2_poly, const2);<br />

// Encrypt the random arrays<br />

Ctxt c0(publicKey), c1(publicKey), c2(publicKey), c3(publicKey);<br />

ea.encrypt(c0, publicKey, p0);<br />

ea.encrypt(c1, publicKey, p1);<br />

ea.encrypt(c2, publicKey, p2);<br />

ea.encrypt(c3, publicKey, p3);<br />

/*** Perform homomorphic operations ***/<br />

c1.multiplyBy(c0);<br />

c0.addConstant(const1_poly);<br />

c2.multByConstant(const2_poly);<br />

// also does mod-switching, key-switching<br />

Ctxt tmp(c1); // tmp = c1<br />

long amt = RandomBnd(2*(nslots/2)+1)-(nslots/2); // in [-nslots/2..nslots/2]<br />

ea.shift(tmp, amt); // rotate tmp by amt<br />

c2 += tmp;<br />

// then add to c2<br />

amt = RandomBnd(2*nslots-1) - (nslots-1);<br />

ea.rotate(c2, amt);<br />

// in [-(nslots-1)..nslots-1]<br />

c1.negate();<br />

c3.multiplyBy(c2);<br />

c0 -= c3;<br />

/*** Decrypt the results of the computation ***/<br />

vector pp0, pp1, pp2, pp3;<br />

ea.decrypt(c0, secretKey, pp0);<br />

ea.decrypt(c1, secretKey, pp1);<br />

ea.decrypt(c2, secretKey, pp2);<br />

ea.decrypt(c3, secretKey, pp3);<br />

36<br />

16. Design and Implementation of a Homomorphic-Encryption Library

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!