From a27bdbc6f0535e79d7343bd93e1de79a03a49f63 Mon Sep 17 00:00:00 2001 From: Martin Baulig Date: Sun, 8 Feb 2015 07:09:30 +0100 Subject: [PATCH] Provide a local copy of these for the stand-alone build. --- .../RSASslSignatureDeformatter.cs | 108 ++++++++++++++++++ .../RSASslSignatureFormatter.cs | 105 +++++++++++++++++ .../Mono.Security.NewTls.csproj | 8 +- 3 files changed, 215 insertions(+), 6 deletions(-) create mode 100644 Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureDeformatter.cs create mode 100644 Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureFormatter.cs diff --git a/Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureDeformatter.cs b/Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureDeformatter.cs new file mode 100644 index 0000000..3a325d6 --- /dev/null +++ b/Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureDeformatter.cs @@ -0,0 +1,108 @@ +// Transport Security Layer (TLS) +// Copyright (c) 2003-2004 Carlos Guzman Alvarez + +// +// 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.Security.Cryptography; + +namespace Mono.Security.Cryptography +{ + internal class RSASslSignatureDeformatter : AsymmetricSignatureDeformatter + { + #region Fields + + private RSA key; + private HashAlgorithm hash; + + #endregion + + #region Constructors + + public RSASslSignatureDeformatter() + { + } + + public RSASslSignatureDeformatter(AsymmetricAlgorithm key) + { + this.SetKey(key); + } + + #endregion + + #region Methods + + public override bool VerifySignature( + byte[] rgbHash, + byte[] rgbSignature) + { + if (this.key == null) + { + throw new CryptographicUnexpectedOperationException("The key is a null reference"); + } + if (hash == null) + { + throw new CryptographicUnexpectedOperationException("The hash algorithm is a null reference."); + } + if (rgbHash == null) + { + throw new ArgumentNullException("The rgbHash parameter is a null reference."); + } + + return Mono.Security.Cryptography.PKCS1.Verify_v15( + this.key, + this.hash, + rgbHash, + rgbSignature); + } + + public override void SetHashAlgorithm(string strName) + { +#if INSIDE_SYSTEM + hash = new Mono.Security.Cryptography.MD5SHA1 (); +#else + switch (strName) + { + case "MD5SHA1": + this.hash = new Mono.Security.Cryptography.MD5SHA1(); + break; + + default: + this.hash = HashAlgorithm.Create(strName); + break; + } +#endif + } + + public override void SetKey(AsymmetricAlgorithm key) + { + if (!(key is RSA)) + { + throw new ArgumentException("Specfied key is not an RSA key"); + } + + this.key = key as RSA; + } + + #endregion + } +} diff --git a/Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureFormatter.cs b/Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureFormatter.cs new file mode 100644 index 0000000..f609d4d --- /dev/null +++ b/Mono.Security.NewTls/Mono.Security.Cryptography/RSASslSignatureFormatter.cs @@ -0,0 +1,105 @@ +// Transport Security Layer (TLS) +// Copyright (c) 2003-2004 Carlos Guzman Alvarez + +// +// 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.Security.Cryptography; + +namespace Mono.Security.Cryptography +{ + internal class RSASslSignatureFormatter : AsymmetricSignatureFormatter + { + #region Fields + + private RSA key; + private HashAlgorithm hash; + + #endregion + + #region Constructors + + public RSASslSignatureFormatter() + { + } + + public RSASslSignatureFormatter(AsymmetricAlgorithm key) + { + this.SetKey(key); + } + + #endregion + + #region Methods + + public override byte[] CreateSignature(byte[] rgbHash) + { + if (this.key == null) + { + throw new CryptographicUnexpectedOperationException("The key is a null reference"); + } + if (hash == null) + { + throw new CryptographicUnexpectedOperationException("The hash algorithm is a null reference."); + } + if (rgbHash == null) + { + throw new ArgumentNullException("The rgbHash parameter is a null reference."); + } + + return Mono.Security.Cryptography.PKCS1.Sign_v15( + this.key, + this.hash, + rgbHash); + } + + public override void SetHashAlgorithm(string strName) + { +#if INSIDE_SYSTEM + hash = new Mono.Security.Cryptography.MD5SHA1 (); +#else + switch (strName) + { + case "MD5SHA1": + this.hash = new Mono.Security.Cryptography.MD5SHA1(); + break; + + default: + this.hash = HashAlgorithm.Create(strName); + break; + } +#endif + } + + public override void SetKey(AsymmetricAlgorithm key) + { + if (!(key is RSA)) + { + throw new ArgumentException("Specfied key is not an RSA key"); + } + + this.key = key as RSA; + } + + #endregion + } +} diff --git a/Mono.Security.NewTls/Mono.Security.NewTls.csproj b/Mono.Security.NewTls/Mono.Security.NewTls.csproj index 1314a44..4f20366 100644 --- a/Mono.Security.NewTls/Mono.Security.NewTls.csproj +++ b/Mono.Security.NewTls/Mono.Security.NewTls.csproj @@ -117,12 +117,8 @@ - - Mono.Security.Cryptography\RSASslSignatureFormatter.cs - - - Mono.Security.Cryptography\RSASslSignatureDeformatter.cs - + +