Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. package mkri_blockchain_2;
  2.  
  3.  
  4.  
  5.  
  6. import java.security.Key;
  7. import java.security.MessageDigest;
  8. import java.security.PrivateKey;
  9. import java.security.PublicKey;
  10. import java.security.Signature;
  11. import java.util.*;
  12.  
  13.  
  14. public class StringUtil {
  15.  
  16. // Aplikuje Sha256 na string a vrátí výsledek .
  17. public static String applySha256(String input) {
  18. try {
  19. MessageDigest digest = MessageDigest.getInstance("SHA-256");
  20.  
  21. // Aplikuje Sha256 na vstupní hodnotu
  22. byte[] hash = digest.digest(input.getBytes("UTF-8"));
  23.  
  24. // Bude obsahovat hash jako hex číslo
  25. StringBuffer hexString = new StringBuffer();
  26. for (int i = 0; i < hash.length; i++) {
  27. String hex = Integer.toHexString(0xff & hash[i]);
  28. if (hex.length() == 1)
  29. hexString.append('0');
  30. hexString.append(hex);
  31. }
  32. return hexString.toString();
  33. } catch (Exception e) {
  34. throw new RuntimeException(e);
  35. }
  36. }
  37.  
  38. public static byte[] applyECDSASig(PrivateKey privateKey, String input) {
  39. Signature dsa;
  40. byte[] output = new byte[0];
  41. try {
  42. dsa = Signature.getInstance("ECDSA", "BC");
  43. dsa.initSign(privateKey);
  44. byte[] strByte = input.getBytes();
  45. dsa.update(strByte);
  46. byte[] realSig = dsa.sign();
  47. output = realSig;
  48. } catch (Exception e) {
  49. throw new RuntimeException(e);
  50. }
  51. return output;
  52. }
  53.  
  54. // Overeni podpisu
  55. public static boolean verifyECDSASig(PublicKey publicKey, String data, byte[] signature) {
  56. try {
  57. Signature ecdsaVerify = Signature.getInstance("ECDSA", "BC");
  58. ecdsaVerify.initVerify(publicKey);
  59. ecdsaVerify.update(data.getBytes());
  60. return ecdsaVerify.verify(signature);
  61. }catch(Exception e) {
  62. throw new RuntimeException(e);
  63. }
  64. }
  65.  
  66. public static String getStringFromKey(Key key) {
  67. return Base64.getEncoder().encodeToString(key.getEncoded());
  68. }
  69.  
  70. //Vraci obtiznost ciloveho stringu pro srovnani s hashem. napr difficulty = 5 vrati "00000"
  71. public static String getDificultyString(int difficulty){
  72. return new String(new char[difficulty]).replace('\0', '0');
  73. }
  74.  
  75. //Vraci koren stromu
  76. public static String getMerkleRoot(ArrayList<Transaction> transactions) {
  77. int count = transactions.size();
  78. ArrayList<String> previousTreeLayer = new ArrayList<String>();
  79. for(Transaction transaction : transactions) {
  80. previousTreeLayer.add(transaction.transactionId);
  81. }
  82. ArrayList<String> treeLayer = previousTreeLayer;
  83. while(count > 1) {
  84. treeLayer = new ArrayList<String>();
  85. for(int i=1; i < previousTreeLayer.size(); i++) {
  86. treeLayer.add(applySha256(previousTreeLayer.get(i-1) + previousTreeLayer.get(i)));
  87. }
  88. count = treeLayer.size();
  89. previousTreeLayer = treeLayer;
  90. }
  91. String merkleRoot = (treeLayer.size() == 1) ? treeLayer.get(0) : "";
  92. return merkleRoot;
  93. }
  94.  
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement