/// <summary>
        /// Generates a Signature for a given package for tests.
        /// </summary>
        /// <param name="signatureProvider">Signature proivider to create the signature.</param>
        /// <param name="package">Package to be used for the signature.</param>
        /// <param name="request">SignPackageRequest containing the metadata for the signature request.</param>
        /// <param name="testLogger">ILogger.</param>
        /// <returns>Signature for the package.</returns>
        public static async Task <Signature> CreateSignatureForPackageAsync(ISignatureProvider signatureProvider, PackageArchiveReader package, SignPackageRequest request, TestLogger testLogger)
        {
            var zipArchiveHash = await package.GetArchiveHashAsync(request.SignatureHashAlgorithm, CancellationToken.None);

            var base64ZipArchiveHash = Convert.ToBase64String(zipArchiveHash);
            var signatureContent     = new SignatureContent(SigningSpecifications.V1, request.SignatureHashAlgorithm, base64ZipArchiveHash);

            return(await signatureProvider.CreateSignatureAsync(request, signatureContent, testLogger, CancellationToken.None));
        }
        /// <summary>
        /// Generates a Signature for a given package for tests.
        /// </summary>
        /// <param name="package">Package to be used for the signature.</param>
        /// <param name="request">Sign package request for primary signature</param>
        /// <param name="timestampProvider">Provider to add timestamp to package. Defaults to null.</param>
        /// <returns>Signature for the package.</returns>
        public static async Task <PrimarySignature> CreatePrimarySignatureForPackageAsync(
            PackageArchiveReader package,
            SignPackageRequest request,
            ITimestampProvider timestampProvider = null)
        {
            Assert.False(await package.IsSignedAsync(CancellationToken.None));

            var testLogger        = new TestLogger();
            var signatureProvider = new X509SignatureProvider(timestampProvider);

            var zipArchiveHash = await package.GetArchiveHashAsync(request.SignatureHashAlgorithm, CancellationToken.None);

            var base64ZipArchiveHash = Convert.ToBase64String(zipArchiveHash);
            var signatureContent     = new SignatureContent(SigningSpecifications.V1, request.SignatureHashAlgorithm, base64ZipArchiveHash);

            return(await signatureProvider.CreatePrimarySignatureAsync(request, signatureContent, testLogger, CancellationToken.None));
        }
        /// <summary>
        /// Generates a Signature for a package.
        /// </summary>
        /// <param name="testCert">Certificate to be used while generating the signature.</param>
        /// <param name="nupkg">Package for which the signature has to be generated.</param>
        /// <returns>Signature for the package.</returns>
        public static async Task <Signature> CreateSignatureForPackageAsync(X509Certificate2 testCert, Stream packageStream)
        {
            var testLogger    = new TestLogger();
            var hashAlgorithm = HashAlgorithmName.SHA256;

            using (var request = new SignPackageRequest(testCert, hashAlgorithm))
                using (var package = new PackageArchiveReader(packageStream, leaveStreamOpen: true))
                {
                    var zipArchiveHash = await package.GetArchiveHashAsync(request.SignatureHashAlgorithm, CancellationToken.None);

                    var base64ZipArchiveHash  = Convert.ToBase64String(zipArchiveHash);
                    var signatureContent      = new SignatureContent(SigningSpecifications.V1, hashAlgorithm, base64ZipArchiveHash);
                    var testSignatureProvider = new X509SignatureProvider(timestampProvider: null);

                    return(await testSignatureProvider.CreateSignatureAsync(request, signatureContent, testLogger, CancellationToken.None));
                }
        }