Protokol JSON izvedbe Windows
Ta stran opisuje vsako zahtevo in vsak odgovor izvedbe Windows. Merodajni so tipi v win/src/protocol.rs.
Prenos
- Storitev posluša na eni ali več imenovanih ceveh; brez konfiguracije na
\\.\pipe\wvds_crypto. Katere cevi odpre konfiguracijska datoteka, opisuje Možnosti gradnje in konfiguracija. - Zahteva je natanko ena vrstica JSON v UTF-8, zaključena z
\n. Tudi odgovor je ena vrstica. Prek ene povezave lahko zaporedoma pošljete poljubno število zahtev. - Binarni podatki so v Base64 po RFC 4648 z dopolnjevanjem (
=). - Hkrati je lahko povezanih več odjemalcev.
Skupna polja
Vsaka zahteva vsebuje operation in request_id. request_id izbere odjemalec; storitev ga vrne
nespremenjenega.
Vsak odgovor na berljivo zahtevo vsebuje:
| Polje | Tip | Vsebina |
|---|---|---|
id | niz | UUID odgovora, ki ga dodeli storitev |
request_id | niz | iz zahteve |
timestamp | število | čas odgovora v milisekundah od 1970-01-01 UTC |
success | logična vrednost | true ob uspehu |
error | objekt | le ob neuspehu: code, message, po izbiri details |
duration_us | število | čas obdelave v mikrosekundah |
Če vrstica ni veljaven JSON ali manjka obvezno polje, storitev odgovori le z
{"success":false,"error":{"code":"INVALID_REQUEST","message":"…"}}, brez request_id.
Operacije
operation | Polja zahteve | Dodatna polja odgovora |
|---|---|---|
info | – | version, algorithms, status, uptime_seconds, requests_processed, keys_stored |
keygen | algorithm, po izbiri level | key_id, algorithm, pri parih ključev public_key |
aes_encrypt | key_id, plaintext, po izbiri aad | ciphertext, nonce, tag, key_id |
aes_decrypt | key_id, ciphertext, nonce, tag, po izbiri aad | plaintext |
ml_dsa_sign | key_id, message | signature, signature_size |
ml_dsa_verify | public_key, message, signature, level | valid |
ml_kem_encapsulate | public_key, level | ciphertext, shared_secret |
ml_kem_decapsulate | key_id, ciphertext | shared_secret |
export_public_key | key_id | public_key, algorithm |
hkdf | ikm, length, po izbiri salt, info | derived_key |
Polja z binarno vsebino so v Base64: plaintext, aad, ciphertext, nonce, tag, message,
signature, public_key, shared_secret, ikm, salt, info, derived_key. key_id in length
sta števili.
algorithm in level
| Namen | Dovoljene vrednosti |
|---|---|
keygen.algorithm | AES-256-GCM, AES256, AES; ML-DSA, ML-DSA-44, ML-DSA-65, ML-DSA-87; ML-KEM, ML-KEM-512, ML-KEM-768, ML-KEM-1024 (velikost črk ni pomembna) |
level za ML-DSA | ML-DSA-44, ML-DSA-65, ML-DSA-87, ml-dsa-44 … ali krajše 44, 65, 87 |
level za ML-KEM | ML-KEM-512, ML-KEM-768, ML-KEM-1024, ml-kem-512 … ali krajše 512, 768, 1024 |
keygen z ML-DSA ali ML-KEM brez level ustvari ML-DSA-65 oz. ML-KEM-768. Neznan level vodi do
UNSUPPORTED_ALGORITHM.
Opombe k posameznim operacijam
aes_encryptenkratno vrednost ustvari sam in jo vrne v odgovoru.nonceintagshranite skupaj s šifriranim besedilom;aes_decryptpotrebuje oba.ml_dsa_verifyneveljaven podpis sporoči kot uspeh z"valid": false. Vedno vrednotitevalid, ne lesuccess.hkdf: Poljisaltaliinfo, ki nista veljaven Base64, storitev obravnava kot prazni. Kodiranje preverite pred pošiljanjem. Največji možni izhod je 8160 bajtov (255 × 32).
Primer
Zahteva:
{"operation":"keygen","request_id":"k1","algorithm":"ML-KEM","level":"ML-KEM-768"}
Odgovor (skrajšan):
{"id":"5d1c…","request_id":"k1","timestamp":1760788800000,"success":true,"duration_us":412,"key_id":2741182583,"algorithm":"ML-KEM-768","public_key":"…"}