packages feed

cleveland-0.1.1: test/TestSuite/Cleveland/BytesSigning.hs

-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

module TestSuite.Cleveland.BytesSigning
  ( test_BytesSigning
  ) where

import Test.Tasty (TestTree)

import Lorentz ((#))
import Lorentz qualified as L
import Morley.Tezos.Crypto
import Morley.Util.SizedList.Types
import Test.Cleveland

checkSignatureContract :: L.Contract (PublicKey, (L.TSignature ByteString, ByteString)) () ()
checkSignatureContract = L.defaultContract $
  L.car #
  L.unpair # L.dip L.unpair #
  L.checkSignature # L.assert [L.mt|Invalid signature|] #
  L.unit # L.nil @L.Operation # L.pair

test_BytesSigning :: TestTree
test_BytesSigning =
  testScenario "Bytestrings can be signed" $ scenario do
    dummy :< signer :< Nil <- traverse newFreshAddress $ "user" :< "signer" :< Nil

    helper <- originateSimple "helper" () checkSignatureContract

    let bytes = "some bytestring"

    sig <- signBinary bytes signer
    signerPK <- getPublicKey signer
    dummyPK <- getPublicKey dummy

    expectFailedWith [L.mt|Invalid signature|] $
      call helper CallDefault (dummyPK, (sig, bytes))
    call helper CallDefault (signerPK, (sig, bytes))