<?xml version="1.0"?>
<doc>
    <assembly>
        <name>PDM.Updater</name>
    </assembly>
    <members>
        <member name="T:PDM.Updater.ManifestSignatureVerifier">
            <summary>
            Verifies detached signatures on <see cref="T:PDM.Updater.UpdateManifest"/> instances. Uses
            ECDSA over the P-256 curve; the public key is provided in SubjectPublicKeyInfo (SPKI)
            DER form. The signed payload is the canonical UTF-8 JSON of the manifest with the
            <c>signature</c> field removed; the same canonicalization must be used by the signer.
            </summary>
        </member>
        <member name="F:PDM.Updater.ManifestSignatureVerifier.HashAlgorithm">
            <summary>The hash algorithm used with ECDSA to sign the manifest.</summary>
        </member>
        <member name="M:PDM.Updater.ManifestSignatureVerifier.#ctor(System.Byte[])">
            <summary>
            Creates a verifier bound to the given ECDSA P-256 SubjectPublicKeyInfo (DER) bytes.
            The signing tool must publish the matching private key alongside its build system.
            </summary>
        </member>
        <member name="M:PDM.Updater.ManifestSignatureVerifier.FromBase64(System.String)">
            <summary>Convenience overload accepting a Base64-encoded SPKI blob.</summary>
        </member>
        <member name="M:PDM.Updater.ManifestSignatureVerifier.Verify(PDM.Updater.UpdateManifest)">
            <summary>
            Returns true when <paramref name="manifest"/>'s <see cref="P:PDM.Updater.UpdateManifest.Signature"/>
            matches the manifest content under the embedded public key. Returns false when the
            signature is missing, malformed, or does not match.
            </summary>
        </member>
        <member name="M:PDM.Updater.ManifestSignatureVerifier.CanonicalizeForSigning(PDM.Updater.UpdateManifest)">
            <summary>
            Serializes a manifest to the canonical UTF-8 bytes that are signed and verified.
            This is a public helper so a signing tool can produce identical bytes without
            depending on any private state.
            </summary>
        </member>
        <member name="T:PDM.Updater.PdmUpdaterJsonContext">
             <summary>
             System.Text.Json source-generation context for the <see cref="P:PDM.Updater.PdmUpdaterJsonContext.UpdateManifest"/>. Compile-time
             metadata keeps the update path AOT/trim-safe.
            
             <para>Options preserve the previous behaviour exactly: null fields omitted on write, enums as
             strings (so <see cref="P:PDM.Updater.PdmUpdaterJsonContext.ReleaseChannel"/> serializes as "Stable"/"Beta"), and case-insensitive
             reads. The signature-critical canonical serializer additionally sets the relaxed JSON encoder at
             the call site (see <c>ManifestSignatureVerifier</c>) — a setting that cannot be expressed on the
             source-generation attribute — so the signed bytes still match the server's Node output.</para>
             </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.ReleaseChannel">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.UpdateManifest">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.Uri">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.Int64">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:PDM.Updater.PdmUpdaterJsonContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:PDM.Updater.PdmUpdaterJsonContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:PDM.Updater.PdmUpdaterJsonContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:PDM.Updater.PdmUpdaterJsonContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="T:PDM.Updater.ReleaseChannel">
            <summary>
            Release channels the app can subscribe to.
            </summary>
        </member>
        <member name="F:PDM.Updater.ReleaseChannel.Stable">
            <summary>Stable public releases only.</summary>
        </member>
        <member name="F:PDM.Updater.ReleaseChannel.Beta">
            <summary>Pre-release beta builds.</summary>
        </member>
        <member name="T:PDM.Updater.UpdateManifest">
            <summary>
            The signed update manifest fetched from the update server. The signature covers a
            canonical JSON serialization of every field except <see cref="P:PDM.Updater.UpdateManifest.Signature"/> itself,
            so tampering with any field (URL, version, SHA-256) invalidates the payload.
            </summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.Version">
            <summary>Semantic version string of the latest build for this channel (e.g. "1.4.2").</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.Channel">
            <summary>Which channel this manifest describes.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.PackageUrl">
            <summary>HTTPS URL to the update package (typically a signed .msi or self-extracting .exe).</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.PackageSizeBytes">
            <summary>Size of the update package in bytes.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.PackageSha256">
            <summary>SHA-256 of the package payload as a lowercase hex string.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.ReleasedUtc">
            <summary>
            UTC release timestamp as an ISO-8601 string. Stored as a raw string (not a DateTimeOffset)
            so that server and client agree byte-for-byte on the signed bytes — different languages
            serialize DateTimeOffset in slightly different formats which breaks the signature.
            </summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.ReleaseNotes">
            <summary>Release notes in plain text or Markdown.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.MinimumOs">
            <summary>Minimum supported OS version (e.g. "10.0.19041"); optional.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.ReleaseNotesUrl">
            <summary>Optional URL to human-friendly release notes for the UI to link to.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateManifest.Signature">
            <summary>Base64-encoded Ed25519 signature over the canonical unsigned form.</summary>
        </member>
        <member name="T:PDM.Updater.UpdateAvailability">
            <summary>Outcome of an update check.</summary>
        </member>
        <member name="F:PDM.Updater.UpdateAvailability.UpToDate">
            <summary>The check succeeded and this version is up to date.</summary>
        </member>
        <member name="F:PDM.Updater.UpdateAvailability.UpdateAvailable">
            <summary>The check succeeded and a newer version is available.</summary>
        </member>
        <member name="F:PDM.Updater.UpdateAvailability.CheckFailed">
            <summary>The check failed (network, signature, or version parsing).</summary>
        </member>
        <member name="T:PDM.Updater.UpdateCheckResult">
            <summary>Result of an update check.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateCheckResult.Availability">
            <summary>Coarse outcome.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateCheckResult.Manifest">
            <summary>Manifest returned by the server, or null when the check failed.</summary>
        </member>
        <member name="P:PDM.Updater.UpdateCheckResult.Message">
            <summary>Human-readable message on failure.</summary>
        </member>
        <member name="T:PDM.Updater.UpdateService">
            <summary>
            Coordinates the update lifecycle: fetches the signed manifest for the configured
            channel, verifies the signature, and — when an update is available — downloads and
            hash-verifies the package into a staging directory. Applying the update requires a
            helper launcher process (added at packaging time) since Windows cannot replace the
            currently running exe; this class prepares the staging file that the launcher consumes.
            </summary>
        </member>
        <member name="M:PDM.Updater.UpdateService.CheckAsync(System.Uri,PDM.Updater.ReleaseChannel,System.Version,System.Threading.CancellationToken,System.Version)">
            <summary>
            Fetches the manifest for <paramref name="channel"/> from <paramref name="manifestUrl"/>
            and compares its version to <paramref name="currentVersion"/>. Returns a structured
            result that says whether the check succeeded and whether a newer build exists.
            </summary>
        </member>
        <member name="M:PDM.Updater.UpdateService.DownloadAsync(PDM.Updater.UpdateManifest,System.IProgress{System.Double},System.Threading.CancellationToken)">
            <summary>
            Downloads the package described by <paramref name="manifest"/> into the staging
            directory and validates size + SHA-256. On success, returns the absolute path to
            the staged file, ready for the launcher to install.
            </summary>
        </member>
    </members>
</doc>
