{
  "analysis": "SPHINCS+ SHAKE-128s versus SHAKE-128f published byte sizes",
  "source_check_date": "2026-09-21",
  "source_repository": "https://github.com/sphincs/sphincsplus",
  "source_revision": "7ec789ace6874d875f4bb84cb61b81155398167e",
  "source_revision_date": "2024-04-15T16:30:51Z",
  "primary_source": "https://github.com/sphincs/sphincsplus/blob/7ec789ace6874d875f4bb84cb61b81155398167e/README.md",
  "sources": [
    {
      "path": "README.md",
      "url": "https://raw.githubusercontent.com/sphincs/sphincsplus/7ec789ace6874d875f4bb84cb61b81155398167e/README.md",
      "sha256": "6bc7f7a5bb2d47059d7e6c0115e358ba832523a1f033c56e086988d66a46c754",
      "bytes": 3108
    },
    {
      "path": "ref/params/params-sphincs-shake-128s.h",
      "url": "https://raw.githubusercontent.com/sphincs/sphincsplus/7ec789ace6874d875f4bb84cb61b81155398167e/ref/params/params-sphincs-shake-128s.h",
      "sha256": "da4f8c1ee5b475a8103d856d80dbec15276eb2f566ce44318dcd286faba05c1d",
      "bytes": 2130
    },
    {
      "path": "ref/params/params-sphincs-shake-128f.h",
      "url": "https://raw.githubusercontent.com/sphincs/sphincsplus/7ec789ace6874d875f4bb84cb61b81155398167e/ref/params/params-sphincs-shake-128f.h",
      "sha256": "de37a1ad4de21af24c70262a97b74927a0decb8275eae1ad34dcf5ed52daa2e1",
      "bytes": 2130
    }
  ],
  "method": "Parse the pinned README parameter rows; match six parameters against the SHAKE-specific headers; calculate exact rational differences. No source code is compiled or executed.",
  "parameter_table": {
    "SPHINCS+-SHAKE-128s": {
      "public_key_bytes": 32,
      "secret_key_bytes": 64,
      "signature_bytes": 7856
    },
    "SPHINCS+-SHAKE-128f": {
      "public_key_bytes": 32,
      "secret_key_bytes": 64,
      "signature_bytes": 17088
    }
  },
  "calculations": {
    "signature_bytes_saved_128s_vs_128f": 9232,
    "signature_ratio_128f_over_128s_exact": "1068/491",
    "signature_ratio_128f_over_128s_decimal": 2.1751527495,
    "signature_reduction_128s_relative_to_128f_exact": "577/1068",
    "signature_reduction_percent": 54.0262172285,
    "signature_reduction_percent_display": "54.03%",
    "public_key_byte_difference": 0,
    "secret_key_byte_difference": 0,
    "formulas": {
      "delta": "17088 - 7856 = 9232",
      "ratio": "17088 / 7856 = 1068 / 491",
      "reduction": "(17088 - 7856) / 17088 = 577 / 1068"
    }
  },
  "assertions_passed": [
    "All three pinned source SHA-256 digests and byte lengths match.",
    "README contains exactly one 128s row and one 128f row.",
    "128s: README sizes match expected values and all six SHAKE-header parameters.",
    "128f: README sizes match expected values and all six SHAKE-header parameters.",
    "Signature delta is exactly 9232 bytes.",
    "128f/128s signature-size ratio is exactly 1068/491.",
    "Reduction relative to 128f is exactly 577/1068."
  ],
  "conclusion": "We compared the upstream SPHINCS+ parameter table with its SHAKE-specific headers. Both variants list 32-byte public keys and 64-byte secret keys. The 128s signature is 7,856 bytes versus 17,088 bytes for 128f: 9,232 fewer bytes, a 54.03% reduction. This source-derived calculation measures neither runtime nor compressed storage and does not validate SYNX binaries or explain the project's historical parameter choice.",
  "limitations": [
    "Raw published key/signature sizes only; no signing or verification runtime measurement.",
    "No compressed-storage, transaction-envelope, block-size, network-throughput or bandwidth benchmark.",
    "No SYNX release binary was executed or independently validated.",
    "No inference about why SYNX historically chose a parameter set.",
    "No claim that SPHINCS+ names establish FIPS-conformant SLH-DSA product validation."
  ]
}
