private static BswabePolicy baseNode(int k, String s) { BswabePolicy p = new BswabePolicy(); p.k = k; if (!(s == null)) p.attr = s; else p.attr = null; p.q = null; return p; }
private static void decNodeFlatten(Element r, Element exp, BswabePolicy p, BswabePrv prv, BswabePub pub) { if (p.children == null || p.children.length == 0) decLeafFlatten(r, exp, p, prv, pub); else decInternalFlatten(r, exp, p, prv, pub); }
private static void serializePolicy(ArrayList<Byte> arrlist, BswabePolicy p) { serializeUint32(arrlist, p.k); if (p.children == null || p.children.length == 0) { serializeUint32(arrlist, 0); serializeString(arrlist, p.attr); serializeElement(arrlist, p.c); serializeElement(arrlist, p.cp); } else { serializeUint32(arrlist, p.children.length); for (int i = 0; i < p.children.length; i++) serializePolicy(arrlist, p.children[i]); } }
/** * @param * @author Junwei Wang(wakemecn@gmail.com) */ public void setup(String pubfile, String mskfile) throws IOException, ClassNotFoundException { byte[] pub_byte, msk_byte; BswabePub pub = new BswabePub(); BswabeMsk msk = new BswabeMsk(); Bswabe.setup(pub, msk); /* store BswabePub into mskfile */ pub_byte = SerializeUtils.serializeBswabePub(pub); Common.spitFile(pubfile, pub_byte); /* store BswabeMsk into mskfile */ msk_byte = SerializeUtils.serializeBswabeMsk(msk); Common.spitFile(mskfile, msk_byte); }
public void keygen(String pubfile, String prvfile, String mskfile, String attr_str) throws NoSuchAlgorithmException, IOException { BswabePub pub; BswabeMsk msk; byte[] pub_byte, msk_byte, prv_byte; /* get BswabePub from pubfile */ pub_byte = Common.suckFile(pubfile); pub = SerializeUtils.unserializeBswabePub(pub_byte); /* get BswabeMsk from mskfile */ msk_byte = Common.suckFile(mskfile); msk = SerializeUtils.unserializeBswabeMsk(pub, msk_byte); String[] attr_arr = LangPolicy.parseAttribute(attr_str); BswabePrv prv = Bswabe.keygen(pub, msk, attr_arr); /* store BswabePrv into prvfile */ prv_byte = SerializeUtils.serializeBswabePrv(prv); Common.spitFile(prvfile, prv_byte); }
int i, offset, len; prv = new BswabePrv(); offset = 0; offset = unserializeElement(b, offset, prv.d); len = unserializeUint32(b, offset); offset += 4; BswabePrvComp c = new BswabePrvComp(); offset = unserializeString(b, offset, sb); c.attr = sb.substring(0); c.dp = pub.p.getG2().newElement(); offset = unserializeElement(b, offset, c.d); offset = unserializeElement(b, offset, c.dp);
public static byte[] serializeBswabePrv(BswabePrv prv) { ArrayList<Byte> arrlist; int prvCompsLen, i; arrlist = new ArrayList<Byte>(); prvCompsLen = prv.comps.size(); serializeElement(arrlist, prv.d); serializeUint32(arrlist, prvCompsLen); for (i = 0; i < prvCompsLen; i++) { serializeString(arrlist, prv.comps.get(i).attr); serializeElement(arrlist, prv.comps.get(i).d); serializeElement(arrlist, prv.comps.get(i).dp); } return Byte_arr2byte_arr(arrlist); }
public static BswabeCphKey enc(BswabePub pub, String policy) throws Exception { BswabeCphKey keyCph = new BswabeCphKey(); BswabeCph cph = new BswabeCph(); Element s, m; /* initialize */ Pairing pairing = pub.p; s = pairing.getZr().newElement(); m = pairing.getGT().newElement(); cph.cs = pairing.getGT().newElement(); cph.c = pairing.getG1().newElement(); cph.p = parsePolicyPostfix(policy); /* compute */ m.setToRandom(); s.setToRandom(); cph.cs = pub.g_hat_alpha.duplicate(); cph.cs.powZn(s); /* num_exps++; */ cph.cs.mul(m); /* num_muls++; */ cph.c = pub.h.duplicate(); cph.c.powZn(s); /* num_exps++; */ fillPolicy(cph.p, pub, s); keyCph.cph = cph; keyCph.key = m; return keyCph; }
public static byte[] serializeBswabePub(BswabePub pub) { ArrayList<Byte> arrlist = new ArrayList<Byte>(); serializeString(arrlist, pub.pairingDesc); serializeElement(arrlist, pub.g); serializeElement(arrlist, pub.h); serializeElement(arrlist, pub.gp); serializeElement(arrlist, pub.g_hat_alpha); return Byte_arr2byte_arr(arrlist); }
public static byte[] bswabeCphSerialize(BswabeCph cph) { ArrayList<Byte> arrlist = new ArrayList<Byte>(); SerializeUtils.serializeElement(arrlist, cph.cs); SerializeUtils.serializeElement(arrlist, cph.c); SerializeUtils.serializePolicy(arrlist, cph.p); return Byte_arr2byte_arr(arrlist); }
public static BswabeCph bswabeCphUnserialize(BswabePub pub, byte[] cphBuf) { BswabeCph cph = new BswabeCph(); int offset = 0; int[] offset_arr = new int[1]; cph.cs = pub.p.getGT().newElement(); cph.c = pub.p.getG1().newElement(); offset = SerializeUtils.unserializeElement(cphBuf, offset, cph.cs); offset = SerializeUtils.unserializeElement(cphBuf, offset, cph.c); offset_arr[0] = offset; cph.p = SerializeUtils.unserializePolicy(pub, cphBuf, offset_arr); offset = offset_arr[0]; return cph; }
public static BswabeMsk unserializeBswabeMsk(BswabePub pub, byte[] b) { int offset = 0; BswabeMsk msk = new BswabeMsk(); msk.beta = pub.p.getZr().newElement(); msk.g_alpha = pub.p.getG2().newElement(); offset = unserializeElement(b, offset, msk.beta); offset = unserializeElement(b, offset, msk.g_alpha); return msk; }
public static void serializeString(ArrayList<Byte> arrlist, String s) { byte[] b = s.getBytes(); serializeUint32(arrlist, b.length); byteArrListAppend(arrlist, b); }
public static byte[] serializeBswabeMsk(BswabeMsk msk) { ArrayList<Byte> arrlist = new ArrayList<Byte>(); serializeElement(arrlist, msk.beta); serializeElement(arrlist, msk.g_alpha); return Byte_arr2byte_arr(arrlist); }
public static int unserializeString(byte[] arr, int offset, StringBuffer sb) { int i; int len; byte[] str_byte; len = unserializeUint32(arr, offset); offset += 4; str_byte = new byte[len]; for (i = 0; i < len; i++) str_byte[i] = arr[offset + i]; sb.append(new String(str_byte)); return offset + len; }
private static int unserializeUint32(byte[] arr, int offset) { int i; int r = 0; for (i = 3; i >= 0; i--) r |= (byte2int(arr[offset++])) << (i * 8); return r; }
private static BswabePolynomial randPoly(int deg, Element zeroVal) { int i; BswabePolynomial q = new BswabePolynomial(); q.deg = deg; q.coef = new Element[deg + 1]; for (i = 0; i < deg + 1; i++) q.coef[i] = zeroVal.duplicate(); q.coef[0].set(zeroVal); for (i = 1; i < deg + 1; i++) q.coef[i].setToRandom(); return q; }
private static void decFlatten(Element r, BswabePolicy p, BswabePrv prv, BswabePub pub) { Element one; one = pub.p.getZr().newElement(); one.setToOne(); r.setToOne(); decNodeFlatten(r, one, p, prv, pub); }
public static void serializeElement(ArrayList<Byte> arrlist, Element e) { byte[] arr_e = e.toBytes(); serializeUint32(arrlist, arr_e.length); byteArrListAppend(arrlist, arr_e); }
public static int unserializeElement(byte[] arr, int offset, Element e) { int len; int i; byte[] e_byte; len = unserializeUint32(arr, offset); e_byte = new byte[(int) len]; offset += 4; for (i = 0; i < len; i++) e_byte[i] = arr[offset + i]; e.setFromBytes(e_byte); return (int) (offset + len); }