Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
34fc7f0
fix: harden bridge and attestation safety paths
ramtamilselvan Apr 15, 2026
de2890f
fix: bind consensus tee verification to work results
ramtamilselvan Apr 16, 2026
c62118e
fix: fail closed for incomplete tee verifier backends
ramtamilselvan Apr 16, 2026
83d5fbf
fix: harden bridge relayer authority paths
ramtamilselvan Apr 16, 2026
5f0fde7
fix: harden production governance initialization
ramtamilselvan Apr 16, 2026
fe533c6
fix: harden institutional governance bootstrap
ramtamilselvan Apr 16, 2026
9fb8dcf
fix: make cruzible deployable on mainnet
ramtamilselvan Apr 16, 2026
bd54b4c
docs: record protocol hardening evidence tranche
ramtamilselvan Apr 16, 2026
69dc6b9
fix: require burn nonces in bridge events
ramtamilselvan Apr 16, 2026
93dd4b7
fix: harden hybrid tee signatures
ramtamilselvan Apr 16, 2026
52d1a83
fix: fail closed on zk proof backends
ramtamilselvan Apr 16, 2026
e96a5bd
fix: harden ethereum bridge metadata parsing
ramtamilselvan Apr 16, 2026
7697dba
governance: neutralize audit and rollout naming
ramtamilselvan Apr 17, 2026
c2c4f3e
core: rename external embedding profiles
ramtamilselvan Apr 17, 2026
b94fabd
tee: sign simulated nitro attestations
ramtamilselvan Apr 17, 2026
d4d4ab0
verify: fail closed without groth16 backend
ramtamilselvan Apr 17, 2026
160ecdb
verify: authenticate simulated keeper attestations
ramtamilselvan Apr 17, 2026
3f5a7dc
verify: bind simulated ezkl proofs to transcripts
ramtamilselvan Apr 17, 2026
18791c7
governance: remove keeper bootstrap ownership window
ramtamilselvan Apr 17, 2026
20c0b9a
governance: require explicit non-local deployment authorities
ramtamilselvan Apr 17, 2026
7e63d21
seal: require explicit verification backends
ramtamilselvan Apr 17, 2026
18d9849
mempool: verify hybrid signatures cryptographically
ramtamilselvan Apr 17, 2026
a6a35b8
vm: fail closed on invalid proof precompile results
ramtamilselvan Apr 17, 2026
b6e4857
vm: harden tee precompile defaults
ramtamilselvan Apr 17, 2026
1bed335
verify: bind simulated zk proofs deterministically
ramtamilselvan Apr 17, 2026
57b15c2
sovereign: enforce owner-bound authenticated encryption
ramtamilselvan Apr 17, 2026
577e6a5
validator: enforce economic slashing through staking hooks
ramtamilselvan Apr 17, 2026
cfebe51
seal: require stored approval state for revocation
ramtamilselvan Apr 17, 2026
d119998
app: fail closed for remote tee startup
ramtamilselvan Apr 17, 2026
c8fba01
app: harden simulated nitro client artifacts
ramtamilselvan Apr 17, 2026
2835bc5
tee: enforce nitro payload confidentiality
ramtamilselvan Apr 17, 2026
ef0cfd7
seal: fail closed on unverifiable attestation signatures
ramtamilselvan Apr 17, 2026
2175bac
seal: enforce export provenance signing
ramtamilselvan Apr 17, 2026
3aa2e11
app: make pqc availability checks mode-aware
ramtamilselvan Apr 17, 2026
bb23701
seal: fail closed on unverifiable enhanced signatures
ramtamilselvan Apr 17, 2026
b269841
seal: verify signed export provenance on import
ramtamilselvan Apr 17, 2026
1802eae
verify: align simulated tee platform taxonomy
ramtamilselvan Apr 17, 2026
af79611
app: bind vote extension ingress to consensus requests
ramtamilselvan Apr 17, 2026
18de013
pouw: enforce runtime governance lock policy
ramtamilselvan Apr 17, 2026
dd86e19
pouw: align governance compatibility checks
ramtamilselvan Apr 17, 2026
7f97547
pouw: align audit compliance reporting
ramtamilselvan Apr 17, 2026
3b621e4
pouw: audit trusted measurement registry mutations
ramtamilselvan Apr 17, 2026
dfd5d08
pouw: align audit and threat model posture
ramtamilselvan Apr 17, 2026
6575a41
pouw: require quorum for trusted measurement revocation
ramtamilselvan Apr 17, 2026
2209110
seal: remove privileged revocation bypass
ramtamilselvan Apr 18, 2026
81cff92
seal: tighten direct revocation entrypoints
ramtamilselvan Apr 18, 2026
860722b
seal: require quorum for emergency revocation
ramtamilselvan Apr 18, 2026
22ee18a
vault: enforce authority on governance-only keeper paths
ramtamilselvan Apr 18, 2026
b7e8363
vault: harden relay challenge governance
ramtamilselvan Apr 18, 2026
ed09fa5
app: harden admin consensus audit endpoint
ramtamilselvan Apr 18, 2026
3f7e567
app: harden health status truthfulness
ramtamilselvan Apr 18, 2026
ee593b5
app: harden metrics endpoint boundary
ramtamilselvan Apr 18, 2026
4aa01f6
app: redact public health details
ramtamilselvan Apr 18, 2026
b2ea7a8
app: harden proxied operational route auth
ramtamilselvan Apr 18, 2026
e0c5a27
app: fail closed on invalid remote tee endpoints
ramtamilselvan Apr 18, 2026
5727025
verify: harden startup endpoint reachability checks
ramtamilselvan Apr 18, 2026
86f0817
verify: harden ezkl remote endpoint validation
ramtamilselvan Apr 18, 2026
e0ec26b
verify: fail closed on collateral and mirrored worker endpoints
ramtamilselvan Apr 18, 2026
5c01b3b
pouw: harden drand relay boundary
ramtamilselvan Apr 18, 2026
84f4210
executor: fail closed on unsafe backend proxy targets
ramtamilselvan Apr 18, 2026
4d63149
attestation: fail closed on lightweight collateral backends
ramtamilselvan Apr 18, 2026
3b0d46b
attestation: fail closed on Nitro and ARM parser paths
ramtamilselvan Apr 18, 2026
6375b5b
verify: harden shared endpoint literal IP validation
ramtamilselvan Apr 18, 2026
4f4e657
tee: enforce loopback-or-bearer worker API access
ramtamilselvan Apr 18, 2026
1017d4c
attestation: fail closed on SGX TCB evaluation
ramtamilselvan Apr 18, 2026
a0303a8
tee: align Nitro remote clients with worker auth
ramtamilselvan Apr 18, 2026
2258bfc
pouw: align threat model with live enforcement posture
ramtamilselvan Apr 18, 2026
3070f22
deps: clear rustls-webpki advisories in sdk and cli
ramtamilselvan Apr 18, 2026
57aee31
ci: restore contracts and rust gate compatibility
ramtamilselvan Apr 18, 2026
3eba9af
consensus: keep mock tee bindings in sync
ramtamilselvan Apr 18, 2026
fe798ca
contracts: raise foundry harness size ceiling
ramtamilselvan Apr 18, 2026
70d7d92
contracts: widen foundry test harness limits
ramtamilselvan Apr 18, 2026
7e793e9
contracts: split cruzible governance relay tests
ramtamilselvan Apr 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/contracts-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
version: stable
- name: Run Foundry unit and integration tests
run: >
FOUNDRY_PROFILE=ci forge test -vv
FOUNDRY_PROFILE=ci forge test -vv --code-size-limit 1048576
--no-match-path 'test/*Invariant.t.sol'
--no-match-test '^(testFuzz_|test_Audit_|invariant_)'

