//Server Side public void BeforeSendReply(ref System.ServiceModel.Channels.Message reply, object correlationState) { X509Certificate2 myCert = CryptoHelper.FindCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectDistinguishedName, "CN=klServer"); byte[] myHash = myCert.GetCertHash(); byte[] mySignedHash = CryptoHelper.Sign(myHash, myCert); byte[] mySignedDetachedHash = CryptoHelper.SignDetached(myHash, myCert); byte[] myEncryptedHash = CryptoHelper.Encrypt(mySignedHash, myCert); byte[] myEncryptedDetachedHash = CryptoHelper.Encrypt(mySignedDetachedHash, myCert); byte[] myDecodedHash = CryptoHelper.VerifyAndRemoveSignature(mySignedHash); bool myOK = CryptoHelper.VerifyDetached(mySignedHash, mySignedDetachedHash); char[] keyChars = new char[mySignedHash.Length]; for (int i = 0; i < mySignedHash.Length; i++) { keyChars[i] = (char)mySignedHash[i]; } reply.Headers.Add((new CustomSecurityHeader(new string(keyChars)))); MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue); reply = buffer.CreateMessage(); Console.WriteLine("Service Sending:\n{0}", buffer.CreateMessage().ToString()); }
public static byte[] SignMacWithPrivateKey(byte[] mac) { X509Certificate2 myCert = CryptoHelper.FindCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectDistinguishedName, "CN=klLicenseKeyGen"); byte[] mySignedMac = CryptoHelper.Sign(mac, myCert); return(mySignedMac); }
//Server Side public void BeforeSendReply(ref Message reply, object correlationState) { X509Certificate2 myCert = CryptoHelper.FindCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectDistinguishedName, "CN=klServer"); var myHash = myCert.GetCertHash(); var mySignedHash = CryptoHelper.Sign(myHash, myCert); var keyChars = new char[mySignedHash.Length]; for (int i = 0; i < mySignedHash.Length; i++) { keyChars[i] = (char)mySignedHash[i]; } reply.Headers.Add((new CustomSecurityHeader(new string(keyChars)))); MessageBuffer buffer = reply.CreateBufferedCopy(Int32.MaxValue); reply = buffer.CreateMessage(); }