1.5.0 update

This commit is contained in:
KingKDot
2026-03-20 22:38:17 -05:00
parent 265321dce2
commit e8ad1e3649
30 changed files with 2259 additions and 79 deletions
@@ -0,0 +1,52 @@
package config
import (
"crypto/ed25519"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"io"
"log"
"golang.org/x/crypto/hkdf"
)
type Identity struct {
PublicKey ed25519.PublicKey
PrivateKey ed25519.PrivateKey
Fingerprint string // hex SHA256 of public key
}
func DeriveIdentity() Identity {
hwid := deriveHWID()
machineID := platformMachineID()
if machineID == "" {
log.Printf("[identity] WARNING: no OS-specific machine ID available, using HWID-only derivation")
machineID = hwid
}
hkdfReader := hkdf.New(sha256.New, []byte(machineID), []byte(hwid), []byte("overlord-identity"))
seed := make([]byte, ed25519.SeedSize)
if _, err := io.ReadFull(hkdfReader, seed); err != nil {
log.Fatalf("[identity] HKDF derivation failed: %v", err)
}
privateKey := ed25519.NewKeyFromSeed(seed)
publicKey := privateKey.Public().(ed25519.PublicKey)
fp := sha256.Sum256(publicKey)
return Identity{
PublicKey: publicKey,
PrivateKey: privateKey,
Fingerprint: hex.EncodeToString(fp[:]),
}
}
func (id *Identity) Sign(data []byte) []byte {
return ed25519.Sign(id.PrivateKey, data)
}
func (id *Identity) PublicKeyBase64() string {
return base64.StdEncoding.EncodeToString(id.PublicKey)
}
@@ -0,0 +1,7 @@
//go:build android
package config
func platformMachineID() string {
return ""
}
@@ -0,0 +1,27 @@
//go:build darwin
package config
import (
"log"
"os/exec"
"strings"
)
func platformMachineID() string {
out, err := exec.Command("ioreg", "-rd1", "-c", "IOPlatformExpertDevice").Output()
if err != nil {
log.Printf("[identity] WARNING: failed to run ioreg: %v", err)
return ""
}
for _, line := range strings.Split(string(out), "\n") {
if strings.Contains(line, "IOPlatformUUID") {
parts := strings.SplitN(line, "=", 2)
if len(parts) == 2 {
return strings.Trim(strings.TrimSpace(parts[1]), `"`)
}
}
}
log.Printf("[identity] WARNING: IOPlatformUUID not found in ioreg output")
return ""
}
@@ -0,0 +1,18 @@
//go:build linux && !android
package config
import (
"log"
"os"
"strings"
)
func platformMachineID() string {
data, err := os.ReadFile("/etc/machine-id")
if err != nil {
log.Printf("[identity] WARNING: failed to read /etc/machine-id: %v", err)
return ""
}
return strings.TrimSpace(string(data))
}
@@ -0,0 +1,25 @@
//go:build windows
package config
import (
"log"
"golang.org/x/sys/windows/registry"
)
func platformMachineID() string {
k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Cryptography`, registry.QUERY_VALUE)
if err != nil {
log.Printf("[identity] WARNING: failed to open Cryptography registry key: %v", err)
return ""
}
defer k.Close()
val, _, err := k.GetStringValue("MachineGuid")
if err != nil {
log.Printf("[identity] WARNING: failed to read MachineGuid: %v", err)
return ""
}
return val
}