Advertisement
Guest User

srs

a guest
Dec 28th, 2015
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.43 KB | None | 0 0
  1. public class SecretKey {
  2.     BigInteger x;
  3.  
  4.     public BigInteger getX() {
  5.         return x;
  6.     }
  7.  
  8.     public void setX(BigInteger x) {
  9.         this.x = x;
  10.     }
  11. }
  12.  
  13. public class PublicKey {
  14.     ECPoint G;
  15.     ECPoint Y;
  16.     BigInteger q;
  17.    
  18.     public ECPoint getG() {
  19.         return G;
  20.     }
  21.     public void setG(ECPoint g) {
  22.         G = g;
  23.     }
  24.     public ECPoint getY() {
  25.         return Y;
  26.     }
  27.     public void setY(ECPoint y) {
  28.         Y = y;
  29.     }
  30.     public BigInteger getQ() {
  31.         return q;
  32.     }
  33.     public void setQ(BigInteger q) {
  34.         this.q = q;
  35.     }
  36. }
  37.  
  38. public class RingSchnorr {
  39.  
  40.     public static void keyGen(String curveName, User u) {
  41.         ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(curveName);
  42.        
  43.         u.getPk().setG(ecSpec.getG());
  44.         u.getPk().setQ(ecSpec.getN());
  45.  
  46.         u.getSk().setX(BigIntegers.createRandomInRange(BigInteger.ONE, u.getPk().getQ().subtract(BigInteger.ONE),
  47.                 new SecureRandom()));
  48.         u.getPk().setY(u.getPk().getG().multiply(u.getSk().getX()).normalize());
  49.     }
  50.    
  51.     public static BigInteger hashVal(String m, ECPoint R){
  52.         byte[] xArray = R.getXCoord().getEncoded();
  53.         byte[] yArray = R.getYCoord().getEncoded();
  54.        
  55.         String xBinary;
  56.         StringBuilder sb = new StringBuilder();
  57.         for (int i = 0; i < xArray.length; i++) {
  58.             sb.append(String.format("%8s", Integer.toBinaryString(xArray[i] & 0xFF)).replace(' ', '0'));
  59.         }
  60.         xBinary = sb.toString();
  61.  
  62.         sb = new StringBuilder();
  63.         String yBinary;
  64.         for (int i = 0; i < yArray.length; i++) {
  65.             sb.append(String.format("%8s", Integer.toBinaryString(yArray[i] & 0xFF)).replace(' ', '0'));
  66.         }
  67.         yBinary = sb.toString();
  68.  
  69.         int hash = (xBinary + yBinary + m).hashCode();
  70.         BigInteger h = BigInteger.valueOf(hash);
  71.         return h;
  72.        
  73.     }
  74.  
  75.     public static void main(String[] args) {
  76.         User u1 = new User();
  77.         User u2 = new User();
  78.         User u3 = new User();
  79.  
  80.         keyGen("prime192v1", u1);
  81.         keyGen("prime192v1", u2);
  82.         keyGen("prime192v1", u3);
  83.         ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
  84.  
  85.         BigInteger a2 = BigIntegers.createRandomInRange(BigInteger.ONE,
  86.                 u2.getPk().getQ().subtract(BigInteger.ONE), new SecureRandom());
  87.         ECPoint R2 = u2.getPk().getG().multiply((a2)).normalize();
  88.        
  89.         BigInteger a3 = BigIntegers.createRandomInRange(BigInteger.ONE,
  90.                 u3.getPk().getQ().subtract(BigInteger.ONE), new SecureRandom());
  91.         ECPoint R3 = u3.getPk().getG().multiply((a3)).normalize();
  92.  
  93.         BigInteger a = (BigIntegers.createRandomInRange(BigInteger.ONE, u2.getPk().getQ().subtract(BigInteger.ONE),
  94.                 new SecureRandom()));
  95.        
  96.         BigInteger modulus = ecSpec.getCurve().getField().getCharacteristic();
  97.         BigInteger HR2 = hashVal("m", R2);
  98.         BigInteger invHR2 = HR2.modInverse(modulus);
  99.         BigInteger HR3 = hashVal("m", R3);
  100.         BigInteger invHR3 = HR3.modInverse(modulus);
  101.  
  102.         ECPoint Rs = ecSpec.getG().multiply(a).add(u2.getPk().getY().multiply(invHR2)).add(u3.getPk().getY().multiply(invHR3)).normalize();
  103.        
  104.         BigInteger HR1 = hashVal("m", Rs);
  105.         BigInteger tmp = u1.getSk().getX().multiply(HR1);
  106.         BigInteger sigma = a.add(a2).add(a3).add(tmp).mod(ecSpec.getN());
  107.        
  108.         ECPoint y1 = u1.getPk().getY().multiply(HR1).normalize();
  109.         ECPoint y2 = u2.getPk().getY().multiply(HR2).normalize();
  110.         ECPoint y3 = u3.getPk().getY().multiply(HR3).normalize();
  111.        
  112.         ECPoint check = Rs.add(R2).add(R3).add(y1).add(y2).add(y3).normalize();
  113.         ECPoint check2 = ecSpec.getG().multiply(sigma).normalize();
  114.        
  115.         System.out.println(check);
  116.         System.out.println(check2);
  117.        
  118.         System.out.println("end");
  119.     }
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement