Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class SecretKey {
- BigInteger x;
- public BigInteger getX() {
- return x;
- }
- public void setX(BigInteger x) {
- this.x = x;
- }
- }
- public class PublicKey {
- ECPoint G;
- ECPoint Y;
- BigInteger q;
- public ECPoint getG() {
- return G;
- }
- public void setG(ECPoint g) {
- G = g;
- }
- public ECPoint getY() {
- return Y;
- }
- public void setY(ECPoint y) {
- Y = y;
- }
- public BigInteger getQ() {
- return q;
- }
- public void setQ(BigInteger q) {
- this.q = q;
- }
- }
- public class RingSchnorr {
- public static void keyGen(String curveName, User u) {
- ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(curveName);
- u.getPk().setG(ecSpec.getG());
- u.getPk().setQ(ecSpec.getN());
- u.getSk().setX(BigIntegers.createRandomInRange(BigInteger.ONE, u.getPk().getQ().subtract(BigInteger.ONE),
- new SecureRandom()));
- u.getPk().setY(u.getPk().getG().multiply(u.getSk().getX()).normalize());
- }
- public static BigInteger hashVal(String m, ECPoint R){
- byte[] xArray = R.getXCoord().getEncoded();
- byte[] yArray = R.getYCoord().getEncoded();
- String xBinary;
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < xArray.length; i++) {
- sb.append(String.format("%8s", Integer.toBinaryString(xArray[i] & 0xFF)).replace(' ', '0'));
- }
- xBinary = sb.toString();
- sb = new StringBuilder();
- String yBinary;
- for (int i = 0; i < yArray.length; i++) {
- sb.append(String.format("%8s", Integer.toBinaryString(yArray[i] & 0xFF)).replace(' ', '0'));
- }
- yBinary = sb.toString();
- int hash = (xBinary + yBinary + m).hashCode();
- BigInteger h = BigInteger.valueOf(hash);
- return h;
- }
- public static void main(String[] args) {
- User u1 = new User();
- User u2 = new User();
- User u3 = new User();
- keyGen("prime192v1", u1);
- keyGen("prime192v1", u2);
- keyGen("prime192v1", u3);
- ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
- BigInteger a2 = BigIntegers.createRandomInRange(BigInteger.ONE,
- u2.getPk().getQ().subtract(BigInteger.ONE), new SecureRandom());
- ECPoint R2 = u2.getPk().getG().multiply((a2)).normalize();
- BigInteger a3 = BigIntegers.createRandomInRange(BigInteger.ONE,
- u3.getPk().getQ().subtract(BigInteger.ONE), new SecureRandom());
- ECPoint R3 = u3.getPk().getG().multiply((a3)).normalize();
- BigInteger a = (BigIntegers.createRandomInRange(BigInteger.ONE, u2.getPk().getQ().subtract(BigInteger.ONE),
- new SecureRandom()));
- BigInteger modulus = ecSpec.getCurve().getField().getCharacteristic();
- BigInteger HR2 = hashVal("m", R2);
- BigInteger invHR2 = HR2.modInverse(modulus);
- BigInteger HR3 = hashVal("m", R3);
- BigInteger invHR3 = HR3.modInverse(modulus);
- ECPoint Rs = ecSpec.getG().multiply(a).add(u2.getPk().getY().multiply(invHR2)).add(u3.getPk().getY().multiply(invHR3)).normalize();
- BigInteger HR1 = hashVal("m", Rs);
- BigInteger tmp = u1.getSk().getX().multiply(HR1);
- BigInteger sigma = a.add(a2).add(a3).add(tmp).mod(ecSpec.getN());
- ECPoint y1 = u1.getPk().getY().multiply(HR1).normalize();
- ECPoint y2 = u2.getPk().getY().multiply(HR2).normalize();
- ECPoint y3 = u3.getPk().getY().multiply(HR3).normalize();
- ECPoint check = Rs.add(R2).add(R3).add(y1).add(y2).add(y3).normalize();
- ECPoint check2 = ecSpec.getG().multiply(sigma).normalize();
- System.out.println(check);
- System.out.println(check2);
- System.out.println("end");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement