Advertisement
Guest User

Untitled

a guest
Oct 21st, 2013
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.74 KB | None | 0 0
  1. import java.math.BigInteger;
  2. import java.util.Random;
  3.  
  4.  
  5. public class Main {
  6. public static void main(String[] args){
  7.  
  8. //INIT
  9. int N = 55;
  10. int K = 11;
  11.  
  12. BigInteger secret = new BigInteger("123");
  13. modLength = secret.bitLength() + 1;
  14. BigInteger primeNum = genPrime();
  15. BigInteger[] coeff = new BigInteger[K-1];
  16. BigInteger[] partecipants = new BigInteger[K];
  17. for (int i=0;i<K;i++)
  18. partecipants[i] = new BigInteger(Integer.toString(i+1));
  19. System.out.println("Prime Number: "+primeNum);
  20. for (int i=0;i<K-1;i++){
  21. coeff[i] = randomZp(primeNum);
  22. System.out.println("a"+(i+1)+": "+coeff[i]);
  23. }
  24.  
  25. //SHARES
  26. BigInteger[] shares = new BigInteger[N];
  27. for(int i=0;i<N;i++){
  28. BigInteger toAdd= secret;
  29. for(int j=0;j<K-1;j++){
  30. BigInteger power = new BigInteger(Integer.toString((int)(Math.pow((i+1),(j+1)))));
  31. toAdd=toAdd.add(coeff[j].multiply(power));
  32. }
  33. shares[i] = toAdd.mod(primeNum);
  34. System.out.println("Share n."+(i+1)+": "+shares[i]);
  35. }
  36. //INTERPOLAZIONE
  37. BigInteger secret2= new BigInteger("0");
  38. double term;
  39. for (int i=0;i<K;i++){
  40. term = 1;
  41. BigInteger sharePartecipanteNow = shares[(partecipants[i].intValue())-1];
  42. for (int j=0;j<K;j++){
  43. if (partecipants[i].intValue()!=partecipants[j].intValue()){
  44.  
  45. BigInteger num = new BigInteger(Integer.toString(partecipants[j].intValue()*(-1)));
  46. BigInteger den = new BigInteger(Integer.toString(partecipants[i].intValue()-partecipants[j].intValue()));
  47. term = term*(num.doubleValue())/(den.doubleValue());
  48. }
  49.  
  50. }
  51. term = term*sharePartecipanteNow.intValue();
  52. secret2 = secret2.add(new BigInteger(Integer.toString((int)term)));
  53. }
  54. while(secret2.intValue()<0)
  55. secret2 = secret2.add(primeNum);
  56. System.out.println("The secret is: "+secret2.mod(primeNum));
  57. }
  58.  
  59. private static BigInteger genPrime() {
  60. BigInteger p=null;
  61. boolean ok=false;
  62. do{
  63. p=BigInteger.probablePrime(modLength, new Random());
  64. if(p.isProbablePrime(CERTAINTY))
  65. ok=true;
  66. }while(ok==false);
  67. return p;
  68. }
  69.  
  70. private static BigInteger randomZp(BigInteger p) {
  71. BigInteger r;
  72. do{
  73. r = new BigInteger(modLength, new Random());
  74. } while (r.compareTo(BigInteger.ZERO) < 0 || r.compareTo(p) >= 0);
  75. return r;
  76. }
  77.  
  78. private static final int CERTAINTY = 50;
  79. private static int modLength;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement