public static string GetSignature(string privateKey, string message, string AccountId) { var publicKeyBytes = Base58Encoding.DecodeAccountId(AccountId); var privateKeyBytes = Base58Encoding.DecodePrivateKey(privateKey); //var signature = Neo.Cryptography.Crypto.Default.Sign(Encoding.UTF8.GetBytes(message), privateKeyBytes, publicKeyBytes); //return Base58Encoding.Encode(signature); Neo.Cryptography.ECC.ECDsa sa = new Neo.Cryptography.ECC.ECDsa(privateKeyBytes, Neo.Cryptography.ECC.ECCurve.Secp256r1); var sigInts = sa.GenerateSignature(Encoding.ASCII.GetBytes(message)); var sh = new SignatureHolder(sigInts); var signature = sh.ToString(); //var vrt = VerifySignature(message, AccountId, signature); return(signature); }
private static bool VerifySignature(string message, string AccountId, string signature) { try { var signatureBytes = Base58Encoding.Decode(signature); var publicKeyBytes = Base58Encoding.DecodeAccountId(AccountId); //return Neo.Cryptography.Crypto.Default.VerifySignature(Encoding.UTF8.GetBytes(message), signatureBytes, publicKeyBytes); Neo.Cryptography.ECC.ECDsa sa = new Neo.Cryptography.ECC.ECDsa(Neo.Cryptography.ECC.ECPoint.FromBytes(publicKeyBytes, Neo.Cryptography.ECC.ECCurve.Secp256r1)); var sh = new SignatureHolder(signature); return(sa.VerifySignature(Encoding.ASCII.GetBytes(message), sh.R, sh.S)); } catch (Exception ex) { _log.LogError("VerifySignature failed: " + ex.Message); return(false); } }
private static void decodeSignatureInfo(SignatureHolder signatureHolder, TlvDecoder decoder, bool copy) { int beginOffset = decoder.getOffset(); int endOffset = decoder.readNestedTlvsStart(net.named_data.jndn.encoding.tlv.Tlv.SignatureInfo); int signatureType = (int) decoder .readNonNegativeIntegerTlv(net.named_data.jndn.encoding.tlv.Tlv.SignatureType); if (signatureType == net.named_data.jndn.encoding.tlv.Tlv.SignatureType_SignatureSha256WithRsa) { signatureHolder.setSignature(new Sha256WithRsaSignature()); // Modify the holder's signature object because if we create an object // and set it, then the holder will have to copy all the fields. Sha256WithRsaSignature signatureInfo = (Sha256WithRsaSignature) signatureHolder .getSignature(); decodeKeyLocator(net.named_data.jndn.encoding.tlv.Tlv.KeyLocator, signatureInfo.getKeyLocator(), decoder, copy); if (decoder.peekType(net.named_data.jndn.encoding.tlv.Tlv.ValidityPeriod_ValidityPeriod, endOffset)) decodeValidityPeriod(signatureInfo.getValidityPeriod(), decoder); } else if (signatureType == net.named_data.jndn.encoding.tlv.Tlv.SignatureType_SignatureSha256WithEcdsa) { signatureHolder.setSignature(new Sha256WithEcdsaSignature()); Sha256WithEcdsaSignature signatureInfo_0 = (Sha256WithEcdsaSignature) signatureHolder .getSignature(); decodeKeyLocator(net.named_data.jndn.encoding.tlv.Tlv.KeyLocator, signatureInfo_0.getKeyLocator(), decoder, copy); if (decoder.peekType(net.named_data.jndn.encoding.tlv.Tlv.ValidityPeriod_ValidityPeriod, endOffset)) decodeValidityPeriod(signatureInfo_0.getValidityPeriod(), decoder); } else if (signatureType == net.named_data.jndn.encoding.tlv.Tlv.SignatureType_SignatureHmacWithSha256) { signatureHolder.setSignature(new HmacWithSha256Signature()); HmacWithSha256Signature signatureInfo_1 = (HmacWithSha256Signature) signatureHolder .getSignature(); decodeKeyLocator(net.named_data.jndn.encoding.tlv.Tlv.KeyLocator, signatureInfo_1.getKeyLocator(), decoder, copy); } else if (signatureType == net.named_data.jndn.encoding.tlv.Tlv.SignatureType_DigestSha256) signatureHolder.setSignature(new DigestSha256Signature()); else { signatureHolder.setSignature(new GenericSignature()); GenericSignature signatureInfo_2 = (GenericSignature) signatureHolder .getSignature(); // Get the bytes of the SignatureInfo TLV. signatureInfo_2.setSignatureInfoEncoding( new Blob(decoder.getSlice(beginOffset, endOffset), copy), signatureType); } decoder.finishNestedTlvs(endOffset); }