Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package mkri_blockchain_2;
- import java.security.Key;
- import java.security.MessageDigest;
- import java.security.PrivateKey;
- import java.security.PublicKey;
- import java.security.Signature;
- import java.util.*;
- public class StringUtil {
- // Aplikuje Sha256 na string a vrátí výsledek .
- public static String applySha256(String input) {
- try {
- MessageDigest digest = MessageDigest.getInstance("SHA-256");
- // Aplikuje Sha256 na vstupní hodnotu
- byte[] hash = digest.digest(input.getBytes("UTF-8"));
- // Bude obsahovat hash jako hex číslo
- StringBuffer hexString = new StringBuffer();
- for (int i = 0; i < hash.length; i++) {
- String hex = Integer.toHexString(0xff & hash[i]);
- if (hex.length() == 1)
- hexString.append('0');
- hexString.append(hex);
- }
- return hexString.toString();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- public static byte[] applyECDSASig(PrivateKey privateKey, String input) {
- Signature dsa;
- byte[] output = new byte[0];
- try {
- dsa = Signature.getInstance("ECDSA", "BC");
- dsa.initSign(privateKey);
- byte[] strByte = input.getBytes();
- dsa.update(strByte);
- byte[] realSig = dsa.sign();
- output = realSig;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return output;
- }
- // Overeni podpisu
- public static boolean verifyECDSASig(PublicKey publicKey, String data, byte[] signature) {
- try {
- Signature ecdsaVerify = Signature.getInstance("ECDSA", "BC");
- ecdsaVerify.initVerify(publicKey);
- ecdsaVerify.update(data.getBytes());
- return ecdsaVerify.verify(signature);
- }catch(Exception e) {
- throw new RuntimeException(e);
- }
- }
- public static String getStringFromKey(Key key) {
- return Base64.getEncoder().encodeToString(key.getEncoded());
- }
- //Vraci obtiznost ciloveho stringu pro srovnani s hashem. napr difficulty = 5 vrati "00000"
- public static String getDificultyString(int difficulty){
- return new String(new char[difficulty]).replace('\0', '0');
- }
- //Vraci koren stromu
- public static String getMerkleRoot(ArrayList<Transaction> transactions) {
- int count = transactions.size();
- ArrayList<String> previousTreeLayer = new ArrayList<String>();
- for(Transaction transaction : transactions) {
- previousTreeLayer.add(transaction.transactionId);
- }
- ArrayList<String> treeLayer = previousTreeLayer;
- while(count > 1) {
- treeLayer = new ArrayList<String>();
- for(int i=1; i < previousTreeLayer.size(); i++) {
- treeLayer.add(applySha256(previousTreeLayer.get(i-1) + previousTreeLayer.get(i)));
- }
- count = treeLayer.size();
- previousTreeLayer = treeLayer;
- }
- String merkleRoot = (treeLayer.size() == 1) ? treeLayer.get(0) : "";
- return merkleRoot;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement