@@ -153,3 +153,157 @@ impl TryFrom<&Signature> for Vec<u8> {
153
153
Ok ( ecdsa:: EcdsaSig :: try_from ( value) ?. to_der ( ) ?)
154
154
}
155
155
}
156
+ #[ cfg( test) ]
157
+ mod tests {
158
+ use super :: * ;
159
+
160
+ #[ test]
161
+ fn test_signature_default ( ) {
162
+ let sig: Signature = Signature :: default ( ) ;
163
+ assert_eq ! ( sig. r( ) , & [ 0u8 ; 72 ] ) ;
164
+ assert_eq ! ( sig. s( ) , & [ 0u8 ; 72 ] ) ;
165
+ }
166
+
167
+ #[ test]
168
+ fn test_signature_getters ( ) {
169
+ let sig: Signature = Signature {
170
+ r : [ 1u8 ; 72 ] ,
171
+ s : [ 2u8 ; 72 ] ,
172
+ _reserved : [ 0u8 ; 512 - ( SIG_PIECE_SIZE * 2 ) ] ,
173
+ } ;
174
+ assert_eq ! ( sig. r( ) , & [ 1u8 ; 72 ] ) ;
175
+ assert_eq ! ( sig. s( ) , & [ 2u8 ; 72 ] ) ;
176
+ }
177
+
178
+ #[ test]
179
+ fn test_signature_eq ( ) {
180
+ let sig1: Signature = Signature :: default ( ) ;
181
+ let sig2: Signature = Signature :: default ( ) ;
182
+ let sig3: Signature = Signature {
183
+ r : [ 1u8 ; 72 ] ,
184
+ s : [ 0u8 ; 72 ] ,
185
+ _reserved : [ 0u8 ; 512 - ( SIG_PIECE_SIZE * 2 ) ] ,
186
+ } ;
187
+
188
+ assert_eq ! ( sig1, sig2) ;
189
+ assert_ne ! ( sig1, sig3) ;
190
+ }
191
+
192
+ #[ test]
193
+ fn test_signature_ord ( ) {
194
+ let sig1: Signature = Signature :: default ( ) ;
195
+ let sig2: Signature = Signature {
196
+ r : [ 1u8 ; 72 ] ,
197
+ s : [ 0u8 ; 72 ] ,
198
+ _reserved : [ 0u8 ; 512 - ( SIG_PIECE_SIZE * 2 ) ] ,
199
+ } ;
200
+
201
+ assert ! ( sig1 < sig2) ;
202
+ }
203
+
204
+ #[ test]
205
+ fn test_signature_debug ( ) {
206
+ let sig: Signature = Signature :: default ( ) ;
207
+ let debug_str: String = format ! ( "{:?}" , sig) ;
208
+ assert ! ( debug_str. starts_with( "Signature { r: " ) ) ;
209
+ assert ! ( debug_str. contains( ", s: " ) ) ;
210
+ }
211
+
212
+ #[ test]
213
+ fn test_signature_display ( ) {
214
+ let sig: Signature = Signature :: default ( ) ;
215
+ let display_str: String = format ! ( "{}" , sig) ;
216
+ assert ! ( display_str. contains( "Signature:" ) ) ;
217
+ assert ! ( display_str. contains( "R:" ) ) ;
218
+ assert ! ( display_str. contains( "S:" ) ) ;
219
+ }
220
+
221
+ #[ cfg( feature = "openssl" ) ]
222
+ mod openssl_tests {
223
+ use super :: * ;
224
+ use openssl:: bn:: BigNum ;
225
+ use std:: convert:: TryInto ;
226
+
227
+ #[ test]
228
+ fn test_from_ecdsa_sig ( ) {
229
+ let r = BigNum :: from_dec_str ( "123" ) . unwrap ( ) ;
230
+ let s = BigNum :: from_dec_str ( "456" ) . unwrap ( ) ;
231
+ let ecdsa_sig = ecdsa:: EcdsaSig :: from_private_components ( r, s) . unwrap ( ) ;
232
+ let sig: Signature = ecdsa_sig. into ( ) ;
233
+ assert_ne ! ( sig. r( ) , & [ 0u8 ; 72 ] ) ;
234
+ assert_ne ! ( sig. s( ) , & [ 0u8 ; 72 ] ) ;
235
+ }
236
+
237
+ #[ test]
238
+ fn test_try_from_bytes ( ) {
239
+ let r = BigNum :: from_dec_str ( "123" ) . unwrap ( ) ;
240
+ let s = BigNum :: from_dec_str ( "456" ) . unwrap ( ) ;
241
+ let ecdsa_sig = ecdsa:: EcdsaSig :: from_private_components ( r, s) . unwrap ( ) ;
242
+ let der = ecdsa_sig. to_der ( ) . unwrap ( ) ;
243
+ let sig = Signature :: try_from ( der. as_slice ( ) ) . unwrap ( ) ;
244
+ assert_ne ! ( sig. r( ) , & [ 0u8 ; 72 ] ) ;
245
+ assert_ne ! ( sig. s( ) , & [ 0u8 ; 72 ] ) ;
246
+ }
247
+
248
+ #[ test]
249
+ fn test_try_into_ecdsa_sig ( ) {
250
+ let sig = Signature :: default ( ) ;
251
+ let ecdsa_sig: ecdsa:: EcdsaSig = ( & sig) . try_into ( ) . unwrap ( ) ;
252
+ assert_eq ! ( ecdsa_sig. r( ) . to_vec( ) , vec![ ] ) ;
253
+ assert_eq ! ( ecdsa_sig. s( ) . to_vec( ) , vec![ ] ) ;
254
+ }
255
+
256
+ #[ test]
257
+ fn test_try_into_vec ( ) {
258
+ let sig = Signature :: default ( ) ;
259
+ let der: Vec < u8 > = ( & sig) . try_into ( ) . unwrap ( ) ;
260
+ assert ! ( !der. is_empty( ) ) ;
261
+ }
262
+ }
263
+
264
+ #[ cfg( feature = "crypto_nossl" ) ]
265
+ mod crypto_nossl_tests {
266
+ use super :: * ;
267
+ use std:: convert:: TryInto ;
268
+
269
+ #[ test]
270
+ #[ should_panic]
271
+ fn test_try_into_p384_signature_failure ( ) {
272
+ let signature: Signature = Signature :: default ( ) ;
273
+
274
+ let _p384_sig: p384:: ecdsa:: Signature = ( & signature) . try_into ( ) . unwrap ( ) ;
275
+ }
276
+
277
+ #[ test]
278
+ fn test_try_into_p384_signature ( ) {
279
+ // Test with non-zero values
280
+ let sig = Signature {
281
+ r : [ 1u8 ; 72 ] ,
282
+ s : [ 2u8 ; 72 ] ,
283
+ _reserved : [ 0u8 ; 512 - ( SIG_PIECE_SIZE * 2 ) ] ,
284
+ } ;
285
+ let p384_sig: p384:: ecdsa:: Signature = ( & sig) . try_into ( ) . unwrap ( ) ;
286
+ assert_eq ! ( p384_sig. r( ) . to_bytes( ) . as_slice( ) , & [ 1u8 ; 48 ] ) ;
287
+ assert_eq ! ( p384_sig. s( ) . to_bytes( ) . as_slice( ) , & [ 2u8 ; 48 ] ) ;
288
+ }
289
+ }
290
+
291
+ #[ test]
292
+ fn test_signature_serde ( ) {
293
+ let sig: Signature = Signature :: default ( ) ;
294
+ let serialized: Vec < u8 > = bincode:: serialize ( & sig) . unwrap ( ) ;
295
+ let deserialized: Signature = bincode:: deserialize ( & serialized) . unwrap ( ) ;
296
+ assert_eq ! ( sig, deserialized) ;
297
+ }
298
+
299
+ #[ test]
300
+ fn test_signature_max_values ( ) {
301
+ let sig: Signature = Signature {
302
+ r : [ 0xFF ; 72 ] ,
303
+ s : [ 0xFF ; 72 ] ,
304
+ _reserved : [ 0u8 ; 512 - ( SIG_PIECE_SIZE * 2 ) ] ,
305
+ } ;
306
+ assert_eq ! ( sig. r( ) , & [ 0xFF ; 72 ] ) ;
307
+ assert_eq ! ( sig. s( ) , & [ 0xFF ; 72 ] ) ;
308
+ }
309
+ }
0 commit comments