@@ -5,6 +5,7 @@ module Crypto.Secp256k1Prop where
5
5
6
6
import Control.Applicative (Applicative (liftA2 ), empty )
7
7
import Control.Monad (when )
8
+ import Control.Monad.IO.Class (liftIO )
8
9
import Control.Monad.Trans.Class (lift )
9
10
import Crypto.Secp256k1
10
11
import Crypto.Secp256k1.Gen
@@ -260,9 +261,10 @@ prop_schnorrSignaturesProducedAreValid = property $ do
260
261
sk <- forAll secKeyGen
261
262
msg <- forAll $ bytes (singleton 32 )
262
263
let kp = keyPairCreate sk
263
- case schnorrSign kp msg of
264
+ sig <- liftIO $ schnorrSign kp msg
265
+ case sig of
264
266
Nothing -> failure
265
- Just sig -> assert $ schnorrVerify (fst $ keyPairPubKeyXO kp) msg sig
267
+ Just s -> assert $ schnorrVerify (fst $ keyPairPubKeyXO kp) msg s
266
268
267
269
268
270
prop_pubKeyCombineTweakIdentity :: Property
@@ -297,9 +299,10 @@ prop_schnorrSignaturesUnforgeable = property $ do
297
299
let kp = keyPairCreate sk
298
300
pk <- forAll pubKeyXOGen
299
301
msg <- forAll $ bytes (singleton 32 )
300
- case schnorrSign kp msg of
302
+ sig <- liftIO $ schnorrSign kp msg
303
+ case sig of
301
304
Nothing -> failure
302
- Just sig -> assert . not $ schnorrVerify pk msg sig
305
+ Just s -> assert . not $ schnorrVerify pk msg s
303
306
304
307
305
308
newtype Wrapped a = Wrapped { secKey :: a } deriving (Show , Read , Eq )
@@ -342,12 +345,19 @@ prop_derivedCompositeReadShowInvertSignature = derivedCompositeReadShowInvertTem
342
345
343
346
344
347
prop_derivedCompositeReadShowInvertSchnorrSignature :: Property
345
- prop_derivedCompositeReadShowInvertSchnorrSignature = derivedCompositeReadShowInvertTemplate schnorrSignGen
346
- where
347
- schnorrSignGen = do
348
- sk <- secKeyGen
349
- msg <- bytes (singleton 32 )
350
- maybe empty pure $ schnorrSign (keyPairCreate sk) msg
348
+ prop_derivedCompositeReadShowInvertSchnorrSignature = property $ do
349
+ sk <- forAll secKeyGen
350
+ let kp = keyPairCreate sk
351
+ msg <- forAll $ bytes (singleton 32 )
352
+ mSig <- liftIO $ schnorrSign kp msg
353
+ sig <- maybe failure pure mSig
354
+ let a = sig
355
+ annotateShow a
356
+ annotateShow (length $ show a)
357
+ annotateShow (Wrapped a)
358
+ case readMaybe (show (Wrapped a)) of
359
+ Nothing -> failure
360
+ Just x -> x === Wrapped a
351
361
352
362
353
363
prop_derivedCompositeReadShowInvertRecoverableSignature :: Property
@@ -370,7 +380,7 @@ prop_schnorrSignatureParseInvertsSerialize = property $ do
370
380
sk <- forAll secKeyGen
371
381
msg <- forAll $ bytes (singleton 32 )
372
382
let kp = keyPairCreate sk
373
- sig <- maybe failure pure $ schnorrSign kp msg
383
+ sig <- liftIO $ maybe ( error " schnorrSign failed " ) pure =<< schnorrSign kp msg
374
384
let serialized = exportSchnorrSignature sig
375
385
annotateShow serialized
376
386
annotateShow (BS. length serialized)
@@ -383,21 +393,21 @@ prop_schnorrSignatureValidityPreservedOverSerialization = property $ do
383
393
sk <- forAll secKeyGen
384
394
msg <- forAll $ bytes (singleton 32 )
385
395
let kp = keyPairCreate sk
386
- sig <- maybe failure pure $ schnorrSign kp msg
396
+ sig <- liftIO $ maybe ( error " schnorrSign failed " ) pure =<< schnorrSign kp msg
387
397
let serialized = exportSchnorrSignature sig
388
398
let parsed = importSchnorrSignature serialized
389
399
parsed === Just sig
390
400
assert $ schnorrVerify (fst $ keyPairPubKeyXO kp) msg sig
391
401
392
402
393
- prop_schnorrSignatureDeterministic :: Property
394
- prop_schnorrSignatureDeterministic = property $ do
403
+ prop_schnorrSignatureNonDeterministic :: Property
404
+ prop_schnorrSignatureNonDeterministic = property $ do
395
405
sk <- forAll secKeyGen
396
406
msg <- forAll $ bytes (singleton 32 )
397
407
let kp = keyPairCreate sk
398
- sig1 <- maybe failure pure $ schnorrSign kp msg
399
- sig2 <- maybe failure pure $ schnorrSign kp msg
400
- sig1 = == sig2
408
+ sig1 <- liftIO $ maybe ( error " schnorrSign failed " ) pure =<< schnorrSign kp msg
409
+ sig2 <- liftIO $ maybe ( error " schnorrSign failed " ) pure =<< schnorrSign kp msg
410
+ sig1 / == sig2
401
411
402
412
403
413
tests :: Group
0 commit comments