package uc.crypto; import helpers.GH; public class SHA256HashValue extends HashValue { /** * the length of the digest in bytes */ public static final int digestlength = 32; public static final String SHA256REGEX = "(?:[A-Z2-7]{52})"; public static final int serializedDigestLength = 52; public SHA256HashValue(byte[] value) { super(value); if (value.length != digestlength) { throw new IllegalArgumentException("bad length for a sha256 value"); } } public SHA256HashValue(String base32value) { super(base32value); if (base32value.length() != serializedDigestLength ) { throw new IllegalArgumentException("bad length for a sha256 value "+base32value.length()); } } public static boolean isSHA256HashValue(String hash) { if (hash.startsWith("SHA256/")) { hash = hash.substring(7); } return hash.length() == serializedDigestLength && hash.matches(SHA256REGEX); } @Override public SHA256HashValue hashOfHash() { return hashData(getRaw()); } @Override public String magnetString() { return "sha256"; } public static SHA256HashValue hashData(byte[] data) { byte[] raw = GH.getHash(data, "sha-256"); return new SHA256HashValue(raw); } @Override public HashValue internalHash(HashValue rightChild) { byte[] toHash = GH.concatenate(new byte[]{1},getRaw(),rightChild.getRaw()); return hashData(toHash); } }