public static string GetGlobalAddress(IMicheline value) { var bytes = LocalForge.ForgeMicheline(value); var hash = Blake2b.GetDigest(bytes); return(Base58.Convert(hash, Prefix.expr)); }
public string GetKeyHash(IMicheline key) { var optimized = Key.Optimize(Micheline.FromBytes(key.ToBytes())); var packed = new byte[] { 5 }.Concat(LocalForge.ForgeMicheline(optimized)); var hash = Blake2b.GetDigest(packed); return(Base58.Convert(hash, Prefix.expr)); }
public bool Verify(byte[] msg, byte[] sig, byte[] pubKey) { var keyedHash = Blake2b.GetDigest(msg); var publicKey = new Ed25519PublicKeyParameters(pubKey, 0); var verifier = new Ed25519Signer(); verifier.Init(false, publicKey); verifier.BlockUpdate(keyedHash, 0, keyedHash.Length); return(verifier.VerifySignature(sig)); }
public Signature Sign(byte[] msg, byte[] prvKey) { var digest = Blake2b.GetDigest(msg); var privateKey = new Ed25519PrivateKeyParameters(prvKey, 0); var signer = new Ed25519Signer(); signer.Init(true, privateKey); signer.BlockUpdate(digest, 0, digest.Length); return(new Signature(signer.GenerateSignature(), _SignaturePrefix)); }
public static string GetContractAddress(int index) { var hash = new byte[32] { 72, 1, 189, 111, 8, 152, 13, 214, 38, 163, 228, 90, 249, 51, 127, 242, 206, 198, 138, 55, 219, 134, 18, 158, 128, 96, 185, 73, 180, 9, 86, 229 }; var address = Blake2b.GetDigest(hash.Concat(GetBytes(index)).ToArray(), 160); return(Base58.Convert(address, new byte[] { 2, 90, 121 })); }
public override bool Verify(byte[] msg, byte[] sig, byte[] pubKey) { var digest = Blake2b.GetDigest(msg); var r = sig.GetBytes(0, 32); var s = sig.GetBytes(32, 32); var curve = SecNamedCurves.GetByName("secp256k1"); var parameters = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed()); var publicKey = new ECPublicKeyParameters(curve.Curve.DecodePoint(pubKey), parameters); var signer = new ECDsaSigner(); signer.Init(false, publicKey); return(signer.VerifySignature(digest, new BigInteger(1, r), new BigInteger(1, s))); }
public Signature Sign(byte[] msg, byte[] prvKey) { var keyedHash = Blake2b.GetDigest(msg); var curve = SecNamedCurves.GetByName("secp256r1"); var parameters = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed()); var key = new ECPrivateKeyParameters(new BigInteger(prvKey), parameters); var signer = new ECDsaSigner(new HMacDsaKCalculator(new Blake2bDigest(256))); signer.Init(true, parameters: key); var rs = signer.GenerateSignature(keyedHash); var r = rs[0].ToByteArrayUnsigned(); var s = rs[1].ToByteArrayUnsigned(); return(new Signature(r.Concat(s), _SignaturePrefix)); }
public override Signature Sign(byte[] msg, byte[] prvKey) { var curve = SecNamedCurves.GetByName("secp256k1"); var parameters = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed()); var privateKey = new ECPrivateKeyParameters(new BigInteger(1, prvKey), parameters); var signer = new ECDsaSigner(new HMacDsaKCalculator(new Blake2bDigest(256))); signer.Init(true, privateKey); var rs = signer.GenerateSignature(Blake2b.GetDigest(msg)); if (rs[1].CompareTo(curve.N.Divide(BigInteger.Two)) > 0) { rs[1] = curve.N.Subtract(rs[1]); } var r = rs[0].ToByteArrayUnsigned().Align(32); var s = rs[1].ToByteArrayUnsigned().Align(32); return(new Signature(r.Concat(s), SignaturePrefix)); }
public static int GetHash(byte[] bytes) { var hash = Blake2b.GetDigest(bytes, 32); return((hash[0] << 24) | (hash[1] << 16) | (hash[2] << 8) | (hash[3])); }
public bool TryAuthenticate(AuthHeaders headers, string json, out string error) { error = null; if (string.IsNullOrEmpty(headers.User)) { error = $"The X-TZKT-USER header is required"; return(false); } if (headers.Nonce == null) { error = $"The X-TZKT-NONCE header is required"; return(false); } if (string.IsNullOrEmpty(headers.Signature)) { error = $"The X-TZKT-SIGNATURE header is required"; return(false); } if (string.IsNullOrEmpty(json)) { error = $"The body is empty"; return(false); } if (!Config.Credentials.TryGetValue(headers.User, out var pubKey)) { error = $"User {headers.User} doesn't exist"; return(false); } var nonce = (long)headers.Nonce; var nonceTime = DateTime.UnixEpoch.AddMilliseconds(nonce); if (nonceTime < DateTime.UtcNow.AddSeconds(-Config.NonceLifetime)) { error = $"Nonce too old. Server time: {DateTime.UtcNow}, nonce: {nonceTime}"; return(false); } if (nonce <= Nonces[headers.User]) { error = $"Nonce {nonce} has already used"; return(false); } var hash = Hex.Convert(Blake2b.GetDigest(Utf8.Parse(json))); var key = PubKey.FromBase58(pubKey); if (!key.Verify($"{headers.Nonce}{hash}", headers.Signature)) { error = $"Invalid signature"; return(false); } Nonces[headers.User] = nonce; return(true); }