/// <summary> /// Produces a signature over the 'input' using the <see cref="SecurityKey"/> and algorithm specified. /// </summary> /// <param name="inputString">string to be signed</param> /// <param name="key">the <see cref="SecurityKey"/> to use.</param> /// <param name="algorithm">the algorithm to use.</param> /// <param name="signatureProvider">if provided, the <see cref="SignatureProvider"/> will be used to sign the token</param> /// <returns>The signature over the bytes obtained from UTF8Encoding.GetBytes( 'input' ).</returns> /// <remarks>The <see cref="SignatureProvider"/> used to created the signature is obtained by calling <see cref="System.IdentityModel.Tokens.SignatureProviderFactory.CreateForSigning(SecurityKey, string)"/>.</remarks> /// <exception cref="ArgumentNullException">'input' is null.</exception> /// <exception cref="InvalidProgramException"><see cref="System.IdentityModel.Tokens.SignatureProviderFactory.CreateForSigning(SecurityKey, string)"/> returns null.</exception> internal byte[] CreateSignature(string inputString, SecurityKey key, string algorithm, SignatureProvider signatureProvider = null) { if (null == inputString) { throw new ArgumentNullException("inputString"); } SignatureProvider provider; if (signatureProvider != null) { return signatureProvider.Sign(Encoding.UTF8.GetBytes(inputString)); } else { provider = SignatureProviderFactory.CreateForSigning(key, algorithm); if (provider == null) { throw new InvalidProgramException(string.Format(CultureInfo.InvariantCulture, ErrorMessages.IDX10635, SignatureProviderFactory.GetType(), typeof(SignatureProvider), key == null ? "<null>" : key.GetType().ToString(), algorithm == null ? "<null>" : algorithm)); } byte[] bytes = provider.Sign(Encoding.UTF8.GetBytes(inputString)); SignatureProviderFactory.ReleaseProvider(provider); return bytes; } }
private void SignatureProvider_SignVariation(SignatureProvider provider, byte[] bytes, byte[] signature, ExpectedException expectedException) { try { provider.Sign(bytes); expectedException.ProcessNoException(); } catch (Exception ex) { expectedException.ProcessException(ex); } }