{- OPTIONS_GHC -funbox-strict-fields -}

module Crypto.PubKey.OpenSsh.Types where

import Data.ByteString (ByteString)

import qualified Crypto.Types.PubKey.DSA as DSA
import qualified Crypto.Types.PubKey.RSA as RSA

data OpenSshPrivateKey = OpenSshPrivateKeyRsa !RSA.PrivateKey
                       | OpenSshPrivateKeyDsa !DSA.PrivateKey !DSA.PublicNumber
    deriving (Eq, Show)

-- | Public key contains `RSA` or `DSA` key and OpenSSH key description
data OpenSshPublicKey = OpenSshPublicKeyRsa !RSA.PublicKey !ByteString
                      | OpenSshPublicKeyDsa !DSA.PublicKey !ByteString
    deriving (Eq, Show)

data OpenSshKeyType = OpenSshKeyTypeRsa
                    | OpenSshKeyTypeDsa
    deriving (Eq, Show)