diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Signer SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2017-08-25@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-signer)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.Signer](http://hackage.haskell.org/package/amazonka-signer/docs/Amazonka-Signer.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-signer` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-signer.cabal b/amazonka-signer.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-signer.cabal
@@ -0,0 +1,127 @@
+cabal-version:      2.2
+name:               amazonka-signer
+version:            2.0
+synopsis:           Amazon Signer SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2017-08-25@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.Signer.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.Signer" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-signer
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.Signer
+    Amazonka.Signer.AddProfilePermission
+    Amazonka.Signer.CancelSigningProfile
+    Amazonka.Signer.DescribeSigningJob
+    Amazonka.Signer.GetSigningPlatform
+    Amazonka.Signer.GetSigningProfile
+    Amazonka.Signer.Lens
+    Amazonka.Signer.ListProfilePermissions
+    Amazonka.Signer.ListSigningJobs
+    Amazonka.Signer.ListSigningPlatforms
+    Amazonka.Signer.ListSigningProfiles
+    Amazonka.Signer.ListTagsForResource
+    Amazonka.Signer.PutSigningProfile
+    Amazonka.Signer.RemoveProfilePermission
+    Amazonka.Signer.RevokeSignature
+    Amazonka.Signer.RevokeSigningProfile
+    Amazonka.Signer.StartSigningJob
+    Amazonka.Signer.TagResource
+    Amazonka.Signer.Types
+    Amazonka.Signer.Types.Category
+    Amazonka.Signer.Types.Destination
+    Amazonka.Signer.Types.EncryptionAlgorithm
+    Amazonka.Signer.Types.EncryptionAlgorithmOptions
+    Amazonka.Signer.Types.HashAlgorithm
+    Amazonka.Signer.Types.HashAlgorithmOptions
+    Amazonka.Signer.Types.ImageFormat
+    Amazonka.Signer.Types.Permission
+    Amazonka.Signer.Types.S3Destination
+    Amazonka.Signer.Types.S3SignedObject
+    Amazonka.Signer.Types.S3Source
+    Amazonka.Signer.Types.SignatureValidityPeriod
+    Amazonka.Signer.Types.SignedObject
+    Amazonka.Signer.Types.SigningConfiguration
+    Amazonka.Signer.Types.SigningConfigurationOverrides
+    Amazonka.Signer.Types.SigningImageFormat
+    Amazonka.Signer.Types.SigningJob
+    Amazonka.Signer.Types.SigningJobRevocationRecord
+    Amazonka.Signer.Types.SigningMaterial
+    Amazonka.Signer.Types.SigningPlatform
+    Amazonka.Signer.Types.SigningPlatformOverrides
+    Amazonka.Signer.Types.SigningProfile
+    Amazonka.Signer.Types.SigningProfileRevocationRecord
+    Amazonka.Signer.Types.SigningProfileStatus
+    Amazonka.Signer.Types.SigningStatus
+    Amazonka.Signer.Types.Source
+    Amazonka.Signer.Types.ValidityType
+    Amazonka.Signer.UntagResource
+    Amazonka.Signer.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-signer-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.Gen.Signer
+    Test.Amazonka.Signer
+    Test.Amazonka.Signer.Internal
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-signer
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AddProfilePermission.yaml b/fixture/AddProfilePermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddProfilePermission.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AddProfilePermissionResponse.proto b/fixture/AddProfilePermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddProfilePermissionResponse.proto
diff --git a/fixture/CancelSigningProfile.yaml b/fixture/CancelSigningProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelSigningProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelSigningProfileResponse.proto b/fixture/CancelSigningProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelSigningProfileResponse.proto
diff --git a/fixture/DescribeSigningJob.yaml b/fixture/DescribeSigningJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSigningJob.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSigningJobResponse.proto b/fixture/DescribeSigningJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSigningJobResponse.proto
diff --git a/fixture/GetSigningPlatform.yaml b/fixture/GetSigningPlatform.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSigningPlatform.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSigningPlatformResponse.proto b/fixture/GetSigningPlatformResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSigningPlatformResponse.proto
diff --git a/fixture/GetSigningProfile.yaml b/fixture/GetSigningProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSigningProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSigningProfileResponse.proto b/fixture/GetSigningProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSigningProfileResponse.proto
diff --git a/fixture/ListProfilePermissions.yaml b/fixture/ListProfilePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfilePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListProfilePermissionsResponse.proto b/fixture/ListProfilePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListProfilePermissionsResponse.proto
diff --git a/fixture/ListSigningJobs.yaml b/fixture/ListSigningJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSigningJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSigningJobsResponse.proto b/fixture/ListSigningJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSigningJobsResponse.proto
diff --git a/fixture/ListSigningPlatforms.yaml b/fixture/ListSigningPlatforms.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSigningPlatforms.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSigningPlatformsResponse.proto b/fixture/ListSigningPlatformsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSigningPlatformsResponse.proto
diff --git a/fixture/ListSigningProfiles.yaml b/fixture/ListSigningProfiles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSigningProfiles.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSigningProfilesResponse.proto b/fixture/ListSigningProfilesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSigningProfilesResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/PutSigningProfile.yaml b/fixture/PutSigningProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutSigningProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutSigningProfileResponse.proto b/fixture/PutSigningProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutSigningProfileResponse.proto
diff --git a/fixture/RemoveProfilePermission.yaml b/fixture/RemoveProfilePermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveProfilePermission.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RemoveProfilePermissionResponse.proto b/fixture/RemoveProfilePermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveProfilePermissionResponse.proto
diff --git a/fixture/RevokeSignature.yaml b/fixture/RevokeSignature.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeSignature.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RevokeSignatureResponse.proto b/fixture/RevokeSignatureResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeSignatureResponse.proto
diff --git a/fixture/RevokeSigningProfile.yaml b/fixture/RevokeSigningProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeSigningProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RevokeSigningProfileResponse.proto b/fixture/RevokeSigningProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeSigningProfileResponse.proto
diff --git a/fixture/StartSigningJob.yaml b/fixture/StartSigningJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartSigningJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartSigningJobResponse.proto b/fixture/StartSigningJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartSigningJobResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/signer/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  signer.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/gen/Amazonka/Signer.hs b/gen/Amazonka/Signer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer.hs
@@ -0,0 +1,336 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Signer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2017-08-25@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- AWS Signer is a fully managed code signing service to help you ensure
+-- the trust and integrity of your code.
+--
+-- AWS Signer supports the following applications:
+--
+-- With /code signing for AWS Lambda/, you can sign AWS Lambda deployment
+-- packages. Integrated support is provided for Amazon S3, Amazon
+-- CloudWatch, and AWS CloudTrail. In order to sign code, you create a
+-- signing profile and then use Signer to sign Lambda zip files in S3.
+--
+-- With /code signing for IoT/, you can sign code for any IoT device that
+-- is supported by AWS. IoT code signing is available for
+-- <http://docs.aws.amazon.com/freertos/latest/userguide/ Amazon FreeRTOS>
+-- and
+-- <http://docs.aws.amazon.com/iot/latest/developerguide/ AWS IoT Device Management>,
+-- and is integrated with
+-- <http://docs.aws.amazon.com/acm/latest/userguide/ AWS Certificate Manager (ACM)>.
+-- In order to sign code, you import a third-party code signing certificate
+-- using ACM, and use that to sign updates in Amazon FreeRTOS and AWS IoT
+-- Device Management.
+--
+-- For more information about AWS Signer, see the
+-- <http://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html AWS Signer Developer Guide>.
+module Amazonka.Signer
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AccessDeniedException
+    _AccessDeniedException,
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** InternalServiceErrorException
+    _InternalServiceErrorException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceLimitExceededException
+    _ServiceLimitExceededException,
+
+    -- ** ThrottlingException
+    _ThrottlingException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- ** ValidationException
+    _ValidationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** SuccessfulSigningJob
+    newSuccessfulSigningJob,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AddProfilePermission
+    AddProfilePermission (AddProfilePermission'),
+    newAddProfilePermission,
+    AddProfilePermissionResponse (AddProfilePermissionResponse'),
+    newAddProfilePermissionResponse,
+
+    -- ** CancelSigningProfile
+    CancelSigningProfile (CancelSigningProfile'),
+    newCancelSigningProfile,
+    CancelSigningProfileResponse (CancelSigningProfileResponse'),
+    newCancelSigningProfileResponse,
+
+    -- ** DescribeSigningJob
+    DescribeSigningJob (DescribeSigningJob'),
+    newDescribeSigningJob,
+    DescribeSigningJobResponse (DescribeSigningJobResponse'),
+    newDescribeSigningJobResponse,
+
+    -- ** GetSigningPlatform
+    GetSigningPlatform (GetSigningPlatform'),
+    newGetSigningPlatform,
+    GetSigningPlatformResponse (GetSigningPlatformResponse'),
+    newGetSigningPlatformResponse,
+
+    -- ** GetSigningProfile
+    GetSigningProfile (GetSigningProfile'),
+    newGetSigningProfile,
+    GetSigningProfileResponse (GetSigningProfileResponse'),
+    newGetSigningProfileResponse,
+
+    -- ** ListProfilePermissions
+    ListProfilePermissions (ListProfilePermissions'),
+    newListProfilePermissions,
+    ListProfilePermissionsResponse (ListProfilePermissionsResponse'),
+    newListProfilePermissionsResponse,
+
+    -- ** ListSigningJobs (Paginated)
+    ListSigningJobs (ListSigningJobs'),
+    newListSigningJobs,
+    ListSigningJobsResponse (ListSigningJobsResponse'),
+    newListSigningJobsResponse,
+
+    -- ** ListSigningPlatforms (Paginated)
+    ListSigningPlatforms (ListSigningPlatforms'),
+    newListSigningPlatforms,
+    ListSigningPlatformsResponse (ListSigningPlatformsResponse'),
+    newListSigningPlatformsResponse,
+
+    -- ** ListSigningProfiles (Paginated)
+    ListSigningProfiles (ListSigningProfiles'),
+    newListSigningProfiles,
+    ListSigningProfilesResponse (ListSigningProfilesResponse'),
+    newListSigningProfilesResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** PutSigningProfile
+    PutSigningProfile (PutSigningProfile'),
+    newPutSigningProfile,
+    PutSigningProfileResponse (PutSigningProfileResponse'),
+    newPutSigningProfileResponse,
+
+    -- ** RemoveProfilePermission
+    RemoveProfilePermission (RemoveProfilePermission'),
+    newRemoveProfilePermission,
+    RemoveProfilePermissionResponse (RemoveProfilePermissionResponse'),
+    newRemoveProfilePermissionResponse,
+
+    -- ** RevokeSignature
+    RevokeSignature (RevokeSignature'),
+    newRevokeSignature,
+    RevokeSignatureResponse (RevokeSignatureResponse'),
+    newRevokeSignatureResponse,
+
+    -- ** RevokeSigningProfile
+    RevokeSigningProfile (RevokeSigningProfile'),
+    newRevokeSigningProfile,
+    RevokeSigningProfileResponse (RevokeSigningProfileResponse'),
+    newRevokeSigningProfileResponse,
+
+    -- ** StartSigningJob
+    StartSigningJob (StartSigningJob'),
+    newStartSigningJob,
+    StartSigningJobResponse (StartSigningJobResponse'),
+    newStartSigningJobResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- * Types
+
+    -- ** Category
+    Category (..),
+
+    -- ** EncryptionAlgorithm
+    EncryptionAlgorithm (..),
+
+    -- ** HashAlgorithm
+    HashAlgorithm (..),
+
+    -- ** ImageFormat
+    ImageFormat (..),
+
+    -- ** SigningProfileStatus
+    SigningProfileStatus (..),
+
+    -- ** SigningStatus
+    SigningStatus (..),
+
+    -- ** ValidityType
+    ValidityType (..),
+
+    -- ** Destination
+    Destination (Destination'),
+    newDestination,
+
+    -- ** EncryptionAlgorithmOptions
+    EncryptionAlgorithmOptions (EncryptionAlgorithmOptions'),
+    newEncryptionAlgorithmOptions,
+
+    -- ** HashAlgorithmOptions
+    HashAlgorithmOptions (HashAlgorithmOptions'),
+    newHashAlgorithmOptions,
+
+    -- ** Permission
+    Permission (Permission'),
+    newPermission,
+
+    -- ** S3Destination
+    S3Destination (S3Destination'),
+    newS3Destination,
+
+    -- ** S3SignedObject
+    S3SignedObject (S3SignedObject'),
+    newS3SignedObject,
+
+    -- ** S3Source
+    S3Source (S3Source'),
+    newS3Source,
+
+    -- ** SignatureValidityPeriod
+    SignatureValidityPeriod (SignatureValidityPeriod'),
+    newSignatureValidityPeriod,
+
+    -- ** SignedObject
+    SignedObject (SignedObject'),
+    newSignedObject,
+
+    -- ** SigningConfiguration
+    SigningConfiguration (SigningConfiguration'),
+    newSigningConfiguration,
+
+    -- ** SigningConfigurationOverrides
+    SigningConfigurationOverrides (SigningConfigurationOverrides'),
+    newSigningConfigurationOverrides,
+
+    -- ** SigningImageFormat
+    SigningImageFormat (SigningImageFormat'),
+    newSigningImageFormat,
+
+    -- ** SigningJob
+    SigningJob (SigningJob'),
+    newSigningJob,
+
+    -- ** SigningJobRevocationRecord
+    SigningJobRevocationRecord (SigningJobRevocationRecord'),
+    newSigningJobRevocationRecord,
+
+    -- ** SigningMaterial
+    SigningMaterial (SigningMaterial'),
+    newSigningMaterial,
+
+    -- ** SigningPlatform
+    SigningPlatform (SigningPlatform'),
+    newSigningPlatform,
+
+    -- ** SigningPlatformOverrides
+    SigningPlatformOverrides (SigningPlatformOverrides'),
+    newSigningPlatformOverrides,
+
+    -- ** SigningProfile
+    SigningProfile (SigningProfile'),
+    newSigningProfile,
+
+    -- ** SigningProfileRevocationRecord
+    SigningProfileRevocationRecord (SigningProfileRevocationRecord'),
+    newSigningProfileRevocationRecord,
+
+    -- ** Source
+    Source (Source'),
+    newSource,
+  )
+where
+
+import Amazonka.Signer.AddProfilePermission
+import Amazonka.Signer.CancelSigningProfile
+import Amazonka.Signer.DescribeSigningJob
+import Amazonka.Signer.GetSigningPlatform
+import Amazonka.Signer.GetSigningProfile
+import Amazonka.Signer.Lens
+import Amazonka.Signer.ListProfilePermissions
+import Amazonka.Signer.ListSigningJobs
+import Amazonka.Signer.ListSigningPlatforms
+import Amazonka.Signer.ListSigningProfiles
+import Amazonka.Signer.ListTagsForResource
+import Amazonka.Signer.PutSigningProfile
+import Amazonka.Signer.RemoveProfilePermission
+import Amazonka.Signer.RevokeSignature
+import Amazonka.Signer.RevokeSigningProfile
+import Amazonka.Signer.StartSigningJob
+import Amazonka.Signer.TagResource
+import Amazonka.Signer.Types
+import Amazonka.Signer.UntagResource
+import Amazonka.Signer.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'Signer'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/Signer/AddProfilePermission.hs b/gen/Amazonka/Signer/AddProfilePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/AddProfilePermission.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.AddProfilePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds cross-account permissions to a signing profile.
+module Amazonka.Signer.AddProfilePermission
+  ( -- * Creating a Request
+    AddProfilePermission (..),
+    newAddProfilePermission,
+
+    -- * Request Lenses
+    addProfilePermission_profileVersion,
+    addProfilePermission_revisionId,
+    addProfilePermission_action,
+    addProfilePermission_principal,
+    addProfilePermission_statementId,
+    addProfilePermission_profileName,
+
+    -- * Destructuring the Response
+    AddProfilePermissionResponse (..),
+    newAddProfilePermissionResponse,
+
+    -- * Response Lenses
+    addProfilePermissionResponse_revisionId,
+    addProfilePermissionResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newAddProfilePermission' smart constructor.
+data AddProfilePermission = AddProfilePermission'
+  { -- | The version of the signing profile.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for the current profile revision.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The AWS Signer action permitted as part of cross-account permissions.
+    action :: Prelude.Text,
+    -- | The AWS principal receiving cross-account permissions. This may be an
+    -- IAM role or another AWS account ID.
+    principal :: Prelude.Text,
+    -- | A unique identifier for the cross-account permission statement.
+    statementId :: Prelude.Text,
+    -- | The human-readable name of the signing profile.
+    profileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddProfilePermission' 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:
+--
+-- 'profileVersion', 'addProfilePermission_profileVersion' - The version of the signing profile.
+--
+-- 'revisionId', 'addProfilePermission_revisionId' - A unique identifier for the current profile revision.
+--
+-- 'action', 'addProfilePermission_action' - The AWS Signer action permitted as part of cross-account permissions.
+--
+-- 'principal', 'addProfilePermission_principal' - The AWS principal receiving cross-account permissions. This may be an
+-- IAM role or another AWS account ID.
+--
+-- 'statementId', 'addProfilePermission_statementId' - A unique identifier for the cross-account permission statement.
+--
+-- 'profileName', 'addProfilePermission_profileName' - The human-readable name of the signing profile.
+newAddProfilePermission ::
+  -- | 'action'
+  Prelude.Text ->
+  -- | 'principal'
+  Prelude.Text ->
+  -- | 'statementId'
+  Prelude.Text ->
+  -- | 'profileName'
+  Prelude.Text ->
+  AddProfilePermission
+newAddProfilePermission
+  pAction_
+  pPrincipal_
+  pStatementId_
+  pProfileName_ =
+    AddProfilePermission'
+      { profileVersion =
+          Prelude.Nothing,
+        revisionId = Prelude.Nothing,
+        action = pAction_,
+        principal = pPrincipal_,
+        statementId = pStatementId_,
+        profileName = pProfileName_
+      }
+
+-- | The version of the signing profile.
+addProfilePermission_profileVersion :: Lens.Lens' AddProfilePermission (Prelude.Maybe Prelude.Text)
+addProfilePermission_profileVersion = Lens.lens (\AddProfilePermission' {profileVersion} -> profileVersion) (\s@AddProfilePermission' {} a -> s {profileVersion = a} :: AddProfilePermission)
+
+-- | A unique identifier for the current profile revision.
+addProfilePermission_revisionId :: Lens.Lens' AddProfilePermission (Prelude.Maybe Prelude.Text)
+addProfilePermission_revisionId = Lens.lens (\AddProfilePermission' {revisionId} -> revisionId) (\s@AddProfilePermission' {} a -> s {revisionId = a} :: AddProfilePermission)
+
+-- | The AWS Signer action permitted as part of cross-account permissions.
+addProfilePermission_action :: Lens.Lens' AddProfilePermission Prelude.Text
+addProfilePermission_action = Lens.lens (\AddProfilePermission' {action} -> action) (\s@AddProfilePermission' {} a -> s {action = a} :: AddProfilePermission)
+
+-- | The AWS principal receiving cross-account permissions. This may be an
+-- IAM role or another AWS account ID.
+addProfilePermission_principal :: Lens.Lens' AddProfilePermission Prelude.Text
+addProfilePermission_principal = Lens.lens (\AddProfilePermission' {principal} -> principal) (\s@AddProfilePermission' {} a -> s {principal = a} :: AddProfilePermission)
+
+-- | A unique identifier for the cross-account permission statement.
+addProfilePermission_statementId :: Lens.Lens' AddProfilePermission Prelude.Text
+addProfilePermission_statementId = Lens.lens (\AddProfilePermission' {statementId} -> statementId) (\s@AddProfilePermission' {} a -> s {statementId = a} :: AddProfilePermission)
+
+-- | The human-readable name of the signing profile.
+addProfilePermission_profileName :: Lens.Lens' AddProfilePermission Prelude.Text
+addProfilePermission_profileName = Lens.lens (\AddProfilePermission' {profileName} -> profileName) (\s@AddProfilePermission' {} a -> s {profileName = a} :: AddProfilePermission)
+
+instance Core.AWSRequest AddProfilePermission where
+  type
+    AWSResponse AddProfilePermission =
+      AddProfilePermissionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AddProfilePermissionResponse'
+            Prelude.<$> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AddProfilePermission where
+  hashWithSalt _salt AddProfilePermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileVersion
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` principal
+      `Prelude.hashWithSalt` statementId
+      `Prelude.hashWithSalt` profileName
+
+instance Prelude.NFData AddProfilePermission where
+  rnf AddProfilePermission' {..} =
+    Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf action
+      `Prelude.seq` Prelude.rnf principal
+      `Prelude.seq` Prelude.rnf statementId
+      `Prelude.seq` Prelude.rnf profileName
+
+instance Data.ToHeaders AddProfilePermission where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AddProfilePermission where
+  toJSON AddProfilePermission' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("profileVersion" Data..=)
+              Prelude.<$> profileVersion,
+            ("revisionId" Data..=) Prelude.<$> revisionId,
+            Prelude.Just ("action" Data..= action),
+            Prelude.Just ("principal" Data..= principal),
+            Prelude.Just ("statementId" Data..= statementId)
+          ]
+      )
+
+instance Data.ToPath AddProfilePermission where
+  toPath AddProfilePermission' {..} =
+    Prelude.mconcat
+      [ "/signing-profiles/",
+        Data.toBS profileName,
+        "/permissions"
+      ]
+
+instance Data.ToQuery AddProfilePermission where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAddProfilePermissionResponse' smart constructor.
+data AddProfilePermissionResponse = AddProfilePermissionResponse'
+  { -- | A unique identifier for the current profile revision.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddProfilePermissionResponse' 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:
+--
+-- 'revisionId', 'addProfilePermissionResponse_revisionId' - A unique identifier for the current profile revision.
+--
+-- 'httpStatus', 'addProfilePermissionResponse_httpStatus' - The response's http status code.
+newAddProfilePermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AddProfilePermissionResponse
+newAddProfilePermissionResponse pHttpStatus_ =
+  AddProfilePermissionResponse'
+    { revisionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A unique identifier for the current profile revision.
+addProfilePermissionResponse_revisionId :: Lens.Lens' AddProfilePermissionResponse (Prelude.Maybe Prelude.Text)
+addProfilePermissionResponse_revisionId = Lens.lens (\AddProfilePermissionResponse' {revisionId} -> revisionId) (\s@AddProfilePermissionResponse' {} a -> s {revisionId = a} :: AddProfilePermissionResponse)
+
+-- | The response's http status code.
+addProfilePermissionResponse_httpStatus :: Lens.Lens' AddProfilePermissionResponse Prelude.Int
+addProfilePermissionResponse_httpStatus = Lens.lens (\AddProfilePermissionResponse' {httpStatus} -> httpStatus) (\s@AddProfilePermissionResponse' {} a -> s {httpStatus = a} :: AddProfilePermissionResponse)
+
+instance Prelude.NFData AddProfilePermissionResponse where
+  rnf AddProfilePermissionResponse' {..} =
+    Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/CancelSigningProfile.hs b/gen/Amazonka/Signer/CancelSigningProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/CancelSigningProfile.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.CancelSigningProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the state of an @ACTIVE@ signing profile to @CANCELED@. A
+-- canceled profile is still viewable with the @ListSigningProfiles@
+-- operation, but it cannot perform new signing jobs, and is deleted two
+-- years after cancelation.
+module Amazonka.Signer.CancelSigningProfile
+  ( -- * Creating a Request
+    CancelSigningProfile (..),
+    newCancelSigningProfile,
+
+    -- * Request Lenses
+    cancelSigningProfile_profileName,
+
+    -- * Destructuring the Response
+    CancelSigningProfileResponse (..),
+    newCancelSigningProfileResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newCancelSigningProfile' smart constructor.
+data CancelSigningProfile = CancelSigningProfile'
+  { -- | The name of the signing profile to be canceled.
+    profileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSigningProfile' 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:
+--
+-- 'profileName', 'cancelSigningProfile_profileName' - The name of the signing profile to be canceled.
+newCancelSigningProfile ::
+  -- | 'profileName'
+  Prelude.Text ->
+  CancelSigningProfile
+newCancelSigningProfile pProfileName_ =
+  CancelSigningProfile' {profileName = pProfileName_}
+
+-- | The name of the signing profile to be canceled.
+cancelSigningProfile_profileName :: Lens.Lens' CancelSigningProfile Prelude.Text
+cancelSigningProfile_profileName = Lens.lens (\CancelSigningProfile' {profileName} -> profileName) (\s@CancelSigningProfile' {} a -> s {profileName = a} :: CancelSigningProfile)
+
+instance Core.AWSRequest CancelSigningProfile where
+  type
+    AWSResponse CancelSigningProfile =
+      CancelSigningProfileResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull CancelSigningProfileResponse'
+
+instance Prelude.Hashable CancelSigningProfile where
+  hashWithSalt _salt CancelSigningProfile' {..} =
+    _salt `Prelude.hashWithSalt` profileName
+
+instance Prelude.NFData CancelSigningProfile where
+  rnf CancelSigningProfile' {..} =
+    Prelude.rnf profileName
+
+instance Data.ToHeaders CancelSigningProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath CancelSigningProfile where
+  toPath CancelSigningProfile' {..} =
+    Prelude.mconcat
+      ["/signing-profiles/", Data.toBS profileName]
+
+instance Data.ToQuery CancelSigningProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelSigningProfileResponse' smart constructor.
+data CancelSigningProfileResponse = CancelSigningProfileResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSigningProfileResponse' 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.
+newCancelSigningProfileResponse ::
+  CancelSigningProfileResponse
+newCancelSigningProfileResponse =
+  CancelSigningProfileResponse'
+
+instance Prelude.NFData CancelSigningProfileResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Signer/DescribeSigningJob.hs b/gen/Amazonka/Signer/DescribeSigningJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/DescribeSigningJob.hs
@@ -0,0 +1,397 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.DescribeSigningJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about a specific code signing job. You specify the
+-- job by using the @jobId@ value that is returned by the StartSigningJob
+-- operation.
+module Amazonka.Signer.DescribeSigningJob
+  ( -- * Creating a Request
+    DescribeSigningJob (..),
+    newDescribeSigningJob,
+
+    -- * Request Lenses
+    describeSigningJob_jobId,
+
+    -- * Destructuring the Response
+    DescribeSigningJobResponse (..),
+    newDescribeSigningJobResponse,
+
+    -- * Response Lenses
+    describeSigningJobResponse_completedAt,
+    describeSigningJobResponse_createdAt,
+    describeSigningJobResponse_jobId,
+    describeSigningJobResponse_jobInvoker,
+    describeSigningJobResponse_jobOwner,
+    describeSigningJobResponse_overrides,
+    describeSigningJobResponse_platformDisplayName,
+    describeSigningJobResponse_platformId,
+    describeSigningJobResponse_profileName,
+    describeSigningJobResponse_profileVersion,
+    describeSigningJobResponse_requestedBy,
+    describeSigningJobResponse_revocationRecord,
+    describeSigningJobResponse_signatureExpiresAt,
+    describeSigningJobResponse_signedObject,
+    describeSigningJobResponse_signingMaterial,
+    describeSigningJobResponse_signingParameters,
+    describeSigningJobResponse_source,
+    describeSigningJobResponse_status,
+    describeSigningJobResponse_statusReason,
+    describeSigningJobResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newDescribeSigningJob' smart constructor.
+data DescribeSigningJob = DescribeSigningJob'
+  { -- | The ID of the signing job on input.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSigningJob' 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:
+--
+-- 'jobId', 'describeSigningJob_jobId' - The ID of the signing job on input.
+newDescribeSigningJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeSigningJob
+newDescribeSigningJob pJobId_ =
+  DescribeSigningJob' {jobId = pJobId_}
+
+-- | The ID of the signing job on input.
+describeSigningJob_jobId :: Lens.Lens' DescribeSigningJob Prelude.Text
+describeSigningJob_jobId = Lens.lens (\DescribeSigningJob' {jobId} -> jobId) (\s@DescribeSigningJob' {} a -> s {jobId = a} :: DescribeSigningJob)
+
+instance Core.AWSRequest DescribeSigningJob where
+  type
+    AWSResponse DescribeSigningJob =
+      DescribeSigningJobResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSigningJobResponse'
+            Prelude.<$> (x Data..?> "completedAt")
+            Prelude.<*> (x Data..?> "createdAt")
+            Prelude.<*> (x Data..?> "jobId")
+            Prelude.<*> (x Data..?> "jobInvoker")
+            Prelude.<*> (x Data..?> "jobOwner")
+            Prelude.<*> (x Data..?> "overrides")
+            Prelude.<*> (x Data..?> "platformDisplayName")
+            Prelude.<*> (x Data..?> "platformId")
+            Prelude.<*> (x Data..?> "profileName")
+            Prelude.<*> (x Data..?> "profileVersion")
+            Prelude.<*> (x Data..?> "requestedBy")
+            Prelude.<*> (x Data..?> "revocationRecord")
+            Prelude.<*> (x Data..?> "signatureExpiresAt")
+            Prelude.<*> (x Data..?> "signedObject")
+            Prelude.<*> (x Data..?> "signingMaterial")
+            Prelude.<*> ( x
+                            Data..?> "signingParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "source")
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusReason")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSigningJob where
+  hashWithSalt _salt DescribeSigningJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeSigningJob where
+  rnf DescribeSigningJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeSigningJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DescribeSigningJob where
+  toPath DescribeSigningJob' {..} =
+    Prelude.mconcat ["/signing-jobs/", Data.toBS jobId]
+
+instance Data.ToQuery DescribeSigningJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSigningJobResponse' smart constructor.
+data DescribeSigningJobResponse = DescribeSigningJobResponse'
+  { -- | Date and time that the signing job was completed.
+    completedAt :: Prelude.Maybe Data.POSIX,
+    -- | Date and time that the signing job was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the signing job on output.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The IAM entity that initiated the signing job.
+    jobInvoker :: Prelude.Maybe Prelude.Text,
+    -- | The AWS account ID of the job owner.
+    jobOwner :: Prelude.Maybe Prelude.Text,
+    -- | A list of any overrides that were applied to the signing operation.
+    overrides :: Prelude.Maybe SigningPlatformOverrides,
+    -- | A human-readable name for the signing platform associated with the
+    -- signing job.
+    platformDisplayName :: Prelude.Maybe Prelude.Text,
+    -- | The microcontroller platform to which your signed code image will be
+    -- distributed.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the profile that initiated the signing operation.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the signing profile used to initiate the signing job.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | The IAM principal that requested the signing job.
+    requestedBy :: Prelude.Maybe Prelude.Text,
+    -- | A revocation record if the signature generated by the signing job has
+    -- been revoked. Contains a timestamp and the ID of the IAM entity that
+    -- revoked the signature.
+    revocationRecord :: Prelude.Maybe SigningJobRevocationRecord,
+    -- | Thr expiration timestamp for the signature generated by the signing job.
+    signatureExpiresAt :: Prelude.Maybe Data.POSIX,
+    -- | Name of the S3 bucket where the signed code image is saved by code
+    -- signing.
+    signedObject :: Prelude.Maybe SignedObject,
+    -- | The Amazon Resource Name (ARN) of your code signing certificate.
+    signingMaterial :: Prelude.Maybe SigningMaterial,
+    -- | Map of user-assigned key-value pairs used during signing. These values
+    -- contain any information that you specified for use in your signing job.
+    signingParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The object that contains the name of your S3 bucket or your raw code.
+    source :: Prelude.Maybe Source,
+    -- | Status of the signing job.
+    status :: Prelude.Maybe SigningStatus,
+    -- | String value that contains the status reason.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSigningJobResponse' 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:
+--
+-- 'completedAt', 'describeSigningJobResponse_completedAt' - Date and time that the signing job was completed.
+--
+-- 'createdAt', 'describeSigningJobResponse_createdAt' - Date and time that the signing job was created.
+--
+-- 'jobId', 'describeSigningJobResponse_jobId' - The ID of the signing job on output.
+--
+-- 'jobInvoker', 'describeSigningJobResponse_jobInvoker' - The IAM entity that initiated the signing job.
+--
+-- 'jobOwner', 'describeSigningJobResponse_jobOwner' - The AWS account ID of the job owner.
+--
+-- 'overrides', 'describeSigningJobResponse_overrides' - A list of any overrides that were applied to the signing operation.
+--
+-- 'platformDisplayName', 'describeSigningJobResponse_platformDisplayName' - A human-readable name for the signing platform associated with the
+-- signing job.
+--
+-- 'platformId', 'describeSigningJobResponse_platformId' - The microcontroller platform to which your signed code image will be
+-- distributed.
+--
+-- 'profileName', 'describeSigningJobResponse_profileName' - The name of the profile that initiated the signing operation.
+--
+-- 'profileVersion', 'describeSigningJobResponse_profileVersion' - The version of the signing profile used to initiate the signing job.
+--
+-- 'requestedBy', 'describeSigningJobResponse_requestedBy' - The IAM principal that requested the signing job.
+--
+-- 'revocationRecord', 'describeSigningJobResponse_revocationRecord' - A revocation record if the signature generated by the signing job has
+-- been revoked. Contains a timestamp and the ID of the IAM entity that
+-- revoked the signature.
+--
+-- 'signatureExpiresAt', 'describeSigningJobResponse_signatureExpiresAt' - Thr expiration timestamp for the signature generated by the signing job.
+--
+-- 'signedObject', 'describeSigningJobResponse_signedObject' - Name of the S3 bucket where the signed code image is saved by code
+-- signing.
+--
+-- 'signingMaterial', 'describeSigningJobResponse_signingMaterial' - The Amazon Resource Name (ARN) of your code signing certificate.
+--
+-- 'signingParameters', 'describeSigningJobResponse_signingParameters' - Map of user-assigned key-value pairs used during signing. These values
+-- contain any information that you specified for use in your signing job.
+--
+-- 'source', 'describeSigningJobResponse_source' - The object that contains the name of your S3 bucket or your raw code.
+--
+-- 'status', 'describeSigningJobResponse_status' - Status of the signing job.
+--
+-- 'statusReason', 'describeSigningJobResponse_statusReason' - String value that contains the status reason.
+--
+-- 'httpStatus', 'describeSigningJobResponse_httpStatus' - The response's http status code.
+newDescribeSigningJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSigningJobResponse
+newDescribeSigningJobResponse pHttpStatus_ =
+  DescribeSigningJobResponse'
+    { completedAt =
+        Prelude.Nothing,
+      createdAt = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobInvoker = Prelude.Nothing,
+      jobOwner = Prelude.Nothing,
+      overrides = Prelude.Nothing,
+      platformDisplayName = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      profileVersion = Prelude.Nothing,
+      requestedBy = Prelude.Nothing,
+      revocationRecord = Prelude.Nothing,
+      signatureExpiresAt = Prelude.Nothing,
+      signedObject = Prelude.Nothing,
+      signingMaterial = Prelude.Nothing,
+      signingParameters = Prelude.Nothing,
+      source = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusReason = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Date and time that the signing job was completed.
+describeSigningJobResponse_completedAt :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeSigningJobResponse_completedAt = Lens.lens (\DescribeSigningJobResponse' {completedAt} -> completedAt) (\s@DescribeSigningJobResponse' {} a -> s {completedAt = a} :: DescribeSigningJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Date and time that the signing job was created.
+describeSigningJobResponse_createdAt :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeSigningJobResponse_createdAt = Lens.lens (\DescribeSigningJobResponse' {createdAt} -> createdAt) (\s@DescribeSigningJobResponse' {} a -> s {createdAt = a} :: DescribeSigningJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the signing job on output.
+describeSigningJobResponse_jobId :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_jobId = Lens.lens (\DescribeSigningJobResponse' {jobId} -> jobId) (\s@DescribeSigningJobResponse' {} a -> s {jobId = a} :: DescribeSigningJobResponse)
+
+-- | The IAM entity that initiated the signing job.
+describeSigningJobResponse_jobInvoker :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_jobInvoker = Lens.lens (\DescribeSigningJobResponse' {jobInvoker} -> jobInvoker) (\s@DescribeSigningJobResponse' {} a -> s {jobInvoker = a} :: DescribeSigningJobResponse)
+
+-- | The AWS account ID of the job owner.
+describeSigningJobResponse_jobOwner :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_jobOwner = Lens.lens (\DescribeSigningJobResponse' {jobOwner} -> jobOwner) (\s@DescribeSigningJobResponse' {} a -> s {jobOwner = a} :: DescribeSigningJobResponse)
+
+-- | A list of any overrides that were applied to the signing operation.
+describeSigningJobResponse_overrides :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe SigningPlatformOverrides)
+describeSigningJobResponse_overrides = Lens.lens (\DescribeSigningJobResponse' {overrides} -> overrides) (\s@DescribeSigningJobResponse' {} a -> s {overrides = a} :: DescribeSigningJobResponse)
+
+-- | A human-readable name for the signing platform associated with the
+-- signing job.
+describeSigningJobResponse_platformDisplayName :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_platformDisplayName = Lens.lens (\DescribeSigningJobResponse' {platformDisplayName} -> platformDisplayName) (\s@DescribeSigningJobResponse' {} a -> s {platformDisplayName = a} :: DescribeSigningJobResponse)
+
+-- | The microcontroller platform to which your signed code image will be
+-- distributed.
+describeSigningJobResponse_platformId :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_platformId = Lens.lens (\DescribeSigningJobResponse' {platformId} -> platformId) (\s@DescribeSigningJobResponse' {} a -> s {platformId = a} :: DescribeSigningJobResponse)
+
+-- | The name of the profile that initiated the signing operation.
+describeSigningJobResponse_profileName :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_profileName = Lens.lens (\DescribeSigningJobResponse' {profileName} -> profileName) (\s@DescribeSigningJobResponse' {} a -> s {profileName = a} :: DescribeSigningJobResponse)
+
+-- | The version of the signing profile used to initiate the signing job.
+describeSigningJobResponse_profileVersion :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_profileVersion = Lens.lens (\DescribeSigningJobResponse' {profileVersion} -> profileVersion) (\s@DescribeSigningJobResponse' {} a -> s {profileVersion = a} :: DescribeSigningJobResponse)
+
+-- | The IAM principal that requested the signing job.
+describeSigningJobResponse_requestedBy :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_requestedBy = Lens.lens (\DescribeSigningJobResponse' {requestedBy} -> requestedBy) (\s@DescribeSigningJobResponse' {} a -> s {requestedBy = a} :: DescribeSigningJobResponse)
+
+-- | A revocation record if the signature generated by the signing job has
+-- been revoked. Contains a timestamp and the ID of the IAM entity that
+-- revoked the signature.
+describeSigningJobResponse_revocationRecord :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe SigningJobRevocationRecord)
+describeSigningJobResponse_revocationRecord = Lens.lens (\DescribeSigningJobResponse' {revocationRecord} -> revocationRecord) (\s@DescribeSigningJobResponse' {} a -> s {revocationRecord = a} :: DescribeSigningJobResponse)
+
+-- | Thr expiration timestamp for the signature generated by the signing job.
+describeSigningJobResponse_signatureExpiresAt :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.UTCTime)
+describeSigningJobResponse_signatureExpiresAt = Lens.lens (\DescribeSigningJobResponse' {signatureExpiresAt} -> signatureExpiresAt) (\s@DescribeSigningJobResponse' {} a -> s {signatureExpiresAt = a} :: DescribeSigningJobResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Name of the S3 bucket where the signed code image is saved by code
+-- signing.
+describeSigningJobResponse_signedObject :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe SignedObject)
+describeSigningJobResponse_signedObject = Lens.lens (\DescribeSigningJobResponse' {signedObject} -> signedObject) (\s@DescribeSigningJobResponse' {} a -> s {signedObject = a} :: DescribeSigningJobResponse)
+
+-- | The Amazon Resource Name (ARN) of your code signing certificate.
+describeSigningJobResponse_signingMaterial :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe SigningMaterial)
+describeSigningJobResponse_signingMaterial = Lens.lens (\DescribeSigningJobResponse' {signingMaterial} -> signingMaterial) (\s@DescribeSigningJobResponse' {} a -> s {signingMaterial = a} :: DescribeSigningJobResponse)
+
+-- | Map of user-assigned key-value pairs used during signing. These values
+-- contain any information that you specified for use in your signing job.
+describeSigningJobResponse_signingParameters :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+describeSigningJobResponse_signingParameters = Lens.lens (\DescribeSigningJobResponse' {signingParameters} -> signingParameters) (\s@DescribeSigningJobResponse' {} a -> s {signingParameters = a} :: DescribeSigningJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The object that contains the name of your S3 bucket or your raw code.
+describeSigningJobResponse_source :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Source)
+describeSigningJobResponse_source = Lens.lens (\DescribeSigningJobResponse' {source} -> source) (\s@DescribeSigningJobResponse' {} a -> s {source = a} :: DescribeSigningJobResponse)
+
+-- | Status of the signing job.
+describeSigningJobResponse_status :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe SigningStatus)
+describeSigningJobResponse_status = Lens.lens (\DescribeSigningJobResponse' {status} -> status) (\s@DescribeSigningJobResponse' {} a -> s {status = a} :: DescribeSigningJobResponse)
+
+-- | String value that contains the status reason.
+describeSigningJobResponse_statusReason :: Lens.Lens' DescribeSigningJobResponse (Prelude.Maybe Prelude.Text)
+describeSigningJobResponse_statusReason = Lens.lens (\DescribeSigningJobResponse' {statusReason} -> statusReason) (\s@DescribeSigningJobResponse' {} a -> s {statusReason = a} :: DescribeSigningJobResponse)
+
+-- | The response's http status code.
+describeSigningJobResponse_httpStatus :: Lens.Lens' DescribeSigningJobResponse Prelude.Int
+describeSigningJobResponse_httpStatus = Lens.lens (\DescribeSigningJobResponse' {httpStatus} -> httpStatus) (\s@DescribeSigningJobResponse' {} a -> s {httpStatus = a} :: DescribeSigningJobResponse)
+
+instance Prelude.NFData DescribeSigningJobResponse where
+  rnf DescribeSigningJobResponse' {..} =
+    Prelude.rnf completedAt
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobInvoker
+      `Prelude.seq` Prelude.rnf jobOwner
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf platformDisplayName
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf requestedBy
+      `Prelude.seq` Prelude.rnf revocationRecord
+      `Prelude.seq` Prelude.rnf signatureExpiresAt
+      `Prelude.seq` Prelude.rnf signedObject
+      `Prelude.seq` Prelude.rnf signingMaterial
+      `Prelude.seq` Prelude.rnf signingParameters
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/GetSigningPlatform.hs b/gen/Amazonka/Signer/GetSigningPlatform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/GetSigningPlatform.hs
@@ -0,0 +1,261 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.GetSigningPlatform
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information on a specific signing platform.
+module Amazonka.Signer.GetSigningPlatform
+  ( -- * Creating a Request
+    GetSigningPlatform (..),
+    newGetSigningPlatform,
+
+    -- * Request Lenses
+    getSigningPlatform_platformId,
+
+    -- * Destructuring the Response
+    GetSigningPlatformResponse (..),
+    newGetSigningPlatformResponse,
+
+    -- * Response Lenses
+    getSigningPlatformResponse_category,
+    getSigningPlatformResponse_displayName,
+    getSigningPlatformResponse_maxSizeInMB,
+    getSigningPlatformResponse_partner,
+    getSigningPlatformResponse_platformId,
+    getSigningPlatformResponse_revocationSupported,
+    getSigningPlatformResponse_signingConfiguration,
+    getSigningPlatformResponse_signingImageFormat,
+    getSigningPlatformResponse_target,
+    getSigningPlatformResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newGetSigningPlatform' smart constructor.
+data GetSigningPlatform = GetSigningPlatform'
+  { -- | The ID of the target signing platform.
+    platformId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSigningPlatform' 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:
+--
+-- 'platformId', 'getSigningPlatform_platformId' - The ID of the target signing platform.
+newGetSigningPlatform ::
+  -- | 'platformId'
+  Prelude.Text ->
+  GetSigningPlatform
+newGetSigningPlatform pPlatformId_ =
+  GetSigningPlatform' {platformId = pPlatformId_}
+
+-- | The ID of the target signing platform.
+getSigningPlatform_platformId :: Lens.Lens' GetSigningPlatform Prelude.Text
+getSigningPlatform_platformId = Lens.lens (\GetSigningPlatform' {platformId} -> platformId) (\s@GetSigningPlatform' {} a -> s {platformId = a} :: GetSigningPlatform)
+
+instance Core.AWSRequest GetSigningPlatform where
+  type
+    AWSResponse GetSigningPlatform =
+      GetSigningPlatformResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSigningPlatformResponse'
+            Prelude.<$> (x Data..?> "category")
+            Prelude.<*> (x Data..?> "displayName")
+            Prelude.<*> (x Data..?> "maxSizeInMB")
+            Prelude.<*> (x Data..?> "partner")
+            Prelude.<*> (x Data..?> "platformId")
+            Prelude.<*> (x Data..?> "revocationSupported")
+            Prelude.<*> (x Data..?> "signingConfiguration")
+            Prelude.<*> (x Data..?> "signingImageFormat")
+            Prelude.<*> (x Data..?> "target")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSigningPlatform where
+  hashWithSalt _salt GetSigningPlatform' {..} =
+    _salt `Prelude.hashWithSalt` platformId
+
+instance Prelude.NFData GetSigningPlatform where
+  rnf GetSigningPlatform' {..} = Prelude.rnf platformId
+
+instance Data.ToHeaders GetSigningPlatform where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSigningPlatform where
+  toPath GetSigningPlatform' {..} =
+    Prelude.mconcat
+      ["/signing-platforms/", Data.toBS platformId]
+
+instance Data.ToQuery GetSigningPlatform where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSigningPlatformResponse' smart constructor.
+data GetSigningPlatformResponse = GetSigningPlatformResponse'
+  { -- | The category type of the target signing platform.
+    category :: Prelude.Maybe Category,
+    -- | The display name of the target signing platform.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum size (in MB) of the payload that can be signed by the target
+    -- platform.
+    maxSizeInMB :: Prelude.Maybe Prelude.Int,
+    -- | A list of partner entities that use the target signing platform.
+    partner :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the target signing platform.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | A flag indicating whether signatures generated for the signing platform
+    -- can be revoked.
+    revocationSupported :: Prelude.Maybe Prelude.Bool,
+    -- | A list of configurations applied to the target platform at signing.
+    signingConfiguration :: Prelude.Maybe SigningConfiguration,
+    -- | The format of the target platform\'s signing image.
+    signingImageFormat :: Prelude.Maybe SigningImageFormat,
+    -- | The validation template that is used by the target signing platform.
+    target :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSigningPlatformResponse' 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:
+--
+-- 'category', 'getSigningPlatformResponse_category' - The category type of the target signing platform.
+--
+-- 'displayName', 'getSigningPlatformResponse_displayName' - The display name of the target signing platform.
+--
+-- 'maxSizeInMB', 'getSigningPlatformResponse_maxSizeInMB' - The maximum size (in MB) of the payload that can be signed by the target
+-- platform.
+--
+-- 'partner', 'getSigningPlatformResponse_partner' - A list of partner entities that use the target signing platform.
+--
+-- 'platformId', 'getSigningPlatformResponse_platformId' - The ID of the target signing platform.
+--
+-- 'revocationSupported', 'getSigningPlatformResponse_revocationSupported' - A flag indicating whether signatures generated for the signing platform
+-- can be revoked.
+--
+-- 'signingConfiguration', 'getSigningPlatformResponse_signingConfiguration' - A list of configurations applied to the target platform at signing.
+--
+-- 'signingImageFormat', 'getSigningPlatformResponse_signingImageFormat' - The format of the target platform\'s signing image.
+--
+-- 'target', 'getSigningPlatformResponse_target' - The validation template that is used by the target signing platform.
+--
+-- 'httpStatus', 'getSigningPlatformResponse_httpStatus' - The response's http status code.
+newGetSigningPlatformResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSigningPlatformResponse
+newGetSigningPlatformResponse pHttpStatus_ =
+  GetSigningPlatformResponse'
+    { category =
+        Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      maxSizeInMB = Prelude.Nothing,
+      partner = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      revocationSupported = Prelude.Nothing,
+      signingConfiguration = Prelude.Nothing,
+      signingImageFormat = Prelude.Nothing,
+      target = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The category type of the target signing platform.
+getSigningPlatformResponse_category :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Category)
+getSigningPlatformResponse_category = Lens.lens (\GetSigningPlatformResponse' {category} -> category) (\s@GetSigningPlatformResponse' {} a -> s {category = a} :: GetSigningPlatformResponse)
+
+-- | The display name of the target signing platform.
+getSigningPlatformResponse_displayName :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Prelude.Text)
+getSigningPlatformResponse_displayName = Lens.lens (\GetSigningPlatformResponse' {displayName} -> displayName) (\s@GetSigningPlatformResponse' {} a -> s {displayName = a} :: GetSigningPlatformResponse)
+
+-- | The maximum size (in MB) of the payload that can be signed by the target
+-- platform.
+getSigningPlatformResponse_maxSizeInMB :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Prelude.Int)
+getSigningPlatformResponse_maxSizeInMB = Lens.lens (\GetSigningPlatformResponse' {maxSizeInMB} -> maxSizeInMB) (\s@GetSigningPlatformResponse' {} a -> s {maxSizeInMB = a} :: GetSigningPlatformResponse)
+
+-- | A list of partner entities that use the target signing platform.
+getSigningPlatformResponse_partner :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Prelude.Text)
+getSigningPlatformResponse_partner = Lens.lens (\GetSigningPlatformResponse' {partner} -> partner) (\s@GetSigningPlatformResponse' {} a -> s {partner = a} :: GetSigningPlatformResponse)
+
+-- | The ID of the target signing platform.
+getSigningPlatformResponse_platformId :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Prelude.Text)
+getSigningPlatformResponse_platformId = Lens.lens (\GetSigningPlatformResponse' {platformId} -> platformId) (\s@GetSigningPlatformResponse' {} a -> s {platformId = a} :: GetSigningPlatformResponse)
+
+-- | A flag indicating whether signatures generated for the signing platform
+-- can be revoked.
+getSigningPlatformResponse_revocationSupported :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Prelude.Bool)
+getSigningPlatformResponse_revocationSupported = Lens.lens (\GetSigningPlatformResponse' {revocationSupported} -> revocationSupported) (\s@GetSigningPlatformResponse' {} a -> s {revocationSupported = a} :: GetSigningPlatformResponse)
+
+-- | A list of configurations applied to the target platform at signing.
+getSigningPlatformResponse_signingConfiguration :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe SigningConfiguration)
+getSigningPlatformResponse_signingConfiguration = Lens.lens (\GetSigningPlatformResponse' {signingConfiguration} -> signingConfiguration) (\s@GetSigningPlatformResponse' {} a -> s {signingConfiguration = a} :: GetSigningPlatformResponse)
+
+-- | The format of the target platform\'s signing image.
+getSigningPlatformResponse_signingImageFormat :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe SigningImageFormat)
+getSigningPlatformResponse_signingImageFormat = Lens.lens (\GetSigningPlatformResponse' {signingImageFormat} -> signingImageFormat) (\s@GetSigningPlatformResponse' {} a -> s {signingImageFormat = a} :: GetSigningPlatformResponse)
+
+-- | The validation template that is used by the target signing platform.
+getSigningPlatformResponse_target :: Lens.Lens' GetSigningPlatformResponse (Prelude.Maybe Prelude.Text)
+getSigningPlatformResponse_target = Lens.lens (\GetSigningPlatformResponse' {target} -> target) (\s@GetSigningPlatformResponse' {} a -> s {target = a} :: GetSigningPlatformResponse)
+
+-- | The response's http status code.
+getSigningPlatformResponse_httpStatus :: Lens.Lens' GetSigningPlatformResponse Prelude.Int
+getSigningPlatformResponse_httpStatus = Lens.lens (\GetSigningPlatformResponse' {httpStatus} -> httpStatus) (\s@GetSigningPlatformResponse' {} a -> s {httpStatus = a} :: GetSigningPlatformResponse)
+
+instance Prelude.NFData GetSigningPlatformResponse where
+  rnf GetSigningPlatformResponse' {..} =
+    Prelude.rnf category
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf maxSizeInMB
+      `Prelude.seq` Prelude.rnf partner
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf revocationSupported
+      `Prelude.seq` Prelude.rnf signingConfiguration
+      `Prelude.seq` Prelude.rnf signingImageFormat
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/GetSigningProfile.hs b/gen/Amazonka/Signer/GetSigningProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/GetSigningProfile.hs
@@ -0,0 +1,345 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.GetSigningProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information on a specific signing profile.
+module Amazonka.Signer.GetSigningProfile
+  ( -- * Creating a Request
+    GetSigningProfile (..),
+    newGetSigningProfile,
+
+    -- * Request Lenses
+    getSigningProfile_profileOwner,
+    getSigningProfile_profileName,
+
+    -- * Destructuring the Response
+    GetSigningProfileResponse (..),
+    newGetSigningProfileResponse,
+
+    -- * Response Lenses
+    getSigningProfileResponse_arn,
+    getSigningProfileResponse_overrides,
+    getSigningProfileResponse_platformDisplayName,
+    getSigningProfileResponse_platformId,
+    getSigningProfileResponse_profileName,
+    getSigningProfileResponse_profileVersion,
+    getSigningProfileResponse_profileVersionArn,
+    getSigningProfileResponse_revocationRecord,
+    getSigningProfileResponse_signatureValidityPeriod,
+    getSigningProfileResponse_signingMaterial,
+    getSigningProfileResponse_signingParameters,
+    getSigningProfileResponse_status,
+    getSigningProfileResponse_statusReason,
+    getSigningProfileResponse_tags,
+    getSigningProfileResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newGetSigningProfile' smart constructor.
+data GetSigningProfile = GetSigningProfile'
+  { -- | The AWS account ID of the profile owner.
+    profileOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of the target signing profile.
+    profileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSigningProfile' 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:
+--
+-- 'profileOwner', 'getSigningProfile_profileOwner' - The AWS account ID of the profile owner.
+--
+-- 'profileName', 'getSigningProfile_profileName' - The name of the target signing profile.
+newGetSigningProfile ::
+  -- | 'profileName'
+  Prelude.Text ->
+  GetSigningProfile
+newGetSigningProfile pProfileName_ =
+  GetSigningProfile'
+    { profileOwner = Prelude.Nothing,
+      profileName = pProfileName_
+    }
+
+-- | The AWS account ID of the profile owner.
+getSigningProfile_profileOwner :: Lens.Lens' GetSigningProfile (Prelude.Maybe Prelude.Text)
+getSigningProfile_profileOwner = Lens.lens (\GetSigningProfile' {profileOwner} -> profileOwner) (\s@GetSigningProfile' {} a -> s {profileOwner = a} :: GetSigningProfile)
+
+-- | The name of the target signing profile.
+getSigningProfile_profileName :: Lens.Lens' GetSigningProfile Prelude.Text
+getSigningProfile_profileName = Lens.lens (\GetSigningProfile' {profileName} -> profileName) (\s@GetSigningProfile' {} a -> s {profileName = a} :: GetSigningProfile)
+
+instance Core.AWSRequest GetSigningProfile where
+  type
+    AWSResponse GetSigningProfile =
+      GetSigningProfileResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSigningProfileResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "overrides")
+            Prelude.<*> (x Data..?> "platformDisplayName")
+            Prelude.<*> (x Data..?> "platformId")
+            Prelude.<*> (x Data..?> "profileName")
+            Prelude.<*> (x Data..?> "profileVersion")
+            Prelude.<*> (x Data..?> "profileVersionArn")
+            Prelude.<*> (x Data..?> "revocationRecord")
+            Prelude.<*> (x Data..?> "signatureValidityPeriod")
+            Prelude.<*> (x Data..?> "signingMaterial")
+            Prelude.<*> ( x
+                            Data..?> "signingParameters"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "status")
+            Prelude.<*> (x Data..?> "statusReason")
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSigningProfile where
+  hashWithSalt _salt GetSigningProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileOwner
+      `Prelude.hashWithSalt` profileName
+
+instance Prelude.NFData GetSigningProfile where
+  rnf GetSigningProfile' {..} =
+    Prelude.rnf profileOwner
+      `Prelude.seq` Prelude.rnf profileName
+
+instance Data.ToHeaders GetSigningProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetSigningProfile where
+  toPath GetSigningProfile' {..} =
+    Prelude.mconcat
+      ["/signing-profiles/", Data.toBS profileName]
+
+instance Data.ToQuery GetSigningProfile where
+  toQuery GetSigningProfile' {..} =
+    Prelude.mconcat
+      ["profileOwner" Data.=: profileOwner]
+
+-- | /See:/ 'newGetSigningProfileResponse' smart constructor.
+data GetSigningProfileResponse = GetSigningProfileResponse'
+  { -- | The Amazon Resource Name (ARN) for the signing profile.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | A list of overrides applied by the target signing profile for signing
+    -- operations.
+    overrides :: Prelude.Maybe SigningPlatformOverrides,
+    -- | A human-readable name for the signing platform associated with the
+    -- signing profile.
+    platformDisplayName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the platform that is used by the target signing profile.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the target signing profile.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The current version of the signing profile.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | The signing profile ARN, including the profile version.
+    profileVersionArn :: Prelude.Maybe Prelude.Text,
+    revocationRecord :: Prelude.Maybe SigningProfileRevocationRecord,
+    signatureValidityPeriod :: Prelude.Maybe SignatureValidityPeriod,
+    -- | The ARN of the certificate that the target profile uses for signing
+    -- operations.
+    signingMaterial :: Prelude.Maybe SigningMaterial,
+    -- | A map of key-value pairs for signing operations that is attached to the
+    -- target signing profile.
+    signingParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The status of the target signing profile.
+    status :: Prelude.Maybe SigningProfileStatus,
+    -- | Reason for the status of the target signing profile.
+    statusReason :: Prelude.Maybe Prelude.Text,
+    -- | A list of tags associated with the signing profile.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSigningProfileResponse' 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:
+--
+-- 'arn', 'getSigningProfileResponse_arn' - The Amazon Resource Name (ARN) for the signing profile.
+--
+-- 'overrides', 'getSigningProfileResponse_overrides' - A list of overrides applied by the target signing profile for signing
+-- operations.
+--
+-- 'platformDisplayName', 'getSigningProfileResponse_platformDisplayName' - A human-readable name for the signing platform associated with the
+-- signing profile.
+--
+-- 'platformId', 'getSigningProfileResponse_platformId' - The ID of the platform that is used by the target signing profile.
+--
+-- 'profileName', 'getSigningProfileResponse_profileName' - The name of the target signing profile.
+--
+-- 'profileVersion', 'getSigningProfileResponse_profileVersion' - The current version of the signing profile.
+--
+-- 'profileVersionArn', 'getSigningProfileResponse_profileVersionArn' - The signing profile ARN, including the profile version.
+--
+-- 'revocationRecord', 'getSigningProfileResponse_revocationRecord' - Undocumented member.
+--
+-- 'signatureValidityPeriod', 'getSigningProfileResponse_signatureValidityPeriod' - Undocumented member.
+--
+-- 'signingMaterial', 'getSigningProfileResponse_signingMaterial' - The ARN of the certificate that the target profile uses for signing
+-- operations.
+--
+-- 'signingParameters', 'getSigningProfileResponse_signingParameters' - A map of key-value pairs for signing operations that is attached to the
+-- target signing profile.
+--
+-- 'status', 'getSigningProfileResponse_status' - The status of the target signing profile.
+--
+-- 'statusReason', 'getSigningProfileResponse_statusReason' - Reason for the status of the target signing profile.
+--
+-- 'tags', 'getSigningProfileResponse_tags' - A list of tags associated with the signing profile.
+--
+-- 'httpStatus', 'getSigningProfileResponse_httpStatus' - The response's http status code.
+newGetSigningProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSigningProfileResponse
+newGetSigningProfileResponse pHttpStatus_ =
+  GetSigningProfileResponse'
+    { arn = Prelude.Nothing,
+      overrides = Prelude.Nothing,
+      platformDisplayName = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      profileVersion = Prelude.Nothing,
+      profileVersionArn = Prelude.Nothing,
+      revocationRecord = Prelude.Nothing,
+      signatureValidityPeriod = Prelude.Nothing,
+      signingMaterial = Prelude.Nothing,
+      signingParameters = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusReason = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) for the signing profile.
+getSigningProfileResponse_arn :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_arn = Lens.lens (\GetSigningProfileResponse' {arn} -> arn) (\s@GetSigningProfileResponse' {} a -> s {arn = a} :: GetSigningProfileResponse)
+
+-- | A list of overrides applied by the target signing profile for signing
+-- operations.
+getSigningProfileResponse_overrides :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe SigningPlatformOverrides)
+getSigningProfileResponse_overrides = Lens.lens (\GetSigningProfileResponse' {overrides} -> overrides) (\s@GetSigningProfileResponse' {} a -> s {overrides = a} :: GetSigningProfileResponse)
+
+-- | A human-readable name for the signing platform associated with the
+-- signing profile.
+getSigningProfileResponse_platformDisplayName :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_platformDisplayName = Lens.lens (\GetSigningProfileResponse' {platformDisplayName} -> platformDisplayName) (\s@GetSigningProfileResponse' {} a -> s {platformDisplayName = a} :: GetSigningProfileResponse)
+
+-- | The ID of the platform that is used by the target signing profile.
+getSigningProfileResponse_platformId :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_platformId = Lens.lens (\GetSigningProfileResponse' {platformId} -> platformId) (\s@GetSigningProfileResponse' {} a -> s {platformId = a} :: GetSigningProfileResponse)
+
+-- | The name of the target signing profile.
+getSigningProfileResponse_profileName :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_profileName = Lens.lens (\GetSigningProfileResponse' {profileName} -> profileName) (\s@GetSigningProfileResponse' {} a -> s {profileName = a} :: GetSigningProfileResponse)
+
+-- | The current version of the signing profile.
+getSigningProfileResponse_profileVersion :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_profileVersion = Lens.lens (\GetSigningProfileResponse' {profileVersion} -> profileVersion) (\s@GetSigningProfileResponse' {} a -> s {profileVersion = a} :: GetSigningProfileResponse)
+
+-- | The signing profile ARN, including the profile version.
+getSigningProfileResponse_profileVersionArn :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_profileVersionArn = Lens.lens (\GetSigningProfileResponse' {profileVersionArn} -> profileVersionArn) (\s@GetSigningProfileResponse' {} a -> s {profileVersionArn = a} :: GetSigningProfileResponse)
+
+-- | Undocumented member.
+getSigningProfileResponse_revocationRecord :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe SigningProfileRevocationRecord)
+getSigningProfileResponse_revocationRecord = Lens.lens (\GetSigningProfileResponse' {revocationRecord} -> revocationRecord) (\s@GetSigningProfileResponse' {} a -> s {revocationRecord = a} :: GetSigningProfileResponse)
+
+-- | Undocumented member.
+getSigningProfileResponse_signatureValidityPeriod :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe SignatureValidityPeriod)
+getSigningProfileResponse_signatureValidityPeriod = Lens.lens (\GetSigningProfileResponse' {signatureValidityPeriod} -> signatureValidityPeriod) (\s@GetSigningProfileResponse' {} a -> s {signatureValidityPeriod = a} :: GetSigningProfileResponse)
+
+-- | The ARN of the certificate that the target profile uses for signing
+-- operations.
+getSigningProfileResponse_signingMaterial :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe SigningMaterial)
+getSigningProfileResponse_signingMaterial = Lens.lens (\GetSigningProfileResponse' {signingMaterial} -> signingMaterial) (\s@GetSigningProfileResponse' {} a -> s {signingMaterial = a} :: GetSigningProfileResponse)
+
+-- | A map of key-value pairs for signing operations that is attached to the
+-- target signing profile.
+getSigningProfileResponse_signingParameters :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getSigningProfileResponse_signingParameters = Lens.lens (\GetSigningProfileResponse' {signingParameters} -> signingParameters) (\s@GetSigningProfileResponse' {} a -> s {signingParameters = a} :: GetSigningProfileResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the target signing profile.
+getSigningProfileResponse_status :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe SigningProfileStatus)
+getSigningProfileResponse_status = Lens.lens (\GetSigningProfileResponse' {status} -> status) (\s@GetSigningProfileResponse' {} a -> s {status = a} :: GetSigningProfileResponse)
+
+-- | Reason for the status of the target signing profile.
+getSigningProfileResponse_statusReason :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe Prelude.Text)
+getSigningProfileResponse_statusReason = Lens.lens (\GetSigningProfileResponse' {statusReason} -> statusReason) (\s@GetSigningProfileResponse' {} a -> s {statusReason = a} :: GetSigningProfileResponse)
+
+-- | A list of tags associated with the signing profile.
+getSigningProfileResponse_tags :: Lens.Lens' GetSigningProfileResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+getSigningProfileResponse_tags = Lens.lens (\GetSigningProfileResponse' {tags} -> tags) (\s@GetSigningProfileResponse' {} a -> s {tags = a} :: GetSigningProfileResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getSigningProfileResponse_httpStatus :: Lens.Lens' GetSigningProfileResponse Prelude.Int
+getSigningProfileResponse_httpStatus = Lens.lens (\GetSigningProfileResponse' {httpStatus} -> httpStatus) (\s@GetSigningProfileResponse' {} a -> s {httpStatus = a} :: GetSigningProfileResponse)
+
+instance Prelude.NFData GetSigningProfileResponse where
+  rnf GetSigningProfileResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf platformDisplayName
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf profileVersionArn
+      `Prelude.seq` Prelude.rnf revocationRecord
+      `Prelude.seq` Prelude.rnf signatureValidityPeriod
+      `Prelude.seq` Prelude.rnf signingMaterial
+      `Prelude.seq` Prelude.rnf signingParameters
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusReason
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/Lens.hs b/gen/Amazonka/Signer/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Lens.hs
@@ -0,0 +1,333 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Lens
+-- 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.Signer.Lens
+  ( -- * Operations
+
+    -- ** AddProfilePermission
+    addProfilePermission_profileVersion,
+    addProfilePermission_revisionId,
+    addProfilePermission_action,
+    addProfilePermission_principal,
+    addProfilePermission_statementId,
+    addProfilePermission_profileName,
+    addProfilePermissionResponse_revisionId,
+    addProfilePermissionResponse_httpStatus,
+
+    -- ** CancelSigningProfile
+    cancelSigningProfile_profileName,
+
+    -- ** DescribeSigningJob
+    describeSigningJob_jobId,
+    describeSigningJobResponse_completedAt,
+    describeSigningJobResponse_createdAt,
+    describeSigningJobResponse_jobId,
+    describeSigningJobResponse_jobInvoker,
+    describeSigningJobResponse_jobOwner,
+    describeSigningJobResponse_overrides,
+    describeSigningJobResponse_platformDisplayName,
+    describeSigningJobResponse_platformId,
+    describeSigningJobResponse_profileName,
+    describeSigningJobResponse_profileVersion,
+    describeSigningJobResponse_requestedBy,
+    describeSigningJobResponse_revocationRecord,
+    describeSigningJobResponse_signatureExpiresAt,
+    describeSigningJobResponse_signedObject,
+    describeSigningJobResponse_signingMaterial,
+    describeSigningJobResponse_signingParameters,
+    describeSigningJobResponse_source,
+    describeSigningJobResponse_status,
+    describeSigningJobResponse_statusReason,
+    describeSigningJobResponse_httpStatus,
+
+    -- ** GetSigningPlatform
+    getSigningPlatform_platformId,
+    getSigningPlatformResponse_category,
+    getSigningPlatformResponse_displayName,
+    getSigningPlatformResponse_maxSizeInMB,
+    getSigningPlatformResponse_partner,
+    getSigningPlatformResponse_platformId,
+    getSigningPlatformResponse_revocationSupported,
+    getSigningPlatformResponse_signingConfiguration,
+    getSigningPlatformResponse_signingImageFormat,
+    getSigningPlatformResponse_target,
+    getSigningPlatformResponse_httpStatus,
+
+    -- ** GetSigningProfile
+    getSigningProfile_profileOwner,
+    getSigningProfile_profileName,
+    getSigningProfileResponse_arn,
+    getSigningProfileResponse_overrides,
+    getSigningProfileResponse_platformDisplayName,
+    getSigningProfileResponse_platformId,
+    getSigningProfileResponse_profileName,
+    getSigningProfileResponse_profileVersion,
+    getSigningProfileResponse_profileVersionArn,
+    getSigningProfileResponse_revocationRecord,
+    getSigningProfileResponse_signatureValidityPeriod,
+    getSigningProfileResponse_signingMaterial,
+    getSigningProfileResponse_signingParameters,
+    getSigningProfileResponse_status,
+    getSigningProfileResponse_statusReason,
+    getSigningProfileResponse_tags,
+    getSigningProfileResponse_httpStatus,
+
+    -- ** ListProfilePermissions
+    listProfilePermissions_nextToken,
+    listProfilePermissions_profileName,
+    listProfilePermissionsResponse_nextToken,
+    listProfilePermissionsResponse_permissions,
+    listProfilePermissionsResponse_policySizeBytes,
+    listProfilePermissionsResponse_revisionId,
+    listProfilePermissionsResponse_httpStatus,
+
+    -- ** ListSigningJobs
+    listSigningJobs_isRevoked,
+    listSigningJobs_jobInvoker,
+    listSigningJobs_maxResults,
+    listSigningJobs_nextToken,
+    listSigningJobs_platformId,
+    listSigningJobs_requestedBy,
+    listSigningJobs_signatureExpiresAfter,
+    listSigningJobs_signatureExpiresBefore,
+    listSigningJobs_status,
+    listSigningJobsResponse_jobs,
+    listSigningJobsResponse_nextToken,
+    listSigningJobsResponse_httpStatus,
+
+    -- ** ListSigningPlatforms
+    listSigningPlatforms_category,
+    listSigningPlatforms_maxResults,
+    listSigningPlatforms_nextToken,
+    listSigningPlatforms_partner,
+    listSigningPlatforms_target,
+    listSigningPlatformsResponse_nextToken,
+    listSigningPlatformsResponse_platforms,
+    listSigningPlatformsResponse_httpStatus,
+
+    -- ** ListSigningProfiles
+    listSigningProfiles_includeCanceled,
+    listSigningProfiles_maxResults,
+    listSigningProfiles_nextToken,
+    listSigningProfiles_platformId,
+    listSigningProfiles_statuses,
+    listSigningProfilesResponse_nextToken,
+    listSigningProfilesResponse_profiles,
+    listSigningProfilesResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** PutSigningProfile
+    putSigningProfile_overrides,
+    putSigningProfile_signatureValidityPeriod,
+    putSigningProfile_signingMaterial,
+    putSigningProfile_signingParameters,
+    putSigningProfile_tags,
+    putSigningProfile_profileName,
+    putSigningProfile_platformId,
+    putSigningProfileResponse_arn,
+    putSigningProfileResponse_profileVersion,
+    putSigningProfileResponse_profileVersionArn,
+    putSigningProfileResponse_httpStatus,
+
+    -- ** RemoveProfilePermission
+    removeProfilePermission_revisionId,
+    removeProfilePermission_profileName,
+    removeProfilePermission_statementId,
+    removeProfilePermissionResponse_revisionId,
+    removeProfilePermissionResponse_httpStatus,
+
+    -- ** RevokeSignature
+    revokeSignature_jobOwner,
+    revokeSignature_reason,
+    revokeSignature_jobId,
+
+    -- ** RevokeSigningProfile
+    revokeSigningProfile_profileVersion,
+    revokeSigningProfile_reason,
+    revokeSigningProfile_effectiveTime,
+    revokeSigningProfile_profileName,
+
+    -- ** StartSigningJob
+    startSigningJob_profileOwner,
+    startSigningJob_source,
+    startSigningJob_destination,
+    startSigningJob_profileName,
+    startSigningJob_clientRequestToken,
+    startSigningJobResponse_jobId,
+    startSigningJobResponse_jobOwner,
+    startSigningJobResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Destination
+    destination_s3,
+
+    -- ** EncryptionAlgorithmOptions
+    encryptionAlgorithmOptions_allowedValues,
+    encryptionAlgorithmOptions_defaultValue,
+
+    -- ** HashAlgorithmOptions
+    hashAlgorithmOptions_allowedValues,
+    hashAlgorithmOptions_defaultValue,
+
+    -- ** Permission
+    permission_action,
+    permission_principal,
+    permission_profileVersion,
+    permission_statementId,
+
+    -- ** S3Destination
+    s3Destination_bucketName,
+    s3Destination_prefix,
+
+    -- ** S3SignedObject
+    s3SignedObject_bucketName,
+    s3SignedObject_key,
+
+    -- ** S3Source
+    s3Source_bucketName,
+    s3Source_key,
+    s3Source_version,
+
+    -- ** SignatureValidityPeriod
+    signatureValidityPeriod_type,
+    signatureValidityPeriod_value,
+
+    -- ** SignedObject
+    signedObject_s3,
+
+    -- ** SigningConfiguration
+    signingConfiguration_encryptionAlgorithmOptions,
+    signingConfiguration_hashAlgorithmOptions,
+
+    -- ** SigningConfigurationOverrides
+    signingConfigurationOverrides_encryptionAlgorithm,
+    signingConfigurationOverrides_hashAlgorithm,
+
+    -- ** SigningImageFormat
+    signingImageFormat_supportedFormats,
+    signingImageFormat_defaultFormat,
+
+    -- ** SigningJob
+    signingJob_createdAt,
+    signingJob_isRevoked,
+    signingJob_jobId,
+    signingJob_jobInvoker,
+    signingJob_jobOwner,
+    signingJob_platformDisplayName,
+    signingJob_platformId,
+    signingJob_profileName,
+    signingJob_profileVersion,
+    signingJob_signatureExpiresAt,
+    signingJob_signedObject,
+    signingJob_signingMaterial,
+    signingJob_source,
+    signingJob_status,
+
+    -- ** SigningJobRevocationRecord
+    signingJobRevocationRecord_reason,
+    signingJobRevocationRecord_revokedAt,
+    signingJobRevocationRecord_revokedBy,
+
+    -- ** SigningMaterial
+    signingMaterial_certificateArn,
+
+    -- ** SigningPlatform
+    signingPlatform_category,
+    signingPlatform_displayName,
+    signingPlatform_maxSizeInMB,
+    signingPlatform_partner,
+    signingPlatform_platformId,
+    signingPlatform_revocationSupported,
+    signingPlatform_signingConfiguration,
+    signingPlatform_signingImageFormat,
+    signingPlatform_target,
+
+    -- ** SigningPlatformOverrides
+    signingPlatformOverrides_signingConfiguration,
+    signingPlatformOverrides_signingImageFormat,
+
+    -- ** SigningProfile
+    signingProfile_arn,
+    signingProfile_platformDisplayName,
+    signingProfile_platformId,
+    signingProfile_profileName,
+    signingProfile_profileVersion,
+    signingProfile_profileVersionArn,
+    signingProfile_signatureValidityPeriod,
+    signingProfile_signingMaterial,
+    signingProfile_signingParameters,
+    signingProfile_status,
+    signingProfile_tags,
+
+    -- ** SigningProfileRevocationRecord
+    signingProfileRevocationRecord_revocationEffectiveFrom,
+    signingProfileRevocationRecord_revokedAt,
+    signingProfileRevocationRecord_revokedBy,
+
+    -- ** Source
+    source_s3,
+  )
+where
+
+import Amazonka.Signer.AddProfilePermission
+import Amazonka.Signer.CancelSigningProfile
+import Amazonka.Signer.DescribeSigningJob
+import Amazonka.Signer.GetSigningPlatform
+import Amazonka.Signer.GetSigningProfile
+import Amazonka.Signer.ListProfilePermissions
+import Amazonka.Signer.ListSigningJobs
+import Amazonka.Signer.ListSigningPlatforms
+import Amazonka.Signer.ListSigningProfiles
+import Amazonka.Signer.ListTagsForResource
+import Amazonka.Signer.PutSigningProfile
+import Amazonka.Signer.RemoveProfilePermission
+import Amazonka.Signer.RevokeSignature
+import Amazonka.Signer.RevokeSigningProfile
+import Amazonka.Signer.StartSigningJob
+import Amazonka.Signer.TagResource
+import Amazonka.Signer.Types.Destination
+import Amazonka.Signer.Types.EncryptionAlgorithmOptions
+import Amazonka.Signer.Types.HashAlgorithmOptions
+import Amazonka.Signer.Types.Permission
+import Amazonka.Signer.Types.S3Destination
+import Amazonka.Signer.Types.S3SignedObject
+import Amazonka.Signer.Types.S3Source
+import Amazonka.Signer.Types.SignatureValidityPeriod
+import Amazonka.Signer.Types.SignedObject
+import Amazonka.Signer.Types.SigningConfiguration
+import Amazonka.Signer.Types.SigningConfigurationOverrides
+import Amazonka.Signer.Types.SigningImageFormat
+import Amazonka.Signer.Types.SigningJob
+import Amazonka.Signer.Types.SigningJobRevocationRecord
+import Amazonka.Signer.Types.SigningMaterial
+import Amazonka.Signer.Types.SigningPlatform
+import Amazonka.Signer.Types.SigningPlatformOverrides
+import Amazonka.Signer.Types.SigningProfile
+import Amazonka.Signer.Types.SigningProfileRevocationRecord
+import Amazonka.Signer.Types.Source
+import Amazonka.Signer.UntagResource
diff --git a/gen/Amazonka/Signer/ListProfilePermissions.hs b/gen/Amazonka/Signer/ListProfilePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/ListProfilePermissions.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.ListProfilePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the cross-account permissions associated with a signing profile.
+module Amazonka.Signer.ListProfilePermissions
+  ( -- * Creating a Request
+    ListProfilePermissions (..),
+    newListProfilePermissions,
+
+    -- * Request Lenses
+    listProfilePermissions_nextToken,
+    listProfilePermissions_profileName,
+
+    -- * Destructuring the Response
+    ListProfilePermissionsResponse (..),
+    newListProfilePermissionsResponse,
+
+    -- * Response Lenses
+    listProfilePermissionsResponse_nextToken,
+    listProfilePermissionsResponse_permissions,
+    listProfilePermissionsResponse_policySizeBytes,
+    listProfilePermissionsResponse_revisionId,
+    listProfilePermissionsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newListProfilePermissions' smart constructor.
+data ListProfilePermissions = ListProfilePermissions'
+  { -- | String for specifying the next set of paginated results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Name of the signing profile containing the cross-account permissions.
+    profileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfilePermissions' 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:
+--
+-- 'nextToken', 'listProfilePermissions_nextToken' - String for specifying the next set of paginated results.
+--
+-- 'profileName', 'listProfilePermissions_profileName' - Name of the signing profile containing the cross-account permissions.
+newListProfilePermissions ::
+  -- | 'profileName'
+  Prelude.Text ->
+  ListProfilePermissions
+newListProfilePermissions pProfileName_ =
+  ListProfilePermissions'
+    { nextToken =
+        Prelude.Nothing,
+      profileName = pProfileName_
+    }
+
+-- | String for specifying the next set of paginated results.
+listProfilePermissions_nextToken :: Lens.Lens' ListProfilePermissions (Prelude.Maybe Prelude.Text)
+listProfilePermissions_nextToken = Lens.lens (\ListProfilePermissions' {nextToken} -> nextToken) (\s@ListProfilePermissions' {} a -> s {nextToken = a} :: ListProfilePermissions)
+
+-- | Name of the signing profile containing the cross-account permissions.
+listProfilePermissions_profileName :: Lens.Lens' ListProfilePermissions Prelude.Text
+listProfilePermissions_profileName = Lens.lens (\ListProfilePermissions' {profileName} -> profileName) (\s@ListProfilePermissions' {} a -> s {profileName = a} :: ListProfilePermissions)
+
+instance Core.AWSRequest ListProfilePermissions where
+  type
+    AWSResponse ListProfilePermissions =
+      ListProfilePermissionsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListProfilePermissionsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "permissions" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "policySizeBytes")
+            Prelude.<*> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListProfilePermissions where
+  hashWithSalt _salt ListProfilePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` profileName
+
+instance Prelude.NFData ListProfilePermissions where
+  rnf ListProfilePermissions' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf profileName
+
+instance Data.ToHeaders ListProfilePermissions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListProfilePermissions where
+  toPath ListProfilePermissions' {..} =
+    Prelude.mconcat
+      [ "/signing-profiles/",
+        Data.toBS profileName,
+        "/permissions"
+      ]
+
+instance Data.ToQuery ListProfilePermissions where
+  toQuery ListProfilePermissions' {..} =
+    Prelude.mconcat ["nextToken" Data.=: nextToken]
+
+-- | /See:/ 'newListProfilePermissionsResponse' smart constructor.
+data ListProfilePermissionsResponse = ListProfilePermissionsResponse'
+  { -- | String for specifying the next set of paginated results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | List of permissions associated with the Signing Profile.
+    permissions :: Prelude.Maybe [Permission],
+    -- | Total size of the policy associated with the Signing Profile in bytes.
+    policySizeBytes :: Prelude.Maybe Prelude.Int,
+    -- | The identifier for the current revision of profile permissions.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListProfilePermissionsResponse' 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:
+--
+-- 'nextToken', 'listProfilePermissionsResponse_nextToken' - String for specifying the next set of paginated results.
+--
+-- 'permissions', 'listProfilePermissionsResponse_permissions' - List of permissions associated with the Signing Profile.
+--
+-- 'policySizeBytes', 'listProfilePermissionsResponse_policySizeBytes' - Total size of the policy associated with the Signing Profile in bytes.
+--
+-- 'revisionId', 'listProfilePermissionsResponse_revisionId' - The identifier for the current revision of profile permissions.
+--
+-- 'httpStatus', 'listProfilePermissionsResponse_httpStatus' - The response's http status code.
+newListProfilePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListProfilePermissionsResponse
+newListProfilePermissionsResponse pHttpStatus_ =
+  ListProfilePermissionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      permissions = Prelude.Nothing,
+      policySizeBytes = Prelude.Nothing,
+      revisionId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | String for specifying the next set of paginated results.
+listProfilePermissionsResponse_nextToken :: Lens.Lens' ListProfilePermissionsResponse (Prelude.Maybe Prelude.Text)
+listProfilePermissionsResponse_nextToken = Lens.lens (\ListProfilePermissionsResponse' {nextToken} -> nextToken) (\s@ListProfilePermissionsResponse' {} a -> s {nextToken = a} :: ListProfilePermissionsResponse)
+
+-- | List of permissions associated with the Signing Profile.
+listProfilePermissionsResponse_permissions :: Lens.Lens' ListProfilePermissionsResponse (Prelude.Maybe [Permission])
+listProfilePermissionsResponse_permissions = Lens.lens (\ListProfilePermissionsResponse' {permissions} -> permissions) (\s@ListProfilePermissionsResponse' {} a -> s {permissions = a} :: ListProfilePermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Total size of the policy associated with the Signing Profile in bytes.
+listProfilePermissionsResponse_policySizeBytes :: Lens.Lens' ListProfilePermissionsResponse (Prelude.Maybe Prelude.Int)
+listProfilePermissionsResponse_policySizeBytes = Lens.lens (\ListProfilePermissionsResponse' {policySizeBytes} -> policySizeBytes) (\s@ListProfilePermissionsResponse' {} a -> s {policySizeBytes = a} :: ListProfilePermissionsResponse)
+
+-- | The identifier for the current revision of profile permissions.
+listProfilePermissionsResponse_revisionId :: Lens.Lens' ListProfilePermissionsResponse (Prelude.Maybe Prelude.Text)
+listProfilePermissionsResponse_revisionId = Lens.lens (\ListProfilePermissionsResponse' {revisionId} -> revisionId) (\s@ListProfilePermissionsResponse' {} a -> s {revisionId = a} :: ListProfilePermissionsResponse)
+
+-- | The response's http status code.
+listProfilePermissionsResponse_httpStatus :: Lens.Lens' ListProfilePermissionsResponse Prelude.Int
+listProfilePermissionsResponse_httpStatus = Lens.lens (\ListProfilePermissionsResponse' {httpStatus} -> httpStatus) (\s@ListProfilePermissionsResponse' {} a -> s {httpStatus = a} :: ListProfilePermissionsResponse)
+
+instance
+  Prelude.NFData
+    ListProfilePermissionsResponse
+  where
+  rnf ListProfilePermissionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf permissions
+      `Prelude.seq` Prelude.rnf policySizeBytes
+      `Prelude.seq` Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/ListSigningJobs.hs b/gen/Amazonka/Signer/ListSigningJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/ListSigningJobs.hs
@@ -0,0 +1,343 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.ListSigningJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all your signing jobs. You can use the @maxResults@ parameter to
+-- limit the number of signing jobs that are returned in the response. If
+-- additional jobs remain to be listed, code signing returns a @nextToken@
+-- value. Use this value in subsequent calls to @ListSigningJobs@ to fetch
+-- the remaining values. You can continue calling @ListSigningJobs@ with
+-- your @maxResults@ parameter and with new values that code signing
+-- returns in the @nextToken@ parameter until all of your signing jobs have
+-- been returned.
+--
+-- This operation returns paginated results.
+module Amazonka.Signer.ListSigningJobs
+  ( -- * Creating a Request
+    ListSigningJobs (..),
+    newListSigningJobs,
+
+    -- * Request Lenses
+    listSigningJobs_isRevoked,
+    listSigningJobs_jobInvoker,
+    listSigningJobs_maxResults,
+    listSigningJobs_nextToken,
+    listSigningJobs_platformId,
+    listSigningJobs_requestedBy,
+    listSigningJobs_signatureExpiresAfter,
+    listSigningJobs_signatureExpiresBefore,
+    listSigningJobs_status,
+
+    -- * Destructuring the Response
+    ListSigningJobsResponse (..),
+    newListSigningJobsResponse,
+
+    -- * Response Lenses
+    listSigningJobsResponse_jobs,
+    listSigningJobsResponse_nextToken,
+    listSigningJobsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newListSigningJobs' smart constructor.
+data ListSigningJobs = ListSigningJobs'
+  { -- | Filters results to return only signing jobs with revoked signatures.
+    isRevoked :: Prelude.Maybe Prelude.Bool,
+    -- | Filters results to return only signing jobs initiated by a specified IAM
+    -- entity.
+    jobInvoker :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the maximum number of items to return in the response. Use
+    -- this parameter when paginating results. If additional items exist beyond
+    -- the number you specify, the @nextToken@ element is set in the response.
+    -- Use the @nextToken@ value in a subsequent request to retrieve additional
+    -- items.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | String for specifying the next set of paginated results to return. After
+    -- you receive a response with truncated results, use this parameter in a
+    -- subsequent request. Set it to the value of @nextToken@ from the response
+    -- that you just received.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of microcontroller platform that you specified for the
+    -- distribution of your code image.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | The IAM principal that requested the signing job.
+    requestedBy :: Prelude.Maybe Prelude.Text,
+    -- | Filters results to return only signing jobs with signatures expiring
+    -- after a specified timestamp.
+    signatureExpiresAfter :: Prelude.Maybe Data.POSIX,
+    -- | Filters results to return only signing jobs with signatures expiring
+    -- before a specified timestamp.
+    signatureExpiresBefore :: Prelude.Maybe Data.POSIX,
+    -- | A status value with which to filter your results.
+    status :: Prelude.Maybe SigningStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSigningJobs' 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:
+--
+-- 'isRevoked', 'listSigningJobs_isRevoked' - Filters results to return only signing jobs with revoked signatures.
+--
+-- 'jobInvoker', 'listSigningJobs_jobInvoker' - Filters results to return only signing jobs initiated by a specified IAM
+-- entity.
+--
+-- 'maxResults', 'listSigningJobs_maxResults' - Specifies the maximum number of items to return in the response. Use
+-- this parameter when paginating results. If additional items exist beyond
+-- the number you specify, the @nextToken@ element is set in the response.
+-- Use the @nextToken@ value in a subsequent request to retrieve additional
+-- items.
+--
+-- 'nextToken', 'listSigningJobs_nextToken' - String for specifying the next set of paginated results to return. After
+-- you receive a response with truncated results, use this parameter in a
+-- subsequent request. Set it to the value of @nextToken@ from the response
+-- that you just received.
+--
+-- 'platformId', 'listSigningJobs_platformId' - The ID of microcontroller platform that you specified for the
+-- distribution of your code image.
+--
+-- 'requestedBy', 'listSigningJobs_requestedBy' - The IAM principal that requested the signing job.
+--
+-- 'signatureExpiresAfter', 'listSigningJobs_signatureExpiresAfter' - Filters results to return only signing jobs with signatures expiring
+-- after a specified timestamp.
+--
+-- 'signatureExpiresBefore', 'listSigningJobs_signatureExpiresBefore' - Filters results to return only signing jobs with signatures expiring
+-- before a specified timestamp.
+--
+-- 'status', 'listSigningJobs_status' - A status value with which to filter your results.
+newListSigningJobs ::
+  ListSigningJobs
+newListSigningJobs =
+  ListSigningJobs'
+    { isRevoked = Prelude.Nothing,
+      jobInvoker = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      requestedBy = Prelude.Nothing,
+      signatureExpiresAfter = Prelude.Nothing,
+      signatureExpiresBefore = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Filters results to return only signing jobs with revoked signatures.
+listSigningJobs_isRevoked :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.Bool)
+listSigningJobs_isRevoked = Lens.lens (\ListSigningJobs' {isRevoked} -> isRevoked) (\s@ListSigningJobs' {} a -> s {isRevoked = a} :: ListSigningJobs)
+
+-- | Filters results to return only signing jobs initiated by a specified IAM
+-- entity.
+listSigningJobs_jobInvoker :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.Text)
+listSigningJobs_jobInvoker = Lens.lens (\ListSigningJobs' {jobInvoker} -> jobInvoker) (\s@ListSigningJobs' {} a -> s {jobInvoker = a} :: ListSigningJobs)
+
+-- | Specifies the maximum number of items to return in the response. Use
+-- this parameter when paginating results. If additional items exist beyond
+-- the number you specify, the @nextToken@ element is set in the response.
+-- Use the @nextToken@ value in a subsequent request to retrieve additional
+-- items.
+listSigningJobs_maxResults :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.Natural)
+listSigningJobs_maxResults = Lens.lens (\ListSigningJobs' {maxResults} -> maxResults) (\s@ListSigningJobs' {} a -> s {maxResults = a} :: ListSigningJobs)
+
+-- | String for specifying the next set of paginated results to return. After
+-- you receive a response with truncated results, use this parameter in a
+-- subsequent request. Set it to the value of @nextToken@ from the response
+-- that you just received.
+listSigningJobs_nextToken :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.Text)
+listSigningJobs_nextToken = Lens.lens (\ListSigningJobs' {nextToken} -> nextToken) (\s@ListSigningJobs' {} a -> s {nextToken = a} :: ListSigningJobs)
+
+-- | The ID of microcontroller platform that you specified for the
+-- distribution of your code image.
+listSigningJobs_platformId :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.Text)
+listSigningJobs_platformId = Lens.lens (\ListSigningJobs' {platformId} -> platformId) (\s@ListSigningJobs' {} a -> s {platformId = a} :: ListSigningJobs)
+
+-- | The IAM principal that requested the signing job.
+listSigningJobs_requestedBy :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.Text)
+listSigningJobs_requestedBy = Lens.lens (\ListSigningJobs' {requestedBy} -> requestedBy) (\s@ListSigningJobs' {} a -> s {requestedBy = a} :: ListSigningJobs)
+
+-- | Filters results to return only signing jobs with signatures expiring
+-- after a specified timestamp.
+listSigningJobs_signatureExpiresAfter :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.UTCTime)
+listSigningJobs_signatureExpiresAfter = Lens.lens (\ListSigningJobs' {signatureExpiresAfter} -> signatureExpiresAfter) (\s@ListSigningJobs' {} a -> s {signatureExpiresAfter = a} :: ListSigningJobs) Prelude.. Lens.mapping Data._Time
+
+-- | Filters results to return only signing jobs with signatures expiring
+-- before a specified timestamp.
+listSigningJobs_signatureExpiresBefore :: Lens.Lens' ListSigningJobs (Prelude.Maybe Prelude.UTCTime)
+listSigningJobs_signatureExpiresBefore = Lens.lens (\ListSigningJobs' {signatureExpiresBefore} -> signatureExpiresBefore) (\s@ListSigningJobs' {} a -> s {signatureExpiresBefore = a} :: ListSigningJobs) Prelude.. Lens.mapping Data._Time
+
+-- | A status value with which to filter your results.
+listSigningJobs_status :: Lens.Lens' ListSigningJobs (Prelude.Maybe SigningStatus)
+listSigningJobs_status = Lens.lens (\ListSigningJobs' {status} -> status) (\s@ListSigningJobs' {} a -> s {status = a} :: ListSigningJobs)
+
+instance Core.AWSPager ListSigningJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSigningJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSigningJobsResponse_jobs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSigningJobs_nextToken
+          Lens..~ rs
+          Lens.^? listSigningJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSigningJobs where
+  type
+    AWSResponse ListSigningJobs =
+      ListSigningJobsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSigningJobsResponse'
+            Prelude.<$> (x Data..?> "jobs" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSigningJobs where
+  hashWithSalt _salt ListSigningJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` isRevoked
+      `Prelude.hashWithSalt` jobInvoker
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` platformId
+      `Prelude.hashWithSalt` requestedBy
+      `Prelude.hashWithSalt` signatureExpiresAfter
+      `Prelude.hashWithSalt` signatureExpiresBefore
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ListSigningJobs where
+  rnf ListSigningJobs' {..} =
+    Prelude.rnf isRevoked
+      `Prelude.seq` Prelude.rnf jobInvoker
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf requestedBy
+      `Prelude.seq` Prelude.rnf signatureExpiresAfter
+      `Prelude.seq` Prelude.rnf signatureExpiresBefore
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders ListSigningJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSigningJobs where
+  toPath = Prelude.const "/signing-jobs"
+
+instance Data.ToQuery ListSigningJobs where
+  toQuery ListSigningJobs' {..} =
+    Prelude.mconcat
+      [ "isRevoked" Data.=: isRevoked,
+        "jobInvoker" Data.=: jobInvoker,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "platformId" Data.=: platformId,
+        "requestedBy" Data.=: requestedBy,
+        "signatureExpiresAfter"
+          Data.=: signatureExpiresAfter,
+        "signatureExpiresBefore"
+          Data.=: signatureExpiresBefore,
+        "status" Data.=: status
+      ]
+
+-- | /See:/ 'newListSigningJobsResponse' smart constructor.
+data ListSigningJobsResponse = ListSigningJobsResponse'
+  { -- | A list of your signing jobs.
+    jobs :: Prelude.Maybe [SigningJob],
+    -- | String for specifying the next set of paginated results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSigningJobsResponse' 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:
+--
+-- 'jobs', 'listSigningJobsResponse_jobs' - A list of your signing jobs.
+--
+-- 'nextToken', 'listSigningJobsResponse_nextToken' - String for specifying the next set of paginated results.
+--
+-- 'httpStatus', 'listSigningJobsResponse_httpStatus' - The response's http status code.
+newListSigningJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSigningJobsResponse
+newListSigningJobsResponse pHttpStatus_ =
+  ListSigningJobsResponse'
+    { jobs = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of your signing jobs.
+listSigningJobsResponse_jobs :: Lens.Lens' ListSigningJobsResponse (Prelude.Maybe [SigningJob])
+listSigningJobsResponse_jobs = Lens.lens (\ListSigningJobsResponse' {jobs} -> jobs) (\s@ListSigningJobsResponse' {} a -> s {jobs = a} :: ListSigningJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | String for specifying the next set of paginated results.
+listSigningJobsResponse_nextToken :: Lens.Lens' ListSigningJobsResponse (Prelude.Maybe Prelude.Text)
+listSigningJobsResponse_nextToken = Lens.lens (\ListSigningJobsResponse' {nextToken} -> nextToken) (\s@ListSigningJobsResponse' {} a -> s {nextToken = a} :: ListSigningJobsResponse)
+
+-- | The response's http status code.
+listSigningJobsResponse_httpStatus :: Lens.Lens' ListSigningJobsResponse Prelude.Int
+listSigningJobsResponse_httpStatus = Lens.lens (\ListSigningJobsResponse' {httpStatus} -> httpStatus) (\s@ListSigningJobsResponse' {} a -> s {httpStatus = a} :: ListSigningJobsResponse)
+
+instance Prelude.NFData ListSigningJobsResponse where
+  rnf ListSigningJobsResponse' {..} =
+    Prelude.rnf jobs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/ListSigningPlatforms.hs b/gen/Amazonka/Signer/ListSigningPlatforms.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/ListSigningPlatforms.hs
@@ -0,0 +1,265 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.ListSigningPlatforms
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all signing platforms available in code signing that match the
+-- request parameters. If additional jobs remain to be listed, code signing
+-- returns a @nextToken@ value. Use this value in subsequent calls to
+-- @ListSigningJobs@ to fetch the remaining values. You can continue
+-- calling @ListSigningJobs@ with your @maxResults@ parameter and with new
+-- values that code signing returns in the @nextToken@ parameter until all
+-- of your signing jobs have been returned.
+--
+-- This operation returns paginated results.
+module Amazonka.Signer.ListSigningPlatforms
+  ( -- * Creating a Request
+    ListSigningPlatforms (..),
+    newListSigningPlatforms,
+
+    -- * Request Lenses
+    listSigningPlatforms_category,
+    listSigningPlatforms_maxResults,
+    listSigningPlatforms_nextToken,
+    listSigningPlatforms_partner,
+    listSigningPlatforms_target,
+
+    -- * Destructuring the Response
+    ListSigningPlatformsResponse (..),
+    newListSigningPlatformsResponse,
+
+    -- * Response Lenses
+    listSigningPlatformsResponse_nextToken,
+    listSigningPlatformsResponse_platforms,
+    listSigningPlatformsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newListSigningPlatforms' smart constructor.
+data ListSigningPlatforms = ListSigningPlatforms'
+  { -- | The category type of a signing platform.
+    category :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to be returned by this operation.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Value for specifying the next set of paginated results to return. After
+    -- you receive a response with truncated results, use this parameter in a
+    -- subsequent request. Set it to the value of @nextToken@ from the response
+    -- that you just received.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Any partner entities connected to a signing platform.
+    partner :: Prelude.Maybe Prelude.Text,
+    -- | The validation template that is used by the target signing platform.
+    target :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSigningPlatforms' 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:
+--
+-- 'category', 'listSigningPlatforms_category' - The category type of a signing platform.
+--
+-- 'maxResults', 'listSigningPlatforms_maxResults' - The maximum number of results to be returned by this operation.
+--
+-- 'nextToken', 'listSigningPlatforms_nextToken' - Value for specifying the next set of paginated results to return. After
+-- you receive a response with truncated results, use this parameter in a
+-- subsequent request. Set it to the value of @nextToken@ from the response
+-- that you just received.
+--
+-- 'partner', 'listSigningPlatforms_partner' - Any partner entities connected to a signing platform.
+--
+-- 'target', 'listSigningPlatforms_target' - The validation template that is used by the target signing platform.
+newListSigningPlatforms ::
+  ListSigningPlatforms
+newListSigningPlatforms =
+  ListSigningPlatforms'
+    { category = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      partner = Prelude.Nothing,
+      target = Prelude.Nothing
+    }
+
+-- | The category type of a signing platform.
+listSigningPlatforms_category :: Lens.Lens' ListSigningPlatforms (Prelude.Maybe Prelude.Text)
+listSigningPlatforms_category = Lens.lens (\ListSigningPlatforms' {category} -> category) (\s@ListSigningPlatforms' {} a -> s {category = a} :: ListSigningPlatforms)
+
+-- | The maximum number of results to be returned by this operation.
+listSigningPlatforms_maxResults :: Lens.Lens' ListSigningPlatforms (Prelude.Maybe Prelude.Natural)
+listSigningPlatforms_maxResults = Lens.lens (\ListSigningPlatforms' {maxResults} -> maxResults) (\s@ListSigningPlatforms' {} a -> s {maxResults = a} :: ListSigningPlatforms)
+
+-- | Value for specifying the next set of paginated results to return. After
+-- you receive a response with truncated results, use this parameter in a
+-- subsequent request. Set it to the value of @nextToken@ from the response
+-- that you just received.
+listSigningPlatforms_nextToken :: Lens.Lens' ListSigningPlatforms (Prelude.Maybe Prelude.Text)
+listSigningPlatforms_nextToken = Lens.lens (\ListSigningPlatforms' {nextToken} -> nextToken) (\s@ListSigningPlatforms' {} a -> s {nextToken = a} :: ListSigningPlatforms)
+
+-- | Any partner entities connected to a signing platform.
+listSigningPlatforms_partner :: Lens.Lens' ListSigningPlatforms (Prelude.Maybe Prelude.Text)
+listSigningPlatforms_partner = Lens.lens (\ListSigningPlatforms' {partner} -> partner) (\s@ListSigningPlatforms' {} a -> s {partner = a} :: ListSigningPlatforms)
+
+-- | The validation template that is used by the target signing platform.
+listSigningPlatforms_target :: Lens.Lens' ListSigningPlatforms (Prelude.Maybe Prelude.Text)
+listSigningPlatforms_target = Lens.lens (\ListSigningPlatforms' {target} -> target) (\s@ListSigningPlatforms' {} a -> s {target = a} :: ListSigningPlatforms)
+
+instance Core.AWSPager ListSigningPlatforms where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSigningPlatformsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSigningPlatformsResponse_platforms
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSigningPlatforms_nextToken
+          Lens..~ rs
+          Lens.^? listSigningPlatformsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSigningPlatforms where
+  type
+    AWSResponse ListSigningPlatforms =
+      ListSigningPlatformsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSigningPlatformsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "platforms" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSigningPlatforms where
+  hashWithSalt _salt ListSigningPlatforms' {..} =
+    _salt
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` partner
+      `Prelude.hashWithSalt` target
+
+instance Prelude.NFData ListSigningPlatforms where
+  rnf ListSigningPlatforms' {..} =
+    Prelude.rnf category
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf partner
+      `Prelude.seq` Prelude.rnf target
+
+instance Data.ToHeaders ListSigningPlatforms where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSigningPlatforms where
+  toPath = Prelude.const "/signing-platforms"
+
+instance Data.ToQuery ListSigningPlatforms where
+  toQuery ListSigningPlatforms' {..} =
+    Prelude.mconcat
+      [ "category" Data.=: category,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "partner" Data.=: partner,
+        "target" Data.=: target
+      ]
+
+-- | /See:/ 'newListSigningPlatformsResponse' smart constructor.
+data ListSigningPlatformsResponse = ListSigningPlatformsResponse'
+  { -- | Value for specifying the next set of paginated results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of all platforms that match the request parameters.
+    platforms :: Prelude.Maybe [SigningPlatform],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSigningPlatformsResponse' 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:
+--
+-- 'nextToken', 'listSigningPlatformsResponse_nextToken' - Value for specifying the next set of paginated results to return.
+--
+-- 'platforms', 'listSigningPlatformsResponse_platforms' - A list of all platforms that match the request parameters.
+--
+-- 'httpStatus', 'listSigningPlatformsResponse_httpStatus' - The response's http status code.
+newListSigningPlatformsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSigningPlatformsResponse
+newListSigningPlatformsResponse pHttpStatus_ =
+  ListSigningPlatformsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      platforms = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Value for specifying the next set of paginated results to return.
+listSigningPlatformsResponse_nextToken :: Lens.Lens' ListSigningPlatformsResponse (Prelude.Maybe Prelude.Text)
+listSigningPlatformsResponse_nextToken = Lens.lens (\ListSigningPlatformsResponse' {nextToken} -> nextToken) (\s@ListSigningPlatformsResponse' {} a -> s {nextToken = a} :: ListSigningPlatformsResponse)
+
+-- | A list of all platforms that match the request parameters.
+listSigningPlatformsResponse_platforms :: Lens.Lens' ListSigningPlatformsResponse (Prelude.Maybe [SigningPlatform])
+listSigningPlatformsResponse_platforms = Lens.lens (\ListSigningPlatformsResponse' {platforms} -> platforms) (\s@ListSigningPlatformsResponse' {} a -> s {platforms = a} :: ListSigningPlatformsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSigningPlatformsResponse_httpStatus :: Lens.Lens' ListSigningPlatformsResponse Prelude.Int
+listSigningPlatformsResponse_httpStatus = Lens.lens (\ListSigningPlatformsResponse' {httpStatus} -> httpStatus) (\s@ListSigningPlatformsResponse' {} a -> s {httpStatus = a} :: ListSigningPlatformsResponse)
+
+instance Prelude.NFData ListSigningPlatformsResponse where
+  rnf ListSigningPlatformsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf platforms
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/ListSigningProfiles.hs b/gen/Amazonka/Signer/ListSigningProfiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/ListSigningProfiles.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.ListSigningProfiles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all available signing profiles in your AWS account. Returns only
+-- profiles with an @ACTIVE@ status unless the @includeCanceled@ request
+-- field is set to @true@. If additional jobs remain to be listed, code
+-- signing returns a @nextToken@ value. Use this value in subsequent calls
+-- to @ListSigningJobs@ to fetch the remaining values. You can continue
+-- calling @ListSigningJobs@ with your @maxResults@ parameter and with new
+-- values that code signing returns in the @nextToken@ parameter until all
+-- of your signing jobs have been returned.
+--
+-- This operation returns paginated results.
+module Amazonka.Signer.ListSigningProfiles
+  ( -- * Creating a Request
+    ListSigningProfiles (..),
+    newListSigningProfiles,
+
+    -- * Request Lenses
+    listSigningProfiles_includeCanceled,
+    listSigningProfiles_maxResults,
+    listSigningProfiles_nextToken,
+    listSigningProfiles_platformId,
+    listSigningProfiles_statuses,
+
+    -- * Destructuring the Response
+    ListSigningProfilesResponse (..),
+    newListSigningProfilesResponse,
+
+    -- * Response Lenses
+    listSigningProfilesResponse_nextToken,
+    listSigningProfilesResponse_profiles,
+    listSigningProfilesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newListSigningProfiles' smart constructor.
+data ListSigningProfiles = ListSigningProfiles'
+  { -- | Designates whether to include profiles with the status of @CANCELED@.
+    includeCanceled :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of profiles to be returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Value for specifying the next set of paginated results to return. After
+    -- you receive a response with truncated results, use this parameter in a
+    -- subsequent request. Set it to the value of @nextToken@ from the response
+    -- that you just received.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filters results to return only signing jobs initiated for a specified
+    -- signing platform.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | Filters results to return only signing jobs with statuses in the
+    -- specified list.
+    statuses :: Prelude.Maybe [SigningProfileStatus]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSigningProfiles' 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:
+--
+-- 'includeCanceled', 'listSigningProfiles_includeCanceled' - Designates whether to include profiles with the status of @CANCELED@.
+--
+-- 'maxResults', 'listSigningProfiles_maxResults' - The maximum number of profiles to be returned.
+--
+-- 'nextToken', 'listSigningProfiles_nextToken' - Value for specifying the next set of paginated results to return. After
+-- you receive a response with truncated results, use this parameter in a
+-- subsequent request. Set it to the value of @nextToken@ from the response
+-- that you just received.
+--
+-- 'platformId', 'listSigningProfiles_platformId' - Filters results to return only signing jobs initiated for a specified
+-- signing platform.
+--
+-- 'statuses', 'listSigningProfiles_statuses' - Filters results to return only signing jobs with statuses in the
+-- specified list.
+newListSigningProfiles ::
+  ListSigningProfiles
+newListSigningProfiles =
+  ListSigningProfiles'
+    { includeCanceled =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      statuses = Prelude.Nothing
+    }
+
+-- | Designates whether to include profiles with the status of @CANCELED@.
+listSigningProfiles_includeCanceled :: Lens.Lens' ListSigningProfiles (Prelude.Maybe Prelude.Bool)
+listSigningProfiles_includeCanceled = Lens.lens (\ListSigningProfiles' {includeCanceled} -> includeCanceled) (\s@ListSigningProfiles' {} a -> s {includeCanceled = a} :: ListSigningProfiles)
+
+-- | The maximum number of profiles to be returned.
+listSigningProfiles_maxResults :: Lens.Lens' ListSigningProfiles (Prelude.Maybe Prelude.Natural)
+listSigningProfiles_maxResults = Lens.lens (\ListSigningProfiles' {maxResults} -> maxResults) (\s@ListSigningProfiles' {} a -> s {maxResults = a} :: ListSigningProfiles)
+
+-- | Value for specifying the next set of paginated results to return. After
+-- you receive a response with truncated results, use this parameter in a
+-- subsequent request. Set it to the value of @nextToken@ from the response
+-- that you just received.
+listSigningProfiles_nextToken :: Lens.Lens' ListSigningProfiles (Prelude.Maybe Prelude.Text)
+listSigningProfiles_nextToken = Lens.lens (\ListSigningProfiles' {nextToken} -> nextToken) (\s@ListSigningProfiles' {} a -> s {nextToken = a} :: ListSigningProfiles)
+
+-- | Filters results to return only signing jobs initiated for a specified
+-- signing platform.
+listSigningProfiles_platformId :: Lens.Lens' ListSigningProfiles (Prelude.Maybe Prelude.Text)
+listSigningProfiles_platformId = Lens.lens (\ListSigningProfiles' {platformId} -> platformId) (\s@ListSigningProfiles' {} a -> s {platformId = a} :: ListSigningProfiles)
+
+-- | Filters results to return only signing jobs with statuses in the
+-- specified list.
+listSigningProfiles_statuses :: Lens.Lens' ListSigningProfiles (Prelude.Maybe [SigningProfileStatus])
+listSigningProfiles_statuses = Lens.lens (\ListSigningProfiles' {statuses} -> statuses) (\s@ListSigningProfiles' {} a -> s {statuses = a} :: ListSigningProfiles) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager ListSigningProfiles where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSigningProfilesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSigningProfilesResponse_profiles
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSigningProfiles_nextToken
+          Lens..~ rs
+          Lens.^? listSigningProfilesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSigningProfiles where
+  type
+    AWSResponse ListSigningProfiles =
+      ListSigningProfilesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListSigningProfilesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "profiles" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSigningProfiles where
+  hashWithSalt _salt ListSigningProfiles' {..} =
+    _salt
+      `Prelude.hashWithSalt` includeCanceled
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` platformId
+      `Prelude.hashWithSalt` statuses
+
+instance Prelude.NFData ListSigningProfiles where
+  rnf ListSigningProfiles' {..} =
+    Prelude.rnf includeCanceled
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf statuses
+
+instance Data.ToHeaders ListSigningProfiles where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListSigningProfiles where
+  toPath = Prelude.const "/signing-profiles"
+
+instance Data.ToQuery ListSigningProfiles where
+  toQuery ListSigningProfiles' {..} =
+    Prelude.mconcat
+      [ "includeCanceled" Data.=: includeCanceled,
+        "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken,
+        "platformId" Data.=: platformId,
+        "statuses"
+          Data.=: Data.toQuery
+            (Data.toQueryList "member" Prelude.<$> statuses)
+      ]
+
+-- | /See:/ 'newListSigningProfilesResponse' smart constructor.
+data ListSigningProfilesResponse = ListSigningProfilesResponse'
+  { -- | Value for specifying the next set of paginated results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of profiles that are available in the AWS account. This includes
+    -- profiles with the status of @CANCELED@ if the @includeCanceled@
+    -- parameter is set to @true@.
+    profiles :: Prelude.Maybe [SigningProfile],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSigningProfilesResponse' 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:
+--
+-- 'nextToken', 'listSigningProfilesResponse_nextToken' - Value for specifying the next set of paginated results to return.
+--
+-- 'profiles', 'listSigningProfilesResponse_profiles' - A list of profiles that are available in the AWS account. This includes
+-- profiles with the status of @CANCELED@ if the @includeCanceled@
+-- parameter is set to @true@.
+--
+-- 'httpStatus', 'listSigningProfilesResponse_httpStatus' - The response's http status code.
+newListSigningProfilesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSigningProfilesResponse
+newListSigningProfilesResponse pHttpStatus_ =
+  ListSigningProfilesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      profiles = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Value for specifying the next set of paginated results to return.
+listSigningProfilesResponse_nextToken :: Lens.Lens' ListSigningProfilesResponse (Prelude.Maybe Prelude.Text)
+listSigningProfilesResponse_nextToken = Lens.lens (\ListSigningProfilesResponse' {nextToken} -> nextToken) (\s@ListSigningProfilesResponse' {} a -> s {nextToken = a} :: ListSigningProfilesResponse)
+
+-- | A list of profiles that are available in the AWS account. This includes
+-- profiles with the status of @CANCELED@ if the @includeCanceled@
+-- parameter is set to @true@.
+listSigningProfilesResponse_profiles :: Lens.Lens' ListSigningProfilesResponse (Prelude.Maybe [SigningProfile])
+listSigningProfilesResponse_profiles = Lens.lens (\ListSigningProfilesResponse' {profiles} -> profiles) (\s@ListSigningProfilesResponse' {} a -> s {profiles = a} :: ListSigningProfilesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSigningProfilesResponse_httpStatus :: Lens.Lens' ListSigningProfilesResponse Prelude.Int
+listSigningProfilesResponse_httpStatus = Lens.lens (\ListSigningProfilesResponse' {httpStatus} -> httpStatus) (\s@ListSigningProfilesResponse' {} a -> s {httpStatus = a} :: ListSigningProfilesResponse)
+
+instance Prelude.NFData ListSigningProfilesResponse where
+  rnf ListSigningProfilesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf profiles
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/ListTagsForResource.hs b/gen/Amazonka/Signer/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/ListTagsForResource.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of the tags associated with a signing profile resource.
+module Amazonka.Signer.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) for the signing profile.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' 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:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) for the signing profile.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) for the signing profile.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListTagsForResourceResponse'
+            Prelude.<$> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListTagsForResource where
+  hashWithSalt _salt ListTagsForResource' {..} =
+    _salt `Prelude.hashWithSalt` resourceArn
+
+instance Prelude.NFData ListTagsForResource where
+  rnf ListTagsForResource' {..} =
+    Prelude.rnf resourceArn
+
+instance Data.ToHeaders ListTagsForResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath ListTagsForResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | A list of tags associated with the signing profile.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' 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:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - A list of tags associated with the signing profile.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of tags associated with the signing profile.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/PutSigningProfile.hs b/gen/Amazonka/Signer/PutSigningProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/PutSigningProfile.hs
@@ -0,0 +1,294 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.PutSigningProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a signing profile. A signing profile is a code signing template
+-- that can be used to carry out a pre-defined signing job. For more
+-- information, see
+-- <http://docs.aws.amazon.com/signer/latest/developerguide/gs-profile.html>
+module Amazonka.Signer.PutSigningProfile
+  ( -- * Creating a Request
+    PutSigningProfile (..),
+    newPutSigningProfile,
+
+    -- * Request Lenses
+    putSigningProfile_overrides,
+    putSigningProfile_signatureValidityPeriod,
+    putSigningProfile_signingMaterial,
+    putSigningProfile_signingParameters,
+    putSigningProfile_tags,
+    putSigningProfile_profileName,
+    putSigningProfile_platformId,
+
+    -- * Destructuring the Response
+    PutSigningProfileResponse (..),
+    newPutSigningProfileResponse,
+
+    -- * Response Lenses
+    putSigningProfileResponse_arn,
+    putSigningProfileResponse_profileVersion,
+    putSigningProfileResponse_profileVersionArn,
+    putSigningProfileResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newPutSigningProfile' smart constructor.
+data PutSigningProfile = PutSigningProfile'
+  { -- | A subfield of @platform@. This specifies any different configuration
+    -- options that you want to apply to the chosen platform (such as a
+    -- different @hash-algorithm@ or @signing-algorithm@).
+    overrides :: Prelude.Maybe SigningPlatformOverrides,
+    -- | The default validity period override for any signature generated using
+    -- this signing profile. If unspecified, the default is 135 months.
+    signatureValidityPeriod :: Prelude.Maybe SignatureValidityPeriod,
+    -- | The AWS Certificate Manager certificate that will be used to sign code
+    -- with the new signing profile.
+    signingMaterial :: Prelude.Maybe SigningMaterial,
+    -- | Map of key-value pairs for signing. These can include any information
+    -- that you want to use during signing.
+    signingParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Tags to be associated with the signing profile that is being created.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the signing profile to be created.
+    profileName :: Prelude.Text,
+    -- | The ID of the signing platform to be created.
+    platformId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSigningProfile' 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:
+--
+-- 'overrides', 'putSigningProfile_overrides' - A subfield of @platform@. This specifies any different configuration
+-- options that you want to apply to the chosen platform (such as a
+-- different @hash-algorithm@ or @signing-algorithm@).
+--
+-- 'signatureValidityPeriod', 'putSigningProfile_signatureValidityPeriod' - The default validity period override for any signature generated using
+-- this signing profile. If unspecified, the default is 135 months.
+--
+-- 'signingMaterial', 'putSigningProfile_signingMaterial' - The AWS Certificate Manager certificate that will be used to sign code
+-- with the new signing profile.
+--
+-- 'signingParameters', 'putSigningProfile_signingParameters' - Map of key-value pairs for signing. These can include any information
+-- that you want to use during signing.
+--
+-- 'tags', 'putSigningProfile_tags' - Tags to be associated with the signing profile that is being created.
+--
+-- 'profileName', 'putSigningProfile_profileName' - The name of the signing profile to be created.
+--
+-- 'platformId', 'putSigningProfile_platformId' - The ID of the signing platform to be created.
+newPutSigningProfile ::
+  -- | 'profileName'
+  Prelude.Text ->
+  -- | 'platformId'
+  Prelude.Text ->
+  PutSigningProfile
+newPutSigningProfile pProfileName_ pPlatformId_ =
+  PutSigningProfile'
+    { overrides = Prelude.Nothing,
+      signatureValidityPeriod = Prelude.Nothing,
+      signingMaterial = Prelude.Nothing,
+      signingParameters = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      profileName = pProfileName_,
+      platformId = pPlatformId_
+    }
+
+-- | A subfield of @platform@. This specifies any different configuration
+-- options that you want to apply to the chosen platform (such as a
+-- different @hash-algorithm@ or @signing-algorithm@).
+putSigningProfile_overrides :: Lens.Lens' PutSigningProfile (Prelude.Maybe SigningPlatformOverrides)
+putSigningProfile_overrides = Lens.lens (\PutSigningProfile' {overrides} -> overrides) (\s@PutSigningProfile' {} a -> s {overrides = a} :: PutSigningProfile)
+
+-- | The default validity period override for any signature generated using
+-- this signing profile. If unspecified, the default is 135 months.
+putSigningProfile_signatureValidityPeriod :: Lens.Lens' PutSigningProfile (Prelude.Maybe SignatureValidityPeriod)
+putSigningProfile_signatureValidityPeriod = Lens.lens (\PutSigningProfile' {signatureValidityPeriod} -> signatureValidityPeriod) (\s@PutSigningProfile' {} a -> s {signatureValidityPeriod = a} :: PutSigningProfile)
+
+-- | The AWS Certificate Manager certificate that will be used to sign code
+-- with the new signing profile.
+putSigningProfile_signingMaterial :: Lens.Lens' PutSigningProfile (Prelude.Maybe SigningMaterial)
+putSigningProfile_signingMaterial = Lens.lens (\PutSigningProfile' {signingMaterial} -> signingMaterial) (\s@PutSigningProfile' {} a -> s {signingMaterial = a} :: PutSigningProfile)
+
+-- | Map of key-value pairs for signing. These can include any information
+-- that you want to use during signing.
+putSigningProfile_signingParameters :: Lens.Lens' PutSigningProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putSigningProfile_signingParameters = Lens.lens (\PutSigningProfile' {signingParameters} -> signingParameters) (\s@PutSigningProfile' {} a -> s {signingParameters = a} :: PutSigningProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | Tags to be associated with the signing profile that is being created.
+putSigningProfile_tags :: Lens.Lens' PutSigningProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+putSigningProfile_tags = Lens.lens (\PutSigningProfile' {tags} -> tags) (\s@PutSigningProfile' {} a -> s {tags = a} :: PutSigningProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the signing profile to be created.
+putSigningProfile_profileName :: Lens.Lens' PutSigningProfile Prelude.Text
+putSigningProfile_profileName = Lens.lens (\PutSigningProfile' {profileName} -> profileName) (\s@PutSigningProfile' {} a -> s {profileName = a} :: PutSigningProfile)
+
+-- | The ID of the signing platform to be created.
+putSigningProfile_platformId :: Lens.Lens' PutSigningProfile Prelude.Text
+putSigningProfile_platformId = Lens.lens (\PutSigningProfile' {platformId} -> platformId) (\s@PutSigningProfile' {} a -> s {platformId = a} :: PutSigningProfile)
+
+instance Core.AWSRequest PutSigningProfile where
+  type
+    AWSResponse PutSigningProfile =
+      PutSigningProfileResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          PutSigningProfileResponse'
+            Prelude.<$> (x Data..?> "arn")
+            Prelude.<*> (x Data..?> "profileVersion")
+            Prelude.<*> (x Data..?> "profileVersionArn")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutSigningProfile where
+  hashWithSalt _salt PutSigningProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` signatureValidityPeriod
+      `Prelude.hashWithSalt` signingMaterial
+      `Prelude.hashWithSalt` signingParameters
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` platformId
+
+instance Prelude.NFData PutSigningProfile where
+  rnf PutSigningProfile' {..} =
+    Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf signatureValidityPeriod
+      `Prelude.seq` Prelude.rnf signingMaterial
+      `Prelude.seq` Prelude.rnf signingParameters
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf platformId
+
+instance Data.ToHeaders PutSigningProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutSigningProfile where
+  toJSON PutSigningProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("overrides" Data..=) Prelude.<$> overrides,
+            ("signatureValidityPeriod" Data..=)
+              Prelude.<$> signatureValidityPeriod,
+            ("signingMaterial" Data..=)
+              Prelude.<$> signingMaterial,
+            ("signingParameters" Data..=)
+              Prelude.<$> signingParameters,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("platformId" Data..= platformId)
+          ]
+      )
+
+instance Data.ToPath PutSigningProfile where
+  toPath PutSigningProfile' {..} =
+    Prelude.mconcat
+      ["/signing-profiles/", Data.toBS profileName]
+
+instance Data.ToQuery PutSigningProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutSigningProfileResponse' smart constructor.
+data PutSigningProfileResponse = PutSigningProfileResponse'
+  { -- | The Amazon Resource Name (ARN) of the signing profile created.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The version of the signing profile being created.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | The signing profile ARN, including the profile version.
+    profileVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutSigningProfileResponse' 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:
+--
+-- 'arn', 'putSigningProfileResponse_arn' - The Amazon Resource Name (ARN) of the signing profile created.
+--
+-- 'profileVersion', 'putSigningProfileResponse_profileVersion' - The version of the signing profile being created.
+--
+-- 'profileVersionArn', 'putSigningProfileResponse_profileVersionArn' - The signing profile ARN, including the profile version.
+--
+-- 'httpStatus', 'putSigningProfileResponse_httpStatus' - The response's http status code.
+newPutSigningProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutSigningProfileResponse
+newPutSigningProfileResponse pHttpStatus_ =
+  PutSigningProfileResponse'
+    { arn = Prelude.Nothing,
+      profileVersion = Prelude.Nothing,
+      profileVersionArn = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the signing profile created.
+putSigningProfileResponse_arn :: Lens.Lens' PutSigningProfileResponse (Prelude.Maybe Prelude.Text)
+putSigningProfileResponse_arn = Lens.lens (\PutSigningProfileResponse' {arn} -> arn) (\s@PutSigningProfileResponse' {} a -> s {arn = a} :: PutSigningProfileResponse)
+
+-- | The version of the signing profile being created.
+putSigningProfileResponse_profileVersion :: Lens.Lens' PutSigningProfileResponse (Prelude.Maybe Prelude.Text)
+putSigningProfileResponse_profileVersion = Lens.lens (\PutSigningProfileResponse' {profileVersion} -> profileVersion) (\s@PutSigningProfileResponse' {} a -> s {profileVersion = a} :: PutSigningProfileResponse)
+
+-- | The signing profile ARN, including the profile version.
+putSigningProfileResponse_profileVersionArn :: Lens.Lens' PutSigningProfileResponse (Prelude.Maybe Prelude.Text)
+putSigningProfileResponse_profileVersionArn = Lens.lens (\PutSigningProfileResponse' {profileVersionArn} -> profileVersionArn) (\s@PutSigningProfileResponse' {} a -> s {profileVersionArn = a} :: PutSigningProfileResponse)
+
+-- | The response's http status code.
+putSigningProfileResponse_httpStatus :: Lens.Lens' PutSigningProfileResponse Prelude.Int
+putSigningProfileResponse_httpStatus = Lens.lens (\PutSigningProfileResponse' {httpStatus} -> httpStatus) (\s@PutSigningProfileResponse' {} a -> s {httpStatus = a} :: PutSigningProfileResponse)
+
+instance Prelude.NFData PutSigningProfileResponse where
+  rnf PutSigningProfileResponse' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf profileVersionArn
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/RemoveProfilePermission.hs b/gen/Amazonka/Signer/RemoveProfilePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/RemoveProfilePermission.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.RemoveProfilePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes cross-account permissions from a signing profile.
+module Amazonka.Signer.RemoveProfilePermission
+  ( -- * Creating a Request
+    RemoveProfilePermission (..),
+    newRemoveProfilePermission,
+
+    -- * Request Lenses
+    removeProfilePermission_revisionId,
+    removeProfilePermission_profileName,
+    removeProfilePermission_statementId,
+
+    -- * Destructuring the Response
+    RemoveProfilePermissionResponse (..),
+    newRemoveProfilePermissionResponse,
+
+    -- * Response Lenses
+    removeProfilePermissionResponse_revisionId,
+    removeProfilePermissionResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newRemoveProfilePermission' smart constructor.
+data RemoveProfilePermission = RemoveProfilePermission'
+  { -- | An identifier for the current revision of the signing profile
+    -- permissions.
+    revisionId :: Prelude.Text,
+    -- | A human-readable name for the signing profile with permissions to be
+    -- removed.
+    profileName :: Prelude.Text,
+    -- | A unique identifier for the cross-account permissions statement.
+    statementId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveProfilePermission' 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:
+--
+-- 'revisionId', 'removeProfilePermission_revisionId' - An identifier for the current revision of the signing profile
+-- permissions.
+--
+-- 'profileName', 'removeProfilePermission_profileName' - A human-readable name for the signing profile with permissions to be
+-- removed.
+--
+-- 'statementId', 'removeProfilePermission_statementId' - A unique identifier for the cross-account permissions statement.
+newRemoveProfilePermission ::
+  -- | 'revisionId'
+  Prelude.Text ->
+  -- | 'profileName'
+  Prelude.Text ->
+  -- | 'statementId'
+  Prelude.Text ->
+  RemoveProfilePermission
+newRemoveProfilePermission
+  pRevisionId_
+  pProfileName_
+  pStatementId_ =
+    RemoveProfilePermission'
+      { revisionId = pRevisionId_,
+        profileName = pProfileName_,
+        statementId = pStatementId_
+      }
+
+-- | An identifier for the current revision of the signing profile
+-- permissions.
+removeProfilePermission_revisionId :: Lens.Lens' RemoveProfilePermission Prelude.Text
+removeProfilePermission_revisionId = Lens.lens (\RemoveProfilePermission' {revisionId} -> revisionId) (\s@RemoveProfilePermission' {} a -> s {revisionId = a} :: RemoveProfilePermission)
+
+-- | A human-readable name for the signing profile with permissions to be
+-- removed.
+removeProfilePermission_profileName :: Lens.Lens' RemoveProfilePermission Prelude.Text
+removeProfilePermission_profileName = Lens.lens (\RemoveProfilePermission' {profileName} -> profileName) (\s@RemoveProfilePermission' {} a -> s {profileName = a} :: RemoveProfilePermission)
+
+-- | A unique identifier for the cross-account permissions statement.
+removeProfilePermission_statementId :: Lens.Lens' RemoveProfilePermission Prelude.Text
+removeProfilePermission_statementId = Lens.lens (\RemoveProfilePermission' {statementId} -> statementId) (\s@RemoveProfilePermission' {} a -> s {statementId = a} :: RemoveProfilePermission)
+
+instance Core.AWSRequest RemoveProfilePermission where
+  type
+    AWSResponse RemoveProfilePermission =
+      RemoveProfilePermissionResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RemoveProfilePermissionResponse'
+            Prelude.<$> (x Data..?> "revisionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RemoveProfilePermission where
+  hashWithSalt _salt RemoveProfilePermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` revisionId
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` statementId
+
+instance Prelude.NFData RemoveProfilePermission where
+  rnf RemoveProfilePermission' {..} =
+    Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf statementId
+
+instance Data.ToHeaders RemoveProfilePermission where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath RemoveProfilePermission where
+  toPath RemoveProfilePermission' {..} =
+    Prelude.mconcat
+      [ "/signing-profiles/",
+        Data.toBS profileName,
+        "/permissions/",
+        Data.toBS statementId
+      ]
+
+instance Data.ToQuery RemoveProfilePermission where
+  toQuery RemoveProfilePermission' {..} =
+    Prelude.mconcat ["revisionId" Data.=: revisionId]
+
+-- | /See:/ 'newRemoveProfilePermissionResponse' smart constructor.
+data RemoveProfilePermissionResponse = RemoveProfilePermissionResponse'
+  { -- | An identifier for the current revision of the profile permissions.
+    revisionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveProfilePermissionResponse' 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:
+--
+-- 'revisionId', 'removeProfilePermissionResponse_revisionId' - An identifier for the current revision of the profile permissions.
+--
+-- 'httpStatus', 'removeProfilePermissionResponse_httpStatus' - The response's http status code.
+newRemoveProfilePermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RemoveProfilePermissionResponse
+newRemoveProfilePermissionResponse pHttpStatus_ =
+  RemoveProfilePermissionResponse'
+    { revisionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An identifier for the current revision of the profile permissions.
+removeProfilePermissionResponse_revisionId :: Lens.Lens' RemoveProfilePermissionResponse (Prelude.Maybe Prelude.Text)
+removeProfilePermissionResponse_revisionId = Lens.lens (\RemoveProfilePermissionResponse' {revisionId} -> revisionId) (\s@RemoveProfilePermissionResponse' {} a -> s {revisionId = a} :: RemoveProfilePermissionResponse)
+
+-- | The response's http status code.
+removeProfilePermissionResponse_httpStatus :: Lens.Lens' RemoveProfilePermissionResponse Prelude.Int
+removeProfilePermissionResponse_httpStatus = Lens.lens (\RemoveProfilePermissionResponse' {httpStatus} -> httpStatus) (\s@RemoveProfilePermissionResponse' {} a -> s {httpStatus = a} :: RemoveProfilePermissionResponse)
+
+instance
+  Prelude.NFData
+    RemoveProfilePermissionResponse
+  where
+  rnf RemoveProfilePermissionResponse' {..} =
+    Prelude.rnf revisionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/RevokeSignature.hs b/gen/Amazonka/Signer/RevokeSignature.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/RevokeSignature.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.RevokeSignature
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the state of a signing job to REVOKED. This indicates that the
+-- signature is no longer valid.
+module Amazonka.Signer.RevokeSignature
+  ( -- * Creating a Request
+    RevokeSignature (..),
+    newRevokeSignature,
+
+    -- * Request Lenses
+    revokeSignature_jobOwner,
+    revokeSignature_reason,
+    revokeSignature_jobId,
+
+    -- * Destructuring the Response
+    RevokeSignatureResponse (..),
+    newRevokeSignatureResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newRevokeSignature' smart constructor.
+data RevokeSignature = RevokeSignature'
+  { -- | AWS account ID of the job owner.
+    jobOwner :: Prelude.Maybe Prelude.Text,
+    -- | The reason for revoking the signing job.
+    reason :: Prelude.Text,
+    -- | ID of the signing job to be revoked.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSignature' 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:
+--
+-- 'jobOwner', 'revokeSignature_jobOwner' - AWS account ID of the job owner.
+--
+-- 'reason', 'revokeSignature_reason' - The reason for revoking the signing job.
+--
+-- 'jobId', 'revokeSignature_jobId' - ID of the signing job to be revoked.
+newRevokeSignature ::
+  -- | 'reason'
+  Prelude.Text ->
+  -- | 'jobId'
+  Prelude.Text ->
+  RevokeSignature
+newRevokeSignature pReason_ pJobId_ =
+  RevokeSignature'
+    { jobOwner = Prelude.Nothing,
+      reason = pReason_,
+      jobId = pJobId_
+    }
+
+-- | AWS account ID of the job owner.
+revokeSignature_jobOwner :: Lens.Lens' RevokeSignature (Prelude.Maybe Prelude.Text)
+revokeSignature_jobOwner = Lens.lens (\RevokeSignature' {jobOwner} -> jobOwner) (\s@RevokeSignature' {} a -> s {jobOwner = a} :: RevokeSignature)
+
+-- | The reason for revoking the signing job.
+revokeSignature_reason :: Lens.Lens' RevokeSignature Prelude.Text
+revokeSignature_reason = Lens.lens (\RevokeSignature' {reason} -> reason) (\s@RevokeSignature' {} a -> s {reason = a} :: RevokeSignature)
+
+-- | ID of the signing job to be revoked.
+revokeSignature_jobId :: Lens.Lens' RevokeSignature Prelude.Text
+revokeSignature_jobId = Lens.lens (\RevokeSignature' {jobId} -> jobId) (\s@RevokeSignature' {} a -> s {jobId = a} :: RevokeSignature)
+
+instance Core.AWSRequest RevokeSignature where
+  type
+    AWSResponse RevokeSignature =
+      RevokeSignatureResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveNull RevokeSignatureResponse'
+
+instance Prelude.Hashable RevokeSignature where
+  hashWithSalt _salt RevokeSignature' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobOwner
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData RevokeSignature where
+  rnf RevokeSignature' {..} =
+    Prelude.rnf jobOwner
+      `Prelude.seq` Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders RevokeSignature where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RevokeSignature where
+  toJSON RevokeSignature' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("jobOwner" Data..=) Prelude.<$> jobOwner,
+            Prelude.Just ("reason" Data..= reason)
+          ]
+      )
+
+instance Data.ToPath RevokeSignature where
+  toPath RevokeSignature' {..} =
+    Prelude.mconcat
+      ["/signing-jobs/", Data.toBS jobId, "/revoke"]
+
+instance Data.ToQuery RevokeSignature where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRevokeSignatureResponse' smart constructor.
+data RevokeSignatureResponse = RevokeSignatureResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSignatureResponse' 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.
+newRevokeSignatureResponse ::
+  RevokeSignatureResponse
+newRevokeSignatureResponse = RevokeSignatureResponse'
+
+instance Prelude.NFData RevokeSignatureResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Signer/RevokeSigningProfile.hs b/gen/Amazonka/Signer/RevokeSigningProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/RevokeSigningProfile.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.RevokeSigningProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the state of a signing profile to REVOKED. This indicates that
+-- signatures generated using the signing profile after an effective start
+-- date are no longer valid.
+module Amazonka.Signer.RevokeSigningProfile
+  ( -- * Creating a Request
+    RevokeSigningProfile (..),
+    newRevokeSigningProfile,
+
+    -- * Request Lenses
+    revokeSigningProfile_profileVersion,
+    revokeSigningProfile_reason,
+    revokeSigningProfile_effectiveTime,
+    revokeSigningProfile_profileName,
+
+    -- * Destructuring the Response
+    RevokeSigningProfileResponse (..),
+    newRevokeSigningProfileResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newRevokeSigningProfile' smart constructor.
+data RevokeSigningProfile = RevokeSigningProfile'
+  { -- | The version of the signing profile to be revoked.
+    profileVersion :: Prelude.Text,
+    -- | The reason for revoking a signing profile.
+    reason :: Prelude.Text,
+    -- | A timestamp for when revocation of a Signing Profile should become
+    -- effective. Signatures generated using the signing profile after this
+    -- timestamp are not trusted.
+    effectiveTime :: Data.POSIX,
+    -- | The name of the signing profile to be revoked.
+    profileName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSigningProfile' 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:
+--
+-- 'profileVersion', 'revokeSigningProfile_profileVersion' - The version of the signing profile to be revoked.
+--
+-- 'reason', 'revokeSigningProfile_reason' - The reason for revoking a signing profile.
+--
+-- 'effectiveTime', 'revokeSigningProfile_effectiveTime' - A timestamp for when revocation of a Signing Profile should become
+-- effective. Signatures generated using the signing profile after this
+-- timestamp are not trusted.
+--
+-- 'profileName', 'revokeSigningProfile_profileName' - The name of the signing profile to be revoked.
+newRevokeSigningProfile ::
+  -- | 'profileVersion'
+  Prelude.Text ->
+  -- | 'reason'
+  Prelude.Text ->
+  -- | 'effectiveTime'
+  Prelude.UTCTime ->
+  -- | 'profileName'
+  Prelude.Text ->
+  RevokeSigningProfile
+newRevokeSigningProfile
+  pProfileVersion_
+  pReason_
+  pEffectiveTime_
+  pProfileName_ =
+    RevokeSigningProfile'
+      { profileVersion =
+          pProfileVersion_,
+        reason = pReason_,
+        effectiveTime = Data._Time Lens.# pEffectiveTime_,
+        profileName = pProfileName_
+      }
+
+-- | The version of the signing profile to be revoked.
+revokeSigningProfile_profileVersion :: Lens.Lens' RevokeSigningProfile Prelude.Text
+revokeSigningProfile_profileVersion = Lens.lens (\RevokeSigningProfile' {profileVersion} -> profileVersion) (\s@RevokeSigningProfile' {} a -> s {profileVersion = a} :: RevokeSigningProfile)
+
+-- | The reason for revoking a signing profile.
+revokeSigningProfile_reason :: Lens.Lens' RevokeSigningProfile Prelude.Text
+revokeSigningProfile_reason = Lens.lens (\RevokeSigningProfile' {reason} -> reason) (\s@RevokeSigningProfile' {} a -> s {reason = a} :: RevokeSigningProfile)
+
+-- | A timestamp for when revocation of a Signing Profile should become
+-- effective. Signatures generated using the signing profile after this
+-- timestamp are not trusted.
+revokeSigningProfile_effectiveTime :: Lens.Lens' RevokeSigningProfile Prelude.UTCTime
+revokeSigningProfile_effectiveTime = Lens.lens (\RevokeSigningProfile' {effectiveTime} -> effectiveTime) (\s@RevokeSigningProfile' {} a -> s {effectiveTime = a} :: RevokeSigningProfile) Prelude.. Data._Time
+
+-- | The name of the signing profile to be revoked.
+revokeSigningProfile_profileName :: Lens.Lens' RevokeSigningProfile Prelude.Text
+revokeSigningProfile_profileName = Lens.lens (\RevokeSigningProfile' {profileName} -> profileName) (\s@RevokeSigningProfile' {} a -> s {profileName = a} :: RevokeSigningProfile)
+
+instance Core.AWSRequest RevokeSigningProfile where
+  type
+    AWSResponse RevokeSigningProfile =
+      RevokeSigningProfileResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveNull RevokeSigningProfileResponse'
+
+instance Prelude.Hashable RevokeSigningProfile where
+  hashWithSalt _salt RevokeSigningProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileVersion
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` effectiveTime
+      `Prelude.hashWithSalt` profileName
+
+instance Prelude.NFData RevokeSigningProfile where
+  rnf RevokeSigningProfile' {..} =
+    Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf effectiveTime
+      `Prelude.seq` Prelude.rnf profileName
+
+instance Data.ToHeaders RevokeSigningProfile where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RevokeSigningProfile where
+  toJSON RevokeSigningProfile' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("profileVersion" Data..= profileVersion),
+            Prelude.Just ("reason" Data..= reason),
+            Prelude.Just
+              ("effectiveTime" Data..= effectiveTime)
+          ]
+      )
+
+instance Data.ToPath RevokeSigningProfile where
+  toPath RevokeSigningProfile' {..} =
+    Prelude.mconcat
+      [ "/signing-profiles/",
+        Data.toBS profileName,
+        "/revoke"
+      ]
+
+instance Data.ToQuery RevokeSigningProfile where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRevokeSigningProfileResponse' smart constructor.
+data RevokeSigningProfileResponse = RevokeSigningProfileResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSigningProfileResponse' 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.
+newRevokeSigningProfileResponse ::
+  RevokeSigningProfileResponse
+newRevokeSigningProfileResponse =
+  RevokeSigningProfileResponse'
+
+instance Prelude.NFData RevokeSigningProfileResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/Signer/StartSigningJob.hs b/gen/Amazonka/Signer/StartSigningJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/StartSigningJob.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.StartSigningJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates a signing job to be performed on the code provided. Signing
+-- jobs are viewable by the @ListSigningJobs@ operation for two years after
+-- they are performed. Note the following requirements:
+--
+-- -   You must create an Amazon S3 source bucket. For more information,
+--     see
+--     <http://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html Create a Bucket>
+--     in the /Amazon S3 Getting Started Guide/.
+--
+-- -   Your S3 source bucket must be version enabled.
+--
+-- -   You must create an S3 destination bucket. Code signing uses your S3
+--     destination bucket to write your signed code.
+--
+-- -   You specify the name of the source and destination buckets when
+--     calling the @StartSigningJob@ operation.
+--
+-- -   You must also specify a request token that identifies your request
+--     to code signing.
+--
+-- You can call the DescribeSigningJob and the ListSigningJobs actions
+-- after you call @StartSigningJob@.
+--
+-- For a Java example that shows how to use this action, see
+-- <http://docs.aws.amazon.com/acm/latest/userguide/>
+module Amazonka.Signer.StartSigningJob
+  ( -- * Creating a Request
+    StartSigningJob (..),
+    newStartSigningJob,
+
+    -- * Request Lenses
+    startSigningJob_profileOwner,
+    startSigningJob_source,
+    startSigningJob_destination,
+    startSigningJob_profileName,
+    startSigningJob_clientRequestToken,
+
+    -- * Destructuring the Response
+    StartSigningJobResponse (..),
+    newStartSigningJobResponse,
+
+    -- * Response Lenses
+    startSigningJobResponse_jobId,
+    startSigningJobResponse_jobOwner,
+    startSigningJobResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newStartSigningJob' smart constructor.
+data StartSigningJob = StartSigningJob'
+  { -- | The AWS account ID of the signing profile owner.
+    profileOwner :: Prelude.Maybe Prelude.Text,
+    -- | The S3 bucket that contains the object to sign or a BLOB that contains
+    -- your raw code.
+    source :: Source,
+    -- | The S3 bucket in which to save your signed object. The destination
+    -- contains the name of your bucket and an optional prefix.
+    destination :: Destination,
+    -- | The name of the signing profile.
+    profileName :: Prelude.Text,
+    -- | String that identifies the signing request. All calls after the first
+    -- that use this token return the same response as the first call.
+    clientRequestToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSigningJob' 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:
+--
+-- 'profileOwner', 'startSigningJob_profileOwner' - The AWS account ID of the signing profile owner.
+--
+-- 'source', 'startSigningJob_source' - The S3 bucket that contains the object to sign or a BLOB that contains
+-- your raw code.
+--
+-- 'destination', 'startSigningJob_destination' - The S3 bucket in which to save your signed object. The destination
+-- contains the name of your bucket and an optional prefix.
+--
+-- 'profileName', 'startSigningJob_profileName' - The name of the signing profile.
+--
+-- 'clientRequestToken', 'startSigningJob_clientRequestToken' - String that identifies the signing request. All calls after the first
+-- that use this token return the same response as the first call.
+newStartSigningJob ::
+  -- | 'source'
+  Source ->
+  -- | 'destination'
+  Destination ->
+  -- | 'profileName'
+  Prelude.Text ->
+  -- | 'clientRequestToken'
+  Prelude.Text ->
+  StartSigningJob
+newStartSigningJob
+  pSource_
+  pDestination_
+  pProfileName_
+  pClientRequestToken_ =
+    StartSigningJob'
+      { profileOwner = Prelude.Nothing,
+        source = pSource_,
+        destination = pDestination_,
+        profileName = pProfileName_,
+        clientRequestToken = pClientRequestToken_
+      }
+
+-- | The AWS account ID of the signing profile owner.
+startSigningJob_profileOwner :: Lens.Lens' StartSigningJob (Prelude.Maybe Prelude.Text)
+startSigningJob_profileOwner = Lens.lens (\StartSigningJob' {profileOwner} -> profileOwner) (\s@StartSigningJob' {} a -> s {profileOwner = a} :: StartSigningJob)
+
+-- | The S3 bucket that contains the object to sign or a BLOB that contains
+-- your raw code.
+startSigningJob_source :: Lens.Lens' StartSigningJob Source
+startSigningJob_source = Lens.lens (\StartSigningJob' {source} -> source) (\s@StartSigningJob' {} a -> s {source = a} :: StartSigningJob)
+
+-- | The S3 bucket in which to save your signed object. The destination
+-- contains the name of your bucket and an optional prefix.
+startSigningJob_destination :: Lens.Lens' StartSigningJob Destination
+startSigningJob_destination = Lens.lens (\StartSigningJob' {destination} -> destination) (\s@StartSigningJob' {} a -> s {destination = a} :: StartSigningJob)
+
+-- | The name of the signing profile.
+startSigningJob_profileName :: Lens.Lens' StartSigningJob Prelude.Text
+startSigningJob_profileName = Lens.lens (\StartSigningJob' {profileName} -> profileName) (\s@StartSigningJob' {} a -> s {profileName = a} :: StartSigningJob)
+
+-- | String that identifies the signing request. All calls after the first
+-- that use this token return the same response as the first call.
+startSigningJob_clientRequestToken :: Lens.Lens' StartSigningJob Prelude.Text
+startSigningJob_clientRequestToken = Lens.lens (\StartSigningJob' {clientRequestToken} -> clientRequestToken) (\s@StartSigningJob' {} a -> s {clientRequestToken = a} :: StartSigningJob)
+
+instance Core.AWSRequest StartSigningJob where
+  type
+    AWSResponse StartSigningJob =
+      StartSigningJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartSigningJobResponse'
+            Prelude.<$> (x Data..?> "jobId")
+            Prelude.<*> (x Data..?> "jobOwner")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartSigningJob where
+  hashWithSalt _salt StartSigningJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` profileOwner
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` clientRequestToken
+
+instance Prelude.NFData StartSigningJob where
+  rnf StartSigningJob' {..} =
+    Prelude.rnf profileOwner
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf clientRequestToken
+
+instance Data.ToHeaders StartSigningJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartSigningJob where
+  toJSON StartSigningJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("profileOwner" Data..=) Prelude.<$> profileOwner,
+            Prelude.Just ("source" Data..= source),
+            Prelude.Just ("destination" Data..= destination),
+            Prelude.Just ("profileName" Data..= profileName),
+            Prelude.Just
+              ("clientRequestToken" Data..= clientRequestToken)
+          ]
+      )
+
+instance Data.ToPath StartSigningJob where
+  toPath = Prelude.const "/signing-jobs"
+
+instance Data.ToQuery StartSigningJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartSigningJobResponse' smart constructor.
+data StartSigningJobResponse = StartSigningJobResponse'
+  { -- | The ID of your signing job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The AWS account ID of the signing job owner.
+    jobOwner :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartSigningJobResponse' 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:
+--
+-- 'jobId', 'startSigningJobResponse_jobId' - The ID of your signing job.
+--
+-- 'jobOwner', 'startSigningJobResponse_jobOwner' - The AWS account ID of the signing job owner.
+--
+-- 'httpStatus', 'startSigningJobResponse_httpStatus' - The response's http status code.
+newStartSigningJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartSigningJobResponse
+newStartSigningJobResponse pHttpStatus_ =
+  StartSigningJobResponse'
+    { jobId = Prelude.Nothing,
+      jobOwner = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of your signing job.
+startSigningJobResponse_jobId :: Lens.Lens' StartSigningJobResponse (Prelude.Maybe Prelude.Text)
+startSigningJobResponse_jobId = Lens.lens (\StartSigningJobResponse' {jobId} -> jobId) (\s@StartSigningJobResponse' {} a -> s {jobId = a} :: StartSigningJobResponse)
+
+-- | The AWS account ID of the signing job owner.
+startSigningJobResponse_jobOwner :: Lens.Lens' StartSigningJobResponse (Prelude.Maybe Prelude.Text)
+startSigningJobResponse_jobOwner = Lens.lens (\StartSigningJobResponse' {jobOwner} -> jobOwner) (\s@StartSigningJobResponse' {} a -> s {jobOwner = a} :: StartSigningJobResponse)
+
+-- | The response's http status code.
+startSigningJobResponse_httpStatus :: Lens.Lens' StartSigningJobResponse Prelude.Int
+startSigningJobResponse_httpStatus = Lens.lens (\StartSigningJobResponse' {httpStatus} -> httpStatus) (\s@StartSigningJobResponse' {} a -> s {httpStatus = a} :: StartSigningJobResponse)
+
+instance Prelude.NFData StartSigningJobResponse where
+  rnf StartSigningJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobOwner
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/TagResource.hs b/gen/Amazonka/Signer/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/TagResource.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds one or more tags to a signing profile. Tags are labels that you can
+-- use to identify and organize your AWS resources. Each tag consists of a
+-- key and an optional value. To specify the signing profile, use its
+-- Amazon Resource Name (ARN). To specify the tag, use a key-value pair.
+module Amazonka.Signer.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) for the signing profile.
+    resourceArn :: Prelude.Text,
+    -- | One or more tags to be associated with the signing profile.
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' 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:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) for the signing profile.
+--
+-- 'tags', 'tagResource_tags' - One or more tags to be associated with the signing profile.
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) for the signing profile.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | One or more tags to be associated with the signing profile.
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("tags" Data..= tags)]
+      )
+
+instance Data.ToPath TagResource where
+  toPath TagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery TagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTagResourceResponse' smart constructor.
+data TagResourceResponse = TagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResourceResponse' 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:
+--
+-- 'httpStatus', 'tagResourceResponse_httpStatus' - The response's http status code.
+newTagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TagResourceResponse
+newTagResourceResponse pHttpStatus_ =
+  TagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+tagResourceResponse_httpStatus :: Lens.Lens' TagResourceResponse Prelude.Int
+tagResourceResponse_httpStatus = Lens.lens (\TagResourceResponse' {httpStatus} -> httpStatus) (\s@TagResourceResponse' {} a -> s {httpStatus = a} :: TagResourceResponse)
+
+instance Prelude.NFData TagResourceResponse where
+  rnf TagResourceResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/Types.hs b/gen/Amazonka/Signer/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types.hs
@@ -0,0 +1,390 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types
+-- 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.Signer.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AccessDeniedException,
+    _BadRequestException,
+    _ConflictException,
+    _InternalServiceErrorException,
+    _NotFoundException,
+    _ResourceNotFoundException,
+    _ServiceLimitExceededException,
+    _ThrottlingException,
+    _TooManyRequestsException,
+    _ValidationException,
+
+    -- * Category
+    Category (..),
+
+    -- * EncryptionAlgorithm
+    EncryptionAlgorithm (..),
+
+    -- * HashAlgorithm
+    HashAlgorithm (..),
+
+    -- * ImageFormat
+    ImageFormat (..),
+
+    -- * SigningProfileStatus
+    SigningProfileStatus (..),
+
+    -- * SigningStatus
+    SigningStatus (..),
+
+    -- * ValidityType
+    ValidityType (..),
+
+    -- * Destination
+    Destination (..),
+    newDestination,
+    destination_s3,
+
+    -- * EncryptionAlgorithmOptions
+    EncryptionAlgorithmOptions (..),
+    newEncryptionAlgorithmOptions,
+    encryptionAlgorithmOptions_allowedValues,
+    encryptionAlgorithmOptions_defaultValue,
+
+    -- * HashAlgorithmOptions
+    HashAlgorithmOptions (..),
+    newHashAlgorithmOptions,
+    hashAlgorithmOptions_allowedValues,
+    hashAlgorithmOptions_defaultValue,
+
+    -- * Permission
+    Permission (..),
+    newPermission,
+    permission_action,
+    permission_principal,
+    permission_profileVersion,
+    permission_statementId,
+
+    -- * S3Destination
+    S3Destination (..),
+    newS3Destination,
+    s3Destination_bucketName,
+    s3Destination_prefix,
+
+    -- * S3SignedObject
+    S3SignedObject (..),
+    newS3SignedObject,
+    s3SignedObject_bucketName,
+    s3SignedObject_key,
+
+    -- * S3Source
+    S3Source (..),
+    newS3Source,
+    s3Source_bucketName,
+    s3Source_key,
+    s3Source_version,
+
+    -- * SignatureValidityPeriod
+    SignatureValidityPeriod (..),
+    newSignatureValidityPeriod,
+    signatureValidityPeriod_type,
+    signatureValidityPeriod_value,
+
+    -- * SignedObject
+    SignedObject (..),
+    newSignedObject,
+    signedObject_s3,
+
+    -- * SigningConfiguration
+    SigningConfiguration (..),
+    newSigningConfiguration,
+    signingConfiguration_encryptionAlgorithmOptions,
+    signingConfiguration_hashAlgorithmOptions,
+
+    -- * SigningConfigurationOverrides
+    SigningConfigurationOverrides (..),
+    newSigningConfigurationOverrides,
+    signingConfigurationOverrides_encryptionAlgorithm,
+    signingConfigurationOverrides_hashAlgorithm,
+
+    -- * SigningImageFormat
+    SigningImageFormat (..),
+    newSigningImageFormat,
+    signingImageFormat_supportedFormats,
+    signingImageFormat_defaultFormat,
+
+    -- * SigningJob
+    SigningJob (..),
+    newSigningJob,
+    signingJob_createdAt,
+    signingJob_isRevoked,
+    signingJob_jobId,
+    signingJob_jobInvoker,
+    signingJob_jobOwner,
+    signingJob_platformDisplayName,
+    signingJob_platformId,
+    signingJob_profileName,
+    signingJob_profileVersion,
+    signingJob_signatureExpiresAt,
+    signingJob_signedObject,
+    signingJob_signingMaterial,
+    signingJob_source,
+    signingJob_status,
+
+    -- * SigningJobRevocationRecord
+    SigningJobRevocationRecord (..),
+    newSigningJobRevocationRecord,
+    signingJobRevocationRecord_reason,
+    signingJobRevocationRecord_revokedAt,
+    signingJobRevocationRecord_revokedBy,
+
+    -- * SigningMaterial
+    SigningMaterial (..),
+    newSigningMaterial,
+    signingMaterial_certificateArn,
+
+    -- * SigningPlatform
+    SigningPlatform (..),
+    newSigningPlatform,
+    signingPlatform_category,
+    signingPlatform_displayName,
+    signingPlatform_maxSizeInMB,
+    signingPlatform_partner,
+    signingPlatform_platformId,
+    signingPlatform_revocationSupported,
+    signingPlatform_signingConfiguration,
+    signingPlatform_signingImageFormat,
+    signingPlatform_target,
+
+    -- * SigningPlatformOverrides
+    SigningPlatformOverrides (..),
+    newSigningPlatformOverrides,
+    signingPlatformOverrides_signingConfiguration,
+    signingPlatformOverrides_signingImageFormat,
+
+    -- * SigningProfile
+    SigningProfile (..),
+    newSigningProfile,
+    signingProfile_arn,
+    signingProfile_platformDisplayName,
+    signingProfile_platformId,
+    signingProfile_profileName,
+    signingProfile_profileVersion,
+    signingProfile_profileVersionArn,
+    signingProfile_signatureValidityPeriod,
+    signingProfile_signingMaterial,
+    signingProfile_signingParameters,
+    signingProfile_status,
+    signingProfile_tags,
+
+    -- * SigningProfileRevocationRecord
+    SigningProfileRevocationRecord (..),
+    newSigningProfileRevocationRecord,
+    signingProfileRevocationRecord_revocationEffectiveFrom,
+    signingProfileRevocationRecord_revokedAt,
+    signingProfileRevocationRecord_revokedBy,
+
+    -- * Source
+    Source (..),
+    newSource,
+    source_s3,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+import Amazonka.Signer.Types.Category
+import Amazonka.Signer.Types.Destination
+import Amazonka.Signer.Types.EncryptionAlgorithm
+import Amazonka.Signer.Types.EncryptionAlgorithmOptions
+import Amazonka.Signer.Types.HashAlgorithm
+import Amazonka.Signer.Types.HashAlgorithmOptions
+import Amazonka.Signer.Types.ImageFormat
+import Amazonka.Signer.Types.Permission
+import Amazonka.Signer.Types.S3Destination
+import Amazonka.Signer.Types.S3SignedObject
+import Amazonka.Signer.Types.S3Source
+import Amazonka.Signer.Types.SignatureValidityPeriod
+import Amazonka.Signer.Types.SignedObject
+import Amazonka.Signer.Types.SigningConfiguration
+import Amazonka.Signer.Types.SigningConfigurationOverrides
+import Amazonka.Signer.Types.SigningImageFormat
+import Amazonka.Signer.Types.SigningJob
+import Amazonka.Signer.Types.SigningJobRevocationRecord
+import Amazonka.Signer.Types.SigningMaterial
+import Amazonka.Signer.Types.SigningPlatform
+import Amazonka.Signer.Types.SigningPlatformOverrides
+import Amazonka.Signer.Types.SigningProfile
+import Amazonka.Signer.Types.SigningProfileRevocationRecord
+import Amazonka.Signer.Types.SigningProfileStatus
+import Amazonka.Signer.Types.SigningStatus
+import Amazonka.Signer.Types.Source
+import Amazonka.Signer.Types.ValidityType
+
+-- | API version @2017-08-25@ of the Amazon Signer SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Signer",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "signer",
+      Core.signingName = "signer",
+      Core.version = "2017-08-25",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Signer",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | You do not have sufficient access to perform this action.
+_AccessDeniedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AccessDeniedException =
+  Core._MatchServiceError
+    defaultService
+    "AccessDeniedException"
+    Prelude.. Core.hasStatus 403
+
+-- | The request contains invalid parameters for the ARN or tags. This
+-- exception also occurs when you call a tagging API on a cancelled signing
+-- profile.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource encountered a conflicting state.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | An internal error occurred.
+_InternalServiceErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServiceErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServiceErrorException"
+    Prelude.. Core.hasStatus 500
+
+-- | The signing profile was not found.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | A specified resource could not be found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | The client is making a request that exceeds service limits.
+_ServiceLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceLimitExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | The request was denied due to request throttling.
+--
+-- Instead of this error, @TooManyRequestsException@ should be used.
+_ThrottlingException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ThrottlingException =
+  Core._MatchServiceError
+    defaultService
+    "ThrottlingException"
+    Prelude.. Core.hasStatus 429
+
+-- | The allowed number of job-signing requests has been exceeded.
+--
+-- This error supersedes the error @ThrottlingException@.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
+    Prelude.. Core.hasStatus 429
+
+-- | You signing certificate could not be validated.
+_ValidationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ValidationException =
+  Core._MatchServiceError
+    defaultService
+    "ValidationException"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/Signer/Types/Category.hs b/gen/Amazonka/Signer/Types/Category.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/Category.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.Category
+-- 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.Signer.Types.Category
+  ( Category
+      ( ..,
+        Category_AWSIoT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Category = Category'
+  { fromCategory ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Category_AWSIoT :: Category
+pattern Category_AWSIoT = Category' "AWSIoT"
+
+{-# COMPLETE
+  Category_AWSIoT,
+  Category'
+  #-}
diff --git a/gen/Amazonka/Signer/Types/Destination.hs b/gen/Amazonka/Signer/Types/Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/Destination.hs
@@ -0,0 +1,65 @@
+{-# 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.Signer.Types.Destination
+-- 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.Signer.Types.Destination 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
+import Amazonka.Signer.Types.S3Destination
+
+-- | Points to an @S3Destination@ object that contains information about your
+-- S3 bucket.
+--
+-- /See:/ 'newDestination' smart constructor.
+data Destination = Destination'
+  { -- | The @S3Destination@ object.
+    s3 :: Prelude.Maybe S3Destination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Destination' 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:
+--
+-- 's3', 'destination_s3' - The @S3Destination@ object.
+newDestination ::
+  Destination
+newDestination = Destination' {s3 = Prelude.Nothing}
+
+-- | The @S3Destination@ object.
+destination_s3 :: Lens.Lens' Destination (Prelude.Maybe S3Destination)
+destination_s3 = Lens.lens (\Destination' {s3} -> s3) (\s@Destination' {} a -> s {s3 = a} :: Destination)
+
+instance Prelude.Hashable Destination where
+  hashWithSalt _salt Destination' {..} =
+    _salt `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData Destination where
+  rnf Destination' {..} = Prelude.rnf s3
+
+instance Data.ToJSON Destination where
+  toJSON Destination' {..} =
+    Data.object
+      (Prelude.catMaybes [("s3" Data..=) Prelude.<$> s3])
diff --git a/gen/Amazonka/Signer/Types/EncryptionAlgorithm.hs b/gen/Amazonka/Signer/Types/EncryptionAlgorithm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/EncryptionAlgorithm.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.EncryptionAlgorithm
+-- 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.Signer.Types.EncryptionAlgorithm
+  ( EncryptionAlgorithm
+      ( ..,
+        EncryptionAlgorithm_ECDSA,
+        EncryptionAlgorithm_RSA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EncryptionAlgorithm = EncryptionAlgorithm'
+  { fromEncryptionAlgorithm ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EncryptionAlgorithm_ECDSA :: EncryptionAlgorithm
+pattern EncryptionAlgorithm_ECDSA = EncryptionAlgorithm' "ECDSA"
+
+pattern EncryptionAlgorithm_RSA :: EncryptionAlgorithm
+pattern EncryptionAlgorithm_RSA = EncryptionAlgorithm' "RSA"
+
+{-# COMPLETE
+  EncryptionAlgorithm_ECDSA,
+  EncryptionAlgorithm_RSA,
+  EncryptionAlgorithm'
+  #-}
diff --git a/gen/Amazonka/Signer/Types/EncryptionAlgorithmOptions.hs b/gen/Amazonka/Signer/Types/EncryptionAlgorithmOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/EncryptionAlgorithmOptions.hs
@@ -0,0 +1,92 @@
+{-# 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.Signer.Types.EncryptionAlgorithmOptions
+-- 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.Signer.Types.EncryptionAlgorithmOptions 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
+import Amazonka.Signer.Types.EncryptionAlgorithm
+
+-- | The encryption algorithm options that are available to a code signing
+-- job.
+--
+-- /See:/ 'newEncryptionAlgorithmOptions' smart constructor.
+data EncryptionAlgorithmOptions = EncryptionAlgorithmOptions'
+  { -- | The set of accepted encryption algorithms that are allowed in a code
+    -- signing job.
+    allowedValues :: [EncryptionAlgorithm],
+    -- | The default encryption algorithm that is used by a code signing job.
+    defaultValue :: EncryptionAlgorithm
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EncryptionAlgorithmOptions' 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:
+--
+-- 'allowedValues', 'encryptionAlgorithmOptions_allowedValues' - The set of accepted encryption algorithms that are allowed in a code
+-- signing job.
+--
+-- 'defaultValue', 'encryptionAlgorithmOptions_defaultValue' - The default encryption algorithm that is used by a code signing job.
+newEncryptionAlgorithmOptions ::
+  -- | 'defaultValue'
+  EncryptionAlgorithm ->
+  EncryptionAlgorithmOptions
+newEncryptionAlgorithmOptions pDefaultValue_ =
+  EncryptionAlgorithmOptions'
+    { allowedValues =
+        Prelude.mempty,
+      defaultValue = pDefaultValue_
+    }
+
+-- | The set of accepted encryption algorithms that are allowed in a code
+-- signing job.
+encryptionAlgorithmOptions_allowedValues :: Lens.Lens' EncryptionAlgorithmOptions [EncryptionAlgorithm]
+encryptionAlgorithmOptions_allowedValues = Lens.lens (\EncryptionAlgorithmOptions' {allowedValues} -> allowedValues) (\s@EncryptionAlgorithmOptions' {} a -> s {allowedValues = a} :: EncryptionAlgorithmOptions) Prelude.. Lens.coerced
+
+-- | The default encryption algorithm that is used by a code signing job.
+encryptionAlgorithmOptions_defaultValue :: Lens.Lens' EncryptionAlgorithmOptions EncryptionAlgorithm
+encryptionAlgorithmOptions_defaultValue = Lens.lens (\EncryptionAlgorithmOptions' {defaultValue} -> defaultValue) (\s@EncryptionAlgorithmOptions' {} a -> s {defaultValue = a} :: EncryptionAlgorithmOptions)
+
+instance Data.FromJSON EncryptionAlgorithmOptions where
+  parseJSON =
+    Data.withObject
+      "EncryptionAlgorithmOptions"
+      ( \x ->
+          EncryptionAlgorithmOptions'
+            Prelude.<$> (x Data..:? "allowedValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "defaultValue")
+      )
+
+instance Prelude.Hashable EncryptionAlgorithmOptions where
+  hashWithSalt _salt EncryptionAlgorithmOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedValues
+      `Prelude.hashWithSalt` defaultValue
+
+instance Prelude.NFData EncryptionAlgorithmOptions where
+  rnf EncryptionAlgorithmOptions' {..} =
+    Prelude.rnf allowedValues
+      `Prelude.seq` Prelude.rnf defaultValue
diff --git a/gen/Amazonka/Signer/Types/HashAlgorithm.hs b/gen/Amazonka/Signer/Types/HashAlgorithm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/HashAlgorithm.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.HashAlgorithm
+-- 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.Signer.Types.HashAlgorithm
+  ( HashAlgorithm
+      ( ..,
+        HashAlgorithm_SHA1,
+        HashAlgorithm_SHA256
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype HashAlgorithm = HashAlgorithm'
+  { fromHashAlgorithm ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HashAlgorithm_SHA1 :: HashAlgorithm
+pattern HashAlgorithm_SHA1 = HashAlgorithm' "SHA1"
+
+pattern HashAlgorithm_SHA256 :: HashAlgorithm
+pattern HashAlgorithm_SHA256 = HashAlgorithm' "SHA256"
+
+{-# COMPLETE
+  HashAlgorithm_SHA1,
+  HashAlgorithm_SHA256,
+  HashAlgorithm'
+  #-}
diff --git a/gen/Amazonka/Signer/Types/HashAlgorithmOptions.hs b/gen/Amazonka/Signer/Types/HashAlgorithmOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/HashAlgorithmOptions.hs
@@ -0,0 +1,88 @@
+{-# 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.Signer.Types.HashAlgorithmOptions
+-- 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.Signer.Types.HashAlgorithmOptions 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
+import Amazonka.Signer.Types.HashAlgorithm
+
+-- | The hash algorithms that are available to a code signing job.
+--
+-- /See:/ 'newHashAlgorithmOptions' smart constructor.
+data HashAlgorithmOptions = HashAlgorithmOptions'
+  { -- | The set of accepted hash algorithms allowed in a code signing job.
+    allowedValues :: [HashAlgorithm],
+    -- | The default hash algorithm that is used in a code signing job.
+    defaultValue :: HashAlgorithm
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HashAlgorithmOptions' 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:
+--
+-- 'allowedValues', 'hashAlgorithmOptions_allowedValues' - The set of accepted hash algorithms allowed in a code signing job.
+--
+-- 'defaultValue', 'hashAlgorithmOptions_defaultValue' - The default hash algorithm that is used in a code signing job.
+newHashAlgorithmOptions ::
+  -- | 'defaultValue'
+  HashAlgorithm ->
+  HashAlgorithmOptions
+newHashAlgorithmOptions pDefaultValue_ =
+  HashAlgorithmOptions'
+    { allowedValues =
+        Prelude.mempty,
+      defaultValue = pDefaultValue_
+    }
+
+-- | The set of accepted hash algorithms allowed in a code signing job.
+hashAlgorithmOptions_allowedValues :: Lens.Lens' HashAlgorithmOptions [HashAlgorithm]
+hashAlgorithmOptions_allowedValues = Lens.lens (\HashAlgorithmOptions' {allowedValues} -> allowedValues) (\s@HashAlgorithmOptions' {} a -> s {allowedValues = a} :: HashAlgorithmOptions) Prelude.. Lens.coerced
+
+-- | The default hash algorithm that is used in a code signing job.
+hashAlgorithmOptions_defaultValue :: Lens.Lens' HashAlgorithmOptions HashAlgorithm
+hashAlgorithmOptions_defaultValue = Lens.lens (\HashAlgorithmOptions' {defaultValue} -> defaultValue) (\s@HashAlgorithmOptions' {} a -> s {defaultValue = a} :: HashAlgorithmOptions)
+
+instance Data.FromJSON HashAlgorithmOptions where
+  parseJSON =
+    Data.withObject
+      "HashAlgorithmOptions"
+      ( \x ->
+          HashAlgorithmOptions'
+            Prelude.<$> (x Data..:? "allowedValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "defaultValue")
+      )
+
+instance Prelude.Hashable HashAlgorithmOptions where
+  hashWithSalt _salt HashAlgorithmOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowedValues
+      `Prelude.hashWithSalt` defaultValue
+
+instance Prelude.NFData HashAlgorithmOptions where
+  rnf HashAlgorithmOptions' {..} =
+    Prelude.rnf allowedValues
+      `Prelude.seq` Prelude.rnf defaultValue
diff --git a/gen/Amazonka/Signer/Types/ImageFormat.hs b/gen/Amazonka/Signer/Types/ImageFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/ImageFormat.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.ImageFormat
+-- 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.Signer.Types.ImageFormat
+  ( ImageFormat
+      ( ..,
+        ImageFormat_JSON,
+        ImageFormat_JSONDetached,
+        ImageFormat_JSONEmbedded
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageFormat = ImageFormat'
+  { fromImageFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageFormat_JSON :: ImageFormat
+pattern ImageFormat_JSON = ImageFormat' "JSON"
+
+pattern ImageFormat_JSONDetached :: ImageFormat
+pattern ImageFormat_JSONDetached = ImageFormat' "JSONDetached"
+
+pattern ImageFormat_JSONEmbedded :: ImageFormat
+pattern ImageFormat_JSONEmbedded = ImageFormat' "JSONEmbedded"
+
+{-# COMPLETE
+  ImageFormat_JSON,
+  ImageFormat_JSONDetached,
+  ImageFormat_JSONEmbedded,
+  ImageFormat'
+  #-}
diff --git a/gen/Amazonka/Signer/Types/Permission.hs b/gen/Amazonka/Signer/Types/Permission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/Permission.hs
@@ -0,0 +1,108 @@
+{-# 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.Signer.Types.Permission
+-- 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.Signer.Types.Permission 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
+
+-- | A cross-account permission for a signing profile.
+--
+-- /See:/ 'newPermission' smart constructor.
+data Permission = Permission'
+  { -- | An AWS Signer action permitted as part of cross-account permissions.
+    action :: Prelude.Maybe Prelude.Text,
+    -- | The AWS principal that has been granted a cross-account permission.
+    principal :: Prelude.Maybe Prelude.Text,
+    -- | The signing profile version that a permission applies to.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | A unique identifier for a cross-account permission statement.
+    statementId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Permission' 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:
+--
+-- 'action', 'permission_action' - An AWS Signer action permitted as part of cross-account permissions.
+--
+-- 'principal', 'permission_principal' - The AWS principal that has been granted a cross-account permission.
+--
+-- 'profileVersion', 'permission_profileVersion' - The signing profile version that a permission applies to.
+--
+-- 'statementId', 'permission_statementId' - A unique identifier for a cross-account permission statement.
+newPermission ::
+  Permission
+newPermission =
+  Permission'
+    { action = Prelude.Nothing,
+      principal = Prelude.Nothing,
+      profileVersion = Prelude.Nothing,
+      statementId = Prelude.Nothing
+    }
+
+-- | An AWS Signer action permitted as part of cross-account permissions.
+permission_action :: Lens.Lens' Permission (Prelude.Maybe Prelude.Text)
+permission_action = Lens.lens (\Permission' {action} -> action) (\s@Permission' {} a -> s {action = a} :: Permission)
+
+-- | The AWS principal that has been granted a cross-account permission.
+permission_principal :: Lens.Lens' Permission (Prelude.Maybe Prelude.Text)
+permission_principal = Lens.lens (\Permission' {principal} -> principal) (\s@Permission' {} a -> s {principal = a} :: Permission)
+
+-- | The signing profile version that a permission applies to.
+permission_profileVersion :: Lens.Lens' Permission (Prelude.Maybe Prelude.Text)
+permission_profileVersion = Lens.lens (\Permission' {profileVersion} -> profileVersion) (\s@Permission' {} a -> s {profileVersion = a} :: Permission)
+
+-- | A unique identifier for a cross-account permission statement.
+permission_statementId :: Lens.Lens' Permission (Prelude.Maybe Prelude.Text)
+permission_statementId = Lens.lens (\Permission' {statementId} -> statementId) (\s@Permission' {} a -> s {statementId = a} :: Permission)
+
+instance Data.FromJSON Permission where
+  parseJSON =
+    Data.withObject
+      "Permission"
+      ( \x ->
+          Permission'
+            Prelude.<$> (x Data..:? "action")
+            Prelude.<*> (x Data..:? "principal")
+            Prelude.<*> (x Data..:? "profileVersion")
+            Prelude.<*> (x Data..:? "statementId")
+      )
+
+instance Prelude.Hashable Permission where
+  hashWithSalt _salt Permission' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` principal
+      `Prelude.hashWithSalt` profileVersion
+      `Prelude.hashWithSalt` statementId
+
+instance Prelude.NFData Permission where
+  rnf Permission' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf principal
+      `Prelude.seq` Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf statementId
diff --git a/gen/Amazonka/Signer/Types/S3Destination.hs b/gen/Amazonka/Signer/Types/S3Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/S3Destination.hs
@@ -0,0 +1,87 @@
+{-# 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.Signer.Types.S3Destination
+-- 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.Signer.Types.S3Destination 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
+
+-- | The name and prefix of the S3 bucket where code signing saves your
+-- signed objects.
+--
+-- /See:/ 'newS3Destination' smart constructor.
+data S3Destination = S3Destination'
+  { -- | Name of the S3 bucket.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | An Amazon S3 prefix that you can use to limit responses to those that
+    -- begin with the specified prefix.
+    prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Destination' 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:
+--
+-- 'bucketName', 's3Destination_bucketName' - Name of the S3 bucket.
+--
+-- 'prefix', 's3Destination_prefix' - An Amazon S3 prefix that you can use to limit responses to those that
+-- begin with the specified prefix.
+newS3Destination ::
+  S3Destination
+newS3Destination =
+  S3Destination'
+    { bucketName = Prelude.Nothing,
+      prefix = Prelude.Nothing
+    }
+
+-- | Name of the S3 bucket.
+s3Destination_bucketName :: Lens.Lens' S3Destination (Prelude.Maybe Prelude.Text)
+s3Destination_bucketName = Lens.lens (\S3Destination' {bucketName} -> bucketName) (\s@S3Destination' {} a -> s {bucketName = a} :: S3Destination)
+
+-- | An Amazon S3 prefix that you can use to limit responses to those that
+-- begin with the specified prefix.
+s3Destination_prefix :: Lens.Lens' S3Destination (Prelude.Maybe Prelude.Text)
+s3Destination_prefix = Lens.lens (\S3Destination' {prefix} -> prefix) (\s@S3Destination' {} a -> s {prefix = a} :: S3Destination)
+
+instance Prelude.Hashable S3Destination where
+  hashWithSalt _salt S3Destination' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` prefix
+
+instance Prelude.NFData S3Destination where
+  rnf S3Destination' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf prefix
+
+instance Data.ToJSON S3Destination where
+  toJSON S3Destination' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucketName" Data..=) Prelude.<$> bucketName,
+            ("prefix" Data..=) Prelude.<$> prefix
+          ]
+      )
diff --git a/gen/Amazonka/Signer/Types/S3SignedObject.hs b/gen/Amazonka/Signer/Types/S3SignedObject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/S3SignedObject.hs
@@ -0,0 +1,85 @@
+{-# 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.Signer.Types.S3SignedObject
+-- 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.Signer.Types.S3SignedObject 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
+
+-- | The S3 bucket name and key where code signing saved your signed code
+-- image.
+--
+-- /See:/ 'newS3SignedObject' smart constructor.
+data S3SignedObject = S3SignedObject'
+  { -- | Name of the S3 bucket.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | Key name that uniquely identifies a signed code image in your bucket.
+    key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3SignedObject' 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:
+--
+-- 'bucketName', 's3SignedObject_bucketName' - Name of the S3 bucket.
+--
+-- 'key', 's3SignedObject_key' - Key name that uniquely identifies a signed code image in your bucket.
+newS3SignedObject ::
+  S3SignedObject
+newS3SignedObject =
+  S3SignedObject'
+    { bucketName = Prelude.Nothing,
+      key = Prelude.Nothing
+    }
+
+-- | Name of the S3 bucket.
+s3SignedObject_bucketName :: Lens.Lens' S3SignedObject (Prelude.Maybe Prelude.Text)
+s3SignedObject_bucketName = Lens.lens (\S3SignedObject' {bucketName} -> bucketName) (\s@S3SignedObject' {} a -> s {bucketName = a} :: S3SignedObject)
+
+-- | Key name that uniquely identifies a signed code image in your bucket.
+s3SignedObject_key :: Lens.Lens' S3SignedObject (Prelude.Maybe Prelude.Text)
+s3SignedObject_key = Lens.lens (\S3SignedObject' {key} -> key) (\s@S3SignedObject' {} a -> s {key = a} :: S3SignedObject)
+
+instance Data.FromJSON S3SignedObject where
+  parseJSON =
+    Data.withObject
+      "S3SignedObject"
+      ( \x ->
+          S3SignedObject'
+            Prelude.<$> (x Data..:? "bucketName")
+            Prelude.<*> (x Data..:? "key")
+      )
+
+instance Prelude.Hashable S3SignedObject where
+  hashWithSalt _salt S3SignedObject' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData S3SignedObject where
+  rnf S3SignedObject' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf key
diff --git a/gen/Amazonka/Signer/Types/S3Source.hs b/gen/Amazonka/Signer/Types/S3Source.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/S3Source.hs
@@ -0,0 +1,112 @@
+{-# 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.Signer.Types.S3Source
+-- 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.Signer.Types.S3Source 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
+
+-- | Information about the S3 bucket where you saved your unsigned code.
+--
+-- /See:/ 'newS3Source' smart constructor.
+data S3Source = S3Source'
+  { -- | Name of the S3 bucket.
+    bucketName :: Prelude.Text,
+    -- | Key name of the bucket object that contains your unsigned code.
+    key :: Prelude.Text,
+    -- | Version of your source image in your version enabled S3 bucket.
+    version :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Source' 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:
+--
+-- 'bucketName', 's3Source_bucketName' - Name of the S3 bucket.
+--
+-- 'key', 's3Source_key' - Key name of the bucket object that contains your unsigned code.
+--
+-- 'version', 's3Source_version' - Version of your source image in your version enabled S3 bucket.
+newS3Source ::
+  -- | 'bucketName'
+  Prelude.Text ->
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'version'
+  Prelude.Text ->
+  S3Source
+newS3Source pBucketName_ pKey_ pVersion_ =
+  S3Source'
+    { bucketName = pBucketName_,
+      key = pKey_,
+      version = pVersion_
+    }
+
+-- | Name of the S3 bucket.
+s3Source_bucketName :: Lens.Lens' S3Source Prelude.Text
+s3Source_bucketName = Lens.lens (\S3Source' {bucketName} -> bucketName) (\s@S3Source' {} a -> s {bucketName = a} :: S3Source)
+
+-- | Key name of the bucket object that contains your unsigned code.
+s3Source_key :: Lens.Lens' S3Source Prelude.Text
+s3Source_key = Lens.lens (\S3Source' {key} -> key) (\s@S3Source' {} a -> s {key = a} :: S3Source)
+
+-- | Version of your source image in your version enabled S3 bucket.
+s3Source_version :: Lens.Lens' S3Source Prelude.Text
+s3Source_version = Lens.lens (\S3Source' {version} -> version) (\s@S3Source' {} a -> s {version = a} :: S3Source)
+
+instance Data.FromJSON S3Source where
+  parseJSON =
+    Data.withObject
+      "S3Source"
+      ( \x ->
+          S3Source'
+            Prelude.<$> (x Data..: "bucketName")
+            Prelude.<*> (x Data..: "key")
+            Prelude.<*> (x Data..: "version")
+      )
+
+instance Prelude.Hashable S3Source where
+  hashWithSalt _salt S3Source' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketName
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData S3Source where
+  rnf S3Source' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf version
+
+instance Data.ToJSON S3Source where
+  toJSON S3Source' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("bucketName" Data..= bucketName),
+            Prelude.Just ("key" Data..= key),
+            Prelude.Just ("version" Data..= version)
+          ]
+      )
diff --git a/gen/Amazonka/Signer/Types/SignatureValidityPeriod.hs b/gen/Amazonka/Signer/Types/SignatureValidityPeriod.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SignatureValidityPeriod.hs
@@ -0,0 +1,93 @@
+{-# 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.Signer.Types.SignatureValidityPeriod
+-- 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.Signer.Types.SignatureValidityPeriod 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
+import Amazonka.Signer.Types.ValidityType
+
+-- | The validity period for a signing job.
+--
+-- /See:/ 'newSignatureValidityPeriod' smart constructor.
+data SignatureValidityPeriod = SignatureValidityPeriod'
+  { -- | The time unit for signature validity.
+    type' :: Prelude.Maybe ValidityType,
+    -- | The numerical value of the time unit for signature validity.
+    value :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SignatureValidityPeriod' 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:
+--
+-- 'type'', 'signatureValidityPeriod_type' - The time unit for signature validity.
+--
+-- 'value', 'signatureValidityPeriod_value' - The numerical value of the time unit for signature validity.
+newSignatureValidityPeriod ::
+  SignatureValidityPeriod
+newSignatureValidityPeriod =
+  SignatureValidityPeriod'
+    { type' = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The time unit for signature validity.
+signatureValidityPeriod_type :: Lens.Lens' SignatureValidityPeriod (Prelude.Maybe ValidityType)
+signatureValidityPeriod_type = Lens.lens (\SignatureValidityPeriod' {type'} -> type') (\s@SignatureValidityPeriod' {} a -> s {type' = a} :: SignatureValidityPeriod)
+
+-- | The numerical value of the time unit for signature validity.
+signatureValidityPeriod_value :: Lens.Lens' SignatureValidityPeriod (Prelude.Maybe Prelude.Int)
+signatureValidityPeriod_value = Lens.lens (\SignatureValidityPeriod' {value} -> value) (\s@SignatureValidityPeriod' {} a -> s {value = a} :: SignatureValidityPeriod)
+
+instance Data.FromJSON SignatureValidityPeriod where
+  parseJSON =
+    Data.withObject
+      "SignatureValidityPeriod"
+      ( \x ->
+          SignatureValidityPeriod'
+            Prelude.<$> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable SignatureValidityPeriod where
+  hashWithSalt _salt SignatureValidityPeriod' {..} =
+    _salt
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData SignatureValidityPeriod where
+  rnf SignatureValidityPeriod' {..} =
+    Prelude.rnf type' `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON SignatureValidityPeriod where
+  toJSON SignatureValidityPeriod' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("type" Data..=) Prelude.<$> type',
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/Signer/Types/SignedObject.hs b/gen/Amazonka/Signer/Types/SignedObject.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SignedObject.hs
@@ -0,0 +1,66 @@
+{-# 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.Signer.Types.SignedObject
+-- 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.Signer.Types.SignedObject 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
+import Amazonka.Signer.Types.S3SignedObject
+
+-- | Points to an @S3SignedObject@ object that contains information about
+-- your signed code image.
+--
+-- /See:/ 'newSignedObject' smart constructor.
+data SignedObject = SignedObject'
+  { -- | The @S3SignedObject@.
+    s3 :: Prelude.Maybe S3SignedObject
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SignedObject' 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:
+--
+-- 's3', 'signedObject_s3' - The @S3SignedObject@.
+newSignedObject ::
+  SignedObject
+newSignedObject = SignedObject' {s3 = Prelude.Nothing}
+
+-- | The @S3SignedObject@.
+signedObject_s3 :: Lens.Lens' SignedObject (Prelude.Maybe S3SignedObject)
+signedObject_s3 = Lens.lens (\SignedObject' {s3} -> s3) (\s@SignedObject' {} a -> s {s3 = a} :: SignedObject)
+
+instance Data.FromJSON SignedObject where
+  parseJSON =
+    Data.withObject
+      "SignedObject"
+      (\x -> SignedObject' Prelude.<$> (x Data..:? "s3"))
+
+instance Prelude.Hashable SignedObject where
+  hashWithSalt _salt SignedObject' {..} =
+    _salt `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData SignedObject where
+  rnf SignedObject' {..} = Prelude.rnf s3
diff --git a/gen/Amazonka/Signer/Types/SigningConfiguration.hs b/gen/Amazonka/Signer/Types/SigningConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningConfiguration.hs
@@ -0,0 +1,96 @@
+{-# 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.Signer.Types.SigningConfiguration
+-- 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.Signer.Types.SigningConfiguration 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
+import Amazonka.Signer.Types.EncryptionAlgorithmOptions
+import Amazonka.Signer.Types.HashAlgorithmOptions
+
+-- | The configuration of a code signing operation.
+--
+-- /See:/ 'newSigningConfiguration' smart constructor.
+data SigningConfiguration = SigningConfiguration'
+  { -- | The encryption algorithm options that are available for a code signing
+    -- job.
+    encryptionAlgorithmOptions :: EncryptionAlgorithmOptions,
+    -- | The hash algorithm options that are available for a code signing job.
+    hashAlgorithmOptions :: HashAlgorithmOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningConfiguration' 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:
+--
+-- 'encryptionAlgorithmOptions', 'signingConfiguration_encryptionAlgorithmOptions' - The encryption algorithm options that are available for a code signing
+-- job.
+--
+-- 'hashAlgorithmOptions', 'signingConfiguration_hashAlgorithmOptions' - The hash algorithm options that are available for a code signing job.
+newSigningConfiguration ::
+  -- | 'encryptionAlgorithmOptions'
+  EncryptionAlgorithmOptions ->
+  -- | 'hashAlgorithmOptions'
+  HashAlgorithmOptions ->
+  SigningConfiguration
+newSigningConfiguration
+  pEncryptionAlgorithmOptions_
+  pHashAlgorithmOptions_ =
+    SigningConfiguration'
+      { encryptionAlgorithmOptions =
+          pEncryptionAlgorithmOptions_,
+        hashAlgorithmOptions = pHashAlgorithmOptions_
+      }
+
+-- | The encryption algorithm options that are available for a code signing
+-- job.
+signingConfiguration_encryptionAlgorithmOptions :: Lens.Lens' SigningConfiguration EncryptionAlgorithmOptions
+signingConfiguration_encryptionAlgorithmOptions = Lens.lens (\SigningConfiguration' {encryptionAlgorithmOptions} -> encryptionAlgorithmOptions) (\s@SigningConfiguration' {} a -> s {encryptionAlgorithmOptions = a} :: SigningConfiguration)
+
+-- | The hash algorithm options that are available for a code signing job.
+signingConfiguration_hashAlgorithmOptions :: Lens.Lens' SigningConfiguration HashAlgorithmOptions
+signingConfiguration_hashAlgorithmOptions = Lens.lens (\SigningConfiguration' {hashAlgorithmOptions} -> hashAlgorithmOptions) (\s@SigningConfiguration' {} a -> s {hashAlgorithmOptions = a} :: SigningConfiguration)
+
+instance Data.FromJSON SigningConfiguration where
+  parseJSON =
+    Data.withObject
+      "SigningConfiguration"
+      ( \x ->
+          SigningConfiguration'
+            Prelude.<$> (x Data..: "encryptionAlgorithmOptions")
+            Prelude.<*> (x Data..: "hashAlgorithmOptions")
+      )
+
+instance Prelude.Hashable SigningConfiguration where
+  hashWithSalt _salt SigningConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionAlgorithmOptions
+      `Prelude.hashWithSalt` hashAlgorithmOptions
+
+instance Prelude.NFData SigningConfiguration where
+  rnf SigningConfiguration' {..} =
+    Prelude.rnf encryptionAlgorithmOptions
+      `Prelude.seq` Prelude.rnf hashAlgorithmOptions
diff --git a/gen/Amazonka/Signer/Types/SigningConfigurationOverrides.hs b/gen/Amazonka/Signer/Types/SigningConfigurationOverrides.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningConfigurationOverrides.hs
@@ -0,0 +1,107 @@
+{-# 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.Signer.Types.SigningConfigurationOverrides
+-- 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.Signer.Types.SigningConfigurationOverrides 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
+import Amazonka.Signer.Types.EncryptionAlgorithm
+import Amazonka.Signer.Types.HashAlgorithm
+
+-- | A signing configuration that overrides the default encryption or hash
+-- algorithm of a signing job.
+--
+-- /See:/ 'newSigningConfigurationOverrides' smart constructor.
+data SigningConfigurationOverrides = SigningConfigurationOverrides'
+  { -- | A specified override of the default encryption algorithm that is used in
+    -- a code signing job.
+    encryptionAlgorithm :: Prelude.Maybe EncryptionAlgorithm,
+    -- | A specified override of the default hash algorithm that is used in a
+    -- code signing job.
+    hashAlgorithm :: Prelude.Maybe HashAlgorithm
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningConfigurationOverrides' 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:
+--
+-- 'encryptionAlgorithm', 'signingConfigurationOverrides_encryptionAlgorithm' - A specified override of the default encryption algorithm that is used in
+-- a code signing job.
+--
+-- 'hashAlgorithm', 'signingConfigurationOverrides_hashAlgorithm' - A specified override of the default hash algorithm that is used in a
+-- code signing job.
+newSigningConfigurationOverrides ::
+  SigningConfigurationOverrides
+newSigningConfigurationOverrides =
+  SigningConfigurationOverrides'
+    { encryptionAlgorithm =
+        Prelude.Nothing,
+      hashAlgorithm = Prelude.Nothing
+    }
+
+-- | A specified override of the default encryption algorithm that is used in
+-- a code signing job.
+signingConfigurationOverrides_encryptionAlgorithm :: Lens.Lens' SigningConfigurationOverrides (Prelude.Maybe EncryptionAlgorithm)
+signingConfigurationOverrides_encryptionAlgorithm = Lens.lens (\SigningConfigurationOverrides' {encryptionAlgorithm} -> encryptionAlgorithm) (\s@SigningConfigurationOverrides' {} a -> s {encryptionAlgorithm = a} :: SigningConfigurationOverrides)
+
+-- | A specified override of the default hash algorithm that is used in a
+-- code signing job.
+signingConfigurationOverrides_hashAlgorithm :: Lens.Lens' SigningConfigurationOverrides (Prelude.Maybe HashAlgorithm)
+signingConfigurationOverrides_hashAlgorithm = Lens.lens (\SigningConfigurationOverrides' {hashAlgorithm} -> hashAlgorithm) (\s@SigningConfigurationOverrides' {} a -> s {hashAlgorithm = a} :: SigningConfigurationOverrides)
+
+instance Data.FromJSON SigningConfigurationOverrides where
+  parseJSON =
+    Data.withObject
+      "SigningConfigurationOverrides"
+      ( \x ->
+          SigningConfigurationOverrides'
+            Prelude.<$> (x Data..:? "encryptionAlgorithm")
+            Prelude.<*> (x Data..:? "hashAlgorithm")
+      )
+
+instance
+  Prelude.Hashable
+    SigningConfigurationOverrides
+  where
+  hashWithSalt _salt SigningConfigurationOverrides' {..} =
+    _salt
+      `Prelude.hashWithSalt` encryptionAlgorithm
+      `Prelude.hashWithSalt` hashAlgorithm
+
+instance Prelude.NFData SigningConfigurationOverrides where
+  rnf SigningConfigurationOverrides' {..} =
+    Prelude.rnf encryptionAlgorithm
+      `Prelude.seq` Prelude.rnf hashAlgorithm
+
+instance Data.ToJSON SigningConfigurationOverrides where
+  toJSON SigningConfigurationOverrides' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encryptionAlgorithm" Data..=)
+              Prelude.<$> encryptionAlgorithm,
+            ("hashAlgorithm" Data..=) Prelude.<$> hashAlgorithm
+          ]
+      )
diff --git a/gen/Amazonka/Signer/Types/SigningImageFormat.hs b/gen/Amazonka/Signer/Types/SigningImageFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningImageFormat.hs
@@ -0,0 +1,91 @@
+{-# 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.Signer.Types.SigningImageFormat
+-- 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.Signer.Types.SigningImageFormat 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
+import Amazonka.Signer.Types.ImageFormat
+
+-- | The image format of a code signing platform or profile.
+--
+-- /See:/ 'newSigningImageFormat' smart constructor.
+data SigningImageFormat = SigningImageFormat'
+  { -- | The supported formats of a code signing image.
+    supportedFormats :: [ImageFormat],
+    -- | The default format of a code signing image.
+    defaultFormat :: ImageFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningImageFormat' 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:
+--
+-- 'supportedFormats', 'signingImageFormat_supportedFormats' - The supported formats of a code signing image.
+--
+-- 'defaultFormat', 'signingImageFormat_defaultFormat' - The default format of a code signing image.
+newSigningImageFormat ::
+  -- | 'defaultFormat'
+  ImageFormat ->
+  SigningImageFormat
+newSigningImageFormat pDefaultFormat_ =
+  SigningImageFormat'
+    { supportedFormats =
+        Prelude.mempty,
+      defaultFormat = pDefaultFormat_
+    }
+
+-- | The supported formats of a code signing image.
+signingImageFormat_supportedFormats :: Lens.Lens' SigningImageFormat [ImageFormat]
+signingImageFormat_supportedFormats = Lens.lens (\SigningImageFormat' {supportedFormats} -> supportedFormats) (\s@SigningImageFormat' {} a -> s {supportedFormats = a} :: SigningImageFormat) Prelude.. Lens.coerced
+
+-- | The default format of a code signing image.
+signingImageFormat_defaultFormat :: Lens.Lens' SigningImageFormat ImageFormat
+signingImageFormat_defaultFormat = Lens.lens (\SigningImageFormat' {defaultFormat} -> defaultFormat) (\s@SigningImageFormat' {} a -> s {defaultFormat = a} :: SigningImageFormat)
+
+instance Data.FromJSON SigningImageFormat where
+  parseJSON =
+    Data.withObject
+      "SigningImageFormat"
+      ( \x ->
+          SigningImageFormat'
+            Prelude.<$> ( x
+                            Data..:? "supportedFormats"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "defaultFormat")
+      )
+
+instance Prelude.Hashable SigningImageFormat where
+  hashWithSalt _salt SigningImageFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` supportedFormats
+      `Prelude.hashWithSalt` defaultFormat
+
+instance Prelude.NFData SigningImageFormat where
+  rnf SigningImageFormat' {..} =
+    Prelude.rnf supportedFormats
+      `Prelude.seq` Prelude.rnf defaultFormat
diff --git a/gen/Amazonka/Signer/Types/SigningJob.hs b/gen/Amazonka/Signer/Types/SigningJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningJob.hs
@@ -0,0 +1,241 @@
+{-# 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.Signer.Types.SigningJob
+-- 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.Signer.Types.SigningJob 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
+import Amazonka.Signer.Types.SignedObject
+import Amazonka.Signer.Types.SigningMaterial
+import Amazonka.Signer.Types.SigningStatus
+import Amazonka.Signer.Types.Source
+
+-- | Contains information about a signing job.
+--
+-- /See:/ 'newSigningJob' smart constructor.
+data SigningJob = SigningJob'
+  { -- | The date and time that the signing job was created.
+    createdAt :: Prelude.Maybe Data.POSIX,
+    -- | Indicates whether the signing job is revoked.
+    isRevoked :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the signing job.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The AWS account ID of the job invoker.
+    jobInvoker :: Prelude.Maybe Prelude.Text,
+    -- | The AWS account ID of the job owner.
+    jobOwner :: Prelude.Maybe Prelude.Text,
+    -- | The name of a signing platform.
+    platformDisplayName :: Prelude.Maybe Prelude.Text,
+    -- | The unique identifier for a signing platform.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the signing profile that created a signing job.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the signing profile that created a signing job.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | The time when the signature of a signing job expires.
+    signatureExpiresAt :: Prelude.Maybe Data.POSIX,
+    -- | A @SignedObject@ structure that contains information about a signing
+    -- job\'s signed code image.
+    signedObject :: Prelude.Maybe SignedObject,
+    -- | A @SigningMaterial@ object that contains the Amazon Resource Name (ARN)
+    -- of the certificate used for the signing job.
+    signingMaterial :: Prelude.Maybe SigningMaterial,
+    -- | A @Source@ that contains information about a signing job\'s code image
+    -- source.
+    source :: Prelude.Maybe Source,
+    -- | The status of the signing job.
+    status :: Prelude.Maybe SigningStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningJob' 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:
+--
+-- 'createdAt', 'signingJob_createdAt' - The date and time that the signing job was created.
+--
+-- 'isRevoked', 'signingJob_isRevoked' - Indicates whether the signing job is revoked.
+--
+-- 'jobId', 'signingJob_jobId' - The ID of the signing job.
+--
+-- 'jobInvoker', 'signingJob_jobInvoker' - The AWS account ID of the job invoker.
+--
+-- 'jobOwner', 'signingJob_jobOwner' - The AWS account ID of the job owner.
+--
+-- 'platformDisplayName', 'signingJob_platformDisplayName' - The name of a signing platform.
+--
+-- 'platformId', 'signingJob_platformId' - The unique identifier for a signing platform.
+--
+-- 'profileName', 'signingJob_profileName' - The name of the signing profile that created a signing job.
+--
+-- 'profileVersion', 'signingJob_profileVersion' - The version of the signing profile that created a signing job.
+--
+-- 'signatureExpiresAt', 'signingJob_signatureExpiresAt' - The time when the signature of a signing job expires.
+--
+-- 'signedObject', 'signingJob_signedObject' - A @SignedObject@ structure that contains information about a signing
+-- job\'s signed code image.
+--
+-- 'signingMaterial', 'signingJob_signingMaterial' - A @SigningMaterial@ object that contains the Amazon Resource Name (ARN)
+-- of the certificate used for the signing job.
+--
+-- 'source', 'signingJob_source' - A @Source@ that contains information about a signing job\'s code image
+-- source.
+--
+-- 'status', 'signingJob_status' - The status of the signing job.
+newSigningJob ::
+  SigningJob
+newSigningJob =
+  SigningJob'
+    { createdAt = Prelude.Nothing,
+      isRevoked = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobInvoker = Prelude.Nothing,
+      jobOwner = Prelude.Nothing,
+      platformDisplayName = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      profileVersion = Prelude.Nothing,
+      signatureExpiresAt = Prelude.Nothing,
+      signedObject = Prelude.Nothing,
+      signingMaterial = Prelude.Nothing,
+      source = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The date and time that the signing job was created.
+signingJob_createdAt :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.UTCTime)
+signingJob_createdAt = Lens.lens (\SigningJob' {createdAt} -> createdAt) (\s@SigningJob' {} a -> s {createdAt = a} :: SigningJob) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether the signing job is revoked.
+signingJob_isRevoked :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Bool)
+signingJob_isRevoked = Lens.lens (\SigningJob' {isRevoked} -> isRevoked) (\s@SigningJob' {} a -> s {isRevoked = a} :: SigningJob)
+
+-- | The ID of the signing job.
+signingJob_jobId :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_jobId = Lens.lens (\SigningJob' {jobId} -> jobId) (\s@SigningJob' {} a -> s {jobId = a} :: SigningJob)
+
+-- | The AWS account ID of the job invoker.
+signingJob_jobInvoker :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_jobInvoker = Lens.lens (\SigningJob' {jobInvoker} -> jobInvoker) (\s@SigningJob' {} a -> s {jobInvoker = a} :: SigningJob)
+
+-- | The AWS account ID of the job owner.
+signingJob_jobOwner :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_jobOwner = Lens.lens (\SigningJob' {jobOwner} -> jobOwner) (\s@SigningJob' {} a -> s {jobOwner = a} :: SigningJob)
+
+-- | The name of a signing platform.
+signingJob_platformDisplayName :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_platformDisplayName = Lens.lens (\SigningJob' {platformDisplayName} -> platformDisplayName) (\s@SigningJob' {} a -> s {platformDisplayName = a} :: SigningJob)
+
+-- | The unique identifier for a signing platform.
+signingJob_platformId :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_platformId = Lens.lens (\SigningJob' {platformId} -> platformId) (\s@SigningJob' {} a -> s {platformId = a} :: SigningJob)
+
+-- | The name of the signing profile that created a signing job.
+signingJob_profileName :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_profileName = Lens.lens (\SigningJob' {profileName} -> profileName) (\s@SigningJob' {} a -> s {profileName = a} :: SigningJob)
+
+-- | The version of the signing profile that created a signing job.
+signingJob_profileVersion :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.Text)
+signingJob_profileVersion = Lens.lens (\SigningJob' {profileVersion} -> profileVersion) (\s@SigningJob' {} a -> s {profileVersion = a} :: SigningJob)
+
+-- | The time when the signature of a signing job expires.
+signingJob_signatureExpiresAt :: Lens.Lens' SigningJob (Prelude.Maybe Prelude.UTCTime)
+signingJob_signatureExpiresAt = Lens.lens (\SigningJob' {signatureExpiresAt} -> signatureExpiresAt) (\s@SigningJob' {} a -> s {signatureExpiresAt = a} :: SigningJob) Prelude.. Lens.mapping Data._Time
+
+-- | A @SignedObject@ structure that contains information about a signing
+-- job\'s signed code image.
+signingJob_signedObject :: Lens.Lens' SigningJob (Prelude.Maybe SignedObject)
+signingJob_signedObject = Lens.lens (\SigningJob' {signedObject} -> signedObject) (\s@SigningJob' {} a -> s {signedObject = a} :: SigningJob)
+
+-- | A @SigningMaterial@ object that contains the Amazon Resource Name (ARN)
+-- of the certificate used for the signing job.
+signingJob_signingMaterial :: Lens.Lens' SigningJob (Prelude.Maybe SigningMaterial)
+signingJob_signingMaterial = Lens.lens (\SigningJob' {signingMaterial} -> signingMaterial) (\s@SigningJob' {} a -> s {signingMaterial = a} :: SigningJob)
+
+-- | A @Source@ that contains information about a signing job\'s code image
+-- source.
+signingJob_source :: Lens.Lens' SigningJob (Prelude.Maybe Source)
+signingJob_source = Lens.lens (\SigningJob' {source} -> source) (\s@SigningJob' {} a -> s {source = a} :: SigningJob)
+
+-- | The status of the signing job.
+signingJob_status :: Lens.Lens' SigningJob (Prelude.Maybe SigningStatus)
+signingJob_status = Lens.lens (\SigningJob' {status} -> status) (\s@SigningJob' {} a -> s {status = a} :: SigningJob)
+
+instance Data.FromJSON SigningJob where
+  parseJSON =
+    Data.withObject
+      "SigningJob"
+      ( \x ->
+          SigningJob'
+            Prelude.<$> (x Data..:? "createdAt")
+            Prelude.<*> (x Data..:? "isRevoked")
+            Prelude.<*> (x Data..:? "jobId")
+            Prelude.<*> (x Data..:? "jobInvoker")
+            Prelude.<*> (x Data..:? "jobOwner")
+            Prelude.<*> (x Data..:? "platformDisplayName")
+            Prelude.<*> (x Data..:? "platformId")
+            Prelude.<*> (x Data..:? "profileName")
+            Prelude.<*> (x Data..:? "profileVersion")
+            Prelude.<*> (x Data..:? "signatureExpiresAt")
+            Prelude.<*> (x Data..:? "signedObject")
+            Prelude.<*> (x Data..:? "signingMaterial")
+            Prelude.<*> (x Data..:? "source")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable SigningJob where
+  hashWithSalt _salt SigningJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` isRevoked
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobInvoker
+      `Prelude.hashWithSalt` jobOwner
+      `Prelude.hashWithSalt` platformDisplayName
+      `Prelude.hashWithSalt` platformId
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` profileVersion
+      `Prelude.hashWithSalt` signatureExpiresAt
+      `Prelude.hashWithSalt` signedObject
+      `Prelude.hashWithSalt` signingMaterial
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData SigningJob where
+  rnf SigningJob' {..} =
+    Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf isRevoked
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobInvoker
+      `Prelude.seq` Prelude.rnf jobOwner
+      `Prelude.seq` Prelude.rnf platformDisplayName
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf signatureExpiresAt
+      `Prelude.seq` Prelude.rnf signedObject
+      `Prelude.seq` Prelude.rnf signingMaterial
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Signer/Types/SigningJobRevocationRecord.hs b/gen/Amazonka/Signer/Types/SigningJobRevocationRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningJobRevocationRecord.hs
@@ -0,0 +1,97 @@
+{-# 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.Signer.Types.SigningJobRevocationRecord
+-- 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.Signer.Types.SigningJobRevocationRecord 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
+
+-- | Revocation information for a signing job.
+--
+-- /See:/ 'newSigningJobRevocationRecord' smart constructor.
+data SigningJobRevocationRecord = SigningJobRevocationRecord'
+  { -- | A caller-supplied reason for revocation.
+    reason :: Prelude.Maybe Prelude.Text,
+    -- | The time of revocation.
+    revokedAt :: Prelude.Maybe Data.POSIX,
+    -- | The identity of the revoker.
+    revokedBy :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningJobRevocationRecord' 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:
+--
+-- 'reason', 'signingJobRevocationRecord_reason' - A caller-supplied reason for revocation.
+--
+-- 'revokedAt', 'signingJobRevocationRecord_revokedAt' - The time of revocation.
+--
+-- 'revokedBy', 'signingJobRevocationRecord_revokedBy' - The identity of the revoker.
+newSigningJobRevocationRecord ::
+  SigningJobRevocationRecord
+newSigningJobRevocationRecord =
+  SigningJobRevocationRecord'
+    { reason =
+        Prelude.Nothing,
+      revokedAt = Prelude.Nothing,
+      revokedBy = Prelude.Nothing
+    }
+
+-- | A caller-supplied reason for revocation.
+signingJobRevocationRecord_reason :: Lens.Lens' SigningJobRevocationRecord (Prelude.Maybe Prelude.Text)
+signingJobRevocationRecord_reason = Lens.lens (\SigningJobRevocationRecord' {reason} -> reason) (\s@SigningJobRevocationRecord' {} a -> s {reason = a} :: SigningJobRevocationRecord)
+
+-- | The time of revocation.
+signingJobRevocationRecord_revokedAt :: Lens.Lens' SigningJobRevocationRecord (Prelude.Maybe Prelude.UTCTime)
+signingJobRevocationRecord_revokedAt = Lens.lens (\SigningJobRevocationRecord' {revokedAt} -> revokedAt) (\s@SigningJobRevocationRecord' {} a -> s {revokedAt = a} :: SigningJobRevocationRecord) Prelude.. Lens.mapping Data._Time
+
+-- | The identity of the revoker.
+signingJobRevocationRecord_revokedBy :: Lens.Lens' SigningJobRevocationRecord (Prelude.Maybe Prelude.Text)
+signingJobRevocationRecord_revokedBy = Lens.lens (\SigningJobRevocationRecord' {revokedBy} -> revokedBy) (\s@SigningJobRevocationRecord' {} a -> s {revokedBy = a} :: SigningJobRevocationRecord)
+
+instance Data.FromJSON SigningJobRevocationRecord where
+  parseJSON =
+    Data.withObject
+      "SigningJobRevocationRecord"
+      ( \x ->
+          SigningJobRevocationRecord'
+            Prelude.<$> (x Data..:? "reason")
+            Prelude.<*> (x Data..:? "revokedAt")
+            Prelude.<*> (x Data..:? "revokedBy")
+      )
+
+instance Prelude.Hashable SigningJobRevocationRecord where
+  hashWithSalt _salt SigningJobRevocationRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` revokedAt
+      `Prelude.hashWithSalt` revokedBy
+
+instance Prelude.NFData SigningJobRevocationRecord where
+  rnf SigningJobRevocationRecord' {..} =
+    Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf revokedBy
diff --git a/gen/Amazonka/Signer/Types/SigningMaterial.hs b/gen/Amazonka/Signer/Types/SigningMaterial.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningMaterial.hs
@@ -0,0 +1,82 @@
+{-# 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.Signer.Types.SigningMaterial
+-- 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.Signer.Types.SigningMaterial 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
+
+-- | The ACM certificate that is used to sign your code.
+--
+-- /See:/ 'newSigningMaterial' smart constructor.
+data SigningMaterial = SigningMaterial'
+  { -- | The Amazon Resource Name (ARN) of the certificates that is used to sign
+    -- your code.
+    certificateArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningMaterial' 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:
+--
+-- 'certificateArn', 'signingMaterial_certificateArn' - The Amazon Resource Name (ARN) of the certificates that is used to sign
+-- your code.
+newSigningMaterial ::
+  -- | 'certificateArn'
+  Prelude.Text ->
+  SigningMaterial
+newSigningMaterial pCertificateArn_ =
+  SigningMaterial' {certificateArn = pCertificateArn_}
+
+-- | The Amazon Resource Name (ARN) of the certificates that is used to sign
+-- your code.
+signingMaterial_certificateArn :: Lens.Lens' SigningMaterial Prelude.Text
+signingMaterial_certificateArn = Lens.lens (\SigningMaterial' {certificateArn} -> certificateArn) (\s@SigningMaterial' {} a -> s {certificateArn = a} :: SigningMaterial)
+
+instance Data.FromJSON SigningMaterial where
+  parseJSON =
+    Data.withObject
+      "SigningMaterial"
+      ( \x ->
+          SigningMaterial'
+            Prelude.<$> (x Data..: "certificateArn")
+      )
+
+instance Prelude.Hashable SigningMaterial where
+  hashWithSalt _salt SigningMaterial' {..} =
+    _salt `Prelude.hashWithSalt` certificateArn
+
+instance Prelude.NFData SigningMaterial where
+  rnf SigningMaterial' {..} = Prelude.rnf certificateArn
+
+instance Data.ToJSON SigningMaterial where
+  toJSON SigningMaterial' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("certificateArn" Data..= certificateArn)
+          ]
+      )
diff --git a/gen/Amazonka/Signer/Types/SigningPlatform.hs b/gen/Amazonka/Signer/Types/SigningPlatform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningPlatform.hs
@@ -0,0 +1,180 @@
+{-# 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.Signer.Types.SigningPlatform
+-- 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.Signer.Types.SigningPlatform 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
+import Amazonka.Signer.Types.Category
+import Amazonka.Signer.Types.SigningConfiguration
+import Amazonka.Signer.Types.SigningImageFormat
+
+-- | Contains information about the signing configurations and parameters
+-- that are used to perform a code signing job.
+--
+-- /See:/ 'newSigningPlatform' smart constructor.
+data SigningPlatform = SigningPlatform'
+  { -- | The category of a code signing platform.
+    category :: Prelude.Maybe Category,
+    -- | The display name of a code signing platform.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum size (in MB) of code that can be signed by a code signing
+    -- platform.
+    maxSizeInMB :: Prelude.Maybe Prelude.Int,
+    -- | Any partner entities linked to a code signing platform.
+    partner :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a code signing; platform.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether revocation is supported for the platform.
+    revocationSupported :: Prelude.Maybe Prelude.Bool,
+    -- | The configuration of a code signing platform. This includes the
+    -- designated hash algorithm and encryption algorithm of a signing
+    -- platform.
+    signingConfiguration :: Prelude.Maybe SigningConfiguration,
+    signingImageFormat :: Prelude.Maybe SigningImageFormat,
+    -- | The types of targets that can be signed by a code signing platform.
+    target :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningPlatform' 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:
+--
+-- 'category', 'signingPlatform_category' - The category of a code signing platform.
+--
+-- 'displayName', 'signingPlatform_displayName' - The display name of a code signing platform.
+--
+-- 'maxSizeInMB', 'signingPlatform_maxSizeInMB' - The maximum size (in MB) of code that can be signed by a code signing
+-- platform.
+--
+-- 'partner', 'signingPlatform_partner' - Any partner entities linked to a code signing platform.
+--
+-- 'platformId', 'signingPlatform_platformId' - The ID of a code signing; platform.
+--
+-- 'revocationSupported', 'signingPlatform_revocationSupported' - Indicates whether revocation is supported for the platform.
+--
+-- 'signingConfiguration', 'signingPlatform_signingConfiguration' - The configuration of a code signing platform. This includes the
+-- designated hash algorithm and encryption algorithm of a signing
+-- platform.
+--
+-- 'signingImageFormat', 'signingPlatform_signingImageFormat' - Undocumented member.
+--
+-- 'target', 'signingPlatform_target' - The types of targets that can be signed by a code signing platform.
+newSigningPlatform ::
+  SigningPlatform
+newSigningPlatform =
+  SigningPlatform'
+    { category = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      maxSizeInMB = Prelude.Nothing,
+      partner = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      revocationSupported = Prelude.Nothing,
+      signingConfiguration = Prelude.Nothing,
+      signingImageFormat = Prelude.Nothing,
+      target = Prelude.Nothing
+    }
+
+-- | The category of a code signing platform.
+signingPlatform_category :: Lens.Lens' SigningPlatform (Prelude.Maybe Category)
+signingPlatform_category = Lens.lens (\SigningPlatform' {category} -> category) (\s@SigningPlatform' {} a -> s {category = a} :: SigningPlatform)
+
+-- | The display name of a code signing platform.
+signingPlatform_displayName :: Lens.Lens' SigningPlatform (Prelude.Maybe Prelude.Text)
+signingPlatform_displayName = Lens.lens (\SigningPlatform' {displayName} -> displayName) (\s@SigningPlatform' {} a -> s {displayName = a} :: SigningPlatform)
+
+-- | The maximum size (in MB) of code that can be signed by a code signing
+-- platform.
+signingPlatform_maxSizeInMB :: Lens.Lens' SigningPlatform (Prelude.Maybe Prelude.Int)
+signingPlatform_maxSizeInMB = Lens.lens (\SigningPlatform' {maxSizeInMB} -> maxSizeInMB) (\s@SigningPlatform' {} a -> s {maxSizeInMB = a} :: SigningPlatform)
+
+-- | Any partner entities linked to a code signing platform.
+signingPlatform_partner :: Lens.Lens' SigningPlatform (Prelude.Maybe Prelude.Text)
+signingPlatform_partner = Lens.lens (\SigningPlatform' {partner} -> partner) (\s@SigningPlatform' {} a -> s {partner = a} :: SigningPlatform)
+
+-- | The ID of a code signing; platform.
+signingPlatform_platformId :: Lens.Lens' SigningPlatform (Prelude.Maybe Prelude.Text)
+signingPlatform_platformId = Lens.lens (\SigningPlatform' {platformId} -> platformId) (\s@SigningPlatform' {} a -> s {platformId = a} :: SigningPlatform)
+
+-- | Indicates whether revocation is supported for the platform.
+signingPlatform_revocationSupported :: Lens.Lens' SigningPlatform (Prelude.Maybe Prelude.Bool)
+signingPlatform_revocationSupported = Lens.lens (\SigningPlatform' {revocationSupported} -> revocationSupported) (\s@SigningPlatform' {} a -> s {revocationSupported = a} :: SigningPlatform)
+
+-- | The configuration of a code signing platform. This includes the
+-- designated hash algorithm and encryption algorithm of a signing
+-- platform.
+signingPlatform_signingConfiguration :: Lens.Lens' SigningPlatform (Prelude.Maybe SigningConfiguration)
+signingPlatform_signingConfiguration = Lens.lens (\SigningPlatform' {signingConfiguration} -> signingConfiguration) (\s@SigningPlatform' {} a -> s {signingConfiguration = a} :: SigningPlatform)
+
+-- | Undocumented member.
+signingPlatform_signingImageFormat :: Lens.Lens' SigningPlatform (Prelude.Maybe SigningImageFormat)
+signingPlatform_signingImageFormat = Lens.lens (\SigningPlatform' {signingImageFormat} -> signingImageFormat) (\s@SigningPlatform' {} a -> s {signingImageFormat = a} :: SigningPlatform)
+
+-- | The types of targets that can be signed by a code signing platform.
+signingPlatform_target :: Lens.Lens' SigningPlatform (Prelude.Maybe Prelude.Text)
+signingPlatform_target = Lens.lens (\SigningPlatform' {target} -> target) (\s@SigningPlatform' {} a -> s {target = a} :: SigningPlatform)
+
+instance Data.FromJSON SigningPlatform where
+  parseJSON =
+    Data.withObject
+      "SigningPlatform"
+      ( \x ->
+          SigningPlatform'
+            Prelude.<$> (x Data..:? "category")
+            Prelude.<*> (x Data..:? "displayName")
+            Prelude.<*> (x Data..:? "maxSizeInMB")
+            Prelude.<*> (x Data..:? "partner")
+            Prelude.<*> (x Data..:? "platformId")
+            Prelude.<*> (x Data..:? "revocationSupported")
+            Prelude.<*> (x Data..:? "signingConfiguration")
+            Prelude.<*> (x Data..:? "signingImageFormat")
+            Prelude.<*> (x Data..:? "target")
+      )
+
+instance Prelude.Hashable SigningPlatform where
+  hashWithSalt _salt SigningPlatform' {..} =
+    _salt
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` maxSizeInMB
+      `Prelude.hashWithSalt` partner
+      `Prelude.hashWithSalt` platformId
+      `Prelude.hashWithSalt` revocationSupported
+      `Prelude.hashWithSalt` signingConfiguration
+      `Prelude.hashWithSalt` signingImageFormat
+      `Prelude.hashWithSalt` target
+
+instance Prelude.NFData SigningPlatform where
+  rnf SigningPlatform' {..} =
+    Prelude.rnf category
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf maxSizeInMB
+      `Prelude.seq` Prelude.rnf partner
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf revocationSupported
+      `Prelude.seq` Prelude.rnf signingConfiguration
+      `Prelude.seq` Prelude.rnf signingImageFormat
+      `Prelude.seq` Prelude.rnf target
diff --git a/gen/Amazonka/Signer/Types/SigningPlatformOverrides.hs b/gen/Amazonka/Signer/Types/SigningPlatformOverrides.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningPlatformOverrides.hs
@@ -0,0 +1,117 @@
+{-# 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.Signer.Types.SigningPlatformOverrides
+-- 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.Signer.Types.SigningPlatformOverrides 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
+import Amazonka.Signer.Types.ImageFormat
+import Amazonka.Signer.Types.SigningConfigurationOverrides
+
+-- | Any overrides that are applied to the signing configuration of a code
+-- signing platform.
+--
+-- /See:/ 'newSigningPlatformOverrides' smart constructor.
+data SigningPlatformOverrides = SigningPlatformOverrides'
+  { -- | A signing configuration that overrides the default encryption or hash
+    -- algorithm of a signing job.
+    signingConfiguration :: Prelude.Maybe SigningConfigurationOverrides,
+    -- | A signed image is a JSON object. When overriding the default signing
+    -- platform configuration, a customer can select either of two signing
+    -- formats, @JSONEmbedded@ or @JSONDetached@. (A third format value,
+    -- @JSON@, is reserved for future use.) With @JSONEmbedded@, the signing
+    -- image has the payload embedded in it. With @JSONDetached@, the payload
+    -- is not be embedded in the signing image.
+    signingImageFormat :: Prelude.Maybe ImageFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningPlatformOverrides' 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:
+--
+-- 'signingConfiguration', 'signingPlatformOverrides_signingConfiguration' - A signing configuration that overrides the default encryption or hash
+-- algorithm of a signing job.
+--
+-- 'signingImageFormat', 'signingPlatformOverrides_signingImageFormat' - A signed image is a JSON object. When overriding the default signing
+-- platform configuration, a customer can select either of two signing
+-- formats, @JSONEmbedded@ or @JSONDetached@. (A third format value,
+-- @JSON@, is reserved for future use.) With @JSONEmbedded@, the signing
+-- image has the payload embedded in it. With @JSONDetached@, the payload
+-- is not be embedded in the signing image.
+newSigningPlatformOverrides ::
+  SigningPlatformOverrides
+newSigningPlatformOverrides =
+  SigningPlatformOverrides'
+    { signingConfiguration =
+        Prelude.Nothing,
+      signingImageFormat = Prelude.Nothing
+    }
+
+-- | A signing configuration that overrides the default encryption or hash
+-- algorithm of a signing job.
+signingPlatformOverrides_signingConfiguration :: Lens.Lens' SigningPlatformOverrides (Prelude.Maybe SigningConfigurationOverrides)
+signingPlatformOverrides_signingConfiguration = Lens.lens (\SigningPlatformOverrides' {signingConfiguration} -> signingConfiguration) (\s@SigningPlatformOverrides' {} a -> s {signingConfiguration = a} :: SigningPlatformOverrides)
+
+-- | A signed image is a JSON object. When overriding the default signing
+-- platform configuration, a customer can select either of two signing
+-- formats, @JSONEmbedded@ or @JSONDetached@. (A third format value,
+-- @JSON@, is reserved for future use.) With @JSONEmbedded@, the signing
+-- image has the payload embedded in it. With @JSONDetached@, the payload
+-- is not be embedded in the signing image.
+signingPlatformOverrides_signingImageFormat :: Lens.Lens' SigningPlatformOverrides (Prelude.Maybe ImageFormat)
+signingPlatformOverrides_signingImageFormat = Lens.lens (\SigningPlatformOverrides' {signingImageFormat} -> signingImageFormat) (\s@SigningPlatformOverrides' {} a -> s {signingImageFormat = a} :: SigningPlatformOverrides)
+
+instance Data.FromJSON SigningPlatformOverrides where
+  parseJSON =
+    Data.withObject
+      "SigningPlatformOverrides"
+      ( \x ->
+          SigningPlatformOverrides'
+            Prelude.<$> (x Data..:? "signingConfiguration")
+            Prelude.<*> (x Data..:? "signingImageFormat")
+      )
+
+instance Prelude.Hashable SigningPlatformOverrides where
+  hashWithSalt _salt SigningPlatformOverrides' {..} =
+    _salt
+      `Prelude.hashWithSalt` signingConfiguration
+      `Prelude.hashWithSalt` signingImageFormat
+
+instance Prelude.NFData SigningPlatformOverrides where
+  rnf SigningPlatformOverrides' {..} =
+    Prelude.rnf signingConfiguration
+      `Prelude.seq` Prelude.rnf signingImageFormat
+
+instance Data.ToJSON SigningPlatformOverrides where
+  toJSON SigningPlatformOverrides' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("signingConfiguration" Data..=)
+              Prelude.<$> signingConfiguration,
+            ("signingImageFormat" Data..=)
+              Prelude.<$> signingImageFormat
+          ]
+      )
diff --git a/gen/Amazonka/Signer/Types/SigningProfile.hs b/gen/Amazonka/Signer/Types/SigningProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningProfile.hs
@@ -0,0 +1,202 @@
+{-# 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.Signer.Types.SigningProfile
+-- 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.Signer.Types.SigningProfile 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
+import Amazonka.Signer.Types.SignatureValidityPeriod
+import Amazonka.Signer.Types.SigningMaterial
+import Amazonka.Signer.Types.SigningProfileStatus
+
+-- | Contains information about the ACM certificates and code signing
+-- configuration parameters that can be used by a given code signing user.
+--
+-- /See:/ 'newSigningProfile' smart constructor.
+data SigningProfile = SigningProfile'
+  { -- | The Amazon Resource Name (ARN) for the signing profile.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the signing platform.
+    platformDisplayName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a platform that is available for use by a signing profile.
+    platformId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the signing profile.
+    profileName :: Prelude.Maybe Prelude.Text,
+    -- | The version of a signing profile.
+    profileVersion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a signing profile, including the profile version.
+    profileVersionArn :: Prelude.Maybe Prelude.Text,
+    -- | The validity period for a signing job created using this signing
+    -- profile.
+    signatureValidityPeriod :: Prelude.Maybe SignatureValidityPeriod,
+    -- | The ACM certificate that is available for use by a signing profile.
+    signingMaterial :: Prelude.Maybe SigningMaterial,
+    -- | The parameters that are available for use by a code signing user.
+    signingParameters :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The status of a code signing profile.
+    status :: Prelude.Maybe SigningProfileStatus,
+    -- | A list of tags associated with the signing profile.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningProfile' 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:
+--
+-- 'arn', 'signingProfile_arn' - The Amazon Resource Name (ARN) for the signing profile.
+--
+-- 'platformDisplayName', 'signingProfile_platformDisplayName' - The name of the signing platform.
+--
+-- 'platformId', 'signingProfile_platformId' - The ID of a platform that is available for use by a signing profile.
+--
+-- 'profileName', 'signingProfile_profileName' - The name of the signing profile.
+--
+-- 'profileVersion', 'signingProfile_profileVersion' - The version of a signing profile.
+--
+-- 'profileVersionArn', 'signingProfile_profileVersionArn' - The ARN of a signing profile, including the profile version.
+--
+-- 'signatureValidityPeriod', 'signingProfile_signatureValidityPeriod' - The validity period for a signing job created using this signing
+-- profile.
+--
+-- 'signingMaterial', 'signingProfile_signingMaterial' - The ACM certificate that is available for use by a signing profile.
+--
+-- 'signingParameters', 'signingProfile_signingParameters' - The parameters that are available for use by a code signing user.
+--
+-- 'status', 'signingProfile_status' - The status of a code signing profile.
+--
+-- 'tags', 'signingProfile_tags' - A list of tags associated with the signing profile.
+newSigningProfile ::
+  SigningProfile
+newSigningProfile =
+  SigningProfile'
+    { arn = Prelude.Nothing,
+      platformDisplayName = Prelude.Nothing,
+      platformId = Prelude.Nothing,
+      profileName = Prelude.Nothing,
+      profileVersion = Prelude.Nothing,
+      profileVersionArn = Prelude.Nothing,
+      signatureValidityPeriod = Prelude.Nothing,
+      signingMaterial = Prelude.Nothing,
+      signingParameters = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) for the signing profile.
+signingProfile_arn :: Lens.Lens' SigningProfile (Prelude.Maybe Prelude.Text)
+signingProfile_arn = Lens.lens (\SigningProfile' {arn} -> arn) (\s@SigningProfile' {} a -> s {arn = a} :: SigningProfile)
+
+-- | The name of the signing platform.
+signingProfile_platformDisplayName :: Lens.Lens' SigningProfile (Prelude.Maybe Prelude.Text)
+signingProfile_platformDisplayName = Lens.lens (\SigningProfile' {platformDisplayName} -> platformDisplayName) (\s@SigningProfile' {} a -> s {platformDisplayName = a} :: SigningProfile)
+
+-- | The ID of a platform that is available for use by a signing profile.
+signingProfile_platformId :: Lens.Lens' SigningProfile (Prelude.Maybe Prelude.Text)
+signingProfile_platformId = Lens.lens (\SigningProfile' {platformId} -> platformId) (\s@SigningProfile' {} a -> s {platformId = a} :: SigningProfile)
+
+-- | The name of the signing profile.
+signingProfile_profileName :: Lens.Lens' SigningProfile (Prelude.Maybe Prelude.Text)
+signingProfile_profileName = Lens.lens (\SigningProfile' {profileName} -> profileName) (\s@SigningProfile' {} a -> s {profileName = a} :: SigningProfile)
+
+-- | The version of a signing profile.
+signingProfile_profileVersion :: Lens.Lens' SigningProfile (Prelude.Maybe Prelude.Text)
+signingProfile_profileVersion = Lens.lens (\SigningProfile' {profileVersion} -> profileVersion) (\s@SigningProfile' {} a -> s {profileVersion = a} :: SigningProfile)
+
+-- | The ARN of a signing profile, including the profile version.
+signingProfile_profileVersionArn :: Lens.Lens' SigningProfile (Prelude.Maybe Prelude.Text)
+signingProfile_profileVersionArn = Lens.lens (\SigningProfile' {profileVersionArn} -> profileVersionArn) (\s@SigningProfile' {} a -> s {profileVersionArn = a} :: SigningProfile)
+
+-- | The validity period for a signing job created using this signing
+-- profile.
+signingProfile_signatureValidityPeriod :: Lens.Lens' SigningProfile (Prelude.Maybe SignatureValidityPeriod)
+signingProfile_signatureValidityPeriod = Lens.lens (\SigningProfile' {signatureValidityPeriod} -> signatureValidityPeriod) (\s@SigningProfile' {} a -> s {signatureValidityPeriod = a} :: SigningProfile)
+
+-- | The ACM certificate that is available for use by a signing profile.
+signingProfile_signingMaterial :: Lens.Lens' SigningProfile (Prelude.Maybe SigningMaterial)
+signingProfile_signingMaterial = Lens.lens (\SigningProfile' {signingMaterial} -> signingMaterial) (\s@SigningProfile' {} a -> s {signingMaterial = a} :: SigningProfile)
+
+-- | The parameters that are available for use by a code signing user.
+signingProfile_signingParameters :: Lens.Lens' SigningProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+signingProfile_signingParameters = Lens.lens (\SigningProfile' {signingParameters} -> signingParameters) (\s@SigningProfile' {} a -> s {signingParameters = a} :: SigningProfile) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of a code signing profile.
+signingProfile_status :: Lens.Lens' SigningProfile (Prelude.Maybe SigningProfileStatus)
+signingProfile_status = Lens.lens (\SigningProfile' {status} -> status) (\s@SigningProfile' {} a -> s {status = a} :: SigningProfile)
+
+-- | A list of tags associated with the signing profile.
+signingProfile_tags :: Lens.Lens' SigningProfile (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+signingProfile_tags = Lens.lens (\SigningProfile' {tags} -> tags) (\s@SigningProfile' {} a -> s {tags = a} :: SigningProfile) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON SigningProfile where
+  parseJSON =
+    Data.withObject
+      "SigningProfile"
+      ( \x ->
+          SigningProfile'
+            Prelude.<$> (x Data..:? "arn")
+            Prelude.<*> (x Data..:? "platformDisplayName")
+            Prelude.<*> (x Data..:? "platformId")
+            Prelude.<*> (x Data..:? "profileName")
+            Prelude.<*> (x Data..:? "profileVersion")
+            Prelude.<*> (x Data..:? "profileVersionArn")
+            Prelude.<*> (x Data..:? "signatureValidityPeriod")
+            Prelude.<*> (x Data..:? "signingMaterial")
+            Prelude.<*> ( x
+                            Data..:? "signingParameters"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable SigningProfile where
+  hashWithSalt _salt SigningProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` platformDisplayName
+      `Prelude.hashWithSalt` platformId
+      `Prelude.hashWithSalt` profileName
+      `Prelude.hashWithSalt` profileVersion
+      `Prelude.hashWithSalt` profileVersionArn
+      `Prelude.hashWithSalt` signatureValidityPeriod
+      `Prelude.hashWithSalt` signingMaterial
+      `Prelude.hashWithSalt` signingParameters
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData SigningProfile where
+  rnf SigningProfile' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf platformDisplayName
+      `Prelude.seq` Prelude.rnf platformId
+      `Prelude.seq` Prelude.rnf profileName
+      `Prelude.seq` Prelude.rnf profileVersion
+      `Prelude.seq` Prelude.rnf profileVersionArn
+      `Prelude.seq` Prelude.rnf signatureValidityPeriod
+      `Prelude.seq` Prelude.rnf signingMaterial
+      `Prelude.seq` Prelude.rnf signingParameters
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/Signer/Types/SigningProfileRevocationRecord.hs b/gen/Amazonka/Signer/Types/SigningProfileRevocationRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningProfileRevocationRecord.hs
@@ -0,0 +1,105 @@
+{-# 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.Signer.Types.SigningProfileRevocationRecord
+-- 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.Signer.Types.SigningProfileRevocationRecord 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
+
+-- | Revocation information for a signing profile.
+--
+-- /See:/ 'newSigningProfileRevocationRecord' smart constructor.
+data SigningProfileRevocationRecord = SigningProfileRevocationRecord'
+  { -- | The time when revocation becomes effective.
+    revocationEffectiveFrom :: Prelude.Maybe Data.POSIX,
+    -- | The time when the signing profile was revoked.
+    revokedAt :: Prelude.Maybe Data.POSIX,
+    -- | The identity of the revoker.
+    revokedBy :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SigningProfileRevocationRecord' 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:
+--
+-- 'revocationEffectiveFrom', 'signingProfileRevocationRecord_revocationEffectiveFrom' - The time when revocation becomes effective.
+--
+-- 'revokedAt', 'signingProfileRevocationRecord_revokedAt' - The time when the signing profile was revoked.
+--
+-- 'revokedBy', 'signingProfileRevocationRecord_revokedBy' - The identity of the revoker.
+newSigningProfileRevocationRecord ::
+  SigningProfileRevocationRecord
+newSigningProfileRevocationRecord =
+  SigningProfileRevocationRecord'
+    { revocationEffectiveFrom =
+        Prelude.Nothing,
+      revokedAt = Prelude.Nothing,
+      revokedBy = Prelude.Nothing
+    }
+
+-- | The time when revocation becomes effective.
+signingProfileRevocationRecord_revocationEffectiveFrom :: Lens.Lens' SigningProfileRevocationRecord (Prelude.Maybe Prelude.UTCTime)
+signingProfileRevocationRecord_revocationEffectiveFrom = Lens.lens (\SigningProfileRevocationRecord' {revocationEffectiveFrom} -> revocationEffectiveFrom) (\s@SigningProfileRevocationRecord' {} a -> s {revocationEffectiveFrom = a} :: SigningProfileRevocationRecord) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the signing profile was revoked.
+signingProfileRevocationRecord_revokedAt :: Lens.Lens' SigningProfileRevocationRecord (Prelude.Maybe Prelude.UTCTime)
+signingProfileRevocationRecord_revokedAt = Lens.lens (\SigningProfileRevocationRecord' {revokedAt} -> revokedAt) (\s@SigningProfileRevocationRecord' {} a -> s {revokedAt = a} :: SigningProfileRevocationRecord) Prelude.. Lens.mapping Data._Time
+
+-- | The identity of the revoker.
+signingProfileRevocationRecord_revokedBy :: Lens.Lens' SigningProfileRevocationRecord (Prelude.Maybe Prelude.Text)
+signingProfileRevocationRecord_revokedBy = Lens.lens (\SigningProfileRevocationRecord' {revokedBy} -> revokedBy) (\s@SigningProfileRevocationRecord' {} a -> s {revokedBy = a} :: SigningProfileRevocationRecord)
+
+instance Data.FromJSON SigningProfileRevocationRecord where
+  parseJSON =
+    Data.withObject
+      "SigningProfileRevocationRecord"
+      ( \x ->
+          SigningProfileRevocationRecord'
+            Prelude.<$> (x Data..:? "revocationEffectiveFrom")
+            Prelude.<*> (x Data..:? "revokedAt")
+            Prelude.<*> (x Data..:? "revokedBy")
+      )
+
+instance
+  Prelude.Hashable
+    SigningProfileRevocationRecord
+  where
+  hashWithSalt
+    _salt
+    SigningProfileRevocationRecord' {..} =
+      _salt
+        `Prelude.hashWithSalt` revocationEffectiveFrom
+        `Prelude.hashWithSalt` revokedAt
+        `Prelude.hashWithSalt` revokedBy
+
+instance
+  Prelude.NFData
+    SigningProfileRevocationRecord
+  where
+  rnf SigningProfileRevocationRecord' {..} =
+    Prelude.rnf revocationEffectiveFrom
+      `Prelude.seq` Prelude.rnf revokedAt
+      `Prelude.seq` Prelude.rnf revokedBy
diff --git a/gen/Amazonka/Signer/Types/SigningProfileStatus.hs b/gen/Amazonka/Signer/Types/SigningProfileStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningProfileStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.SigningProfileStatus
+-- 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.Signer.Types.SigningProfileStatus
+  ( SigningProfileStatus
+      ( ..,
+        SigningProfileStatus_Active,
+        SigningProfileStatus_Canceled,
+        SigningProfileStatus_Revoked
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SigningProfileStatus = SigningProfileStatus'
+  { fromSigningProfileStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SigningProfileStatus_Active :: SigningProfileStatus
+pattern SigningProfileStatus_Active = SigningProfileStatus' "Active"
+
+pattern SigningProfileStatus_Canceled :: SigningProfileStatus
+pattern SigningProfileStatus_Canceled = SigningProfileStatus' "Canceled"
+
+pattern SigningProfileStatus_Revoked :: SigningProfileStatus
+pattern SigningProfileStatus_Revoked = SigningProfileStatus' "Revoked"
+
+{-# COMPLETE
+  SigningProfileStatus_Active,
+  SigningProfileStatus_Canceled,
+  SigningProfileStatus_Revoked,
+  SigningProfileStatus'
+  #-}
diff --git a/gen/Amazonka/Signer/Types/SigningStatus.hs b/gen/Amazonka/Signer/Types/SigningStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/SigningStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.SigningStatus
+-- 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.Signer.Types.SigningStatus
+  ( SigningStatus
+      ( ..,
+        SigningStatus_Failed,
+        SigningStatus_InProgress,
+        SigningStatus_Succeeded
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SigningStatus = SigningStatus'
+  { fromSigningStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SigningStatus_Failed :: SigningStatus
+pattern SigningStatus_Failed = SigningStatus' "Failed"
+
+pattern SigningStatus_InProgress :: SigningStatus
+pattern SigningStatus_InProgress = SigningStatus' "InProgress"
+
+pattern SigningStatus_Succeeded :: SigningStatus
+pattern SigningStatus_Succeeded = SigningStatus' "Succeeded"
+
+{-# COMPLETE
+  SigningStatus_Failed,
+  SigningStatus_InProgress,
+  SigningStatus_Succeeded,
+  SigningStatus'
+  #-}
diff --git a/gen/Amazonka/Signer/Types/Source.hs b/gen/Amazonka/Signer/Types/Source.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/Source.hs
@@ -0,0 +1,71 @@
+{-# 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.Signer.Types.Source
+-- 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.Signer.Types.Source 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
+import Amazonka.Signer.Types.S3Source
+
+-- | An @S3Source@ object that contains information about the S3 bucket where
+-- you saved your unsigned code.
+--
+-- /See:/ 'newSource' smart constructor.
+data Source = Source'
+  { -- | The @S3Source@ object.
+    s3 :: Prelude.Maybe S3Source
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Source' 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:
+--
+-- 's3', 'source_s3' - The @S3Source@ object.
+newSource ::
+  Source
+newSource = Source' {s3 = Prelude.Nothing}
+
+-- | The @S3Source@ object.
+source_s3 :: Lens.Lens' Source (Prelude.Maybe S3Source)
+source_s3 = Lens.lens (\Source' {s3} -> s3) (\s@Source' {} a -> s {s3 = a} :: Source)
+
+instance Data.FromJSON Source where
+  parseJSON =
+    Data.withObject
+      "Source"
+      (\x -> Source' Prelude.<$> (x Data..:? "s3"))
+
+instance Prelude.Hashable Source where
+  hashWithSalt _salt Source' {..} =
+    _salt `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData Source where
+  rnf Source' {..} = Prelude.rnf s3
+
+instance Data.ToJSON Source where
+  toJSON Source' {..} =
+    Data.object
+      (Prelude.catMaybes [("s3" Data..=) Prelude.<$> s3])
diff --git a/gen/Amazonka/Signer/Types/ValidityType.hs b/gen/Amazonka/Signer/Types/ValidityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Types/ValidityType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Types.ValidityType
+-- 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.Signer.Types.ValidityType
+  ( ValidityType
+      ( ..,
+        ValidityType_DAYS,
+        ValidityType_MONTHS,
+        ValidityType_YEARS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ValidityType = ValidityType'
+  { fromValidityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ValidityType_DAYS :: ValidityType
+pattern ValidityType_DAYS = ValidityType' "DAYS"
+
+pattern ValidityType_MONTHS :: ValidityType
+pattern ValidityType_MONTHS = ValidityType' "MONTHS"
+
+pattern ValidityType_YEARS :: ValidityType
+pattern ValidityType_YEARS = ValidityType' "YEARS"
+
+{-# COMPLETE
+  ValidityType_DAYS,
+  ValidityType_MONTHS,
+  ValidityType_YEARS,
+  ValidityType'
+  #-}
diff --git a/gen/Amazonka/Signer/UntagResource.hs b/gen/Amazonka/Signer/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/UntagResource.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes one or more tags from a signing profile. To remove the tags,
+-- specify a list of tag keys.
+module Amazonka.Signer.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.Signer.Types
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) for the signing profile.
+    resourceArn :: Prelude.Text,
+    -- | A list of tag keys to be removed from the signing profile.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' 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:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) for the signing profile.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - A list of tag keys to be removed from the signing profile.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) for the signing profile.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | A list of tag keys to be removed from the signing profile.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UntagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UntagResource where
+  hashWithSalt _salt UntagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tagKeys
+
+instance Prelude.NFData UntagResource where
+  rnf UntagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tagKeys
+
+instance Data.ToHeaders UntagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath UntagResource' {..} =
+    Prelude.mconcat ["/tags/", Data.toBS resourceArn]
+
+instance Data.ToQuery UntagResource where
+  toQuery UntagResource' {..} =
+    Prelude.mconcat
+      ["tagKeys" Data.=: Data.toQueryList "member" tagKeys]
+
+-- | /See:/ 'newUntagResourceResponse' smart constructor.
+data UntagResourceResponse = UntagResourceResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResourceResponse' 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:
+--
+-- 'httpStatus', 'untagResourceResponse_httpStatus' - The response's http status code.
+newUntagResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UntagResourceResponse
+newUntagResourceResponse pHttpStatus_ =
+  UntagResourceResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+untagResourceResponse_httpStatus :: Lens.Lens' UntagResourceResponse Prelude.Int
+untagResourceResponse_httpStatus = Lens.lens (\UntagResourceResponse' {httpStatus} -> httpStatus) (\s@UntagResourceResponse' {} a -> s {httpStatus = a} :: UntagResourceResponse)
+
+instance Prelude.NFData UntagResourceResponse where
+  rnf UntagResourceResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Signer/Waiters.hs b/gen/Amazonka/Signer/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Signer/Waiters.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Signer.Waiters
+-- 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.Signer.Waiters 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
+import Amazonka.Signer.DescribeSigningJob
+import Amazonka.Signer.Lens
+import Amazonka.Signer.Types
+
+-- | Polls 'Amazonka.Signer.DescribeSigningJob' every 20 seconds until a successful state is reached. An error is returned after 25 failed checks.
+newSuccessfulSigningJob :: Core.Wait DescribeSigningJob
+newSuccessfulSigningJob =
+  Core.Wait
+    { Core.name = "SuccessfulSigningJob",
+      Core.attempts = 25,
+      Core.delay = 20,
+      Core.acceptors =
+        [ Core.matchAll
+            "Succeeded"
+            Core.AcceptSuccess
+            ( describeSigningJobResponse_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "Failed"
+            Core.AcceptFailure
+            ( describeSigningJobResponse_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "ResourceNotFoundException"
+            Core.AcceptFailure
+        ]
+    }
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- 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 Main (main) where
+
+import Test.Amazonka.Signer
+import Test.Amazonka.Signer.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "Signer"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/Gen/Signer.hs b/test/Test/Amazonka/Gen/Signer.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Signer.hs
@@ -0,0 +1,378 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.Signer
+-- 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 Test.Amazonka.Gen.Signer where
+
+import Amazonka.Signer
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.Signer.Internal
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAddProfilePermission $
+--             newAddProfilePermission
+--
+--         , requestCancelSigningProfile $
+--             newCancelSigningProfile
+--
+--         , requestDescribeSigningJob $
+--             newDescribeSigningJob
+--
+--         , requestGetSigningPlatform $
+--             newGetSigningPlatform
+--
+--         , requestGetSigningProfile $
+--             newGetSigningProfile
+--
+--         , requestListProfilePermissions $
+--             newListProfilePermissions
+--
+--         , requestListSigningJobs $
+--             newListSigningJobs
+--
+--         , requestListSigningPlatforms $
+--             newListSigningPlatforms
+--
+--         , requestListSigningProfiles $
+--             newListSigningProfiles
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestPutSigningProfile $
+--             newPutSigningProfile
+--
+--         , requestRemoveProfilePermission $
+--             newRemoveProfilePermission
+--
+--         , requestRevokeSignature $
+--             newRevokeSignature
+--
+--         , requestRevokeSigningProfile $
+--             newRevokeSigningProfile
+--
+--         , requestStartSigningJob $
+--             newStartSigningJob
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAddProfilePermission $
+--             newAddProfilePermissionResponse
+--
+--         , responseCancelSigningProfile $
+--             newCancelSigningProfileResponse
+--
+--         , responseDescribeSigningJob $
+--             newDescribeSigningJobResponse
+--
+--         , responseGetSigningPlatform $
+--             newGetSigningPlatformResponse
+--
+--         , responseGetSigningProfile $
+--             newGetSigningProfileResponse
+--
+--         , responseListProfilePermissions $
+--             newListProfilePermissionsResponse
+--
+--         , responseListSigningJobs $
+--             newListSigningJobsResponse
+--
+--         , responseListSigningPlatforms $
+--             newListSigningPlatformsResponse
+--
+--         , responseListSigningProfiles $
+--             newListSigningProfilesResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responsePutSigningProfile $
+--             newPutSigningProfileResponse
+--
+--         , responseRemoveProfilePermission $
+--             newRemoveProfilePermissionResponse
+--
+--         , responseRevokeSignature $
+--             newRevokeSignatureResponse
+--
+--         , responseRevokeSigningProfile $
+--             newRevokeSigningProfileResponse
+--
+--         , responseStartSigningJob $
+--             newStartSigningJobResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAddProfilePermission :: AddProfilePermission -> TestTree
+requestAddProfilePermission =
+  req
+    "AddProfilePermission"
+    "fixture/AddProfilePermission.yaml"
+
+requestCancelSigningProfile :: CancelSigningProfile -> TestTree
+requestCancelSigningProfile =
+  req
+    "CancelSigningProfile"
+    "fixture/CancelSigningProfile.yaml"
+
+requestDescribeSigningJob :: DescribeSigningJob -> TestTree
+requestDescribeSigningJob =
+  req
+    "DescribeSigningJob"
+    "fixture/DescribeSigningJob.yaml"
+
+requestGetSigningPlatform :: GetSigningPlatform -> TestTree
+requestGetSigningPlatform =
+  req
+    "GetSigningPlatform"
+    "fixture/GetSigningPlatform.yaml"
+
+requestGetSigningProfile :: GetSigningProfile -> TestTree
+requestGetSigningProfile =
+  req
+    "GetSigningProfile"
+    "fixture/GetSigningProfile.yaml"
+
+requestListProfilePermissions :: ListProfilePermissions -> TestTree
+requestListProfilePermissions =
+  req
+    "ListProfilePermissions"
+    "fixture/ListProfilePermissions.yaml"
+
+requestListSigningJobs :: ListSigningJobs -> TestTree
+requestListSigningJobs =
+  req
+    "ListSigningJobs"
+    "fixture/ListSigningJobs.yaml"
+
+requestListSigningPlatforms :: ListSigningPlatforms -> TestTree
+requestListSigningPlatforms =
+  req
+    "ListSigningPlatforms"
+    "fixture/ListSigningPlatforms.yaml"
+
+requestListSigningProfiles :: ListSigningProfiles -> TestTree
+requestListSigningProfiles =
+  req
+    "ListSigningProfiles"
+    "fixture/ListSigningProfiles.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestPutSigningProfile :: PutSigningProfile -> TestTree
+requestPutSigningProfile =
+  req
+    "PutSigningProfile"
+    "fixture/PutSigningProfile.yaml"
+
+requestRemoveProfilePermission :: RemoveProfilePermission -> TestTree
+requestRemoveProfilePermission =
+  req
+    "RemoveProfilePermission"
+    "fixture/RemoveProfilePermission.yaml"
+
+requestRevokeSignature :: RevokeSignature -> TestTree
+requestRevokeSignature =
+  req
+    "RevokeSignature"
+    "fixture/RevokeSignature.yaml"
+
+requestRevokeSigningProfile :: RevokeSigningProfile -> TestTree
+requestRevokeSigningProfile =
+  req
+    "RevokeSigningProfile"
+    "fixture/RevokeSigningProfile.yaml"
+
+requestStartSigningJob :: StartSigningJob -> TestTree
+requestStartSigningJob =
+  req
+    "StartSigningJob"
+    "fixture/StartSigningJob.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+-- Responses
+
+responseAddProfilePermission :: AddProfilePermissionResponse -> TestTree
+responseAddProfilePermission =
+  res
+    "AddProfilePermissionResponse"
+    "fixture/AddProfilePermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AddProfilePermission)
+
+responseCancelSigningProfile :: CancelSigningProfileResponse -> TestTree
+responseCancelSigningProfile =
+  res
+    "CancelSigningProfileResponse"
+    "fixture/CancelSigningProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelSigningProfile)
+
+responseDescribeSigningJob :: DescribeSigningJobResponse -> TestTree
+responseDescribeSigningJob =
+  res
+    "DescribeSigningJobResponse"
+    "fixture/DescribeSigningJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSigningJob)
+
+responseGetSigningPlatform :: GetSigningPlatformResponse -> TestTree
+responseGetSigningPlatform =
+  res
+    "GetSigningPlatformResponse"
+    "fixture/GetSigningPlatformResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSigningPlatform)
+
+responseGetSigningProfile :: GetSigningProfileResponse -> TestTree
+responseGetSigningProfile =
+  res
+    "GetSigningProfileResponse"
+    "fixture/GetSigningProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSigningProfile)
+
+responseListProfilePermissions :: ListProfilePermissionsResponse -> TestTree
+responseListProfilePermissions =
+  res
+    "ListProfilePermissionsResponse"
+    "fixture/ListProfilePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListProfilePermissions)
+
+responseListSigningJobs :: ListSigningJobsResponse -> TestTree
+responseListSigningJobs =
+  res
+    "ListSigningJobsResponse"
+    "fixture/ListSigningJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSigningJobs)
+
+responseListSigningPlatforms :: ListSigningPlatformsResponse -> TestTree
+responseListSigningPlatforms =
+  res
+    "ListSigningPlatformsResponse"
+    "fixture/ListSigningPlatformsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSigningPlatforms)
+
+responseListSigningProfiles :: ListSigningProfilesResponse -> TestTree
+responseListSigningProfiles =
+  res
+    "ListSigningProfilesResponse"
+    "fixture/ListSigningProfilesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSigningProfiles)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responsePutSigningProfile :: PutSigningProfileResponse -> TestTree
+responsePutSigningProfile =
+  res
+    "PutSigningProfileResponse"
+    "fixture/PutSigningProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutSigningProfile)
+
+responseRemoveProfilePermission :: RemoveProfilePermissionResponse -> TestTree
+responseRemoveProfilePermission =
+  res
+    "RemoveProfilePermissionResponse"
+    "fixture/RemoveProfilePermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RemoveProfilePermission)
+
+responseRevokeSignature :: RevokeSignatureResponse -> TestTree
+responseRevokeSignature =
+  res
+    "RevokeSignatureResponse"
+    "fixture/RevokeSignatureResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeSignature)
+
+responseRevokeSigningProfile :: RevokeSigningProfileResponse -> TestTree
+responseRevokeSigningProfile =
+  res
+    "RevokeSigningProfileResponse"
+    "fixture/RevokeSigningProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeSigningProfile)
+
+responseStartSigningJob :: StartSigningJobResponse -> TestTree
+responseStartSigningJob =
+  res
+    "StartSigningJobResponse"
+    "fixture/StartSigningJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartSigningJob)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
diff --git a/test/Test/Amazonka/Signer.hs b/test/Test/Amazonka/Signer.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Signer.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Signer
+-- 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 Test.Amazonka.Signer
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Signer/Internal.hs b/test/Test/Amazonka/Signer/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Signer/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Signer.Internal
+-- 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 Test.Amazonka.Signer.Internal where
