123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634 |
- package communication;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.util.ArrayList;
- import com.oblivm.backend.gc.GCSignal;
- import oram.Bucket;
- import oram.Tuple;
- public class ComUtil {
- public static byte[] serialize(byte[][] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].length);
- for (int i = 0; i < in.length; i++)
- dos.write(in[i]);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[][] toDoubleByteArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- byte[][] out = null;
- try {
- int len1 = dis.readInt();
- int len2 = dis.readInt();
- out = new byte[len1][len2];
- for (int i = 0; i < len1; i++)
- dis.read(out[i]);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(byte[][][] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].length);
- dos.writeInt(in[0][0].length);
- for (int i = 0; i < in.length; i++)
- for (int j = 0; j < in[i].length; j++)
- dos.write(in[i][j]);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[][][] toTripleByteArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- byte[][][] out = null;
- try {
- int len1 = dis.readInt();
- int len2 = dis.readInt();
- int len3 = dis.readInt();
- out = new byte[len1][len2][len3];
- for (int i = 0; i < len1; i++)
- for (int j = 0; j < len2; j++)
- dis.read(out[i][j]);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(int[] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- for (int i = 0; i < in.length; i++)
- dos.writeInt(in[i]);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static int[] toIntArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- int[] out = null;
- try {
- int len1 = dis.readInt();
- out = new int[len1];
- for (int i = 0; i < len1; i++)
- out[i] = dis.readInt();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(int[][] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].length);
- for (int i = 0; i < in.length; i++)
- for (int j = 0; j < in[i].length; j++)
- dos.writeInt(in[i][j]);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static int[][] toDoubleIntArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- int[][] out = null;
- try {
- int len1 = dis.readInt();
- int len2 = dis.readInt();
- out = new int[len1][len2];
- for (int i = 0; i < len1; i++)
- for (int j = 0; j < len2; j++)
- out[i][j] = dis.readInt();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(Tuple in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.getF().length);
- dos.writeInt(in.getN().length);
- dos.writeInt(in.getL().length);
- dos.writeInt(in.getA().length);
- dos.write(in.getF());
- dos.write(in.getN());
- dos.write(in.getL());
- dos.write(in.getA());
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static Tuple toTuple(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- Tuple out = null;
- try {
- int f = dis.readInt();
- int n = dis.readInt();
- int l = dis.readInt();
- int a = dis.readInt();
- byte[] F = new byte[f];
- byte[] N = new byte[n];
- byte[] L = new byte[l];
- byte[] A = new byte[a];
- dis.read(F);
- dis.read(N);
- dis.read(L);
- dis.read(A);
- out = new Tuple(F, N, L, A);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(Tuple[] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].getF().length);
- dos.writeInt(in[0].getN().length);
- dos.writeInt(in[0].getL().length);
- dos.writeInt(in[0].getA().length);
- for (int i = 0; i < in.length; i++) {
- dos.write(in[i].getF());
- dos.write(in[i].getN());
- dos.write(in[i].getL());
- dos.write(in[i].getA());
- }
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static Tuple[] toTupleArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- Tuple[] out = null;
- try {
- int len = dis.readInt();
- int f = dis.readInt();
- int n = dis.readInt();
- int l = dis.readInt();
- int a = dis.readInt();
- out = new Tuple[len];
- for (int i = 0; i < len; i++) {
- byte[] F = new byte[f];
- byte[] N = new byte[n];
- byte[] L = new byte[l];
- byte[] A = new byte[a];
- dis.read(F);
- dis.read(N);
- dis.read(L);
- dis.read(A);
- out[i] = new Tuple(F, N, L, A);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(GCSignal[] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- for (int i = 0; i < in.length; i++)
- dos.write(in[i].bytes);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static GCSignal[] toGCSignalArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- GCSignal[] out = null;
- try {
- int len1 = dis.readInt();
- out = new GCSignal[len1];
- for (int i = 0; i < len1; i++) {
- out[i] = new GCSignal(new byte[GCSignal.len]);
- dis.read(out[i].bytes);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(GCSignal[][] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].length);
- for (int i = 0; i < in.length; i++)
- for (int j = 0; j < in[i].length; j++)
- dos.write(in[i][j].bytes);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static GCSignal[][] toDoubleGCSignalArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- GCSignal[][] out = null;
- try {
- int len1 = dis.readInt();
- int len2 = dis.readInt();
- out = new GCSignal[len1][len2];
- for (int i = 0; i < len1; i++)
- for (int j = 0; j < len2; j++) {
- out[i][j] = new GCSignal(new byte[GCSignal.len]);
- dis.read(out[i][j].bytes);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(GCSignal[][][] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].length);
- dos.writeInt(in[0][0].length);
- for (int i = 0; i < in.length; i++)
- for (int j = 0; j < in[i].length; j++)
- for (int k = 0; k < in[i][j].length; k++)
- dos.write(in[i][j][k].bytes);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static GCSignal[][][] toTripleGCSignalArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- GCSignal[][][] out = null;
- try {
- int len1 = dis.readInt();
- int len2 = dis.readInt();
- int len3 = dis.readInt();
- out = new GCSignal[len1][len2][len3];
- for (int i = 0; i < len1; i++)
- for (int j = 0; j < len2; j++)
- for (int k = 0; k < len3; k++) {
- out[i][j][k] = new GCSignal(new byte[GCSignal.len]);
- dis.read(out[i][j][k].bytes);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(GCSignal[][][][] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.length);
- dos.writeInt(in[0].length);
- dos.writeInt(in[0][0].length);
- dos.writeInt(in[0][0][0].length);
- for (int i = 0; i < in.length; i++)
- for (int j = 0; j < in[i].length; j++)
- for (int k = 0; k < in[i][j].length; k++)
- for (int l = 0; l < in[i][j][k].length; l++)
- dos.write(in[i][j][k][l].bytes);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static GCSignal[][][][] toQuadGCSignalArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- GCSignal[][][][] out = null;
- try {
- int len1 = dis.readInt();
- int len2 = dis.readInt();
- int len3 = dis.readInt();
- int len4 = dis.readInt();
- out = new GCSignal[len1][len2][len3][len4];
- for (int i = 0; i < len1; i++)
- for (int j = 0; j < len2; j++)
- for (int k = 0; k < len3; k++)
- for (int l = 0; l < len4; l++) {
- out[i][j][k][l] = new GCSignal(new byte[GCSignal.len]);
- dis.read(out[i][j][k][l].bytes);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(Bucket[] in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- byte[] b = serialize(Bucket.bucketsToTuples(in));
- dos.writeInt(in.length);
- dos.writeInt(in[0].getNumTuples());
- dos.writeInt(in[1].getNumTuples());
- dos.writeInt(b.length);
- dos.write(b);
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static Bucket[] toBucketArray(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- Bucket[] out = null;
- try {
- int d = dis.readInt();
- int sw = dis.readInt();
- int w = dis.readInt();
- int bytes = dis.readInt();
- byte[] b = new byte[bytes];
- dis.read(b);
- Tuple[] tuples = toTupleArray(b);
- out = Bucket.tuplesToBuckets(tuples, d, sw, w);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static byte[] serialize(ArrayList<byte[]> in) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- byte[] out = null;
- try {
- dos.writeInt(in.size());
- dos.writeInt(in.get(0).length);
- for (int i = 0; i < in.size(); i++)
- dos.write(in.get(i));
- out = baos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dos.close();
- baos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- public static ArrayList<byte[]> toArrayList(byte[] in) {
- ByteArrayInputStream bais = new ByteArrayInputStream(in);
- DataInputStream dis = new DataInputStream(bais);
- ArrayList<byte[]> out = null;
- try {
- int len = dis.readInt();
- int bytes = dis.readInt();
- out = new ArrayList<byte[]>(len);
- for (int i = 0; i < len; i++) {
- byte[] b = new byte[bytes];
- dis.read(b);
- out.add(b);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- dis.close();
- bais.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return out;
- }
- }
|