/// <summary> /// Signs the specified digest. /// </summary> /// <param name="algorithm">The <see cref="SignatureAlgorithm"/> to use.</param> /// <param name="digest">The pre-hashed digest to sign. The hash algorithm used to compute the digest must be compatable with the specified algorithm.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> to cancel the operation.</param> /// <returns> /// The result of the sign operation. The returned <see cref="SignResult"/> contains the signature /// along with all other information needed to verify it. This information should be stored with the signature. /// </returns> /// <exception cref="ArgumentException">The specified <paramref name="algorithm"/> does not match the key corresponding to the key identifier.</exception> /// <exception cref="CryptographicException">The local cryptographic provider threw an exception.</exception> /// <exception cref="InvalidOperationException">The key is invalid for the current operation.</exception> /// <exception cref="NotSupportedException">The operation is not supported with the specified key.</exception> public virtual SignResult Sign(SignatureAlgorithm algorithm, byte[] digest, CancellationToken cancellationToken = default) { SignResult result = null; if (_provider.SupportsOperation(KeyOperation.Sign)) { result = _provider.Sign(algorithm, digest, cancellationToken); } return(result ?? throw LocalCryptographyProvider.CreateOperationNotSupported(nameof(KeyOperation.Sign))); }
/// <summary> /// Signs the specified digest. /// </summary> /// <param name="algorithm">The <see cref="SignatureAlgorithm"/> to use.</param> /// <param name="digest">The pre-hashed digest to sign. The hash algorithm used to compute the digest must be compatable with the specified algorithm.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> to cancel the operation.</param> /// <returns> /// The result of the sign operation. The returned <see cref="SignResult"/> contains the signature /// along with all other information needed to verify it. This information should be stored with the signature. /// </returns> /// <exception cref="ArgumentException">The specified <paramref name="algorithm"/> does not match the key corresponding to the key identifier.</exception> /// <exception cref="CryptographicException">The local cryptographic provider threw an exception.</exception> /// <exception cref="InvalidOperationException">The key is invalid for the current operation.</exception> /// <exception cref="NotSupportedException">The operation is not supported with the specified key.</exception> public virtual async Task <SignResult> SignAsync(SignatureAlgorithm algorithm, byte[] digest, CancellationToken cancellationToken = default) { SignResult result = null; if (_provider.SupportsOperation(KeyOperation.Sign)) { result = await _provider.SignAsync(algorithm, digest, cancellationToken).ConfigureAwait(false); } return(result ?? throw LocalCryptographyProvider.CreateOperationNotSupported(nameof(KeyOperation.Sign))); }
/// <summary> /// Signs the specified data. /// </summary> /// <param name="algorithm">The <see cref="SignatureAlgorithm"/> to use.</param> /// <param name="data">The data to sign.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> to cancel the operation.</param> /// <returns> /// The result of the sign operation. The returned <see cref="SignResult"/> contains the signature /// along with all other information needed to verify it. This information should be stored with the signature. /// </returns> /// <exception cref="ArgumentException">The specified <paramref name="algorithm"/> does not match the key corresponding to the key identifier.</exception> /// <exception cref="ArgumentNullException"><paramref name="data"/> is null.</exception> /// <exception cref="CryptographicException">The local cryptographic provider threw an exception.</exception> /// <exception cref="InvalidOperationException">The key is invalid for the current operation.</exception> /// <exception cref="NotSupportedException">The operation is not supported with the specified key.</exception> public virtual SignResult SignData(SignatureAlgorithm algorithm, Stream data, CancellationToken cancellationToken = default) { Argument.AssertNotNull(data, nameof(data)); SignResult result = null; if (_provider.SupportsOperation(KeyOperation.Sign)) { byte[] digest = CryptographyClient.CreateDigest(algorithm, data); result = _provider.Sign(algorithm, digest, cancellationToken); } return(result ?? throw LocalCryptographyProvider.CreateOperationNotSupported(nameof(KeyOperation.Sign))); }
/// <summary> /// Signs the specified data. /// </summary> /// <param name="algorithm">The <see cref="SignatureAlgorithm"/> to use.</param> /// <param name="data">The data to sign.</param> /// <param name="cancellationToken">A <see cref="CancellationToken"/> to cancel the operation.</param> /// <returns> /// The result of the sign operation. The returned <see cref="SignResult"/> contains the signature /// along with all other information needed to verify it. This information should be stored with the signature. /// </returns> /// <exception cref="ArgumentException">The specified <paramref name="algorithm"/> does not match the key corresponding to the key identifier.</exception> /// <exception cref="CryptographicException">The local cryptographic provider threw an exception.</exception> /// <exception cref="InvalidOperationException">The key is invalid for the current operation.</exception> /// <exception cref="NotSupportedException">The operation is not supported with the specified key.</exception> public virtual async Task <SignResult> SignDataAsync(SignatureAlgorithm algorithm, byte[] data, CancellationToken cancellationToken = default) { Argument.AssertNotNull(data, nameof(data)); SignResult result = null; if (_provider.SupportsOperation(KeyOperation.Sign)) { byte[] digest = CryptographyClient.CreateDigest(algorithm, data); result = await _provider.SignAsync(algorithm, digest, cancellationToken).ConfigureAwait(false); } return(result ?? throw LocalCryptographyProvider.CreateOperationNotSupported(nameof(KeyOperation.Sign))); }
public virtual Task <SignResult> SignAsync(SignatureAlgorithm algorithm, byte[] digest, CancellationToken cancellationToken = default) { SignResult result = Sign(algorithm, digest, cancellationToken); return(Task.FromResult(result)); }