Cut 1 completes the dormant MutationEnvelope contract without changing any runtime path. Bind target_id to the provisioned agent identity, require canonical UUID v4 authorization IDs, cap authorization lifetime at the fleet TTL, and add an unsigned MutationReceipt carrying the audit join. Server, Agent, and helper share the same canonical bytes, key identity, receipt digest, and Ed25519 golden vectors. Current APT/DNF and Windows execution remains untouched.
15 lines
437 B
Go
15 lines
437 B
Go
package capability
|
|
|
|
import (
|
|
"crypto/ed25519"
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
)
|
|
|
|
// KeyIDFor returns the authority key fingerprint: hex(sha256(pubkey)[:16]).
|
|
// Matches SigningService.GetPublicKeyFingerprint and the executor's key_id_for.
|
|
// Split out of token.go so retiring Token does not strand the mutation protocol.
|
|
func KeyIDFor(pub ed25519.PublicKey) string {
|
|
hash := sha256.Sum256(pub)
|
|
return hex.EncodeToString(hash[:16])
|
|
}
|