public void OpCheckSig(ParsedOpCode op, MsgTx transaction) { try { var rawPublicKey = MainStack.Pop(); var rawSignature = MainStack.Pop(); if (rawSignature.Length < 1) { MainStack.Push(false); return; } var signature = rawSignature.Take(rawSignature.Length - 1).ToArray(); var signatureType = (SignatureHashType)rawSignature.Last(); AssertSignatureHashType(signatureType); AssertSignatureEncoding(signature); AssertPublicKeyEncoding(rawPublicKey); var subScript = _script.GetOpCodesWithoutData(rawSignature); var hash = CalculateSignatureHash(subScript, signatureType, (MsgTx)transaction.Clone(), _txIndex); var ecSignature = new ECSignature(signature); var securityService = new ECPublicSecurityService(rawPublicKey); var isValidSignature = securityService.VerifySignature(hash, ecSignature); MainStack.Push(isValidSignature); } catch (ScriptException) { MainStack.Push(false); } }
public void ECSecurityService_VerifySignature_VerifiesGeneratedSignatureAgainstPublicKey() { const bool isCompressed = false; var messageHash = HashUtil.Blake256(_message); var signature = new ECSignature(_signature); var privateSecurityService = new ECPrivateSecurityService(_privateKey); var publicKeyBytes = privateSecurityService.GetPublicKey(isCompressed); var publicSecurityService = new ECPublicSecurityService(publicKeyBytes); var hasValidSignature = publicSecurityService.VerifySignature(messageHash, signature); Assert.True(hasValidSignature); }
public bool VerifySignature(byte[] message, ECSignature signature) { return(_ecPublicSecurityService.VerifySignature(message, signature)); }