Skip to content

Commit

Permalink
address key-gen test
Browse files Browse the repository at this point in the history
  • Loading branch information
newhoggy committed Apr 5, 2023
1 parent d62e344 commit dc7ef0d
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 2 deletions.
10 changes: 8 additions & 2 deletions cardano-cli/test/Test/Golden/Shelley.hs
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,16 @@ import Test.Golden.Shelley.Metadata.StakePoolMetadata (golden_stakePoo
import Test.Golden.Shelley.MultiSig.Address (golden_shelleyAllMultiSigAddressBuild,
golden_shelleyAnyMultiSigAddressBuild, golden_shelleyAtLeastMultiSigAddressBuild)
import Test.Golden.Shelley.TextEnvelope.Keys.ExtendedPaymentKeys
(golden_shelleyExtendedPaymentKeys)
(golden_shelleyExtendedPaymentKeys, golden_shelleyExtendedPaymentKeys_bech32,
golden_shelleyExtendedPaymentKeys_te)
import Test.Golden.Shelley.TextEnvelope.Keys.GenesisDelegateKeys
(golden_shelleyGenesisDelegateKeys)
import Test.Golden.Shelley.TextEnvelope.Keys.GenesisKeys (golden_shelleyGenesisKeys)
import Test.Golden.Shelley.TextEnvelope.Keys.GenesisUTxOKeys
(golden_shelleyGenesisUTxOKeys)
import Test.Golden.Shelley.TextEnvelope.Keys.KESKeys (golden_shelleyKESKeys)
import Test.Golden.Shelley.TextEnvelope.Keys.PaymentKeys (golden_shelleyPaymentKeys)
import Test.Golden.Shelley.TextEnvelope.Keys.PaymentKeys (golden_shelleyPaymentKeys,
golden_shelleyPaymentKeys_bech32, golden_shelleyPaymentKeys_te)
import Test.Golden.Shelley.TextEnvelope.Keys.StakeKeys (golden_shelleyStakeKeys,
golden_shelleyStakeKeys_bech32, golden_shelleyStakeKeys_te)
import Test.Golden.Shelley.TextEnvelope.Keys.VRFKeys (golden_shelleyVRFKeys,
Expand Down Expand Up @@ -96,6 +98,8 @@ keyTests =
, ("golden_shelleyAddressExtendedKeyGen", golden_shelleyAddressExtendedKeyGen)
, ("golden_shelleyAddressBuild", golden_shelleyAddressBuild)
, ("golden_shelleyExtendedPaymentKeys", golden_shelleyExtendedPaymentKeys)
, ("golden_shelleyExtendedPaymentKeys_bech32", golden_shelleyExtendedPaymentKeys_bech32)
, ("golden_shelleyExtendedPaymentKeys_te", golden_shelleyExtendedPaymentKeys_te)
, ("golden_shelleyGenesisCreate", golden_shelleyGenesisCreate)
, ("golden_shelleyGenesisDelegateKeys", golden_shelleyGenesisDelegateKeys)
, ("golden_shelleyGenesisInitialTxIn", golden_shelleyGenesisInitialTxIn)
Expand All @@ -117,6 +121,8 @@ keyTests =
, ("golden_shelleyNodeKeyGenVrf_bech32", golden_shelleyNodeKeyGenVrf_bech32)
, ("golden_shelleyNodeKeyGenVrf_te", golden_shelleyNodeKeyGenVrf_te)
, ("golden_shelleyPaymentKeys", golden_shelleyPaymentKeys)
, ("golden_shelleyPaymentKeys_bech32", golden_shelleyPaymentKeys_bech32)
, ("golden_shelleyPaymentKeys_te", golden_shelleyPaymentKeys_te)
, ("golden_shelleyStakeAddressBuild", golden_shelleyStakeAddressBuild)
, ("golden_shelleyStakeAddressDeregistrationCertificate", golden_shelleyStakeAddressDeregistrationCertificate)
, ("golden_shelleyStakeAddressKeyGen", golden_shelleyStakeAddressKeyGen)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}

module Test.Golden.Shelley.TextEnvelope.Keys.ExtendedPaymentKeys
( golden_shelleyExtendedPaymentKeys
, golden_shelleyExtendedPaymentKeys_bech32
, golden_shelleyExtendedPaymentKeys_te
) where

import Cardano.Api (AsType (..), HasTextEnvelope (..))

import Control.Monad (void)
import Hedgehog (Property)
import Test.OptParse
import Text.Regex.TDFA ((=~))

import qualified Hedgehog as H
import qualified Hedgehog.Extras.Test.Base as H
import qualified Hedgehog.Extras.Test.File as H

{- HLINT ignore "Use camelCase" -}

Expand Down Expand Up @@ -41,3 +48,59 @@ golden_shelleyExtendedPaymentKeys = propertyOnce . H.moduleWorkspace "tmp" $ \te
-- golden files
checkTextEnvelopeFormat verificationKeyType referenceVerKey verKey
checkTextEnvelopeFormat signingKeyType referenceSignKey signKey

-- | 1. Generate a key pair
-- 2. Check for the existence of the key pair
-- 3. Check the TextEnvelope serialization format has not changed.
golden_shelleyExtendedPaymentKeys_te :: Property
golden_shelleyExtendedPaymentKeys_te = propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> do
-- Reference keys
referenceVerKey <- noteInputFile "test/data/golden/shelley/keys/extended_payment_keys/verification_key"
referenceSignKey <- noteInputFile "test/data/golden/shelley/keys/extended_payment_keys/signing_key"

-- Key filepaths
verKey <- noteTempFile tempDir "extended-payment-verification-key-file"
signKey <- noteTempFile tempDir "extended-payment-signing-key-file"

-- Generate payment verification key
void $ execCardanoCLI
[ "address","key-gen"
, "--key-output-format", "text-envelope"
, "--extended-key"
, "--verification-key-file", verKey
, "--signing-key-file", signKey
]

let signingKeyType = textEnvelopeType (AsSigningKey AsPaymentExtendedKey)
verificationKeyType = textEnvelopeType (AsVerificationKey AsPaymentExtendedKey)

-- Check the newly created files have not deviated from the
-- golden files
checkTextEnvelopeFormat verificationKeyType referenceVerKey verKey
checkTextEnvelopeFormat signingKeyType referenceSignKey signKey

-- | 1. Generate a key pair
-- 2. Check for the existence of the key pair
-- 3. Check the bech32 serialization format has not changed.
golden_shelleyExtendedPaymentKeys_bech32 :: Property
golden_shelleyExtendedPaymentKeys_bech32 = propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> do
H.note_ tempDir

-- Key filepaths
verKeyFile <- noteTempFile tempDir "payment-verification-key-file"
signKeyFile <- noteTempFile tempDir "payment-signing-key-file"

-- Generate payment verification key
void $ execCardanoCLI
[ "address","key-gen"
, "--key-output-format", "bech32"
, "--extended-key"
, "--verification-key-file", verKeyFile
, "--signing-key-file", signKeyFile
]

verKey <- H.readFile verKeyFile
H.assert $ verKey =~ id @String "^addr_xvk[a-z0-9]{110}$"

signKey <- H.readFile signKeyFile
H.assert $ signKey =~ id @String "^addr_xsk[a-z0-9]{212}$"
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}