Expand All @@ -98,8 +98,8 @@ jobs:
version: stable
- name: Run Foundry deep invariant and audit suites
run: |
FOUNDRY_PROFILE=ci forge test -vv --match-path 'test/*Invariant.t.sol'
FOUNDRY_PROFILE=ci forge test -vv --match-test '^(testFuzz_|test_Audit_)'
FOUNDRY_PROFILE=ci forge test -vv --code-size-limit 1048576 --match-path 'test/*Invariant.t.sol'
FOUNDRY_PROFILE=ci forge test -vv --code-size-limit 1048576 --match-test '^(testFuzz_|test_Audit_)'

contracts-required-gate:
name: Contracts Required Gate
Expand Down
4 changes: 2 additions & 2 deletions Aethelred Tokenomics.csv
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ Critical Path Timeline,April 1 2026,Enterprise,"Testnet infrastructure ready",,
Critical Path Timeline,April 1 2026,Community,"Points begin accruing",,
Critical Path Timeline,May-Jun 2026,Enterprise,"Strategic investor outreach",,
Critical Path Timeline,May-Jun 2026,Community,"Echo round @ $150M (400M tokens)",,
Critical Path Timeline,July 2026,Enterprise,"Trail of Bits audit complete",,
Critical Path Timeline,July 2026,Enterprise,"External protocol audit complete",,
Critical Path Timeline,July 2026,Community,"Points leaderboard visible",,
Critical Path Timeline,August 2026,Enterprise,"Binance strategic allocation signed",,
Critical Path Timeline,August 2026,Community,"5,000+ active point earners",,
Expand Down Expand Up @@ -350,4 +350,4 @@ Final Verification,Metric,"Strategic Bucket (500M) - Used",250,000,000,"Seed 100
Final Verification,Metric,"Strategic Bucket (500M) - Remaining",250,000,000,,
Final Verification,Metric,"Public Bucket (1,000M) - Used",575,000,000,"Echo 400M + Exchange 175M",
Final Verification,Metric,"Public Bucket (1,000M) - Remaining",425,000,000,,
Final Verification,Metric,"Airdrop Bucket (300M)",300,000,000,"Reserved within Public Sale",
Final Verification,Metric,"Airdrop Bucket (300M)",300,000,000,"Reserved within Public Sale",
19 changes: 18 additions & 1 deletion app/abci.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package app

