@@ -65,17 +65,17 @@ pub fn compute_comm_d(sector_size: SectorSize, piece_infos: &[PieceInfo]) -> Res
6565 ) ;
6666
6767 while stack. peek ( ) . size < piece_info. size {
68- stack. shift_reduce ( zero_padding ( stack. peek ( ) . size ) )
68+ stack. shift_reduce ( zero_padding ( stack. peek ( ) . size ) ? ) ?
6969 }
7070
71- stack. shift_reduce ( piece_info. clone ( ) ) ;
71+ stack. shift_reduce ( piece_info. clone ( ) ) ? ;
7272 }
7373
7474 while stack. len ( ) > 1 {
75- stack. shift_reduce ( zero_padding ( stack. peek ( ) . size ) ) ;
75+ stack. shift_reduce ( zero_padding ( stack. peek ( ) . size ) ? ) ? ;
7676 }
7777
78- assert_eq ! ( stack. len( ) , 1 ) ;
78+ ensure ! ( stack. len( ) == 1 , "Stack size ({}) must be 1." , stack . len ( ) ) ;
7979
8080 let comm_d_calculated = stack. pop ( ) . commitment ;
8181
@@ -111,29 +111,30 @@ impl Stack {
111111 self . 0 . pop ( ) . expect ( "empty stack popped" )
112112 }
113113
114- pub fn reduce1 ( & mut self ) -> bool {
114+ pub fn reduce1 ( & mut self ) -> Result < bool > {
115115 if self . len ( ) < 2 {
116- return false ;
116+ return Ok ( false ) ;
117117 }
118118
119119 if self . peek ( ) . size == self . peek2 ( ) . size {
120120 let right = self . pop ( ) ;
121121 let left = self . pop ( ) ;
122- let joined = join_piece_infos ( left, right) ;
122+ let joined = join_piece_infos ( left, right) ? ;
123123 self . shift ( joined) ;
124- return true ;
124+ return Ok ( true ) ;
125125 }
126126
127- false
127+ Ok ( false )
128128 }
129129
130- pub fn reduce ( & mut self ) {
131- while self . reduce1 ( ) { }
130+ pub fn reduce ( & mut self ) -> Result < ( ) > {
131+ while self . reduce1 ( ) ? { }
132+ Ok ( ( ) )
132133 }
133134
134- pub fn shift_reduce ( & mut self , piece : PieceInfo ) {
135+ pub fn shift_reduce ( & mut self , piece : PieceInfo ) -> Result < ( ) > {
135136 self . shift ( piece) ;
136- self . reduce ( ) ;
137+ self . reduce ( )
137138 }
138139
139140 pub fn len ( & self ) -> usize {
@@ -142,7 +143,7 @@ impl Stack {
142143}
143144
144145/// Create a padding `PieceInfo` of size `size`.
145- fn zero_padding ( size : UnpaddedBytesAmount ) -> PieceInfo {
146+ fn zero_padding ( size : UnpaddedBytesAmount ) -> Result < PieceInfo > {
146147 let padded_size: PaddedBytesAmount = size. into ( ) ;
147148 let mut commitment = [ 0u8 ; 32 ] ;
148149
@@ -157,19 +158,27 @@ fn zero_padding(size: UnpaddedBytesAmount) -> PieceInfo {
157158 hashed_size *= 2 ;
158159 }
159160
160- assert_eq ! ( hashed_size, u64 :: from( padded_size) ) ;
161+ ensure ! (
162+ hashed_size == u64 :: from( padded_size) ,
163+ "Hashed size must equal padded size"
164+ ) ;
161165
162- PieceInfo { size, commitment }
166+ Ok ( PieceInfo { size, commitment } )
163167}
164168
165169/// Join two equally sized `PieceInfo`s together, by hashing them and adding their sizes.
166- fn join_piece_infos ( mut left : PieceInfo , right : PieceInfo ) -> PieceInfo {
167- assert_eq ! ( left. size, right. size) ;
170+ fn join_piece_infos ( mut left : PieceInfo , right : PieceInfo ) -> Result < PieceInfo > {
171+ ensure ! (
172+ left. size == right. size,
173+ "Piece sizes must be equal (left: {:?}, right: {:?})" ,
174+ left. size,
175+ right. size
176+ ) ;
168177 let h = piece_hash ( & left. commitment , & right. commitment ) ;
169178
170179 left. commitment . copy_from_slice ( AsRef :: < [ u8 ] > :: as_ref ( & h) ) ;
171180 left. size = left. size + right. size ;
172- left
181+ Ok ( left)
173182}
174183
175184fn piece_hash ( a : & [ u8 ] , b : & [ u8 ] ) -> <DefaultPieceHasher as Hasher >:: Domain {
@@ -436,7 +445,7 @@ mod tests {
436445 // ]
437446
438447 let sector_size = SectorSize ( 32 * 128 ) ;
439- let pad = zero_padding ( UnpaddedBytesAmount ( 127 ) ) ;
448+ let pad = zero_padding ( UnpaddedBytesAmount ( 127 ) ) . unwrap ( ) ;
440449
441450 let pieces = vec ! [
442451 PieceInfo {
@@ -637,7 +646,7 @@ mod tests {
637646 BASE_DEGREE ,
638647 EXP_DEGREE ,
639648 new_seed ( ) ,
640- ) ;
649+ ) ? ;
641650
642651 let mut staged_sector = Vec :: with_capacity ( u64:: from ( sector_size) as usize ) ;
643652 let mut staged_sector_io = std:: io:: Cursor :: new ( & mut staged_sector) ;
0 commit comments