@@ -122,7 +122,7 @@ impl Mnemonic {
122
122
indices. push ( idx) ;
123
123
124
124
for j in 0 ..11 {
125
- mnemonic_bits[ i * 11 + j] = ( idx & ( 1 << 10 - j) ) != 0 ;
125
+ mnemonic_bits[ i * 11 + j] = ( idx & ( 1 << ( 10 - j) ) ) != 0 ;
126
126
}
127
127
}
128
128
@@ -133,7 +133,7 @@ impl Mnemonic {
133
133
for i in 0 ..entropy_bytes_len {
134
134
for j in 0 ..8 {
135
135
if mnemonic_bits[ i * 8 + j] {
136
- entropy[ i] += 1 << 7 - j;
136
+ entropy[ i] += 1 << ( 7 - j) ;
137
137
}
138
138
}
139
139
}
@@ -145,7 +145,7 @@ impl Mnemonic {
145
145
//verify checksum calculated from entropy
146
146
let entropy_bits_len = ( words. len ( ) * 32 ) / 3 ;
147
147
for ( i, & bit) in mnemonic_bits[ entropy_bits_len..] . iter ( ) . enumerate ( ) {
148
- if ( checksum_byte & ( 1 << 7 - i) != 0 ) != bit {
148
+ if ( checksum_byte & ( 1 << ( 7 - i) ) != 0 ) != bit {
149
149
return Err ( Error :: InvalidChecksum ( checksum_byte as usize ) ) ;
150
150
}
151
151
}
@@ -827,20 +827,66 @@ mod test {
827
827
fn test_invalid_entropies ( ) {
828
828
//testing with entropy less than 128 bits
829
829
assert_eq ! (
830
- Mnemonic :: from_entropy_in( Language :: English , & vec! [ b'0' ; 15 ] ) ,
830
+ Mnemonic :: from_entropy_in( Language :: English , & [ b'0' ; 15 ] ) ,
831
831
Err ( Error :: InvalidEntropyLength ( 120 ) )
832
832
) ;
833
833
834
834
//testing with entropy greater than 256 bits
835
835
assert_eq ! (
836
- Mnemonic :: from_entropy_in( Language :: English , & vec! [ b'0' ; 33 ] ) ,
836
+ Mnemonic :: from_entropy_in( Language :: English , & [ b'0' ; 33 ] ) ,
837
837
Err ( Error :: InvalidEntropyLength ( 264 ) )
838
838
) ;
839
839
840
840
//testing entropy which is not a multiple of 32 bits
841
841
assert_eq ! (
842
- Mnemonic :: from_entropy_in( Language :: English , & vec! [ b'0' ; 31 ] ) ,
842
+ Mnemonic :: from_entropy_in( Language :: English , & [ b'0' ; 31 ] ) ,
843
843
Err ( Error :: InvalidEntropyLength ( 248 ) )
844
844
) ;
845
845
}
846
+
847
+ #[ test]
848
+ fn test_invalid_mnemonic ( ) {
849
+ //less than 12 words
850
+ assert_eq ! (
851
+ Mnemonic :: parse_in(
852
+ Language :: English ,
853
+ "join fossil bulk soft easily give section spoon divorce ice pilot"
854
+ ) ,
855
+ Err ( Error :: InvalidWordCount ( 11 ) )
856
+ ) ;
857
+
858
+ //more than 24 words
859
+ assert_eq ! ( Mnemonic :: parse_in( Language :: English , "area secret six clutch run reject tape
860
+ ritual soldier mad eagle win impulse found tattoo door culture reject movie grocery resource
861
+ thought please conduct gorilla" ) , Err ( Error :: InvalidWordCount ( 25 ) ) ) ;
862
+
863
+ //not a multiple of six
864
+ assert_eq ! (
865
+ Mnemonic :: parse_in(
866
+ Language :: English ,
867
+ "gorilla convince minor amateur labor advance hungry
868
+ treat ripple bracket draft wrong found"
869
+ ) ,
870
+ Err ( Error :: InvalidWordCount ( 13 ) )
871
+ ) ;
872
+
873
+ //invalid word
874
+ assert_eq ! (
875
+ Mnemonic :: parse_in(
876
+ Language :: English ,
877
+ "here convince minor amateur labor advance hungry treat ripple bracket draft wrong"
878
+ ) ,
879
+ Err ( Error :: InvalidWord ( String :: from( "here" ) ) )
880
+ ) ;
881
+
882
+ //invalid checksum
883
+ assert_eq ! (
884
+ Mnemonic :: parse_in(
885
+ Language :: English ,
886
+ "gorilla convince minor amateur labor advance
887
+ hungry treat ripple bracket draft gorilla"
888
+ ) ,
889
+ Err ( Error :: InvalidChecksum ( 175 ) )
890
+ ) ;
891
+ }
846
892
}
0 commit comments