Initial Go SDK for Keysat licensing service
Pure-Go, stdlib-only implementation of the LIC1 wire format: - ParseKey + Verify + ParseAndVerify for offline verification - HashFingerprint helper (SHA-256, matching the daemon's contract) - LoadPublicKeyPEM for the standard PKIX-encoded Ed25519 public keys the daemon emits - Client.Validate / Client.PublicKey for online checks against a running Keysat daemon - LicensePayload struct with idiomatic Go getters (IsTrial, IsFingerprintBound, IsExpiredAt, HasEntitlement) Wire-format crosscheck against the shared tests/crosscheck/vector.json (the same file the Rust, TypeScript, Python SDKs and the daemon itself test against). All four fixtures pass — v1 legacy fingerprint-bound, v2 trial with entitlements, v2 perpetual unbound, plus end-to-end PEM-load → ParseAndVerify signature roundtrip. Confirms byte-for-byte agreement across five independent implementations. No third-party dependencies. Module path: github.com/keysat-xyz/keysat-client-go go 1.21
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
// Offline verification example — `go run examples/offline_verify.go`
|
||||
// from the package root. Replace the embedded pubkey + license key
|
||||
// with your own.
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/keysat-xyz/keysat-client-go"
|
||||
)
|
||||
|
||||
const publicKeyPEM = `-----BEGIN PUBLIC KEY-----
|
||||
MCowBQYDK2VwAyEAA6EHv/POEL4dcN0Y50vAmWfk1jCbpQ1fHdyGZBJVMbg=
|
||||
-----END PUBLIC KEY-----`
|
||||
|
||||
const licenseKey = `LIC1-AIBW6RVE6YGS6SRIW2VD5D57N4UPBKVKVKVLXO6MZTO533XO53XO53QAAAAAAZKT6EAAAAAAABYT7MYA2NCGD73DC4G6MM5VVISRFTROCWWBECY4GJNM3LNGPQBOLFF2HM6QEA3QOJXQY3LVNR2GSLLEMV3GSY3F-QPSJIDYL6Y5TFCKXQ2SN43EDJIZIRJZCEROM2I4MJHODT6KO4KDPW6AJ3HMYJERYPD34CF2Z46PXPYFKSRZS7BDZKVKWE57UBJSTEBI`
|
||||
|
||||
func main() {
|
||||
pub, err := keysat.LoadPublicKeyPEM(publicKeyPEM)
|
||||
if err != nil {
|
||||
log.Fatalf("loading public key: %v", err)
|
||||
}
|
||||
payload, err := keysat.ParseAndVerify(licenseKey, pub)
|
||||
if err != nil {
|
||||
log.Fatalf("license invalid: %v", err)
|
||||
}
|
||||
fmt.Printf("OK — version=%d trial=%v fingerprint_bound=%v entitlements=%v\n",
|
||||
payload.Version, payload.IsTrial(), payload.IsFingerprintBound(), payload.Entitlements)
|
||||
if payload.IsExpiredAt(time.Now().Unix()) {
|
||||
fmt.Println("(expired)")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user