public async Task ShouldSignABlobOfDataWithEcdsaP256Sha256(string pfxPath) { var certificate = new X509Certificate2(pfxPath, "test"); var config = new CertificateSignConfigurationSet { SigningCertificate = certificate, PkcsDigestAlgorithm = HashAlgorithmName.SHA256, FileDigestAlgorithm = HashAlgorithmName.SHA256 }; using (var context = new CertificateSigningContext(config)) { using (var hash = SHA256.Create()) { var digest = hash.ComputeHash(new byte[] { 1, 2, 3 }); var signature = await context.SignDigestAsync(digest); Assert.Equal(OpcKnownUris.SignatureAlgorithms.ecdsaSHA256, context.XmlDSigIdentifier); Assert.Equal(SigningAlgorithm.ECDSA, context.SignatureAlgorithm); var roundtrips = await context.VerifyDigestAsync(digest, signature); Assert.True(roundtrips); } } }
private async Task <int> PerformSignOnVsixAsync(string vsixPath, bool force, Uri timestampUri, HashAlgorithmName fileDigestAlgorithm, HashAlgorithmName timestampDigestAlgorithm, X509Certificate2 certificate ) { using (var package = OpcPackage.Open(vsixPath, OpcPackageFileMode.ReadWrite)) { if (package.GetSignatures().Any() && !force) { _signCommandApplication.Out.WriteLine("The VSIX is already signed."); return(EXIT_CODES.FAILED); } var signBuilder = package.CreateSignatureBuilder(); signBuilder.EnqueueNamedPreset <VSIXSignatureBuilderPreset>(); var signingConfiguration = new CertificateSignConfigurationSet { FileDigestAlgorithm = fileDigestAlgorithm, PkcsDigestAlgorithm = fileDigestAlgorithm, SigningCertificate = certificate }; var signature = await signBuilder.SignAsync(signingConfiguration); if (timestampUri != null) { var timestampBuilder = signature.CreateTimestampBuilder(); var result = await timestampBuilder.SignAsync(timestampUri, timestampDigestAlgorithm); if (result == TimestampResult.Failed) { return(EXIT_CODES.FAILED); } } _signCommandApplication.Out.WriteLine("The signing operation is complete."); return(EXIT_CODES.SUCCESS); } }