isdoc / dsig-demo

Sample application for signing ISDOC documents
Apache License 2.0
3 stars 3 forks source link

Dotaz ohledně System.Security.Cryptography.CryptoConfig.AddAlgorithm #2

Closed janbalcarik closed 9 years ago

janbalcarik commented 9 years ago

Dobrý den,

testoval jsem dále vaší aplikaci a řešil problém ohledně přidání podpory RSA-SHA256 do net framework 3.5 a nižší. Vzhledem k tomu, že není dostupná nebo tedy že neexistuje metoda AddAlgorithm pokusil jsem se přidat podpis přímo do interního field v CryptoConfig. pomocí níže uvedeného postupu. Dle mého porovnání obou případů se zdá že vše funguje stejně a není tudíž nutné používat uvedenou knihovnu, což je poměrně složité...

Možná že mne něco uniká a tím pádem to nebude fungovat, pokud by jste mne mohl poslat váš názor budu rád.

Děkuji

    public Utils()
    {
        // ručně musíme přidat podporu pro podpisy RSA-SHA-256, .NET framework ji standardně nepodporuje
        // pro starší verze .NET frameworku je navíc potřeba doinstalovat knihovny z adresy http://clrsecurity.codeplex.com/wikipage?title=Security.Cryptography.RSAPKCS1SHA256SignatureDescription&referringTitle=Security.Cryptography.dll
        //RSAPKCS1SHA256SignatureDescription desc = new RSAPKCS1SHA256SignatureDescription();
        //System.Security.Cryptography.CryptoConfig.AddAlgorithm(desc.GetType(), "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256");

        if (CryptoConfig.CreateFromName("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256") == null)
        {
            var cType = typeof(System.Security.Cryptography.CryptoConfig);
            var property = cType.GetField("defaultNameHT", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
            //var data = property.GetValue(null) as System.Collections.Generic.Dictionary<string, object>;
            var data = property.GetValue(null) as System.Collections.Hashtable;
            data.Add("http://www.w3.org/2001/04/xmldsig-more#rsa-sha256", typeof(Security.Cryptography.RSAPKCS1SHA256SignatureDescription));
            property.SetValue(null, data);
        }
    }
kosek commented 9 years ago

Nejsem odborník na .NET, ale takovýhle způsob zásahu do existující knihovny mi nepřijde moc čistý.

Pro .NET 3.5 můžete použít následující knihovnu pro přidání podpory dalších algoritmů:

http://clrsecurity.codeplex.com/wikipage?title=Security.Cryptography.CryptoConfig2&referringTitle=Security.Cryptography.dll