1+ use crate :: api:: internal:: PoStOutput ;
12use crate :: api:: responses:: err_code_and_msg;
23use crate :: api:: responses:: FCPResponseStatus ;
34use crate :: api:: responses:: FFIPieceMetadata ;
@@ -69,7 +70,7 @@ pub unsafe extern "C" fn verify_seal(
6970 response. is_valid = false ;
7071 }
7172 Err ( err) => {
72- let ( code, ptr) = err_code_and_msg ( & err. into ( ) ) ;
73+ let ( code, ptr) = err_code_and_msg ( & err) ;
7374 response. status_code = code;
7475 response. error_msg = ptr;
7576 }
@@ -87,18 +88,12 @@ pub unsafe extern "C" fn verify_seal(
8788
8889/// Generates a proof-of-spacetime for the given replica commitments.
8990///
90- /// # Arguments
91- ///
92- /// * `flattened_comm_rs_ptr` - pointer to the first cell in an array containing replica commitment
93- /// bytes
94- /// * `flattened_comm_rs_len` - number of bytes in the flattened_comm_rs_ptr array (must be a
95- /// multiple of 32)
96- /// * `_challenge_seed` - currently unused
9791#[ no_mangle]
9892pub unsafe extern "C" fn generate_post (
93+ ptr : * mut SectorBuilder ,
9994 flattened_comm_rs_ptr : * const u8 ,
10095 flattened_comm_rs_len : libc:: size_t ,
101- _challenge_seed : & [ u8 ; 32 ] ,
96+ challenge_seed : & [ u8 ; 32 ] ,
10297) -> * mut responses:: GeneratePoSTResponse {
10398 let comm_rs = from_raw_parts ( flattened_comm_rs_ptr, flattened_comm_rs_len)
10499 . iter ( )
@@ -111,24 +106,30 @@ pub unsafe extern "C" fn generate_post(
111106 acc
112107 } ) ;
113108
114- // if more than one comm_r was provided, pretend like the first was faulty
115- let fault_idxs: Vec < u64 > = vec ! [ 0 ]
116- . into_iter ( )
117- . take ( if comm_rs. len ( ) > 1 { 1 } else { 0 } )
118- . collect ( ) ;
109+ let mut response: responses:: GeneratePoSTResponse = Default :: default ( ) ;
119110
120- let mut result: responses:: GeneratePoSTResponse = Default :: default ( ) ;
121-
122- result. faults_len = fault_idxs. len ( ) ;
123- result. faults_ptr = fault_idxs. as_ptr ( ) ;
111+ match ( * ptr) . generate_post ( & comm_rs, challenge_seed) {
112+ Ok ( PoStOutput {
113+ snark_proof,
114+ faults,
115+ } ) => {
116+ response. status_code = FCPResponseStatus :: FCPNoError ;
117+ response. proof = snark_proof;
124118
125- // tell Rust to forget about the Vec; we'll free it when we free the GeneratePoSTResult
126- mem :: forget ( fault_idxs ) ;
119+ response . faults_len = faults . len ( ) ;
120+ response . faults_ptr = faults . as_ptr ( ) ;
127121
128- // write some fake proof
129- result. proof = [ 42 ; API_POST_PROOF_BYTES ] ;
122+ // we'll free this stuff when we free the GeneratePoSTResponse
123+ mem:: forget ( faults) ;
124+ }
125+ Err ( err) => {
126+ let ( code, ptr) = err_code_and_msg ( & err) ;
127+ response. status_code = code;
128+ response. error_msg = ptr;
129+ }
130+ }
130131
131- Box :: into_raw ( Box :: new ( result ) )
132+ raw_ptr ( response )
132133}
133134
134135/// Verifies that a proof-of-spacetime is valid.
@@ -482,43 +483,3 @@ pub unsafe extern "C" fn get_staged_sectors(
482483
483484 raw_ptr ( response)
484485}
485-
486- #[ cfg( test) ]
487- mod tests {
488- use super :: * ;
489- use rand:: { thread_rng, Rng } ;
490-
491- #[ test]
492- fn generate_verify_post_roundtrip_test ( ) {
493- unsafe {
494- let comm_rs: [ u8 ; 32 ] = thread_rng ( ) . gen ( ) ;
495- let challenge_seed: [ u8 ; 32 ] = thread_rng ( ) . gen ( ) ;
496- let generate_post_res = generate_post ( & comm_rs[ 0 ] , 32 , & challenge_seed) ;
497-
498- assert_eq ! (
499- FCPResponseStatus :: FCPNoError ,
500- ( * generate_post_res) . status_code,
501- "generate_post failed"
502- ) ;
503-
504- let verify_post_res = verify_post (
505- & comm_rs[ 0 ] ,
506- 32 ,
507- & challenge_seed,
508- & ( * generate_post_res) . proof ,
509- ( * generate_post_res) . faults_ptr ,
510- ( * generate_post_res) . faults_len ,
511- ) ;
512-
513- assert_eq ! (
514- FCPResponseStatus :: FCPNoError ,
515- ( * verify_post_res) . status_code,
516- "error verifying PoSt"
517- ) ;
518- assert_eq ! ( true , ( * verify_post_res) . is_valid, "invalid PoSt" ) ;
519-
520- responses:: destroy_generate_post_response ( generate_post_res) ;
521- responses:: destroy_verify_post_response ( verify_post_res) ;
522- }
523- }
524- }
0 commit comments