packages feed

musig2-0.1.0: test/SortPubkeys.hs

{-# LANGUAGE OverloadedStrings #-}

module SortPubkeys (testSortPubkeys) where

import Crypto.Curve.Secp256k1 (Pub)
import Crypto.Curve.Secp256k1.MuSig2 (sortPublicKeys)
import Data.Sequence (Seq)
import qualified Data.Sequence as Seq
import Test.Tasty
import Test.Tasty.HUnit
import Util (parsePoint)

parsePoints :: [Pub]
parsePoints =
  map
    parsePoint
    [ "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8"
    , "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9"
    , "03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659"
    , "023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66"
    , "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EFF"
    , "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8"
    ]

parsePointsSorted :: Seq Pub
parsePointsSorted =
  Seq.fromList $
    map
      parsePoint
      [ "023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66"
      , "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8"
      , "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8"
      , "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EFF"
      , "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9"
      , "03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659"
      ]

-- | Test vectors from [BIP327 `key_sort_vectors.json`](https://github.com/bitcoin/bips/blob/master/bip-0327/vectors/key_sort_vectors.json)
testSortPubkeys :: TestTree
testSortPubkeys =
  testGroup
    "sorting pubkeys"
    [testCase "BIP327 test vector" $ sortPublicKeys parsePoints @=? parsePointsSorted]