//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- 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; /// /// A binding element that signs outgoing messages and verifies the signature on incoming messages. /// public class RsaSha1ConsumerSigningBindingElement : RsaSha1SigningBindingElement { /// /// Initializes a new instance of the class. /// /// The certificate used to sign outgoing messages. public RsaSha1ConsumerSigningBindingElement(X509Certificate2 signingCertificate) { Contract.Requires(signingCertificate != null); this.SigningCertificate = signingCertificate; } /// /// Gets or sets the certificate used to sign outgoing messages. Used only by Consumers. /// public X509Certificate2 SigningCertificate { get; set; } protected override bool IsSignatureValid(ITamperResistantOAuthMessage message) { throw new NotImplementedException(); } /// /// Calculates a signature for a given message. /// /// The message to sign. /// The signature for the message. /// /// This method signs the message per OAuth 1.0 section 9.3. /// 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); } } }