X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2Fcorlib%2FSystem.Security.Cryptography%2FRSAPKCS1SignatureDeformatter.cs;h=ef33e1366fa9f45be5c6ddb1ab8bc81f6f18026a;hb=7015b812166d0992223b5dc4421deab637500265;hp=a0c7d00c5ffb0aca1690d01b13f525679810f5d4;hpb=55a6430bfbe3e7caf3686d9a37b4fec12d21b4b9;p=mono.git diff --git a/mcs/class/corlib/System.Security.Cryptography/RSAPKCS1SignatureDeformatter.cs b/mcs/class/corlib/System.Security.Cryptography/RSAPKCS1SignatureDeformatter.cs index a0c7d00c5ff..ef33e1366fa 100644 --- a/mcs/class/corlib/System.Security.Cryptography/RSAPKCS1SignatureDeformatter.cs +++ b/mcs/class/corlib/System.Security.Cryptography/RSAPKCS1SignatureDeformatter.cs @@ -2,68 +2,88 @@ // RSAPKCS1SignatureDeformatter.cs - Handles PKCS#1 v.1.5 signature decryption. // // Author: -// Sebastien Pouliot (spouliot@motus.com) +// Sebastien Pouliot // -// (C) 2002 Motus Technologies Inc. (http://www.motus.com) +// (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com) +// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -using System; +using System.Globalization; +using System.Runtime.InteropServices; +using Mono.Security.Cryptography; namespace System.Security.Cryptography { - -public class RSAPKCS1SignatureDeformatter : AsymmetricSignatureDeformatter { - - private RSA rsa; - private HashAlgorithm hash; - - public RSAPKCS1SignatureDeformatter () - { - rsa = null; - } - - public RSAPKCS1SignatureDeformatter (AsymmetricAlgorithm key) - { - SetKey (key); - } - - public override void SetHashAlgorithm (string strName) - { - hash = HashAlgorithm.Create (strName); - } - - public override void SetKey (AsymmetricAlgorithm key) - { - if (key != null) { - if (key is RSA) { - rsa = (RSA)key; - } - else - throw new InvalidCastException (); + +#if NET_2_0 + [ComVisible (true)] +#endif + public class RSAPKCS1SignatureDeformatter : AsymmetricSignatureDeformatter { + + private RSA rsa; + private string hashName; + + public RSAPKCS1SignatureDeformatter () + { } - // here null is accepted! - } - - [MonoTODO()] - public override bool VerifySignature (byte[] rgbHash, byte[] rgbSignature) - { - if ((rsa == null) || (hash == null)) - throw new CryptographicUnexpectedOperationException (); - if ((rgbHash == null) || (rgbSignature == null)) - throw new ArgumentNullException (); - // TODO - return false; - } + + public RSAPKCS1SignatureDeformatter (AsymmetricAlgorithm key) + { + SetKey (key); + } + + public override void SetHashAlgorithm (string strName) + { + if (strName == null) + throw new ArgumentNullException ("strName"); + hashName = strName; + } + + public override void SetKey (AsymmetricAlgorithm key) + { +#if NET_2_0 + if (key == null) + throw new ArgumentNullException ("key"); +#else + // 1.0/1.1 accepted null without an ArgumentNullException! +#endif + rsa = (RSA) key; + } + + public override bool VerifySignature (byte[] rgbHash, byte[] rgbSignature) + { + if (rsa == null) { + throw new CryptographicUnexpectedOperationException ( + Locale.GetText ("No public key available.")); + } + if (hashName == null) { + throw new CryptographicUnexpectedOperationException ( + Locale.GetText ("Missing hash algorithm.")); + } + if (rgbHash == null) + throw new ArgumentNullException ("rgbHash"); + if (rgbSignature == null) + throw new ArgumentNullException ("rgbSignature"); - [MonoTODO()] - public override bool VerifySignature (HashAlgorithm hash, byte[] rgbSignature) - { - if ((hash == null) || (rgbSignature == null)) - throw new ArgumentNullException (); - if ((rsa == null) || (hash == null)) - throw new CryptographicUnexpectedOperationException (); - // TODO - return false; + return PKCS1.Verify_v15 (rsa, HashAlgorithm.Create (hashName), rgbHash, rgbSignature); + } } } - -}