public static string SHA256(byte[] data) { using var sha256 = Crypto.SHA256.Create(); var result = sha256.ComputeHash(data); return(HexUtils.HexFromByteArray(result)); }
public static string SHA256(Stream stream) { using var sha256 = Crypto.SHA256.Create(); stream.Seek(0, SeekOrigin.Begin); var result = sha256.ComputeHash(stream); return(HexUtils.HexFromByteArray(result)); }
public static string TxInSignatureFromSignatureAndPublicKey(Signature signature, PublicKey publicKey) { var sb = StringBuilderPool.Acquire(); var bytes = signature.toDer(); HexUtils.AppendHexFromByteArray(sb, bytes); sb.Append('.'); bytes = publicKey.toDer(); HexUtils.AppendHexFromByteArray(sb, bytes); return(StringBuilderPool.GetStringAndRelease(sb)); }
public static (Signature, PublicKey) SignatureAndPublicKeyFromTxInSignature(string txInSignature) { int indexOfSeparator = txInSignature.IndexOf('.'); if (indexOfSeparator < 0) { return(null, null); } var bytes = HexUtils.ByteArrayFromHex(txInSignature, 0, indexOfSeparator); var signature = Signature.fromDer(bytes); bytes = HexUtils.ByteArrayFromHex(txInSignature, indexOfSeparator + 1, txInSignature.Length - indexOfSeparator - 1); var publicKey = PublicKey.fromDer(bytes); return(signature, publicKey); }
public static bool TxInSignatureContainsPublicKey(string txInSignature, PublicKey publicKey) { int indexOfDelimiter = txInSignature.IndexOf('.'); if (indexOfDelimiter < 0) { return(false); } var publicKeyString = HexUtils.HexFromByteArray(publicKey.toDer()); if (txInSignature.Length < publicKeyString.Length) { return(false); } return(txInSignature.EndsWith(publicKeyString)); }