module Test.Golden.Shelley.TextEnvelope.Keys.PaymentKeys
( golden_shelleyPaymentKeys
, golden_shelleyPaymentKeys_te
, golden_shelleyPaymentKeys_bech32
) where

import Cardano.Api (AsType (..), HasTextEnvelope (..))
import Control.Monad (void)
import Hedgehog (Property)
import Test.OptParse

import qualified Hedgehog as H
import qualified Hedgehog.Extras.Test.Base as H
import qualified Hedgehog.Extras.Test.File as H
import Text.Regex.TDFA ((=~))

{- HLINT ignore "Use camelCase" -}

Expand Down Expand Up @@ -40,3 +46,57 @@ golden_shelleyPaymentKeys = propertyOnce . H.moduleWorkspace "tmp" $ \tempDir ->
-- golden files
checkTextEnvelopeFormat verificationKeyType referenceVerKey verKey
checkTextEnvelopeFormat signingKeyType referenceSignKey signKey

-- | 1. Generate a key pair
-- 2. Check for the existence of the key pair
-- 3. Check the TextEnvelope serialization format has not changed.
golden_shelleyPaymentKeys_te :: Property
golden_shelleyPaymentKeys_te = propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> do
-- Reference keys
referenceVerKey <- noteInputFile "test/data/golden/shelley/keys/payment_keys/verification_key"
referenceSignKey <- noteInputFile "test/data/golden/shelley/keys/payment_keys/signing_key"

-- Key filepaths
verKey <- noteTempFile tempDir "payment-verification-key-file"
signKey <- noteTempFile tempDir "payment-signing-key-file"

-- Generate payment verification key
void $ execCardanoCLI
[ "address","key-gen"
, "--key-output-format", "text-envelope"
, "--verification-key-file", verKey
, "--signing-key-file", signKey
]

let signingKeyType = textEnvelopeType (AsSigningKey AsPaymentKey)
verificationKeyType = textEnvelopeType (AsVerificationKey AsPaymentKey)

-- Check the newly created files have not deviated from the
-- golden files
checkTextEnvelopeFormat verificationKeyType referenceVerKey verKey
checkTextEnvelopeFormat signingKeyType referenceSignKey signKey

-- | 1. Generate a key pair
-- 2. Check for the existence of the key pair
-- 3. Check the bech32 serialization format has not changed.
golden_shelleyPaymentKeys_bech32 :: Property
golden_shelleyPaymentKeys_bech32 = propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> do
H.note_ tempDir

-- Key filepaths
verKeyFile <- noteTempFile tempDir "payment-verification-key-file"
signKeyFile <- noteTempFile tempDir "payment-signing-key-file"

-- Generate payment verification key
void $ execCardanoCLI
[ "address","key-gen"
, "--key-output-format", "bech32"
, "--verification-key-file", verKeyFile
, "--signing-key-file", signKeyFile
]

verKey <- H.readFile verKeyFile
H.assert $ verKey =~ id @String "^addr_vk[a-z0-9]{59}$"

signKey <- H.readFile signKeyFile
H.assert $ signKey =~ id @String "^addr_sk[a-z0-9]{59}$"

0 comments on commit dc7ef0d

Please sign in to comment.