@@ -58,11 +58,12 @@ func (m *Machine) Delete() {
5858}
5959
6060// create
61- func (m * Machine ) Create (config , runtimeConfig string ) error {
61+ func (m * Machine ) Create (config , runtimeConfig , dir string ) error {
6262 var err error
6363 m .callCAPI (func () {
6464 var cConfig * C.char
6565 var cRuntime * C.char
66+ var cDir * C.char
6667 if config != "" {
6768 cConfig = C .CString (config )
6869 defer C .free (unsafe .Pointer (cConfig ))
@@ -71,7 +72,11 @@ func (m *Machine) Create(config, runtimeConfig string) error {
7172 cRuntime = C .CString (runtimeConfig )
7273 defer C .free (unsafe .Pointer (cRuntime ))
7374 }
74- err = newError (C .cm_create_new (cConfig , cRuntime , & m .ptr ))
75+ if dir != "" {
76+ cDir = C .CString (dir )
77+ defer C .free (unsafe .Pointer (cDir ))
78+ }
79+ err = newError (C .cm_create_new (cConfig , cRuntime , cDir , & m .ptr ))
7580 })
7681 return err
7782}
@@ -119,35 +124,14 @@ func (m *Machine) GetInitialConfig() (string, error) {
119124 return res , nil
120125}
121126
122- // get_memory_ranges
123- func (m * Machine ) GetMemoryRanges () (string , error ) {
124- var ranges * C.char
125- var err error
126- var res string
127-
128- m .callCAPI (func () {
129- err = newError (C .cm_get_memory_ranges (m .ptr , & ranges ))
130- if err != nil || ranges == nil {
131- return
132- }
133- res = C .GoString (ranges )
134- // no need to free 'ranges' here, as it is a static string
135- })
136-
137- if err != nil {
138- return "" , err
139- }
140- return res , nil
141- }
142-
143127// get_proof
144128func (m * Machine ) GetProof (address uint64 , log2size int32 ) (string , error ) {
145129 var proof * C.char
146130 var err error
147131 var res string
148132
149133 m .callCAPI (func () {
150- err = newError (C .cm_get_proof (m .ptr , C .uint64_t (address ), C .int32_t (log2size ), & proof ))
134+ err = newError (C .cm_get_proof (m .ptr , C .uint64_t (address ), C .int32_t (log2size ), C . int32_t ( HashTreeLog2RootSize ), & proof ))
151135 if err != nil || proof == nil {
152136 return
153137 }
@@ -241,7 +225,7 @@ func (m *Machine) Load(dir string, runtimeConfig string) error {
241225 cRuntime = C .CString (runtimeConfig )
242226 defer C .free (unsafe .Pointer (cRuntime ))
243227 }
244- err = newError (C .cm_load (m .ptr , cDir , cRuntime ))
228+ err = newError (C .cm_load (m .ptr , cDir , cRuntime , SharingNone ))
245229 })
246230
247231 return err
@@ -369,6 +353,56 @@ func (m *Machine) Run(mcycleEnd uint64) (BreakReason, error) {
369353 return BreakReason (br ), nil
370354}
371355
356+ // collect_mcycle_root_hashes
357+ func (m * Machine ) CollectMCycleRootHashes (mcycleEnd , mcyclePeriod , mcyclePhase uint64 , log2BundleMcycleCount int32 , previousBackTree string ) ([]byte , error ) {
358+ var err error
359+ var result []byte
360+
361+ m .callCAPI (func () {
362+ var cResult * C.char
363+ var previousBackTreeC * C.char
364+ if previousBackTree != "" {
365+ previousBackTreeC = C .CString (previousBackTree )
366+ defer C .free (unsafe .Pointer (previousBackTreeC ))
367+ }
368+ err = newError (C .cm_collect_mcycle_root_hashes (
369+ m .ptr ,
370+ C .uint64_t (mcycleEnd ),
371+ C .uint64_t (mcyclePeriod ),
372+ C .uint64_t (mcyclePhase ),
373+ C .int32_t (log2BundleMcycleCount ),
374+ previousBackTreeC ,
375+ & cResult ))
376+ result = []byte (C .GoString (cResult ))
377+ })
378+ if err != nil {
379+ return nil , err
380+ }
381+
382+ return result , nil
383+ }
384+
385+ // collect_uarch_cycle_root_hashes
386+ func (m * Machine ) CollectUarchCycleRootHashes (mcycleEnd uint64 , log2BundleMcycleCount int32 ) ([]byte , error ) {
387+ var err error
388+ var result []byte
389+
390+ m .callCAPI (func () {
391+ var cResult * C.char
392+ err = newError (C .cm_collect_uarch_cycle_root_hashes (
393+ m .ptr ,
394+ C .uint64_t (mcycleEnd ),
395+ C .int32_t (log2BundleMcycleCount ),
396+ & cResult ))
397+ result = []byte (C .GoString (cResult ))
398+ })
399+
400+ if err != nil {
401+ return nil , err
402+ }
403+ return result , nil
404+ }
405+
372406// send_cmio_response
373407func (m * Machine ) SendCmioResponse (reason uint16 , data []byte ) error {
374408 var err error
@@ -414,7 +448,7 @@ func (m *Machine) Store(directory string) error {
414448 m .callCAPI (func () {
415449 cDir := C .CString (directory )
416450 defer C .free (unsafe .Pointer (cDir ))
417- err = newError (C .cm_store (m .ptr , cDir ))
451+ err = newError (C .cm_store (m .ptr , cDir , SharingAll ))
418452 })
419453
420454 return err
0 commit comments