packages feed

amazonka-certificatemanager-pca-2.0: gen/Amazonka/CertificateManagerPCA/Types/KeyUsage.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.CertificateManagerPCA.Types.KeyUsage
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.CertificateManagerPCA.Types.KeyUsage where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | Defines one or more purposes for which the key contained in the
-- certificate can be used. Default value for each option is false.
--
-- /See:/ 'newKeyUsage' smart constructor.
data KeyUsage = KeyUsage'
  { -- | Key can be used to sign CRLs.
    cRLSign :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used to decipher data.
    dataEncipherment :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used only to decipher data.
    decipherOnly :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used for digital signing.
    digitalSignature :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used only to encipher data.
    encipherOnly :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used in a key-agreement protocol.
    keyAgreement :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used to sign certificates.
    keyCertSign :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used to encipher data.
    keyEncipherment :: Prelude.Maybe Prelude.Bool,
    -- | Key can be used for non-repudiation.
    nonRepudiation :: Prelude.Maybe Prelude.Bool
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'KeyUsage' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'cRLSign', 'keyUsage_cRLSign' - Key can be used to sign CRLs.
--
-- 'dataEncipherment', 'keyUsage_dataEncipherment' - Key can be used to decipher data.
--
-- 'decipherOnly', 'keyUsage_decipherOnly' - Key can be used only to decipher data.
--
-- 'digitalSignature', 'keyUsage_digitalSignature' - Key can be used for digital signing.
--
-- 'encipherOnly', 'keyUsage_encipherOnly' - Key can be used only to encipher data.
--
-- 'keyAgreement', 'keyUsage_keyAgreement' - Key can be used in a key-agreement protocol.
--
-- 'keyCertSign', 'keyUsage_keyCertSign' - Key can be used to sign certificates.
--
-- 'keyEncipherment', 'keyUsage_keyEncipherment' - Key can be used to encipher data.
--
-- 'nonRepudiation', 'keyUsage_nonRepudiation' - Key can be used for non-repudiation.
newKeyUsage ::
  KeyUsage
newKeyUsage =
  KeyUsage'
    { cRLSign = Prelude.Nothing,
      dataEncipherment = Prelude.Nothing,
      decipherOnly = Prelude.Nothing,
      digitalSignature = Prelude.Nothing,
      encipherOnly = Prelude.Nothing,
      keyAgreement = Prelude.Nothing,
      keyCertSign = Prelude.Nothing,
      keyEncipherment = Prelude.Nothing,
      nonRepudiation = Prelude.Nothing
    }

-- | Key can be used to sign CRLs.
keyUsage_cRLSign :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_cRLSign = Lens.lens (\KeyUsage' {cRLSign} -> cRLSign) (\s@KeyUsage' {} a -> s {cRLSign = a} :: KeyUsage)

-- | Key can be used to decipher data.
keyUsage_dataEncipherment :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_dataEncipherment = Lens.lens (\KeyUsage' {dataEncipherment} -> dataEncipherment) (\s@KeyUsage' {} a -> s {dataEncipherment = a} :: KeyUsage)

-- | Key can be used only to decipher data.
keyUsage_decipherOnly :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_decipherOnly = Lens.lens (\KeyUsage' {decipherOnly} -> decipherOnly) (\s@KeyUsage' {} a -> s {decipherOnly = a} :: KeyUsage)

-- | Key can be used for digital signing.
keyUsage_digitalSignature :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_digitalSignature = Lens.lens (\KeyUsage' {digitalSignature} -> digitalSignature) (\s@KeyUsage' {} a -> s {digitalSignature = a} :: KeyUsage)

-- | Key can be used only to encipher data.
keyUsage_encipherOnly :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_encipherOnly = Lens.lens (\KeyUsage' {encipherOnly} -> encipherOnly) (\s@KeyUsage' {} a -> s {encipherOnly = a} :: KeyUsage)

-- | Key can be used in a key-agreement protocol.
keyUsage_keyAgreement :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_keyAgreement = Lens.lens (\KeyUsage' {keyAgreement} -> keyAgreement) (\s@KeyUsage' {} a -> s {keyAgreement = a} :: KeyUsage)

-- | Key can be used to sign certificates.
keyUsage_keyCertSign :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_keyCertSign = Lens.lens (\KeyUsage' {keyCertSign} -> keyCertSign) (\s@KeyUsage' {} a -> s {keyCertSign = a} :: KeyUsage)

-- | Key can be used to encipher data.
keyUsage_keyEncipherment :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_keyEncipherment = Lens.lens (\KeyUsage' {keyEncipherment} -> keyEncipherment) (\s@KeyUsage' {} a -> s {keyEncipherment = a} :: KeyUsage)

-- | Key can be used for non-repudiation.
keyUsage_nonRepudiation :: Lens.Lens' KeyUsage (Prelude.Maybe Prelude.Bool)
keyUsage_nonRepudiation = Lens.lens (\KeyUsage' {nonRepudiation} -> nonRepudiation) (\s@KeyUsage' {} a -> s {nonRepudiation = a} :: KeyUsage)

instance Data.FromJSON KeyUsage where
  parseJSON =
    Data.withObject
      "KeyUsage"
      ( \x ->
          KeyUsage'
            Prelude.<$> (x Data..:? "CRLSign")
            Prelude.<*> (x Data..:? "DataEncipherment")
            Prelude.<*> (x Data..:? "DecipherOnly")
            Prelude.<*> (x Data..:? "DigitalSignature")
            Prelude.<*> (x Data..:? "EncipherOnly")
            Prelude.<*> (x Data..:? "KeyAgreement")
            Prelude.<*> (x Data..:? "KeyCertSign")
            Prelude.<*> (x Data..:? "KeyEncipherment")
            Prelude.<*> (x Data..:? "NonRepudiation")
      )

instance Prelude.Hashable KeyUsage where
  hashWithSalt _salt KeyUsage' {..} =
    _salt
      `Prelude.hashWithSalt` cRLSign
      `Prelude.hashWithSalt` dataEncipherment
      `Prelude.hashWithSalt` decipherOnly
      `Prelude.hashWithSalt` digitalSignature
      `Prelude.hashWithSalt` encipherOnly
      `Prelude.hashWithSalt` keyAgreement
      `Prelude.hashWithSalt` keyCertSign
      `Prelude.hashWithSalt` keyEncipherment
      `Prelude.hashWithSalt` nonRepudiation

instance Prelude.NFData KeyUsage where
  rnf KeyUsage' {..} =
    Prelude.rnf cRLSign
      `Prelude.seq` Prelude.rnf dataEncipherment
      `Prelude.seq` Prelude.rnf decipherOnly
      `Prelude.seq` Prelude.rnf digitalSignature
      `Prelude.seq` Prelude.rnf encipherOnly
      `Prelude.seq` Prelude.rnf keyAgreement
      `Prelude.seq` Prelude.rnf keyCertSign
      `Prelude.seq` Prelude.rnf keyEncipherment
      `Prelude.seq` Prelude.rnf nonRepudiation

instance Data.ToJSON KeyUsage where
  toJSON KeyUsage' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("CRLSign" Data..=) Prelude.<$> cRLSign,
            ("DataEncipherment" Data..=)
              Prelude.<$> dataEncipherment,
            ("DecipherOnly" Data..=) Prelude.<$> decipherOnly,
            ("DigitalSignature" Data..=)
              Prelude.<$> digitalSignature,
            ("EncipherOnly" Data..=) Prelude.<$> encipherOnly,
            ("KeyAgreement" Data..=) Prelude.<$> keyAgreement,
            ("KeyCertSign" Data..=) Prelude.<$> keyCertSign,
            ("KeyEncipherment" Data..=)
              Prelude.<$> keyEncipherment,
            ("NonRepudiation" Data..=)
              Prelude.<$> nonRepudiation
          ]
      )