public void SymmetricKeyWrapEncryptionRoundtrip(Func <ICipherParameters> keyFactory, Func <ICipherParameters> innerKeyFactory) { const string exampleXmlRootElement = "example"; const string exampleXml = @"<?xml version=""1.0""?> <example> <test>some text node</test> </example>"; const string keyName = "mytestkey"; ICipherParameters key = keyFactory(); XmlDocument xmlDocToEncrypt = LoadXmlFromString(exampleXml); Encrypt(xmlDocToEncrypt, exampleXmlRootElement, "EncryptedElement1", key, keyName, innerKeyFactory); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Algorithm: {0}", EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(key, keyWrap: true)); Console.WriteLine("Encrypted document:"); Console.WriteLine(); Console.WriteLine(xmlDocToEncrypt.OuterXml); Console.WriteLine(); XmlDocument xmlDocToDecrypt = LoadXmlFromString(xmlDocToEncrypt.OuterXml); Decrypt(xmlDocToDecrypt, key, keyName); Console.WriteLine("Decrypted document:"); Console.WriteLine(); Console.WriteLine(xmlDocToDecrypt.OuterXml); Console.WriteLine(); }
public void SymmetricKeyWrapEncryptionRoundtrip() { // DES is not supported in keywrap scenario, there is no specification string for it either foreach (var factory in EncryptingAndDecryptingSymmetric.GetSymmetricAlgorithms(skipDes: true)) { foreach (var innerFactory in EncryptingAndDecryptingSymmetric.GetSymmetricAlgorithms(skipDes: true)) { SymmetricKeyWrapEncryptionRoundtrip(factory, innerFactory); } } }
static void Main(string[] args) { Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Signature verification test"); Console.WriteLine("----------------------------------------------------------------"); var test1 = new SigningAndVerifying(); test1.SignedXmlHasVerifiableSignature(); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Signature verification test with custom signature method"); Console.WriteLine("----------------------------------------------------------------"); var test2 = new SigningAndVerifyingWithCustomSignatureMethod(); test2.SignedXmlHasVerifiableSignature(); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Signature verification test using x509 certificate"); Console.WriteLine("----------------------------------------------------------------"); var test3 = new SigningVerifyingX509Cert(); test3.SignedXmlHasCertificateVerifiableSignature(); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Signature verification test using GOST algorithm"); Console.WriteLine("----------------------------------------------------------------"); var test3_1 = new SigningVerifyingGost(); test3_1.SignedXmlHasCertificateVerifiableSignature(); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Encryption/decryption test using symmetric algorithms"); Console.WriteLine("----------------------------------------------------------------"); var test4 = new EncryptingAndDecryptingSymmetric(); test4.SymmetricEncryptionRoundtrip(); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Encryption/decryption test using symmetric algorithms with key wrap"); Console.WriteLine("----------------------------------------------------------------"); var test5 = new EncryptingDecryptingSymmetricKeyWrap(); test5.SymmetricKeyWrapEncryptionRoundtrip(); Console.WriteLine("----------------------------------------------------------------"); Console.WriteLine("Encryption/decryption test using RSA"); Console.WriteLine("----------------------------------------------------------------"); var test6 = new EncryptingAndDecryptingAsymmetric(); test6.AsymmetricEncryptionRoundtrip(); }
private static void Encrypt(XmlDocument doc, string elementName, string encryptionElementID, RsaKeyParameters rsaKey, string keyName, bool useOAEP) { var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0]; var sessionKeyData = EncryptingAndDecryptingSymmetric.GenerateBlock(256); var sessionKeyIV = EncryptingAndDecryptingSymmetric.GenerateBlock(128); var sessionKey = new ParametersWithIV(new KeyParameter(sessionKeyData), sessionKeyIV); // Encrypt the session key and add it to an EncryptedKey element. var encryptedKey = new EncryptedKey() { CipherData = new CipherData(EncryptedXml.EncryptKey(sessionKeyData, rsaKey, useOAEP)), EncryptionMethod = new EncryptionMethod(useOAEP ? EncryptedXml.XmlEncRSAOAEPUrl : EncryptedXml.XmlEncRSA15Url) }; // Specify which EncryptedData // uses this key. An XML document can have // multiple EncryptedData elements that use // different keys. encryptedKey.AddReference(new DataReference() { Uri = "#" + encryptionElementID }); var encryptedData = new EncryptedData() { Type = EncryptedXml.XmlEncElementUrl, Id = encryptionElementID, // Create an EncryptionMethod element so that the // receiver knows which algorithm to use for decryption. EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncAES256Url) }; encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey)); encryptedKey.KeyInfo.AddClause(new KeyInfoName() { Value = keyName }); var encryptedXml = new EncryptedXml(); encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, sessionKey, false); EncryptedXml.ReplaceElement(elementToEncrypt, encryptedData, false); }
private static void Encrypt(XmlDocument doc, string elementName, string encryptionElementID, ICipherParameters key, string keyName, Func <ICipherParameters> innerKeyFactory) { var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0]; ICipherParameters innerKey = innerKeyFactory(); // Encrypt the key with another key var encryptedKey = new EncryptedKey() { CipherData = new CipherData(EncryptedXml.EncryptKey(((KeyParameter)((ParametersWithIV)innerKey).Parameters).GetKey(), (KeyParameter)((ParametersWithIV)key).Parameters)), EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(key, keyWrap: true)) }; // Specify which EncryptedData // uses this key. An XML document can have // multiple EncryptedData elements that use // different keys. encryptedKey.AddReference(new DataReference() { Uri = "#" + encryptionElementID }); var encryptedData = new EncryptedData() { Type = EncryptedXml.XmlEncElementUrl, Id = encryptionElementID, // Create an EncryptionMethod element so that the // receiver knows which algorithm to use for decryption. EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(innerKey, keyWrap: false)) }; encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey)); encryptedKey.KeyInfo.AddClause(new KeyInfoName() { Value = keyName }); var encryptedXml = new EncryptedXml(); encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, innerKey, false); EncryptedXml.ReplaceElement(elementToEncrypt, encryptedData, false); }