ZeroInstall.Publish.FeedUtils.SignFeed C# (CSharp) Method

SignFeed() public static method

Adds a Base64 signature to a feed or catalog stream.
The file is not parsed before signing; invalid XML files are signed as well. The existing file must end with a line break. Old signatures are not removed.
The file could not be read or written. Read or write access to the file is not permitted. The specified could not be found on the system. was incorrect.
public static SignFeed ( [ stream, [ secretKey, [ passphrase, [ openPgp ) : void
stream [ The feed or catalog to sign.
secretKey [ The secret key to use for signing the file.
passphrase [ The passphrase to use to unlock the key.
openPgp [ The OpenPGP-compatible system used to create signatures.
return void
        public static void SignFeed([NotNull] Stream stream, [NotNull] OpenPgpSecretKey secretKey, [CanBeNull] string passphrase, [NotNull] IOpenPgp openPgp)
        {
            #region Sanity checks
            if (stream == null) throw new ArgumentNullException(nameof(stream));
            if (secretKey == null) throw new ArgumentNullException(nameof(secretKey));
            if (openPgp == null) throw new ArgumentNullException(nameof(openPgp));
            #endregion

            // Calculate the signature in-memory
            var signature = openPgp.Sign(stream.ToArray(), secretKey, passphrase);

            // Add the signature to the end of the file
            var writer = new StreamWriter(stream, Store.Feeds.FeedUtils.Encoding) {NewLine = "\n"};
            writer.Write(Store.Feeds.FeedUtils.SignatureBlockStart);
            writer.WriteLine(Convert.ToBase64String(signature));
            writer.Write(Store.Feeds.FeedUtils.SignatureBlockEnd);
            writer.Flush();
        }

Usage Example

Exemplo n.º 1
0
        /// <summary>
        /// Saves <see cref="Catalog"/> to an XML file, adds the default stylesheet and sign it it with <see cref="SecretKey"/> (if specified).
        /// </summary>
        /// <remarks>Writing and signing the catalog file are performed as an atomic operation (i.e. if signing fails an existing file remains unchanged).</remarks>
        /// <param name="path">The file to save in.</param>
        /// <param name="passphrase">The passphrase to use to unlock the secret key; can be <c>null</c> if <see cref="SecretKey"/> is <c>null</c>.</param>
        /// <exception cref="IOException">A problem occurred while writing the file.</exception>
        /// <exception cref="UnauthorizedAccessException">Write access to the file is not permitted.</exception>
        /// <exception cref="KeyNotFoundException">The specified <see cref="SecretKey"/> could not be found on the system.</exception>
        /// <exception cref="WrongPassphraseException"><paramref name="passphrase"/> was incorrect.</exception>
        public void Save(string path, string?passphrase = null)
        {
            #region Sanity checks
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException(nameof(path));
            }
            #endregion

            if (SecretKey == null)
            {
                Catalog.SaveXml(path);
                return;
            }

            using (var stream = new MemoryStream())
            {
                Catalog.SaveXml(stream, stylesheet: @"catalog.xsl");
                stream.Position = 0;

                FeedUtils.SignFeed(stream, SecretKey, passphrase, _openPgp);
                stream.CopyToFile(path);
            }
            string directory = Path.GetDirectoryName(path);
            _openPgp.DeployPublicKey(SecretKey, directory);
            FeedUtils.DeployStylesheet(directory, @"catalog");
        }
All Usage Examples Of ZeroInstall.Publish.FeedUtils::SignFeed