|
@@ -139,10 +139,7 @@ func main() {
|
|
|
}
|
|
|
|
|
|
//send publicKey to leader
|
|
|
- _, err = leaderConnection.Write(followerPublicKey[:])
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ writeToConn(leaderConnection, followerPublicKey[:])
|
|
|
|
|
|
//receives leader PublicKey
|
|
|
var tmpLeaderPubKey [32]byte
|
|
@@ -172,11 +169,7 @@ func main() {
|
|
|
//receives the virtualAddresses
|
|
|
virtualAddresses := make([]int, dbWriteSize+1)
|
|
|
for i := 0; i <= dbWriteSize; i++ {
|
|
|
- virtualAddress := make([]byte, 4)
|
|
|
- _, err = leaderConnection.Read(virtualAddress)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ virtualAddress := readFromConn(leaderConnection, 4)
|
|
|
virtualAddresses[i] = byteToInt(virtualAddress)
|
|
|
}
|
|
|
|
|
@@ -241,10 +234,7 @@ func phase1(id int, leaderWorkerConnection net.Conn, m sync.Mutex, wg *sync.Wait
|
|
|
gotClient := make([]byte, 1)
|
|
|
|
|
|
for {
|
|
|
- _, err := leaderWorkerConnection.Read(gotClient)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ gotClient = readFromConn(leaderWorkerConnection, 1)
|
|
|
|
|
|
//this worker is done
|
|
|
if gotClient[0] == 0 {
|
|
@@ -262,7 +252,7 @@ func phase1(id int, leaderWorkerConnection net.Conn, m sync.Mutex, wg *sync.Wait
|
|
|
//gets clients publicKey
|
|
|
var clientPublicKey *[32]byte
|
|
|
var tmpClientPublicKey [32]byte
|
|
|
- _, err = leaderWorkerConnection.Read(tmpClientPublicKey[:])
|
|
|
+ _, err := leaderWorkerConnection.Read(tmpClientPublicKey[:])
|
|
|
if err != nil {
|
|
|
panic(err)
|
|
|
}
|
|
@@ -275,19 +265,12 @@ func phase1(id int, leaderWorkerConnection net.Conn, m sync.Mutex, wg *sync.Wait
|
|
|
clientData[*clientPublicKey] = clientKeys
|
|
|
|
|
|
//gets dpfQuery from leader
|
|
|
- dpfLengthBytes := make([]byte, 4)
|
|
|
- _, err = leaderWorkerConnection.Read(dpfLengthBytes)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ dpfLengthBytes := readFromConn(leaderWorkerConnection, 4)
|
|
|
dpfLength := byteToInt(dpfLengthBytes)
|
|
|
|
|
|
dpfQueryBEncrypted := make([]byte, dpfLength)
|
|
|
|
|
|
- _, err = leaderWorkerConnection.Read(dpfQueryBEncrypted)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ dpfQueryBEncrypted = readFromConn(leaderWorkerConnection, dpfLength)
|
|
|
|
|
|
//decrypt dpfQueryB for sorting into db
|
|
|
var decryptNonce [24]byte
|
|
@@ -304,15 +287,9 @@ func phase1(id int, leaderWorkerConnection net.Conn, m sync.Mutex, wg *sync.Wait
|
|
|
|
|
|
dataShareLeader := make([]byte, ds)
|
|
|
|
|
|
- _, err = leaderWorkerConnection.Write(dataShareFollower)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ writeToConn(leaderWorkerConnection, dataShareFollower)
|
|
|
|
|
|
- _, err = leaderWorkerConnection.Read(dataShareLeader)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ dataShareLeader = readFromConn(leaderWorkerConnection, ds)
|
|
|
|
|
|
auditXOR := make([]byte, ds)
|
|
|
passedAudit := true
|
|
@@ -364,11 +341,7 @@ func phase2(leaderWorkerConnection net.Conn) {
|
|
|
}
|
|
|
|
|
|
//receive seed from leader
|
|
|
- seedLeader := make([]byte, 16)
|
|
|
- _, err := leaderWorkerConnection.Read(seedLeader)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ seedLeader := readFromConn(leaderWorkerConnection, 16)
|
|
|
|
|
|
//receive data from leader
|
|
|
tmpdbLeader := make([][]byte, dbSize)
|
|
@@ -376,24 +349,15 @@ func phase2(leaderWorkerConnection net.Conn) {
|
|
|
tmpdbLeader[i] = make([]byte, dataLength)
|
|
|
}
|
|
|
for i := 0; i < dbSize; i++ {
|
|
|
- _, err = leaderWorkerConnection.Read(tmpdbLeader[i])
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ tmpdbLeader[i] = readFromConn(leaderWorkerConnection, dataLength)
|
|
|
}
|
|
|
|
|
|
//writes seed to leader
|
|
|
- _, err = leaderWorkerConnection.Write(seedFollower)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ writeToConn(leaderWorkerConnection, seedFollower)
|
|
|
|
|
|
//write data to leader
|
|
|
for i := 0; i < dbSize; i++ {
|
|
|
- _, err = leaderWorkerConnection.Write(tmpdbFollower[i])
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ writeToConn(leaderWorkerConnection, tmpdbFollower[i])
|
|
|
}
|
|
|
//put together the db
|
|
|
tmpdb := make([][]byte, dbSize)
|
|
@@ -413,7 +377,7 @@ func phase2(leaderWorkerConnection net.Conn) {
|
|
|
//receive ciphers from leader
|
|
|
ciphersLeader := make([]byte, dbSize*16)
|
|
|
for i := 0; i < dbSize; i++ {
|
|
|
- _, err = leaderWorkerConnection.Read(ciphersLeader[i*16:])
|
|
|
+ _, err := leaderWorkerConnection.Read(ciphersLeader[i*16:])
|
|
|
if err != nil {
|
|
|
panic(err)
|
|
|
}
|
|
@@ -421,10 +385,7 @@ func phase2(leaderWorkerConnection net.Conn) {
|
|
|
|
|
|
//send own Ciphers to leader
|
|
|
for i := 0; i < dbSize; i++ {
|
|
|
- _, err = leaderWorkerConnection.Write(C.GoBytes(unsafe.Pointer(ciphersFollowers[i]), 16))
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ writeToConn(leaderWorkerConnection, C.GoBytes(unsafe.Pointer(ciphersFollowers[i]), 16))
|
|
|
}
|
|
|
|
|
|
//put in ciphers from leader
|
|
@@ -483,11 +444,7 @@ func phase2(leaderWorkerConnection net.Conn) {
|
|
|
C.resetDb()
|
|
|
|
|
|
//gets current dbWriteSize from leader
|
|
|
- dbWriteSizeBytes := make([]byte, 4)
|
|
|
- _, err = leaderWorkerConnection.Read(dbWriteSizeBytes)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ dbWriteSizeBytes := readFromConn(leaderWorkerConnection, 4)
|
|
|
dbWriteSize = byteToInt(dbWriteSizeBytes)
|
|
|
}
|
|
|
|
|
@@ -514,10 +471,7 @@ func phase3(leaderWorkerConnection net.Conn, wg *sync.WaitGroup) {
|
|
|
gotClient := make([]byte, 1)
|
|
|
|
|
|
for {
|
|
|
- _, err := leaderWorkerConnection.Read(gotClient)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ gotClient = readFromConn(leaderWorkerConnection, 1)
|
|
|
|
|
|
//this worker is done
|
|
|
if gotClient[0] == 0 {
|
|
@@ -525,14 +479,10 @@ func phase3(leaderWorkerConnection net.Conn, wg *sync.WaitGroup) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- subPhase := make([]byte, 1)
|
|
|
- _, err = leaderWorkerConnection.Read(subPhase)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ subPhase := readFromConn(leaderWorkerConnection, 1)
|
|
|
|
|
|
var clientPublicKey [32]byte
|
|
|
- _, err = leaderWorkerConnection.Read(clientPublicKey[:])
|
|
|
+ _, err := leaderWorkerConnection.Read(clientPublicKey[:])
|
|
|
if err != nil {
|
|
|
panic(err)
|
|
|
}
|
|
@@ -546,11 +496,7 @@ func phase3(leaderWorkerConnection net.Conn, wg *sync.WaitGroup) {
|
|
|
|
|
|
getSendTweets(clientKeys, nil, leaderWorkerConnection)
|
|
|
|
|
|
- wantsArchive := make([]byte, 1)
|
|
|
- _, err = leaderWorkerConnection.Read(wantsArchive)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ wantsArchive := readFromConn(leaderWorkerConnection, 1)
|
|
|
|
|
|
if wantsArchive[0] == 1 {
|
|
|
_, archiveQuerys := handlePirQuery(clientKeys, leaderWorkerConnection, -1, clientPublicKey, false)
|
|
@@ -592,16 +538,9 @@ func getSendTweets(clientKeys clientKeys, archiveQuerys [][]byte, leaderWorkerCo
|
|
|
//sends tweets to leader
|
|
|
tweetsLengthBytes := intToByte(len(tweets))
|
|
|
|
|
|
- _, err := leaderWorkerConnection.Write(tweetsLengthBytes)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
-
|
|
|
- _, err = leaderWorkerConnection.Write(tweets)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ writeToConn(leaderWorkerConnection, tweetsLengthBytes)
|
|
|
|
|
|
+ writeToConn(leaderWorkerConnection, tweets)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -609,27 +548,15 @@ func handlePirQuery(clientKeys clientKeys, leaderWorkerConnection net.Conn, subP
|
|
|
|
|
|
archiveNeededSubscriptions := make([]byte, 4)
|
|
|
if subPhase == -1 {
|
|
|
- _, err := leaderWorkerConnection.Read(archiveNeededSubscriptions)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ archiveNeededSubscriptions = readFromConn(leaderWorkerConnection, 4)
|
|
|
}
|
|
|
|
|
|
//gets the msg length
|
|
|
- msgLengthBytes := make([]byte, 4)
|
|
|
- _, err := leaderWorkerConnection.Read(msgLengthBytes)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ msgLengthBytes := readFromConn(leaderWorkerConnection, 4)
|
|
|
msgLength := byteToInt(msgLengthBytes)
|
|
|
|
|
|
- message := make([]byte, msgLength)
|
|
|
-
|
|
|
//gets the message
|
|
|
- _, err = leaderWorkerConnection.Read(message)
|
|
|
- if err != nil {
|
|
|
- panic(err)
|
|
|
- }
|
|
|
+ message := readFromConn(leaderWorkerConnection, msgLength)
|
|
|
|
|
|
var decryptNonce [24]byte
|
|
|
copy(decryptNonce[:], message[:24])
|
|
@@ -706,10 +633,25 @@ func getSendVirtualAddress(pirQuery []byte, virtualAddresses []int, sharedSecret
|
|
|
virtualAddress[i] = virtualAddress[i] ^ sharedSecret[i]
|
|
|
}
|
|
|
|
|
|
- _, err := leaderWorkerConnection.Write(virtualAddress)
|
|
|
+ writeToConn(leaderWorkerConnection, virtualAddress)
|
|
|
+}
|
|
|
+
|
|
|
+//sends the array to the connection
|
|
|
+func writeToConn(connection net.Conn, array []byte) {
|
|
|
+ _, err := connection.Write(array)
|
|
|
+ if err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//reads an array which is returned and of size "size" from the connection
|
|
|
+func readFromConn(connection net.Conn, size int) []byte {
|
|
|
+ array := make([]byte, size)
|
|
|
+ _, err := connection.Read(array)
|
|
|
if err != nil {
|
|
|
panic(err)
|
|
|
}
|
|
|
+ return array
|
|
|
}
|
|
|
|
|
|
func transformBytesToStringArray(topicsAsBytes []byte) []string {
|