summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2011-07-31 23:14:49 -0600
committerAndrew Arnott <andrewarnott@gmail.com>2011-07-31 23:14:49 -0600
commit7d874b645d575ed4cf7f879e7919c277cd7bfae7 (patch)
tree5b95aa5f3b7345a894ab184b85a60349766ebe02 /src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs
parentcb2960f2af1c4148d8581c3543594355cccabe6f (diff)
downloadDotNetOpenAuth-7d874b645d575ed4cf7f879e7919c277cd7bfae7.zip
DotNetOpenAuth-7d874b645d575ed4cf7f879e7919c277cd7bfae7.tar.gz
DotNetOpenAuth-7d874b645d575ed4cf7f879e7919c277cd7bfae7.tar.bz2
Moved more OAuth code from the common library to the individual Consumer or SP ones.
Diffstat (limited to 'src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs')
-rw-r--r--src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs
new file mode 100644
index 0000000..ba451e5
--- /dev/null
+++ b/src/DotNetOpenAuth.OAuth.Consumer/OAuth/ChannelElements/RsaSha1ConsumerSigningBindingElement.cs
@@ -0,0 +1,61 @@
+//-----------------------------------------------------------------------
+// <copyright file="RsaSha1SigningBindingElement.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOpenAuth.OAuth.ChannelElements {
+ using System;
+ using System.Diagnostics.Contracts;
+ using System.Security.Cryptography;
+ using System.Security.Cryptography.X509Certificates;
+ using System.Text;
+ using DotNetOpenAuth.Messaging;
+
+ /// <summary>
+ /// A binding element that signs outgoing messages and verifies the signature on incoming messages.
+ /// </summary>
+ public class RsaSha1ConsumerSigningBindingElement : RsaSha1SigningBindingElement {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RsaSha1SigningBindingElement"/> class.
+ /// </summary>
+ /// <param name="signingCertificate">The certificate used to sign outgoing messages.</param>
+ public RsaSha1ConsumerSigningBindingElement(X509Certificate2 signingCertificate) {
+ Contract.Requires<ArgumentNullException>(signingCertificate != null);
+
+ this.SigningCertificate = signingCertificate;
+ }
+
+ /// <summary>
+ /// Gets or sets the certificate used to sign outgoing messages. Used only by Consumers.
+ /// </summary>
+ public X509Certificate2 SigningCertificate { get; set; }
+
+ protected override bool IsSignatureValid(ITamperResistantOAuthMessage message) {
+ throw new NotImplementedException();
+ }
+
+ /// <summary>
+ /// Calculates a signature for a given message.
+ /// </summary>
+ /// <param name="message">The message to sign.</param>
+ /// <returns>The signature for the message.</returns>
+ /// <remarks>
+ /// This method signs the message per OAuth 1.0 section 9.3.
+ /// </remarks>
+ protected override string GetSignature(ITamperResistantOAuthMessage message) {
+ ErrorUtilities.VerifyOperation(this.SigningCertificate != null, OAuthStrings.X509CertificateNotProvidedForSigning);
+
+ string signatureBaseString = ConstructSignatureBaseString(message, this.Channel.MessageDescriptions.GetAccessor(message));
+ byte[] data = Encoding.ASCII.GetBytes(signatureBaseString);
+ var provider = (RSACryptoServiceProvider)this.SigningCertificate.PrivateKey;
+ byte[] binarySignature = provider.SignData(data, "SHA1");
+ string base64Signature = Convert.ToBase64String(binarySignature);
+ return base64Signature;
+ }
+
+ protected override ITamperProtectionChannelBindingElement Clone() {
+ return new RsaSha1ConsumerSigningBindingElement(this.SigningCertificate);
+ }
+ }
+}