[Mono-list] RSA with SHA512 hash
Jeremy Poulter
jeremy.poulter at oregan.net
Fri Jan 21 08:16:29 EST 2011
Hi,
FYI: I have raised bug 666155 for this issue,
https://bugzilla.novell.com/show_bug.cgi?id=666155
Cheers,
Jeremy
On 10/01/2011 20:32, Sebastien Pouliot wrote:
> Hello again,
>
> >From source code:
>
> // LAMESPEC: str is not the hash name but an OID
> // NOTE: this method is LIMITED to SHA1 and MD5 like the MS framework 1.0
> // and 1.1 because there's no method to get a hash algorithm from an OID.
> // However there's no such limit when using the [De]Formatter class.
> public byte[] SignHash (byte[] rgbHash, string str)
>
> So this is something that has changed after 1.x (likely 2.0 or 3.5).
> I'll fix this soon in GIT (maybe in time for 2.10). In the mean time the
> workaround will work on all Mono / .NET releases.
>
> Sebastien
>
> On Mon, 2011-01-10 at 07:53 -0500, Sebastien Pouliot wrote:
>> Hello Jeremy,
>>
>> This was not supported in earlier version of Windows. Most of MS .NET
>> cryptography is not managed and redirected to CryptoAPI, which features
>> varies by Windows versions (which means your code won't work on all
>> Windows versions out there).
>>
>> In any case Mono can support this (all managed and no dependency on the
>> OS). Please fill a bug report on bugzilla.novell.com with a
>> self-contained test case and I'll look at it asap.
>>
>> Thanks
>> Sebastien
>>
>> On Mon, 2011-01-10 at 01:50 -0800, jeremy.poulter wrote:
>>> I have been developing an application that uses an SHA512 hash signed with a
>>> RSA private key for a digital signature.
>>>
>>> This is working fine on Windows under .Net but when I try this on Linux
>>> under Mono I get the following exception;
>>>
>>> System.NotSupportedException: 2.16.840.1.101.3.4.2.3 is an unsupported hash
>>> algorithm for RSA signing
>>> at
>>> System.Security.Cryptography.RSACryptoServiceProvider.GetHashNameFromOID
>>> (System.String oid) [0x00000] in <filename unknown>:0
>>> at System.Security.Cryptography.RSACryptoServiceProvider.SignHash
>>> (System.Byte[] rgbHash, System.String str) [0x00000] in <filename unknown>:0
>>> at Oregan.Utilities.DigitalSignature.DigitalSignature.Sign (HashType
>>> hashType, System.IO.Stream stream) [0x00000] in <filename unknown>:0
>>> at Oregan.FilePackBuilder.FilePack.Save (System.String sPath,
>>> Oregan.Utilities.DigitalSignature.DigitalSignature digitalSignature, Boolean
>>> bPreserveName) [0x00000] in <filename unknown>:0
>>> at Oregan.FilePackBuilder.FilePackViewer.filepackToolStripMenuItem1_Click
>>> (System.Object sender, System.EventArgs e) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStripItem.OnClick (System.EventArgs e)
>>> [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStripMenuItem.OnClick (System.EventArgs e)
>>> [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStripMenuItem.HandleClick (System.EventArgs e)
>>> [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStripItem.FireEvent (System.EventArgs e,
>>> ToolStripItemEventType met) [0x00000] in <filename unknown>:0
>>> at (wrapper remoting-invoke-with-check)
>>> System.Windows.Forms.ToolStripItem:FireEvent
>>> (System.EventArgs,System.Windows.Forms.ToolStripItemEventType)
>>> at System.Windows.Forms.ToolStrip.OnMouseUp
>>> (System.Windows.Forms.MouseEventArgs mea) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStripDropDown.OnMouseUp
>>> (System.Windows.Forms.MouseEventArgs mea) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message&
>>> m) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m)
>>> [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ScrollableControl.WndProc
>>> (System.Windows.Forms.Message& m) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStrip.WndProc (System.Windows.Forms.Message&
>>> m) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.ToolStripDropDown.WndProc
>>> (System.Windows.Forms.Message& m) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.Control+ControlWindowTarget.OnMessage
>>> (System.Windows.Forms.Message& m) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.Control+ControlNativeWindow.WndProc
>>> (System.Windows.Forms.Message& m) [0x00000] in <filename unknown>:0
>>> at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr
>>> wParam, IntPtr lParam) [0x00000] in <filename unknown>:0
>>>
>>> FYI the code I used is;
>>>
>>> public byte[] Sign(HashType hashType, Stream stream)
>>> {
>>> switch (hashType)
>>> {
>>> case HashType.MD5:
>>> {
>>> MD5 md5 = new MD5CryptoServiceProvider();
>>> byte[] hash = md5.ComputeHash(stream);
>>>
>>> return key.SignHash(hash, CryptoConfig.MapNameToOID("MD5"));
>>> }
>>> case HashType.SHA512:
>>> {
>>> SHA512 shaM = new SHA512Managed();
>>> byte[] hash = shaM.ComputeHash(stream);
>>>
>>> return key.SignHash(hash, CryptoConfig.MapNameToOID("SHA512"));
>>> }
>>> }
>>>
>>> return null;
>>> }
>>>
>>> Any feedback is appreciated.
>>>
>>> Cheers,
>>>
>>> Jeremy
>>>
>>
>> _______________________________________________
>> Mono-list maillist - Mono-list at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-list
More information about the Mono-list
mailing list