Create README.md
Browse files
README.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
tags:
|
| 4 |
+
- voice
|
| 5 |
+
- wake-word
|
| 6 |
+
- tts
|
| 7 |
+
- piper
|
| 8 |
+
- openwakeword
|
| 9 |
+
- signed
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# WCPDR-AI / voice-models
|
| 13 |
+
|
| 14 |
+
Signed voice-model artifacts for the wcpdr-agent Windows desktop assistant. The agent fetches models from this repo at first run via `huggingface_hub`; every artifact is verified against the Ed25519
|
| 15 |
+
signature below before it touches the runtime.
|
| 16 |
+
|
| 17 |
+
## Asset layout
|
| 18 |
+
|
| 19 |
+
```
|
| 20 |
+
voice-models/
|
| 21 |
+
βββ README.md # this file
|
| 22 |
+
βββ manifest.json # canonical asset list (signed)
|
| 23 |
+
βββ manifest.json.sig # Ed25519 signature over manifest.json
|
| 24 |
+
βββ wake/
|
| 25 |
+
β βββ hey_jarvis_v1.onnx # mirrored from openWakeWord v0.5.1 stock model
|
| 26 |
+
β βββ hey_jarvis_v1.onnx.sig
|
| 27 |
+
β βββ hey_alex_v1.onnx # custom-trained variants land here
|
| 28 |
+
β βββ hey_alex_v1.onnx.sig
|
| 29 |
+
β βββ ...
|
| 30 |
+
βββ piper/
|
| 31 |
+
βββ en_US-amy-medium.onnx
|
| 32 |
+
βββ en_US-amy-medium.onnx.sig
|
| 33 |
+
βββ en_US-amy-medium.onnx.json # Piper voice metadata
|
| 34 |
+
βββ es_MX-claude-high.onnx
|
| 35 |
+
βββ es_MX-claude-high.onnx.sig
|
| 36 |
+
βββ es_MX-claude-high.onnx.json
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
## Signing key
|
| 40 |
+
|
| 41 |
+
All artifacts in this repo are signed with a single Ed25519 key dedicated to voice models. The key is **separate from the MSI installer-update signing key** so the two rotation calendars don't have to
|
| 42 |
+
coordinate, and a leak of one has narrower blast radius.
|
| 43 |
+
|
| 44 |
+
**Public key fingerprint** (SHA-256 of `VOICE_MODEL_PUBLIC_KEY_B64`, hex):
|
| 45 |
+
|
| 46 |
+
```
|
| 47 |
+
716f3bfefd5b887e735adc198231d8c58b4917257f401eee3ce930b79cc4feb1
|
| 48 |
+
```
|
| 49 |
+
|
| 50 |
+
The matching public key value (base64-encoded raw 32 bytes):
|
| 51 |
+
|
| 52 |
+
```
|
| 53 |
+
KO8A6pii2YrmgFcTtGMX0cltdWjyfgo+vdB/VJTvyMk=
|
| 54 |
+
```
|
| 55 |
+
|
| 56 |
+
The wcpdr-agent build pipeline stamps this same value into the agent's signing module at compile time. Operators can verify their installed agent's bundled key matches by checking the agent's
|
| 57 |
+
`--print-voice-pubkey` output (when available); the printed value should hash to the fingerprint above. If it doesn't, the agent is from a different rotation cycle than the artifacts in this repo and won't
|
| 58 |
+
trust them β either re-sign artifacts with the agent's expected key (operators) or upgrade the agent (users).
|
| 59 |
+
|
| 60 |
+
## Verification chain
|
| 61 |
+
|
| 62 |
+
Top-down chain of trust for any artifact in this repo:
|
| 63 |
+
|
| 64 |
+
1. Agent is built with `VOICE_MODEL_PUBLIC_KEY_B64` baked into its signing module.
|
| 65 |
+
2. Agent fetches `manifest.json` + `manifest.json.sig` from this repo.
|
| 66 |
+
3. Agent verifies `manifest.json.sig` against the bundled public key β failure = refuse all artifacts in this manifest.
|
| 67 |
+
4. Agent reads asset entries from `manifest.json` (each entry has `repo_path`, `sha256`, `signature_filename`).
|
| 68 |
+
5. For each artifact the agent needs, it fetches the artifact + its `.sig` companion file.
|
| 69 |
+
6. Agent verifies SHA-256 against the manifest entry, then verifies the per-artifact Ed25519 signature.
|
| 70 |
+
7. Verified artifact gets atomically renamed into the agent's local cache and loaded into the runtime (Whisper / openWakeWord / Piper).
|
| 71 |
+
|
| 72 |
+
A failure at any step surfaces as `voice_error{code: model_signature_invalid}` IPC to the tray; voice mode stays off; no silent "load anyway" fallback.
|
| 73 |
+
|
| 74 |
+
## License
|
| 75 |
+
|
| 76 |
+
This repo's contents are individually licensed:
|
| 77 |
+
|
| 78 |
+
- `wake/hey_jarvis_v1.onnx` β bit-identical mirror of openWakeWord v0.5.1's `hey_jarvis_v0.1.onnx` (Apache-2.0).
|
| 79 |
+
- `piper/en_US-amy-medium.onnx` and `piper/es_MX-claude-high.onnx` β upstream Piper TTS voices (MIT). Voice attribution lives in each `.json` metadata companion.
|
| 80 |
+
- Custom-trained wake-word variants (e.g. `hey_alex_v1.onnx`) β Apache-2.0 (matches openWakeWord training pipeline output).
|
| 81 |
+
- This README and `manifest.json` β Apache-2.0.
|
| 82 |
+
|
| 83 |
+
Re-distributable under the terms of each artifact's individual license.
|
| 84 |
+
|
| 85 |
+
## Reporting a compromised key
|
| 86 |
+
|
| 87 |
+
If you have evidence the signing key has leaked, contact the wcpdr-agent maintainers directly. Do **not** include the leaked key value in any message β describe the suspected leak vector (where you saw it,
|
| 88 |
+
when, who has access) and we'll initiate the rotation procedure.
|
| 89 |
+
|
| 90 |
+
The wcpdr-agent source repository is private; if you don't have access, route the report through your wcpdr point of contact. Once a leak is confirmed, the maintainers rotate per the agent's internal
|
| 91 |
+
voice-models runbook and re-sign every artifact in this repo within 24 hours. A new agent release tag (with the new public key baked in) follows on the same day.
|