File size: 3,276 Bytes
9425aed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#pragma once
#include "sov_rtx.h"
#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

#define SOV_CUDA_VALIDATION_SCHEMA_VERSION 1u
#define SOV_CUDA_KERNEL_ABI_VERSION        1u
#define SOV_CUDA_KV_LAYOUT_VERSION         1u
#define SOV_ROWM_CUDA_COMMIT_VERSION       1u

enum {
    SOV_CUDA_VALIDATION_JIT_ACCEPTED      = 1u << 0,
    SOV_CUDA_VALIDATION_SYMBOLS_RESOLVED  = 1u << 1,
    SOV_CUDA_VALIDATION_POWER_BOUND       = 1u << 2,
    SOV_CUDA_VALIDATION_JANET_CONFIGURED  = 1u << 3,
    SOV_CUDA_VALIDATION_TENSOR_GEMM_READY = 1u << 4,
    SOV_CUDA_VALIDATION_SCALAR_GEMM_READY = 1u << 5,
    SOV_CUDA_VALIDATION_KV_LAYOUT_CHECKED = 1u << 6,
    SOV_CUDA_VALIDATION_KNOWN_ANSWER_TEST = 1u << 7
};

#define SOV_CUDA_VALIDATION_REQUIRED_FLAGS              \
    (SOV_CUDA_VALIDATION_JIT_ACCEPTED                   \
     | SOV_CUDA_VALIDATION_SYMBOLS_RESOLVED             \
     | SOV_CUDA_VALIDATION_POWER_BOUND                  \
     | SOV_CUDA_VALIDATION_JANET_CONFIGURED             \
     | SOV_CUDA_VALIDATION_TENSOR_GEMM_READY            \
     | SOV_CUDA_VALIDATION_SCALAR_GEMM_READY            \
     | SOV_CUDA_VALIDATION_KV_LAYOUT_CHECKED)

enum {
    SOV_CUDA_ROWM_OK                = 0,
    SOV_CUDA_ROWM_INVALID_ARGUMENT  = -1001,
    SOV_CUDA_ROWM_UNBOUND           = -1002,
    SOV_CUDA_ROWM_BIND_CONFLICT     = -1003,
    SOV_CUDA_ROWM_COMMIT_FAILED     = -1004,
    SOV_CUDA_ROWM_INVALID_PROOF     = -1005,
    SOV_CUDA_ROWM_UNAUTHORIZED      = -1006,
    SOV_CUDA_ROWM_STALE_CONTEXT     = -1007,
    SOV_CUDA_ROWM_EVIDENCE_MISMATCH = -1008
};

typedef struct {
    const uint8_t* bytes;
    size_t         size;
} sov_cuda_validation_bytes_t;

typedef struct {
    uint32_t schema_version;
    uint32_t backend_id;
    uint32_t driver_version;
    uint32_t compute_capability_major;
    uint32_t compute_capability_minor;
    uint32_t ptx_target;
    uint32_t kernel_abi_version;
    uint32_t scalar_storage_bits;
    uint32_t accumulator_storage_bits;
    uint32_t kv_layout_version;
    uint32_t validation_result;
    uint32_t validation_flags;
    uint64_t resolved_kernel_mask;
    uint64_t cuda_context_generation;
    uint8_t  device_uuid[16];
    sov_cuda_validation_bytes_t flash_ptx;
    sov_cuda_validation_bytes_t gemm_ptx;
} sov_cuda_validation_evidence_t;

typedef struct {
    uint32_t version;
    uint32_t reserved;
    uint64_t validation_epoch;
    uint8_t  record_id[32];
    uint8_t  committed_rowm_root[32];
    uint8_t  embedded_worm_receipt_hash[32];
} sov_rowm_cuda_validation_commit_t;

typedef int (*sov_rowm_commit_cuda_validation_fn)(

    void* rowm_context,

    const sov_cuda_validation_evidence_t* evidence,

    sov_rowm_cuda_validation_commit_t* commit_out);

int  sov_cuda_validation_bind_rowm(

    sov_rowm_commit_cuda_validation_fn commit_fn,

    void* rowm_context);
int  sov_cuda_validation_commit_rowm(

    const sov_cuda_validation_evidence_t* evidence);
int  sov_cuda_validation_require_authorized(uint64_t cuda_context_generation);
int  sov_cuda_validation_get_commit(sov_rowm_cuda_validation_commit_t* commit_out);
void sov_cuda_validation_clear(void);

#ifdef __cplusplus
}
#endif