Files
omar c01b8defb3 docs: translate issue/PR templates, docs index and pow README to English
Translate the GitHub bug/feature issue forms and PR template, the docs
index, and pow/README to English. Rename the reverse-engineering note file
to an ASCII name (deepseek-sse-behavior-2026-04-05.md); its body is
translated in a follow-up.
2026-06-02 22:17:26 +03:00
..

DeepSeek PoW Pure-Compute Implementation

The server-side PoW now runs on a pure Go implementation: internal/deepseek/pow.go reads the fields from the upstream challenge map, calls ds2api/pow to solve the nonce, and assembles the x-ds-pow-response header.

Algorithm

DeepSeekHashV1 = SHA3-256 but with Keccak-f[1600] skipping round 0 (only rounds 1..23). All other parameters are unchanged: rate=136, padding=0x06+0x80, output=32 bytes.

PoW protocol: the server picks answer ∈ [0, difficulty) and computes challenge = hash(prefix + str(answer)). The client iterates over [0, difficulty) to find the matching nonce.

prefix = salt + "_" + str(expire_at) + "_"
input  = (prefix + str(nonce)).encode("utf-8")
hash   = DeepSeekHashV1(input)      → 32 bytes
header = base64(json({algorithm, challenge, salt, answer, signature, target_path}))

Main entrypoints

  • pow/deepseek_hash.go: DeepSeekHashV1 / Keccak-f[1600] rounds 1..23.
  • pow/deepseek_pow.go: SolvePow, BuildPowHeader, SolveAndBuildHeader.
  • internal/deepseek/pow.go: server-side adapter layer; validates algorithm == DeepSeekHashV1 and calls pow.SolvePow.

Tests

cd pow && go test -v ./... && go test -bench=. -benchmem