Skip to content

Ratesight 3.12.1 — multiple pinned control-plane keys

Choose a tag to compare

@davidbenlaw davidbenlaw released this 17 Sep 21:19
· 26 commits to main since this release
Immutable release. Only release title and notes can be modified.
06c103a

Ratesight WordPress plugin 3.12.1.

Multiple pinned control-plane keys. PUBLIC_KEY (single const) becomes PUBLIC_KEYS, an ordered
list, and verify_control_plane_signature() accepts a signature that verifies against any pinned
key. Only the existing primary key is pinned in this release; the intent is that a replacement signing
key can be published to the fleet in a later release without touching sites by hand again.

  • The primary pin is byte-identical to the key it replaces (SHA-256 over the DER SPKI,
    3e5ce75718941d9cab45d2b181ad53d5e45a17f39e6a1e1200b3327b20b7e79f), so a site verifying today's
    signatures is unaffected.
  • Every pin is checked rather than returning on the first match, so pin count does not change how long
    a rejection takes.
  • The ratesight_pairing_public_key filter accepts a single PEM string (the historical shape) or a
    list; empty or unparsable pins are skipped rather than fatal.
  • Update URI: https://ratesight.com added, so WordPress cannot treat ratesight as a wordpress.org
    slug.
  • README.txt now declares Requires PHP: 8.0 and Tested up to: 7.1. (Tested up to is the
    WordPress version in the readme spec — it previously said 7.0, which is not a WordPress version
    and was being used as a PHP field.)

Verification: full plugin suite — 22/22 tests/test-*.php pass, including the 10 new pairing checks
(primary pin verifies, unpinned key refused, differing bytes refused, malformed base64 refused,
single-string filter still verifies and still refuses an unpinned key, unparsable pin skipped, shipped
primary pin parses as EC P-256).

Asset ratesight-3.12.1-06c103aa.zip
sha256 0dff7e50a71f5558050b904ffc77a98c87e6397b4f4a8dd74a8d56de8092f270
Built deterministically by scripts/build-release-package.sh from tag v3.12.1 (82 entries,
timestamps pinned to 2020-01-01).

Not done, deliberately: no manifest registered, no site enrolled, no rollout. Nothing was installed
on any site.