public void DSAKeyValue () { DSA key = DSA.Create (); key.FromXmlString (xmlDSA); DSAKeyValue dsa = new DSAKeyValue (key); info.AddClause (dsa); AssertCrypto.AssertXmlEquals ("dsa", "<KeyInfo xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><KeyValue xmlns=\"http://www.w3.org/2000/09/xmldsig#\">" + xmlDSA + "</KeyValue></KeyInfo>", (info.GetXml ().OuterXml)); AssertEquals ("dsa count", 1, info.Count); }
public void InvalidValue2 () { string badKey = "<Test></Test>"; XmlDocument doc = new XmlDocument (); doc.LoadXml (badKey); DSAKeyValue dsa1 = new DSAKeyValue (); dsa1.LoadXml (doc.DocumentElement); }
// // virtual methods // protected virtual AsymmetricAlgorithm GetPublicKey() { if (KeyInfo == null) { throw new CryptographicException(SR.Cryptography_Xml_KeyInfoRequired); } if (_x509Enum != null) { AsymmetricAlgorithm key = GetNextCertificatePublicKey(); if (key != null) { return(key); } } if (_keyInfoEnum == null) { _keyInfoEnum = KeyInfo.GetEnumerator(); } // In our implementation, we move to the next KeyInfo clause which is an RSAKeyValue, DSAKeyValue or KeyInfoX509Data while (_keyInfoEnum.MoveNext()) { RSAKeyValue rsaKeyValue = _keyInfoEnum.Current as RSAKeyValue; if (rsaKeyValue != null) { return(rsaKeyValue.Key); } DSAKeyValue dsaKeyValue = _keyInfoEnum.Current as DSAKeyValue; if (dsaKeyValue != null) { return(dsaKeyValue.Key); } KeyInfoX509Data x509Data = _keyInfoEnum.Current as KeyInfoX509Data; if (x509Data != null) { _x509Collection = Utils.BuildBagOfCerts(x509Data, CertUsageType.Verification); if (_x509Collection.Count > 0) { _x509Enum = _x509Collection.GetEnumerator(); AsymmetricAlgorithm key = GetNextCertificatePublicKey(); if (key != null) { return(key); } } } } return(null); }
public void ImportKey () { string dsaKey = "<KeyValue xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><DSAKeyValue><P>xc+QZRWTgr390gzwNXF+WzoepZkvAQvCzfCm+YyXj0KPoeHHeSc5ORzXQw81V+7XJR3gupvlI4F7lW9YC538l+3eqGm8IQlCIS+U+7ICTDOFFKevqsYX0BnjO0vvE4aAtDyxfSOTCOAo1cJ+6G6xgcC1JGIBEYCtg1tH8wUewDE=</P><Q>yyfZb0S/rimXl9ScJ3zIba2oGl8=</Q><G>crLazMg+vgI7u6+Idgi9iTLdRa4fptat3gdY97zcc857+OVdmT+lVRpK3okWpmBbw2wSffU8QltwFf42BVs+/HGUOUo2hNqSSXgzl1i+1frO7/cqooHVcy5WX0xxaIPsKcREPI5pNPj/3g8apTgErLMGsHkFdngwbMed9DArTks=</G><Y>FlAozo17wV/LCMRrtnmMKxVQNpidJVkZNM1/0eR65x8giwPs6yXzJmFT8f2tmPJY2FIOAtp5JYin4xUhwIHF452Gg50wUrjV6WTGkiC+gzLC2fVIyGlVsFecLj6ue7J+MACG+b3NQnxFuT5maQnPnEeuGgjLXfwYsAR1vfU0Gas=</Y><J>+UPMvUPq9Fo6Q1fr2oEYDxfGMMtfdoQmVBxI+TkUYQsReodRzBbnvGV1uPLWTpKKd/uJNUHO/QGb05Cvc6u49/AToDJIyi4e01hTLNCzeQk/Hj19gowb5wkTIjyaH04VyPE5zYoTYfuu3Y3Q</J><Seed>+cvoO7bzdpAwAjnDDApPzBCl6zg=</Seed><PgenCounter>ATM=</PgenCounter></DSAKeyValue></KeyValue>"; XmlDocument doc = new XmlDocument (); doc.LoadXml (dsaKey); DSAKeyValue dsa1 = new DSAKeyValue (); dsa1.LoadXml (doc.DocumentElement); string s = (dsa1.GetXml ().OuterXml); AssertEquals ("DSA Key", dsaKey, s); }
public void GenerateKey () { DSAKeyValue dsa1 = new DSAKeyValue (); AssertNotNull ("Key", dsa1.Key); XmlElement xmlkey = dsa1.GetXml (); DSAKeyValue dsa2 = new DSAKeyValue (); dsa2.LoadXml (xmlkey); Assert ("dsa1==dsa2", (dsa1.GetXml ().OuterXml) == (dsa2.GetXml ().OuterXml)); DSA key = dsa1.Key; DSAKeyValue dsa3 = new DSAKeyValue (key); Assert ("dsa3==dsa1", (dsa3.GetXml ().OuterXml) == (dsa1.GetXml ().OuterXml)); Assert ("dsa3==dsa2", (dsa3.GetXml ().OuterXml) == (dsa2.GetXml ().OuterXml)); }
public void GenerateKey () { DSAKeyValue dsa1 = new DSAKeyValue (); Assert.IsNotNull (dsa1.Key, "Key"); XmlElement xmlkey = dsa1.GetXml (); DSAKeyValue dsa2 = new DSAKeyValue (); dsa2.LoadXml (xmlkey); Assert.IsTrue ((dsa1.GetXml ().OuterXml) == (dsa2.GetXml ().OuterXml), "dsa1==dsa2"); DSA key = dsa1.Key; DSAKeyValue dsa3 = new DSAKeyValue (key); Assert.IsTrue ((dsa3.GetXml ().OuterXml) == (dsa1.GetXml ().OuterXml), "dsa3==dsa1"); Assert.IsTrue ((dsa3.GetXml ().OuterXml) == (dsa2.GetXml ().OuterXml), "dsa3==dsa2"); }
protected virtual AsymmetricAlgorithm GetPublicKey() { if (this.KeyInfo == null) { throw new CryptographicException(SecurityResources.GetResourceString("Cryptography_Xml_KeyInfoRequired")); } if (this.m_x509Enum != null) { AsymmetricAlgorithm nextCertificatePublicKey = this.GetNextCertificatePublicKey(); if (nextCertificatePublicKey != null) { return(nextCertificatePublicKey); } } if (this.m_keyInfoEnum == null) { this.m_keyInfoEnum = this.KeyInfo.GetEnumerator(); } while (this.m_keyInfoEnum.MoveNext()) { RSAKeyValue current = this.m_keyInfoEnum.Current as RSAKeyValue; if (current != null) { return(current.Key); } DSAKeyValue value3 = this.m_keyInfoEnum.Current as DSAKeyValue; if (value3 != null) { return(value3.Key); } KeyInfoX509Data data = this.m_keyInfoEnum.Current as KeyInfoX509Data; if (data != null) { this.m_x509Collection = System.Security.Cryptography.Xml.Utils.BuildBagOfCerts(data, CertUsageType.Verification); if (this.m_x509Collection.Count > 0) { this.m_x509Enum = this.m_x509Collection.GetEnumerator(); AsymmetricAlgorithm algorithm2 = this.GetNextCertificatePublicKey(); if (algorithm2 != null) { return(algorithm2); } } } } return(null); }
virtual protected void SignWithKeyInfo(String src, String dest, ICipherParameters pk, AsymmetricAlgorithm publicKey, String digestAlgorithm) { // Creating the reader and the stamper PdfReader reader = new PdfReader(src); FileStream os = new FileStream(dest, FileMode.Create); PdfStamper stamper = PdfStamper.createXmlSignature(reader, os); // Creating the appearance XmlSignatureAppearance appearance = stamper.XmlSignatureAppearance; //Set XfaXmlLocator to control getting and setting Document appearance.SetXmlLocator(new XfaXmlLocator(stamper)); // Creating the signature IExternalSignature pks = new PrivateKeySignature(pk, digestAlgorithm); KeyInfoClause keyInfo; if(publicKey is DSA) keyInfo = new DSAKeyValue((DSA)publicKey); else if(publicKey is RSA) keyInfo = new RSAKeyValue((RSA)publicKey); else throw new ArgumentException("Invalid public key algorithm", "publicKey"); MakeXmlSignature.SignXmlDSig(appearance, pks, keyInfo); }
public void Complex () { KeyInfoName name = new KeyInfoName (); name.Value = "Mono::"; info.AddClause (name); DSA keyDSA = DSA.Create (); keyDSA.FromXmlString (xmlDSA); DSAKeyValue dsa = new DSAKeyValue (keyDSA); info.AddClause (dsa); RSA keyRSA = RSA.Create (); keyRSA.FromXmlString (xmlRSA); RSAKeyValue rsa = new RSAKeyValue (keyRSA); info.AddClause (rsa); KeyInfoRetrievalMethod retrieval = new KeyInfoRetrievalMethod (); retrieval.Uri = "http://www.go-mono.org/"; info.AddClause (retrieval); X509Certificate x509 = new X509Certificate (cert); KeyInfoX509Data x509data = new KeyInfoX509Data (x509); info.AddClause (x509data); string s = "<KeyInfo xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><KeyName>Mono::</KeyName><KeyValue xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><DSAKeyValue><P>rjxsMU368YOCTQejWkiuO9e/vUVwkLtq1jKiU3TtJ53hBJqjFRuTa228vZe+BH2su9RPn/vYFWfQDv6zgBYe3eNdu4Afw+Ny0FatX6dl3E77Ra6Tsd3MmLXBiGSQ1mMNd5G2XQGpbt9zsGlUaexXekeMLxIufgfZLwYp67M+2WM=</P><Q>tf0K9rMyvUrU4cIkwbCrDRhQAJk=</Q><G>S8Z+1pGCed00w6DtVcqZLKjfqlCJ7JsugEFIgSy/Vxtu9YGCMclV4ijGEbPo/jU8YOSMuD7E9M7UaopMRcmKQjoKZzoJjkgVFP48Ohxl1f08lERnButsxanx3+OstFwUGQ8XNaGg3KrIoZt1FUnfxN3RHHTvVhjzNSHxMGULGaU=</G><Y>LnrxxRGLYeV2XLtK3SYz8RQHlHFZYrtznDZyMotuRfO5uC5YODhSFyLXvb1qB3WeGtF4h3Eo4KzHgMgfN2ZMlffxFRhJgTtH3ctbL8lfQoDkjeiPPnYGhspdJxr0tyZmiy0gkjJG3vwHYrLnvZWx9Wm/unqiOlGBPNuxJ+hOeP8=</Y><J>9RhE5TycDtdEIXxS3HfxFyXYgpy81zY5lVjwD6E9JP37MWEi80BlX6ab1YPm6xYSEoqReMPP9RgGiW6DuACpgI7+8vgCr4i/7VhzModJAA56PwvTu6UMt9xxKU/fT672v8ucREkMWoc7lEey</J><Seed>HxW3N4RHWVgqDQKuGg7iJTUTiCs=</Seed><PgenCounter>Asw=</PgenCounter></DSAKeyValue></KeyValue>"; s += "<KeyValue xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><RSAKeyValue><Modulus>9DC4XNdQJwMRnz5pP2a6U51MHCODRilaIoVXqUPhCUb0lJdGroeqVYT84ZyIVrcarzD7Tqs3aEOIa3rKox0N1bxQpZPqayVQeLAkjLLtzJW/ScRJx3uEDJdgT1JnM1FH0GZTinmEdCUXdLc7+Y/c/qqIkTfbwHbRZjW0bBJyExM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue>"; #if NET_1_0 s += "<RetrievalElement URI=\"http://www.go-mono.org/\" />"; #else s += "<RetrievalMethod URI=\"http://www.go-mono.org/\" />"; #endif s += "<X509Data xmlns=\"http://www.w3.org/2000/09/xmldsig#\">"; s += "<X509Certificate>MIICHTCCAYYCARQwDQYJKoZIhvcNAQEEBQAwWDELMAkGA1UEBhMCQ0ExHzAdBgNVBAMTFktleXdpdG5lc3MgQ2FuYWRhIEluYy4xKDAmBgorBgEEASoCCwIBExhrZXl3aXRuZXNzQGtleXdpdG5lc3MuY2EwHhcNOTYwNTA3MDAwMDAwWhcNOTkwNTA3MDAwMDAwWjBYMQswCQYDVQQGEwJDQTEfMB0GA1UEAxMWS2V5d2l0bmVzcyBDYW5hZGEgSW5jLjEoMCYGCisGAQQBKgILAgETGGtleXdpdG5lc3NAa2V5d2l0bmVzcy5jYTCBnTANBgkqhkiG9w0BAQEFAAOBiwAwgYcCgYEAzSP6KuHtmPTp0JM+13qAAkzMwQKvXLYff/pXQm8w0SDFtSEHQCyphsLzZISuPYUu7YW9VLAYKO9q+BvnCxYfkyVPx/iOw7nKmIQOVdAv73h3xXIoX2C/GSvRcqK32D/glzRaAb0EnMh4Rc2TjRXydhARq7hbLp5S3YE+nGTIKZMCAQMwDQYJKoZIhvcNAQEEBQADgYEAMho1ur9DJ9a01Lh25eObTWzAhsl3NbprFi0TRkqwMlOhW1rpmeIMhogXTg3+gqxOR+/7/zms7jXI+lI3CkmtWa3iiqkcxl8f+G9zfs2gMegMvvVN2bKrihK2MHhoEXwN8UlNo/2y6f8d8JH6VIX/M5Dowb+km6RiRr1hElmYQYk=</X509Certificate></X509Data></KeyInfo>"; AssertCrypto.AssertXmlEquals ("Complex", s, (info.GetXml ().OuterXml)); AssertEquals ("RetrievalMethod count", 5, info.Count); }