public static void Encrypt(Stream toEncrypt, RsaKeyParameters key, out KeyInfo keyInfo, out EncryptionMethod encryptionMethod, out CipherData cipherData) { var random = new SecureRandom(); var keyData = new byte[128 / 8]; var ivData = new byte[128 / 8]; random.NextBytes(ivData); random.NextBytes(keyData); var sessionKey = new ParametersWithIV(new KeyParameter(keyData), ivData); encryptionMethod = new EncryptionMethod(NS.XmlEncAES128Url); keyInfo = new KeyInfo(); EncryptedKey encKey; keyInfo.AddClause( new KeyInfoEncryptedKey( encKey = new EncryptedKey() { CipherData = new CipherData(XmlEncryption.EncryptKey(keyData, key, useOAEP: true)), EncryptionMethod = new EncryptionMethod(NS.XmlEncRSAOAEPUrl) })); encKey.KeyInfo.AddClause(new RsaKeyValue(key)); byte[] dataToEncrypt = new byte[toEncrypt.Length]; toEncrypt.Read(dataToEncrypt, 0, (int)toEncrypt.Length); var encryptedXml = new XmlEncryption(); encryptedXml.SetPadding("PKCS7"); encryptedXml.SetMode("CBC"); byte[] encryptedData = encryptedXml.EncryptData(dataToEncrypt, sessionKey); cipherData = new CipherData(encryptedData); }
public void EncryptData_Xml_SymmetricAlgorithmNull() { XmlDocument doc = new XmlDocument(); doc.LoadXml("<root />"); XmlEncryption ex = new XmlEncryption(); Assert.Throws <ArgumentNullException>(() => ex.EncryptData(doc.DocumentElement, null, true)); }
public void RoundtripSample1() { using (StringWriter sw = new StringWriter()) { { XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = true; doc.LoadXml("<root> <child>sample</child> </root>"); XmlElement body = doc.DocumentElement; var aes = CipherUtilities.GetCipher("AES/CBC/ZEROBYTEPADDING"); var ivdata = Convert.FromBase64String("pBUM5P03rZ6AE4ZK5EyBrw=="); var keydata = Convert.FromBase64String("o/ilseZu+keLBBWGGPlUHweqxIPc4gzZEFWr2nBt640="); var param = new ParametersWithIV(new KeyParameter(keydata), ivdata); XmlEncryption exml = new XmlEncryption(); byte[] encrypted = exml.EncryptData(body, param, false); EncryptedData edata = new EncryptedData(); edata.Type = XmlNameSpace.Url[NS.XmlEncElementUrl]; edata.EncryptionMethod = new EncryptionMethod(NS.XmlEncAES256Url); EncryptedKey ekey = new EncryptedKey(); byte[] encKeyBytes = keydata; ekey.CipherData = new CipherData(encKeyBytes); ekey.EncryptionMethod = new EncryptionMethod(NS.XmlEncRSA15Url); DataReference dr = new DataReference(); dr.Uri = "_0"; ekey.AddReference(dr); edata.KeyInfo.AddClause(new KeyInfoEncryptedKey(ekey)); ekey.KeyInfo.AddClause(new RsaKeyValue()); edata.CipherData.CipherValue = encrypted; XmlDecryption.ReplaceElement(doc.DocumentElement, edata, false); doc.Save(new XmlTextWriter(sw)); } { var aes = CipherUtilities.GetCipher("AES/CBC/ZEROBYTEPADDING"); var random = new SecureRandom(); var ivdata = new byte[aes.GetBlockSize()]; var keydata = Convert.FromBase64String("o/ilseZu+keLBBWGGPlUHweqxIPc4gzZEFWr2nBt640="); random.NextBytes(ivdata); var param = new ParametersWithIV(new KeyParameter(keydata), ivdata); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = true; doc.LoadXml(sw.ToString()); XmlDecryption encxml = new XmlDecryption(doc); EncryptedData edata = new EncryptedData(); edata.LoadXml(doc.DocumentElement); encxml.ReplaceData(doc.DocumentElement, encxml.DecryptData(edata, param)); } } }
public void DecryptData_CipherReference_IdUri() { XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = true; string xml = "<root> <child>sample</child> </root>"; doc.LoadXml(xml); var random = new SecureRandom(); var ivdata = new byte[128 / 8]; var keydata = new byte[256 / 8]; random.NextBytes(ivdata); random.NextBytes(keydata); var param = new ParametersWithIV(new KeyParameter(keydata), ivdata); XmlEncryption exml = new XmlEncryption(doc); XmlDecryption dexml = new XmlDecryption(doc); string cipherValue = Convert.ToBase64String(exml.EncryptData(Encoding.UTF8.GetBytes(xml), param)); EncryptedData ed = new EncryptedData(); ed.Type = XmlNameSpace.Url[NS.XmlEncElementUrl]; ed.EncryptionMethod = new EncryptionMethod(NS.XmlEncAES256Url); ed.CipherData = new CipherData(); ed.CipherData.CipherReference = new CipherReference("#ID_0"); string xslt = "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match = \"/\"><xsl:value-of select=\".\" /></xsl:template></xsl:stylesheet>"; XmlDsigXsltTransform xsltTransform = new XmlDsigXsltTransform(); XmlDocument xsltDoc = new XmlDocument(); xsltDoc.LoadXml(xslt); xsltTransform.LoadInnerXml(xsltDoc.ChildNodes); ed.CipherData.CipherReference.AddTransform(xsltTransform); ed.CipherData.CipherReference.AddTransform(new XmlDsigBase64Transform()); doc.LoadXml("<root></root>"); XmlNode encryptedDataNode = doc.ImportNode(ed.GetXml(), true); doc.DocumentElement.AppendChild(encryptedDataNode); XmlElement cipherDataByReference = doc.CreateElement("CipherData"); cipherDataByReference.SetAttribute("ID", "ID_0"); cipherDataByReference.InnerText = cipherValue; doc.DocumentElement.AppendChild(cipherDataByReference); string decryptedXmlString = Encoding.UTF8.GetString(dexml.DecryptData(ed, param)); Assert.Equal(xml, decryptedXmlString); }
public void EncryptData_Xml_XmlElementNull() { XmlEncryption ex = new XmlEncryption(); var random = new SecureRandom(); var ivdata = new byte[128 / 8]; var keydata = new byte[256 / 8]; random.NextBytes(ivdata); random.NextBytes(keydata); var param = new ParametersWithIV(new KeyParameter(keydata), ivdata); Assert.Throws <ArgumentNullException>(() => ex.EncryptData(null, param, true)); }
private static void EncryptElement(XmlDocument doc, string elementName, ICipherParameters key) { var elementToEncrypt = (XmlElement)doc.GetElementsByTagName(elementName)[0]; var encryptedXml = new XmlEncryption(); var encryptedData = new EncryptedData() { Type = XmlNameSpace.Url[NS.XmlEncElementUrl], EncryptionMethod = new EncryptionMethod(GetEncryptionMethodName(key)) }; encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, key, false); XmlDecryption.ReplaceElement(elementToEncrypt, encryptedData, false); }
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); var encryptedKey = new EncryptedKey() { CipherData = new CipherData(XmlEncryption.EncryptKey(sessionKeyData, rsaKey, useOAEP)), EncryptionMethod = new EncryptionMethod(useOAEP ? NS.XmlEncRSAOAEPUrl : NS.XmlEncRSA15Url) }; encryptedKey.AddReference(new DataReference() { Uri = "#" + encryptionElementID }); var encryptedData = new EncryptedData() { Type = XmlNameSpace.Url[NS.XmlEncElementUrl], Id = encryptionElementID, EncryptionMethod = new EncryptionMethod(NS.XmlEncAES256Url) }; encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey)); encryptedKey.KeyInfo.AddClause(new KeyInfoName() { Value = keyName }); var encryptedXml = new XmlEncryption(); encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, sessionKey, false); XmlDecryption.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(); var encryptedKey = new EncryptedKey() { CipherData = new CipherData(XmlEncryption.EncryptKey(((KeyParameter)((ParametersWithIV)innerKey).Parameters).GetKey(), (KeyParameter)((ParametersWithIV)key).Parameters)), EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(key, keyWrap: true)) }; encryptedKey.AddReference(new DataReference() { Uri = "#" + encryptionElementID }); var encryptedData = new EncryptedData() { Type = XmlNameSpace.Url[NS.XmlEncElementUrl], Id = encryptionElementID, EncryptionMethod = new EncryptionMethod(EncryptingAndDecryptingSymmetric.GetEncryptionMethodName(innerKey, keyWrap: false)) }; encryptedData.KeyInfo.AddClause(new KeyInfoEncryptedKey(encryptedKey)); encryptedKey.KeyInfo.AddClause(new KeyInfoName() { Value = keyName }); var encryptedXml = new XmlEncryption(); encryptedData.CipherData.CipherValue = encryptedXml.EncryptData(elementToEncrypt, innerKey, false); XmlDecryption.ReplaceElement(elementToEncrypt, encryptedData, false); }
public void EncryptData_SymmetricAlgorithmNull() { XmlEncryption ex = new XmlEncryption(); Assert.Throws <ArgumentNullException>(() => ex.EncryptData(new byte[16], null)); }