public static void Test(VipNetCrytoProvider provider) { using (StreamReader file = File.OpenText("original-signedInfo.txt")) { //"boivBh1ioIPFGrKQ7LhhVw2pGfar/+T9Cqgz6JZ35IA=" //"Pbp8cgljASFaqSsAHwA2eMC8GGvE9hjS5giHHYS8ZXQ=" //"FD289YMUI30ICSHDA0boH479x0G+ZjYnBx748mk6uT8=" //"fTBlROVsvTt/fAoyBLWVuaMYCIX/z4Eu+IVwQrNTb3k=" //"W4hHfJjhWWvFRLxQVMu16sltkr/wLN36ulR+ySbYyCE=" //"FD289YMUI30ICSHDA0boH479x0G+ZjYnBx748mk6uT8=" 6SEf0xFQFeilZRxXLCyflb3V9oTbyU7lsB/yLhPE2c25ZBOd7vEXNhY/wQnzt2+gNZRBkW26sUtbAWi59m1h/w== var hash = provider.HashData(file.ReadToEnd()); Signature signature = provider.SigningHash(hash); bool result = provider.VerifySignature(signature); Console.WriteLine(signature.Base64); } X509Certificate cert = new X509Certificate(); using (StreamReader file = File.OpenText("CorrectCertificate.txt")) { var data = file.ReadToEnd().Replace("\n", ""); var certBytes = Convert.FromBase64String(data); cert.Import(certBytes); var publicKey = cert.GetPublicKey(); } }
public static bool Verify(string xml, VipNetCrytoProvider provider) { XmlDocument doc = XDocument.Parse(xml).GetXmlDocument(); var body = Canonicalizer.GetObject(doc, "#body"); var bodyHash = provider.HashData(body); XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable); nsManager.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#"); nsManager.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/"); nsManager.AddNamespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); nsManager.AddNamespace("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); var digestValue = (doc.SelectSingleNode("//soapenv:Envelope/soapenv:Header/wsse:Security/ds:Signature/ds:SignedInfo/ds:Reference/ds:DigestValue", nsManager) as XmlElement).InnerText; if (bodyHash.Base64 != digestValue) { return(false); } var signedInfo = Canonicalizer.GetObject(doc, "#SignedInfo"); //using (var file = File.CreateText("original-signedInfo" + ".txt")) //{ // file.WriteLine(signedInfo); //} using (var file = File.OpenText("original-signedInfo" + ".txt")) { var signedInfoWithoutDs = file.ReadToEnd(); Signature sig = provider.SigningHash(provider.HashData(signedInfoWithoutDs)); } var signedInfoHash = provider.HashData(signedInfo); var signature = provider.SigningHash(signedInfoHash); var signatureValue = (doc.SelectSingleNode("//soapenv:Envelope/soapenv:Header/wsse:Security/ds:Signature/ds:SignatureValue", nsManager) as XmlElement).InnerText; var certificateBase64 = (doc.SelectSingleNode("//soapenv:Envelope/soapenv:Header/wsse:Security/wsse:BinarySecurityToken", nsManager) as XmlElement).InnerText; X509Certificate certificate = new X509Certificate(Convert.FromBase64String(certificateBase64)); //var signature = new Signature {SignedHash = signedInfoHash, Bytes = Convert.FromBase64String(signatureValue)}; signature.Bytes = Convert.FromBase64String(signatureValue); return(provider.VerifySignature(signature)); }
public void HashTest() { string message = "This is message, length=32 bytes"; Console.WriteLine("====================== Hash Test ======================"); var crypto = new VipNetCrytoProvider(); var hash1 = crypto.HashData(message); crypto = new VipNetCrytoProvider(); var hash2 = crypto.HashData(message); if (hash1.Hex != hash2.Hex) { throw new Exception("Wrong hash value"); } Console.WriteLine(hash1.Hex); Console.WriteLine("======================================================"); }