import (
"bytes"
cryptoRand "crypto/rand"
"fmt"
"time"
Expand Down Expand Up @@ -263,6 +264,22 @@ func (app *AethelredApp) VerifyVoteExtensionHandler() sdk.VerifyVoteExtensionHan
return reject(), nil
}

if voteExt.Height != req.Height {
app.Logger().Error("Vote extension height mismatch",
"request_height", req.Height,
"extension_height", voteExt.Height,
)
return reject(), nil
}

if !bytes.Equal(voteExt.ValidatorAddress, req.ValidatorAddress) {
app.Logger().Error("Vote extension validator identity mismatch",
"request_validator_address", fmt.Sprintf("%X", req.ValidatorAddress),
"extension_validator_address", fmt.Sprintf("%X", voteExt.ValidatorAddress),
)
return reject(), nil
}

// Validate the vote extension using mode-appropriate validation.
// Strict mode rejects unsigned extensions, simulated TEE, missing hashes.
now, ok := app.lastBlockTime(ctx)
Expand Down Expand Up @@ -491,7 +508,7 @@ func (app *AethelredApp) ProcessProposalHandler() sdk.ProcessProposalHandler {
// to prevent a malicious proposer from flooding ProcessProposal with
// expensive-to-verify payloads.
const (
maxInjectedTxsPerBlock = 50 // PR-17: bound O(n) verification work
maxInjectedTxsPerBlock = 50 // PR-17: bound O(n) verification work
maxTotalProofBytes = 5 * 1024 * 1024 // H-4: 5MB total proof budget per block
)
injectedCount := 0
Expand Down
69 changes: 69 additions & 0 deletions app/abci_vote_extension_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package app

import (
"testing"
"time"

abci "github.com/cometbft/cometbft/abci/types"
"github.com/stretchr/testify/require"

pouwtypes "github.com/aethelred/aethelred/x/pouw/types"
)

func makeStrictVoteExtensionForABCI(t *testing.T, height int64, validatorAddr []byte, ts time.Time) []byte {
t.Helper()

ve := NewVoteExtensionAtBlockTime(height, validatorAddr, ts)
ve.Signature = make([]byte, 64)

bz, err := ve.Marshal()
require.NoError(t, err)
return bz
}

func TestVerifyVoteExtensionHandlerRejectsMismatchedValidatorAddress(t *testing.T) {
t.Parallel()

app := newTestApp(t)
ctx := app.BaseApp.NewContext(true).
WithBlockHeight(42).
WithBlockTime(time.Unix(1_700_000_042, 0).UTC())

require.NoError(t, app.PouwKeeper.SetParams(ctx, pouwtypes.DefaultParams()))
app.persistLastBlockTime(ctx)

reqValidatorAddr := []byte("validator-consensus-addr")
embeddedValidatorAddr := []byte("different-validator-addr")
req := &abci.RequestVerifyVoteExtension{
Height: 42,
ValidatorAddress: reqValidatorAddr,
VoteExtension: makeStrictVoteExtensionForABCI(t, 42, embeddedValidatorAddr, ctx.BlockTime()),
}

resp, err := app.VerifyVoteExtensionHandler()(ctx, req)
require.NoError(t, err)
require.Equal(t, abci.ResponseVerifyVoteExtension_REJECT, resp.Status)
}

func TestVerifyVoteExtensionHandlerRejectsMismatchedHeight(t *testing.T) {
t.Parallel()

app := newTestApp(t)
ctx := app.BaseApp.NewContext(true).
WithBlockHeight(42).
WithBlockTime(time.Unix(1_700_000_042, 0).UTC())

require.NoError(t, app.PouwKeeper.SetParams(ctx, pouwtypes.DefaultParams()))
app.persistLastBlockTime(ctx)

reqValidatorAddr := []byte("validator-consensus-addr")
req := &abci.RequestVerifyVoteExtension{
Height: 42,
ValidatorAddress: reqValidatorAddr,
VoteExtension: makeStrictVoteExtensionForABCI(t, 41, reqValidatorAddr, ctx.BlockTime()),
}

resp, err := app.VerifyVoteExtensionHandler()(ctx, req)
require.NoError(t, err)
require.Equal(t, abci.ResponseVerifyVoteExtension_REJECT, resp.Status)
}
25 changes: 25 additions & 0 deletions app/consensus_evidence_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@ package app

import (
"encoding/json"
"errors"
"net/http"
"strings"
)

type consensusEvidenceAuditErrorResponse struct {
Error string `json:"error"`
}

const (
adminAuditAuthTokenEnv = "AETHELRED_ADMIN_API_TOKEN"
adminAuditMaxBodyBytes = 4 << 20
)

var errConsensusAuditUnauthorized = errors.New("admin consensus audit endpoint requires loopback access or a valid bearer token")

// ConsensusEvidenceAuditHandler exposes deterministic consensus evidence
// auditing for proposal preflight checks.
func (app *AethelredApp) ConsensusEvidenceAuditHandler() http.Handler {
Expand All @@ -18,10 +27,26 @@ func (app *AethelredApp) ConsensusEvidenceAuditHandler() http.Handler {
return
}

if err := authorizeLoopbackOrBearer(r, adminAuditAuthTokenEnv, errConsensusAuditUnauthorized.Error()); err != nil {
writeConsensusAuditError(w, http.StatusForbidden, err.Error())
return
}

if r.ContentLength > adminAuditMaxBodyBytes {
writeConsensusAuditError(w, http.StatusRequestEntityTooLarge, "request body exceeds admin audit size limit")
return
}

r.Body = http.MaxBytesReader(w, r.Body, adminAuditMaxBodyBytes)

var req ConsensusEvidenceAuditRequest
dec := json.NewDecoder(r.Body)
dec.DisallowUnknownFields()
if err := dec.Decode(&req); err != nil {
if strings.Contains(err.Error(), "http: request body too large") {
writeConsensusAuditError(w, http.StatusRequestEntityTooLarge, "request body exceeds admin audit size limit")
return
}
writeConsensusAuditError(w, http.StatusBadRequest, "invalid request body: "+err.Error())
return
}
Expand Down
134 changes: 134 additions & 0 deletions app/consensus_evidence_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ func TestConsensusEvidenceAuditHandler_Post(t *testing.T) {

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", bytes.NewReader(body))
req.RemoteAddr = "127.0.0.1:26657"
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
Expand All @@ -62,6 +63,7 @@ func TestConsensusEvidenceAuditHandler_Post(t *testing.T) {
func TestConsensusEvidenceAuditHandler_InvalidRequestBody(t *testing.T) {
handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", strings.NewReader("{"))
req.RemoteAddr = "127.0.0.1:26657"
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
Expand All @@ -79,10 +81,142 @@ func TestConsensusEvidenceAuditHandler_InvalidTxPayload(t *testing.T) {

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", strings.NewReader(body))
req.RemoteAddr = "127.0.0.1:26657"
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusBadRequest {
t.Fatalf("expected 400, got %d body=%s", rec.Code, rec.Body.String())
}
}

func TestConsensusEvidenceAuditHandler_RejectsNonLoopbackWithoutToken(t *testing.T) {
t.Setenv(adminAuditAuthTokenEnv, "")

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", strings.NewReader(`{}`))
req.RemoteAddr = "203.0.113.10:8443"
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusForbidden {
t.Fatalf("expected 403, got %d body=%s", rec.Code, rec.Body.String())
}
}

func TestConsensusEvidenceAuditHandler_AllowsBearerTokenOffLoopback(t *testing.T) {
t.Setenv(adminAuditAuthTokenEnv, "test-admin-token")

reqPayload := ConsensusEvidenceAuditRequest{
ConsensusThreshold: 67,
ProposedLastCommit: testConsensusAuditCommit(),
Txs: []json.RawMessage{
mustMarshalRawJSON(t, map[string]interface{}{
"type": "create_seal_from_consensus",
"job_id": "job-handler-token",
"output_hash": make32Bytes(),
"validator_count": 2,
"total_votes": 2,
"agreement_power": 2,
"total_power": 2,
}),
},
}
body, err := json.Marshal(reqPayload)
if err != nil {
t.Fatalf("marshal request: %v", err)
}

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", bytes.NewReader(body))
req.RemoteAddr = "203.0.113.10:8443"
req.Header.Set("Authorization", "Bearer test-admin-token")
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected 200, got %d body=%s", rec.Code, rec.Body.String())
}
}

func TestConsensusEvidenceAuditHandler_RejectsForwardedLoopbackWithoutToken(t *testing.T) {
t.Setenv(adminAuditAuthTokenEnv, "")

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", strings.NewReader(`{}`))
req.RemoteAddr = "127.0.0.1:26657"
req.Header.Set("X-Forwarded-For", "203.0.113.10")
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusForbidden {
t.Fatalf("expected 403, got %d body=%s", rec.Code, rec.Body.String())
}
}

func TestConsensusEvidenceAuditHandler_AllowsBearerTokenOnForwardedLoopback(t *testing.T) {
t.Setenv(adminAuditAuthTokenEnv, "test-admin-token")

reqPayload := ConsensusEvidenceAuditRequest{
ConsensusThreshold: 67,
ProposedLastCommit: testConsensusAuditCommit(),
Txs: []json.RawMessage{
mustMarshalRawJSON(t, map[string]interface{}{
"type": "create_seal_from_consensus",
"job_id": "job-handler-forwarded-token",
"output_hash": make32Bytes(),
"validator_count": 2,
"total_votes": 2,
"agreement_power": 2,
"total_power": 2,
}),
},
}
body, err := json.Marshal(reqPayload)
if err != nil {
t.Fatalf("marshal request: %v", err)
}

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", bytes.NewReader(body))
req.RemoteAddr = "127.0.0.1:26657"
req.Header.Set("Forwarded", "for=203.0.113.10;proto=https")
req.Header.Set("Authorization", "Bearer test-admin-token")
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("expected 200, got %d body=%s", rec.Code, rec.Body.String())
}
}

func TestConsensusEvidenceAuditHandler_RejectsInvalidBearerToken(t *testing.T) {
t.Setenv(adminAuditAuthTokenEnv, "expected-token")

handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(http.MethodPost, "/admin/consensus/evidence/audit", strings.NewReader(`{}`))
req.RemoteAddr = "203.0.113.10:8443"
req.Header.Set("Authorization", "Bearer wrong-token")
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusForbidden {
t.Fatalf("expected 403, got %d body=%s", rec.Code, rec.Body.String())
}
}

func TestConsensusEvidenceAuditHandler_RejectsOversizedBody(t *testing.T) {
handler := (&AethelredApp{}).ConsensusEvidenceAuditHandler()
req := httptest.NewRequest(
http.MethodPost,
"/admin/consensus/evidence/audit",
strings.NewReader(strings.Repeat("x", adminAuditMaxBodyBytes+1)),
)
req.RemoteAddr = "127.0.0.1:26657"
rec := httptest.NewRecorder()

handler.ServeHTTP(rec, req)
if rec.Code != http.StatusRequestEntityTooLarge {
t.Fatalf("expected 413, got %d body=%s", rec.Code, rec.Body.String())
}
}
20 changes: 20 additions & 0 deletions app/coverage_helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,26 @@ func TestTEEQuoteSchemaValidationCoverage(t *testing.T) {
nitro.Quote = []byte("{invalid-json")
require.ErrorContains(t, validateTEEQuoteSchema(nitro), "invalid nitro quote json")

simulatedPayload := quotePayload
simulatedPayload.SimulationSignature = []byte("sim-sig")
simulatedBytes, err := json.Marshal(simulatedPayload)
require.NoError(t, err)
require.NoError(t, validateTEEQuoteSchema(&TEEAttestationData{
Platform: "nitro-simulated",
Quote: simulatedBytes,
UserData: []byte("user"),
Nonce: []byte("nonce"),
}))
simulatedPayload.SimulationSignature = nil
simulatedBytes, err = json.Marshal(simulatedPayload)
require.NoError(t, err)
require.ErrorContains(t, validateTEEQuoteSchema(&TEEAttestationData{
Platform: "nitro-simulated",
Quote: simulatedBytes,
UserData: []byte("user"),
Nonce: []byte("nonce"),
}), "simulation_signature")

sgxQuote := make([]byte, sgxQuoteHeaderLen)
binary.LittleEndian.PutUint16(sgxQuote[0:2], 3)
require.NoError(t, validateTEEQuoteSchema(&TEEAttestationData{
Expand Down
Loading
Loading