/// <summary> /// Compute shared key for the handshake communication. /// </summary> /// <param name="pseudonym"></param> /// <param name="role"></param> /// <returns></returns> public byte[] computeSharedKeyClient(string pseudonym, string role) { string credential = pseudonym + "-" + role; Element credentialHash = m_pairing.elementFromHash(new G1(), credential); Element sharedKey = m_pairing.apply(credentialHash, m_secret); return(sharedKey.toBuffer()); }
public static void testPairings() { Debug.WriteLine("Running pairing test..."); Pairing pairing = new Pairing(); Debug.WriteLine("Pairing is " + (pairing.isSymmetric() ? "" : "not ") + "symmetric"); Element g1 = pairing.elementFromHash(new G1(), "ABCDEF"); byte[] buffer = g1.toBuffer(); Debug.WriteLine(Convert.ToBase64String(buffer)); Element g2 = pairing.elementFromHash(new G2(), "ADcsde"); Element gt = pairing.apply(g1, g2); Debug.WriteLine("OK"); }
private MemberCredetials issueCredentials(string role, GroupIface g) { string pseudonym = getRandomString(); Element hash = m_pairing.elementFromHash(g, pseudonym + "-" + role); Element secret = hash.powZn(m_masterSecret); // member's secret: T = H_1(pseudonym)^t return(new MemberCredetials(pseudonym, role, secret)); }