Aaaaa988

EDGE

Oct 14th, 2020 (edited)
147
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package ru.favarish;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.Random;
  5.  
  6. public class Edge {
  7.     private Integer vertex1;
  8.     private Integer vertex2;
  9.  
  10.     private Integer color1;
  11.     private Integer color2;
  12.  
  13.     private static final Integer bitLength = 30;
  14.     private BigInteger p1;
  15.     private BigInteger q1;
  16.     private BigInteger n1;
  17.     private BigInteger c1;
  18.     private BigInteger d1;
  19.     private BigInteger r1;
  20.     private BigInteger z1;
  21.  
  22.     private BigInteger p2;
  23.     private BigInteger q2;
  24.     private BigInteger n2;
  25.     private BigInteger c2;
  26.     private BigInteger d2;
  27.     private BigInteger r2;
  28.     private BigInteger z2;
  29.  
  30.      Edge(Integer vertex1, Integer vertex2, Integer color1, Integer color2) {
  31.         this.vertex1 = vertex1;
  32.         this.vertex2 = vertex2;
  33.         this.color1 = color1;
  34.         this.color2 = color2;
  35.     }
  36.  
  37.     public void genrateRSA() {
  38.         Random random = new Random();
  39.         Vector resultEuclid;
  40.         BigInteger f;
  41.         do {
  42.             q1 = BigInteger.probablePrime(bitLength, random);
  43.         } while (!q1.isProbablePrime(3));
  44.         do {
  45.             p1 = BigInteger.probablePrime(bitLength, random);
  46.         } while (!p1.isProbablePrime(3));
  47.  
  48.         n1 = q1.multiply(p1);
  49.         f = (p1.subtract(BigInteger.ONE).multiply(q1.subtract(BigInteger.ONE)));
  50.  
  51.         while (true) {
  52.             d1 = BigInteger.probablePrime(bitLength, random);
  53.             resultEuclid = Lab1.generalizedEuclidsAlgorithm(f, d1);
  54.             if (resultEuclid.gcd.compareTo(BigInteger.ONE) == 0) {
  55.                 break;
  56.             }
  57.         }
  58.         if (resultEuclid.y.compareTo(BigInteger.ZERO) < 0) {
  59.             resultEuclid.y = resultEuclid.y.add(f);
  60.         }
  61.         c1 = resultEuclid.y;
  62.  
  63.         do {
  64.             q2 = BigInteger.probablePrime(bitLength, random);
  65.         } while (!q2.isProbablePrime(3));
  66.  
  67.         do {
  68.             p2 = BigInteger.probablePrime(bitLength, random);
  69.         } while (!p2.isProbablePrime(3));
  70.  
  71.         n2 = q2.multiply(p2);
  72.         f = (p2.subtract(BigInteger.ONE).multiply(q2.subtract(BigInteger.ONE)));
  73.  
  74.         while (true) {
  75.             d2 = BigInteger.probablePrime(bitLength, random);
  76.             resultEuclid = Lab1.generalizedEuclidsAlgorithm(f, d2);
  77.             if (resultEuclid.gcd.compareTo(BigInteger.ONE) == 0) {
  78.                 break;
  79.             }
  80.         }
  81.  
  82.         if (resultEuclid.y.compareTo(BigInteger.ZERO) < 0) {
  83.             resultEuclid.y = resultEuclid.y.add(f);
  84.         }
  85.         c2 = resultEuclid.y;
  86.  
  87.         r1 = BigInteger.probablePrime(bitLength, random);
  88.         r2 = BigInteger.probablePrime(bitLength, random);
  89.  
  90.         r1 = cropStringANDAddColor(r1.toString(2), color1);
  91.         r2 = cropStringANDAddColor(r2.toString(2), color2);
  92.  
  93.         z1 = Lab1.fastModuloExponentiation(r1, d1, n1);
  94.         z2 = Lab1.fastModuloExponentiation(r2, d2, n2);
  95.     }
  96.  
  97.     public BigInteger cropStringANDAddColor(String str, Integer colorNum){
  98.         String subStr = str.substring(0, str.length() - 2);
  99.         switch (colorNum){
  100.             case 0 -> subStr += "00";
  101.             case 1 -> subStr += "01";
  102.             case 2 -> subStr += "10";
  103.         }
  104.         return new BigInteger(subStr,2);
  105.     }
  106.  
  107.     public void generateRandZ(int colorFirst, int colorSecond, int colorThird) {
  108.         switch (color1) {
  109.             case 0 -> color1 = colorFirst;
  110.             case 1 -> color1 = colorSecond;
  111.             case 2 -> color1 = colorThird;
  112.         }
  113.         switch (color2) {
  114.             case 0 -> color2 = colorFirst;
  115.             case 1 -> color2 = colorSecond;
  116.             case 2 -> color2 = colorThird;
  117.         }
  118.         Random random = new Random();
  119.         r1 = BigInteger.probablePrime(bitLength, random);
  120.         r2 = BigInteger.probablePrime(bitLength, random);
  121.  
  122.         r1 = cropStringANDAddColor(r1.toString(2), color1);
  123.         r2 = cropStringANDAddColor(r2.toString(2), color2);
  124.  
  125.         z1 = Lab1.fastModuloExponentiation(r1, d1, n1);
  126.         z2 = Lab1.fastModuloExponentiation(r2, d2, n2);
  127.     }
  128.  
  129.     //Getters
  130.     public BigInteger getN1() {
  131.         return n1;
  132.     }
  133.     public BigInteger getN2() {
  134.         return n2;
  135.     }
  136.     public BigInteger getC1() {
  137.         return c1;
  138.     }
  139.     public BigInteger getC2() {
  140.         return c2;
  141.     }
  142.     public BigInteger getZ1() {
  143.         return z1;
  144.     }
  145.     public BigInteger getZ2() {
  146.         return z2;
  147.     }
  148.     public Integer getColor1() {
  149.         return color1;
  150.     }
  151.     public Integer getColor2() {
  152.         return color2;
  153.     }
  154. }
  155.  
RAW Paste Data