404 Not Found


nginx
beegazpacho.com - GrazzMean
Uname: Linux in-mum-web1557.main-hosting.eu 5.14.0-611.42.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 24 05:30:20 EDT 2026 x86_64
Software: LiteSpeed
PHP version: 8.2.30 [ PHP INFO ] PHP os: Linux
Server Ip: 91.108.106.187
Your Ip: 216.73.216.168
User: u848900432 (848900432) | Group: o51372345 (1051372345)
Safe Mode: OFF
Disable Function:
NONE

name : api.go
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.

package paymentcryptographydata

import (
	"fmt"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/awsutil"
	"github.com/aws/aws-sdk-go/aws/request"
	"github.com/aws/aws-sdk-go/private/protocol"
)

const opDecryptData = "DecryptData"

// DecryptDataRequest generates a "aws/request.Request" representing the
// client's request for the DecryptData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See DecryptData for more information on using the DecryptData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the DecryptDataRequest method.
//	req, resp := client.DecryptDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/DecryptData
func (c *PaymentCryptographyData) DecryptDataRequest(input *DecryptDataInput) (req *request.Request, output *DecryptDataOutput) {
	op := &request.Operation{
		Name:       opDecryptData,
		HTTPMethod: "POST",
		HTTPPath:   "/keys/{KeyIdentifier}/decrypt",
	}

	if input == nil {
		input = &DecryptDataInput{}
	}

	output = &DecryptDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// DecryptData API operation for Payment Cryptography Data Plane.
//
// Decrypts ciphertext data to plaintext using symmetric, asymmetric, or DUKPT
// data encryption key. For more information, see Decrypt data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/decrypt-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// You can use an encryption key generated within Amazon Web Services Payment
// Cryptography, or you can import your own encryption key by calling ImportKey
// (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html).
// For this operation, the key must have KeyModesOfUse set to Decrypt. In asymmetric
// decryption, Amazon Web Services Payment Cryptography decrypts the ciphertext
// using the private component of the asymmetric encryption key pair. For data
// encryption outside of Amazon Web Services Payment Cryptography, you can export
// the public component of the asymmetric key pair by calling GetPublicCertificate
// (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetPublicKeyCertificate.html).
//
// For symmetric and DUKPT decryption, Amazon Web Services Payment Cryptography
// supports TDES and AES algorithms. For asymmetric decryption, Amazon Web Services
// Payment Cryptography supports RSA. When you use DUKPT, for TDES algorithm,
// the ciphertext data length must be a multiple of 16 bytes. For AES algorithm,
// the ciphertext data length must be a multiple of 32 bytes.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - EncryptData
//
//   - GetPublicCertificate (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetPublicKeyCertificate.html)
//
//   - ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation DecryptData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/DecryptData
func (c *PaymentCryptographyData) DecryptData(input *DecryptDataInput) (*DecryptDataOutput, error) {
	req, out := c.DecryptDataRequest(input)
	return out, req.Send()
}

// DecryptDataWithContext is the same as DecryptData with the addition of
// the ability to pass a context and additional request options.
//
// See DecryptData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) DecryptDataWithContext(ctx aws.Context, input *DecryptDataInput, opts ...request.Option) (*DecryptDataOutput, error) {
	req, out := c.DecryptDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opEncryptData = "EncryptData"

// EncryptDataRequest generates a "aws/request.Request" representing the
// client's request for the EncryptData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See EncryptData for more information on using the EncryptData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the EncryptDataRequest method.
//	req, resp := client.EncryptDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/EncryptData
func (c *PaymentCryptographyData) EncryptDataRequest(input *EncryptDataInput) (req *request.Request, output *EncryptDataOutput) {
	op := &request.Operation{
		Name:       opEncryptData,
		HTTPMethod: "POST",
		HTTPPath:   "/keys/{KeyIdentifier}/encrypt",
	}

	if input == nil {
		input = &EncryptDataInput{}
	}

	output = &EncryptDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// EncryptData API operation for Payment Cryptography Data Plane.
//
// Encrypts plaintext data to ciphertext using symmetric, asymmetric, or DUKPT
// data encryption key. For more information, see Encrypt data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/encrypt-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// You can generate an encryption key within Amazon Web Services Payment Cryptography
// by calling CreateKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html).
// You can import your own encryption key by calling ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html).
// For this operation, the key must have KeyModesOfUse set to Encrypt. In asymmetric
// encryption, plaintext is encrypted using public component. You can import
// the public component of an asymmetric key pair created outside Amazon Web
// Services Payment Cryptography by calling ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)).
//
// for symmetric and DUKPT encryption, Amazon Web Services Payment Cryptography
// supports TDES and AES algorithms. For asymmetric encryption, Amazon Web Services
// Payment Cryptography supports RSA. To encrypt using DUKPT, you must already
// have a DUKPT key in your account with KeyModesOfUse set to DeriveKey, or
// you can generate a new DUKPT key by calling CreateKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html).
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - DecryptData
//
//   - GetPublicCertificate (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetPublicKeyCertificate.html)
//
//   - ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)
//
//   - ReEncryptData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation EncryptData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/EncryptData
func (c *PaymentCryptographyData) EncryptData(input *EncryptDataInput) (*EncryptDataOutput, error) {
	req, out := c.EncryptDataRequest(input)
	return out, req.Send()
}

// EncryptDataWithContext is the same as EncryptData with the addition of
// the ability to pass a context and additional request options.
//
// See EncryptData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) EncryptDataWithContext(ctx aws.Context, input *EncryptDataInput, opts ...request.Option) (*EncryptDataOutput, error) {
	req, out := c.EncryptDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGenerateCardValidationData = "GenerateCardValidationData"

// GenerateCardValidationDataRequest generates a "aws/request.Request" representing the
// client's request for the GenerateCardValidationData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GenerateCardValidationData for more information on using the GenerateCardValidationData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the GenerateCardValidationDataRequest method.
//	req, resp := client.GenerateCardValidationDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/GenerateCardValidationData
func (c *PaymentCryptographyData) GenerateCardValidationDataRequest(input *GenerateCardValidationDataInput) (req *request.Request, output *GenerateCardValidationDataOutput) {
	op := &request.Operation{
		Name:       opGenerateCardValidationData,
		HTTPMethod: "POST",
		HTTPPath:   "/cardvalidationdata/generate",
	}

	if input == nil {
		input = &GenerateCardValidationDataInput{}
	}

	output = &GenerateCardValidationDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GenerateCardValidationData API operation for Payment Cryptography Data Plane.
//
// Generates card-related validation data using algorithms such as Card Verification
// Values (CVV/CVV2), Dynamic Card Verification Values (dCVV/dCVV2), or Card
// Security Codes (CSC). For more information, see Generate card data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/generate-card-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// This operation generates a CVV or CSC value that is printed on a payment
// credit or debit card during card production. The CVV or CSC, PAN (Primary
// Account Number) and expiration date of the card are required to check its
// validity during transaction processing. To begin this operation, a CVK (Card
// Verification Key) encryption key is required. You can use CreateKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)
// or ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)
// to establish a CVK within Amazon Web Services Payment Cryptography. The KeyModesOfUse
// should be set to Generate and Verify for a CVK encryption key.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)
//
//   - VerifyCardValidationData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation GenerateCardValidationData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/GenerateCardValidationData
func (c *PaymentCryptographyData) GenerateCardValidationData(input *GenerateCardValidationDataInput) (*GenerateCardValidationDataOutput, error) {
	req, out := c.GenerateCardValidationDataRequest(input)
	return out, req.Send()
}

// GenerateCardValidationDataWithContext is the same as GenerateCardValidationData with the addition of
// the ability to pass a context and additional request options.
//
// See GenerateCardValidationData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) GenerateCardValidationDataWithContext(ctx aws.Context, input *GenerateCardValidationDataInput, opts ...request.Option) (*GenerateCardValidationDataOutput, error) {
	req, out := c.GenerateCardValidationDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGenerateMac = "GenerateMac"

// GenerateMacRequest generates a "aws/request.Request" representing the
// client's request for the GenerateMac operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GenerateMac for more information on using the GenerateMac
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the GenerateMacRequest method.
//	req, resp := client.GenerateMacRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/GenerateMac
func (c *PaymentCryptographyData) GenerateMacRequest(input *GenerateMacInput) (req *request.Request, output *GenerateMacOutput) {
	op := &request.Operation{
		Name:       opGenerateMac,
		HTTPMethod: "POST",
		HTTPPath:   "/mac/generate",
	}

	if input == nil {
		input = &GenerateMacInput{}
	}

	output = &GenerateMacOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GenerateMac API operation for Payment Cryptography Data Plane.
//
// Generates a Message Authentication Code (MAC) cryptogram within Amazon Web
// Services Payment Cryptography.
//
// You can use this operation when keys won't be shared but mutual data is present
// on both ends for validation. In this case, known data values are used to
// generate a MAC on both ends for comparision without sending or receiving
// data in ciphertext or plaintext. You can use this operation to generate a
// DUPKT, HMAC or EMV MAC by setting generation attributes and algorithm to
// the associated values. The MAC generation encryption key must have valid
// values for KeyUsage such as TR31_M7_HMAC_KEY for HMAC generation, and they
// key must have KeyModesOfUse set to Generate and Verify.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - VerifyMac
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation GenerateMac for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/GenerateMac
func (c *PaymentCryptographyData) GenerateMac(input *GenerateMacInput) (*GenerateMacOutput, error) {
	req, out := c.GenerateMacRequest(input)
	return out, req.Send()
}

// GenerateMacWithContext is the same as GenerateMac with the addition of
// the ability to pass a context and additional request options.
//
// See GenerateMac for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) GenerateMacWithContext(ctx aws.Context, input *GenerateMacInput, opts ...request.Option) (*GenerateMacOutput, error) {
	req, out := c.GenerateMacRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opGeneratePinData = "GeneratePinData"

// GeneratePinDataRequest generates a "aws/request.Request" representing the
// client's request for the GeneratePinData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See GeneratePinData for more information on using the GeneratePinData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the GeneratePinDataRequest method.
//	req, resp := client.GeneratePinDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/GeneratePinData
func (c *PaymentCryptographyData) GeneratePinDataRequest(input *GeneratePinDataInput) (req *request.Request, output *GeneratePinDataOutput) {
	op := &request.Operation{
		Name:       opGeneratePinData,
		HTTPMethod: "POST",
		HTTPPath:   "/pindata/generate",
	}

	if input == nil {
		input = &GeneratePinDataInput{}
	}

	output = &GeneratePinDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// GeneratePinData API operation for Payment Cryptography Data Plane.
//
// Generates pin-related data such as PIN, PIN Verification Value (PVV), PIN
// Block, and PIN Offset during new card issuance or reissuance. For more information,
// see Generate PIN data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/generate-pin-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// PIN data is never transmitted in clear to or from Amazon Web Services Payment
// Cryptography. This operation generates PIN, PVV, or PIN Offset and then encrypts
// it using Pin Encryption Key (PEK) to create an EncryptedPinBlock for transmission
// from Amazon Web Services Payment Cryptography. This operation uses a separate
// Pin Verification Key (PVK) for VISA PVV generation.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - GenerateCardValidationData
//
//   - TranslatePinData
//
//   - VerifyPinData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation GeneratePinData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/GeneratePinData
func (c *PaymentCryptographyData) GeneratePinData(input *GeneratePinDataInput) (*GeneratePinDataOutput, error) {
	req, out := c.GeneratePinDataRequest(input)
	return out, req.Send()
}

// GeneratePinDataWithContext is the same as GeneratePinData with the addition of
// the ability to pass a context and additional request options.
//
// See GeneratePinData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) GeneratePinDataWithContext(ctx aws.Context, input *GeneratePinDataInput, opts ...request.Option) (*GeneratePinDataOutput, error) {
	req, out := c.GeneratePinDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opReEncryptData = "ReEncryptData"

// ReEncryptDataRequest generates a "aws/request.Request" representing the
// client's request for the ReEncryptData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See ReEncryptData for more information on using the ReEncryptData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the ReEncryptDataRequest method.
//	req, resp := client.ReEncryptDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/ReEncryptData
func (c *PaymentCryptographyData) ReEncryptDataRequest(input *ReEncryptDataInput) (req *request.Request, output *ReEncryptDataOutput) {
	op := &request.Operation{
		Name:       opReEncryptData,
		HTTPMethod: "POST",
		HTTPPath:   "/keys/{IncomingKeyIdentifier}/reencrypt",
	}

	if input == nil {
		input = &ReEncryptDataInput{}
	}

	output = &ReEncryptDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// ReEncryptData API operation for Payment Cryptography Data Plane.
//
// Re-encrypt ciphertext using DUKPT, Symmetric and Asymmetric Data Encryption
// Keys.
//
// You can either generate an encryption key within Amazon Web Services Payment
// Cryptography by calling CreateKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)
// or import your own encryption key by calling ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html).
// The KeyArn for use with this operation must be in a compatible key state
// with KeyModesOfUse set to Encrypt. In asymmetric encryption, ciphertext is
// encrypted using public component (imported by calling ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html))
// of the asymmetric key pair created outside of Amazon Web Services Payment
// Cryptography.
//
// For symmetric and DUKPT encryption, Amazon Web Services Payment Cryptography
// supports TDES and AES algorithms. For asymmetric encryption, Amazon Web Services
// Payment Cryptography supports RSA. To encrypt using DUKPT, a DUKPT key must
// already exist within your account with KeyModesOfUse set to DeriveKey or
// a new DUKPT can be generated by calling CreateKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html).
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - DecryptData
//
//   - EncryptData
//
//   - GetPublicCertificate (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_GetPublicKeyCertificate.html)
//
//   - ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html)
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation ReEncryptData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/ReEncryptData
func (c *PaymentCryptographyData) ReEncryptData(input *ReEncryptDataInput) (*ReEncryptDataOutput, error) {
	req, out := c.ReEncryptDataRequest(input)
	return out, req.Send()
}

// ReEncryptDataWithContext is the same as ReEncryptData with the addition of
// the ability to pass a context and additional request options.
//
// See ReEncryptData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) ReEncryptDataWithContext(ctx aws.Context, input *ReEncryptDataInput, opts ...request.Option) (*ReEncryptDataOutput, error) {
	req, out := c.ReEncryptDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opTranslatePinData = "TranslatePinData"

// TranslatePinDataRequest generates a "aws/request.Request" representing the
// client's request for the TranslatePinData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See TranslatePinData for more information on using the TranslatePinData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the TranslatePinDataRequest method.
//	req, resp := client.TranslatePinDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/TranslatePinData
func (c *PaymentCryptographyData) TranslatePinDataRequest(input *TranslatePinDataInput) (req *request.Request, output *TranslatePinDataOutput) {
	op := &request.Operation{
		Name:       opTranslatePinData,
		HTTPMethod: "POST",
		HTTPPath:   "/pindata/translate",
	}

	if input == nil {
		input = &TranslatePinDataInput{}
	}

	output = &TranslatePinDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// TranslatePinData API operation for Payment Cryptography Data Plane.
//
// Translates encrypted PIN block from and to ISO 9564 formats 0,1,3,4. For
// more information, see Translate PIN data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/translate-pin-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// PIN block translation involves changing the encrytion of PIN block from one
// encryption key to another encryption key and changing PIN block format from
// one to another without PIN block data leaving Amazon Web Services Payment
// Cryptography. The encryption key transformation can be from PEK (Pin Encryption
// Key) to BDK (Base Derivation Key) for DUKPT or from BDK for DUKPT to PEK.
// Amazon Web Services Payment Cryptography supports TDES and AES key derivation
// type for DUKPT tranlations. You can use this operation for P2PE (Point to
// Point Encryption) use cases where the encryption keys should change but the
// processing system either does not need to, or is not permitted to, decrypt
// the data.
//
// The allowed combinations of PIN block format translations are guided by PCI.
// It is important to note that not all encrypted PIN block formats (example,
// format 1) require PAN (Primary Account Number) as input. And as such, PIN
// block format that requires PAN (example, formats 0,3,4) cannot be translated
// to a format (format 1) that does not require a PAN for generation.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// At this time, Amazon Web Services Payment Cryptography does not support translations
// to PIN format 4.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - GeneratePinData
//
//   - VerifyPinData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation TranslatePinData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/TranslatePinData
func (c *PaymentCryptographyData) TranslatePinData(input *TranslatePinDataInput) (*TranslatePinDataOutput, error) {
	req, out := c.TranslatePinDataRequest(input)
	return out, req.Send()
}

// TranslatePinDataWithContext is the same as TranslatePinData with the addition of
// the ability to pass a context and additional request options.
//
// See TranslatePinData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) TranslatePinDataWithContext(ctx aws.Context, input *TranslatePinDataInput, opts ...request.Option) (*TranslatePinDataOutput, error) {
	req, out := c.TranslatePinDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opVerifyAuthRequestCryptogram = "VerifyAuthRequestCryptogram"

// VerifyAuthRequestCryptogramRequest generates a "aws/request.Request" representing the
// client's request for the VerifyAuthRequestCryptogram operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See VerifyAuthRequestCryptogram for more information on using the VerifyAuthRequestCryptogram
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the VerifyAuthRequestCryptogramRequest method.
//	req, resp := client.VerifyAuthRequestCryptogramRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyAuthRequestCryptogram
func (c *PaymentCryptographyData) VerifyAuthRequestCryptogramRequest(input *VerifyAuthRequestCryptogramInput) (req *request.Request, output *VerifyAuthRequestCryptogramOutput) {
	op := &request.Operation{
		Name:       opVerifyAuthRequestCryptogram,
		HTTPMethod: "POST",
		HTTPPath:   "/cryptogram/verify",
	}

	if input == nil {
		input = &VerifyAuthRequestCryptogramInput{}
	}

	output = &VerifyAuthRequestCryptogramOutput{}
	req = c.newRequest(op, input, output)
	return
}

// VerifyAuthRequestCryptogram API operation for Payment Cryptography Data Plane.
//
// Verifies Authorization Request Cryptogram (ARQC) for a EMV chip payment card
// authorization. For more information, see Verify auth request cryptogram (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/data-operations.verifyauthrequestcryptogram.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// ARQC generation is done outside of Amazon Web Services Payment Cryptography
// and is typically generated on a point of sale terminal for an EMV chip card
// to obtain payment authorization during transaction time. For ARQC verification,
// you must first import the ARQC generated outside of Amazon Web Services Payment
// Cryptography by calling ImportKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ImportKey.html).
// This operation uses the imported ARQC and an major encryption key (DUKPT)
// created by calling CreateKey (https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_CreateKey.html)
// to either provide a boolean ARQC verification result or provide an APRC (Authorization
// Response Cryptogram) response using Method 1 or Method 2. The ARPC_METHOD_1
// uses AuthResponseCode to generate ARPC and ARPC_METHOD_2 uses CardStatusUpdate
// to generate ARPC.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - VerifyCardValidationData
//
//   - VerifyPinData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation VerifyAuthRequestCryptogram for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - VerificationFailedException
//     This request failed verification.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyAuthRequestCryptogram
func (c *PaymentCryptographyData) VerifyAuthRequestCryptogram(input *VerifyAuthRequestCryptogramInput) (*VerifyAuthRequestCryptogramOutput, error) {
	req, out := c.VerifyAuthRequestCryptogramRequest(input)
	return out, req.Send()
}

// VerifyAuthRequestCryptogramWithContext is the same as VerifyAuthRequestCryptogram with the addition of
// the ability to pass a context and additional request options.
//
// See VerifyAuthRequestCryptogram for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) VerifyAuthRequestCryptogramWithContext(ctx aws.Context, input *VerifyAuthRequestCryptogramInput, opts ...request.Option) (*VerifyAuthRequestCryptogramOutput, error) {
	req, out := c.VerifyAuthRequestCryptogramRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opVerifyCardValidationData = "VerifyCardValidationData"

// VerifyCardValidationDataRequest generates a "aws/request.Request" representing the
// client's request for the VerifyCardValidationData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See VerifyCardValidationData for more information on using the VerifyCardValidationData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the VerifyCardValidationDataRequest method.
//	req, resp := client.VerifyCardValidationDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyCardValidationData
func (c *PaymentCryptographyData) VerifyCardValidationDataRequest(input *VerifyCardValidationDataInput) (req *request.Request, output *VerifyCardValidationDataOutput) {
	op := &request.Operation{
		Name:       opVerifyCardValidationData,
		HTTPMethod: "POST",
		HTTPPath:   "/cardvalidationdata/verify",
	}

	if input == nil {
		input = &VerifyCardValidationDataInput{}
	}

	output = &VerifyCardValidationDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// VerifyCardValidationData API operation for Payment Cryptography Data Plane.
//
// Verifies card-related validation data using algorithms such as Card Verification
// Values (CVV/CVV2), Dynamic Card Verification Values (dCVV/dCVV2) and Card
// Security Codes (CSC). For more information, see Verify card data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/verify-card-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// This operation validates the CVV or CSC codes that is printed on a payment
// credit or debit card during card payment transaction. The input values are
// typically provided as part of an inbound transaction to an issuer or supporting
// platform partner. Amazon Web Services Payment Cryptography uses CVV or CSC,
// PAN (Primary Account Number) and expiration date of the card to check its
// validity during transaction processing. In this operation, the CVK (Card
// Verification Key) encryption key for use with card data verification is same
// as the one in used for GenerateCardValidationData.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - GenerateCardValidationData
//
//   - VerifyAuthRequestCryptogram
//
//   - VerifyPinData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation VerifyCardValidationData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - VerificationFailedException
//     This request failed verification.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyCardValidationData
func (c *PaymentCryptographyData) VerifyCardValidationData(input *VerifyCardValidationDataInput) (*VerifyCardValidationDataOutput, error) {
	req, out := c.VerifyCardValidationDataRequest(input)
	return out, req.Send()
}

// VerifyCardValidationDataWithContext is the same as VerifyCardValidationData with the addition of
// the ability to pass a context and additional request options.
//
// See VerifyCardValidationData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) VerifyCardValidationDataWithContext(ctx aws.Context, input *VerifyCardValidationDataInput, opts ...request.Option) (*VerifyCardValidationDataOutput, error) {
	req, out := c.VerifyCardValidationDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opVerifyMac = "VerifyMac"

// VerifyMacRequest generates a "aws/request.Request" representing the
// client's request for the VerifyMac operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See VerifyMac for more information on using the VerifyMac
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the VerifyMacRequest method.
//	req, resp := client.VerifyMacRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyMac
func (c *PaymentCryptographyData) VerifyMacRequest(input *VerifyMacInput) (req *request.Request, output *VerifyMacOutput) {
	op := &request.Operation{
		Name:       opVerifyMac,
		HTTPMethod: "POST",
		HTTPPath:   "/mac/verify",
	}

	if input == nil {
		input = &VerifyMacInput{}
	}

	output = &VerifyMacOutput{}
	req = c.newRequest(op, input, output)
	return
}

// VerifyMac API operation for Payment Cryptography Data Plane.
//
// Verifies a Message Authentication Code (MAC).
//
// You can use this operation when keys won't be shared but mutual data is present
// on both ends for validation. In this case, known data values are used to
// generate a MAC on both ends for verification without sending or receiving
// data in ciphertext or plaintext. You can use this operation to verify a DUPKT,
// HMAC or EMV MAC by setting generation attributes and algorithm to the associated
// values. Use the same encryption key for MAC verification as you use for GenerateMac.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - GenerateMac
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation VerifyMac for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - VerificationFailedException
//     This request failed verification.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyMac
func (c *PaymentCryptographyData) VerifyMac(input *VerifyMacInput) (*VerifyMacOutput, error) {
	req, out := c.VerifyMacRequest(input)
	return out, req.Send()
}

// VerifyMacWithContext is the same as VerifyMac with the addition of
// the ability to pass a context and additional request options.
//
// See VerifyMac for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) VerifyMacWithContext(ctx aws.Context, input *VerifyMacInput, opts ...request.Option) (*VerifyMacOutput, error) {
	req, out := c.VerifyMacRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

const opVerifyPinData = "VerifyPinData"

// VerifyPinDataRequest generates a "aws/request.Request" representing the
// client's request for the VerifyPinData operation. The "output" return
// value will be populated with the request's response once the request completes
// successfully.
//
// Use "Send" method on the returned Request to send the API call to the service.
// the "output" return value is not valid until after Send returns without error.
//
// See VerifyPinData for more information on using the VerifyPinData
// API call, and error handling.
//
// This method is useful when you want to inject custom logic or configuration
// into the SDK's request lifecycle. Such as custom headers, or retry logic.
//
//	// Example sending a request using the VerifyPinDataRequest method.
//	req, resp := client.VerifyPinDataRequest(params)
//
//	err := req.Send()
//	if err == nil { // resp is now filled
//	    fmt.Println(resp)
//	}
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyPinData
func (c *PaymentCryptographyData) VerifyPinDataRequest(input *VerifyPinDataInput) (req *request.Request, output *VerifyPinDataOutput) {
	op := &request.Operation{
		Name:       opVerifyPinData,
		HTTPMethod: "POST",
		HTTPPath:   "/pindata/verify",
	}

	if input == nil {
		input = &VerifyPinDataInput{}
	}

	output = &VerifyPinDataOutput{}
	req = c.newRequest(op, input, output)
	return
}

// VerifyPinData API operation for Payment Cryptography Data Plane.
//
// Verifies pin-related data such as PIN and PIN Offset using algorithms including
// VISA PVV and IBM3624. For more information, see Verify PIN data (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/verify-pin-data.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// This operation verifies PIN data for user payment card. A card holder PIN
// data is never transmitted in clear to or from Amazon Web Services Payment
// Cryptography. This operation uses PIN Verification Key (PVK) for PIN or PIN
// Offset generation and then encrypts it using PIN Encryption Key (PEK) to
// create an EncryptedPinBlock for transmission from Amazon Web Services Payment
// Cryptography.
//
// For information about valid keys for this operation, see Understanding key
// attributes (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/keys-validattributes.html)
// and Key types for specific data operations (https://docs.aws.amazon.com/payment-cryptography/latest/userguide/crypto-ops-validkeys-ops.html)
// in the Amazon Web Services Payment Cryptography User Guide.
//
// Cross-account use: This operation can't be used across different Amazon Web
// Services accounts.
//
// Related operations:
//
//   - GeneratePinData
//
//   - TranslatePinData
//
// Returns awserr.Error for service API and SDK errors. Use runtime type assertions
// with awserr.Error's Code and Message methods to get detailed information about
// the error.
//
// See the AWS API reference guide for Payment Cryptography Data Plane's
// API operation VerifyPinData for usage and error information.
//
// Returned Error Types:
//
//   - ValidationException
//     The request was denied due to an invalid request error.
//
//   - VerificationFailedException
//     This request failed verification.
//
//   - AccessDeniedException
//     You do not have sufficient access to perform this action.
//
//   - ResourceNotFoundException
//     The request was denied due to an invalid resource error.
//
//   - ThrottlingException
//     The request was denied due to request throttling.
//
//   - InternalServerException
//     The request processing has failed because of an unknown error, exception,
//     or failure.
//
// See also, https://docs.aws.amazon.com/goto/WebAPI/payment-cryptography-data-2022-02-03/VerifyPinData
func (c *PaymentCryptographyData) VerifyPinData(input *VerifyPinDataInput) (*VerifyPinDataOutput, error) {
	req, out := c.VerifyPinDataRequest(input)
	return out, req.Send()
}

// VerifyPinDataWithContext is the same as VerifyPinData with the addition of
// the ability to pass a context and additional request options.
//
// See VerifyPinData for details on how to use this API operation.
//
// The context must be non-nil and will be used for request cancellation. If
// the context is nil a panic will occur. In the future the SDK may create
// sub-contexts for http.Requests. See https://golang.org/pkg/context/
// for more information on using Contexts.
func (c *PaymentCryptographyData) VerifyPinDataWithContext(ctx aws.Context, input *VerifyPinDataInput, opts ...request.Option) (*VerifyPinDataOutput, error) {
	req, out := c.VerifyPinDataRequest(input)
	req.SetContext(ctx)
	req.ApplyOptions(opts...)
	return out, req.Send()
}

// You do not have sufficient access to perform this action.
type AccessDeniedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"Message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccessDeniedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AccessDeniedException) GoString() string {
	return s.String()
}

func newErrorAccessDeniedException(v protocol.ResponseMetadata) error {
	return &AccessDeniedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *AccessDeniedException) Code() string {
	return "AccessDeniedException"
}

// Message returns the exception's message.
func (s *AccessDeniedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *AccessDeniedException) OrigErr() error {
	return nil
}

func (s *AccessDeniedException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *AccessDeniedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *AccessDeniedException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Card data parameters that are required to generate a Card Security Code (CSC2)
// for an AMEX payment card.
type AmexCardSecurityCodeVersion1 struct {
	_ struct{} `type:"structure"`

	// The expiry date of a payment card.
	//
	// CardExpiryDate is a required field
	CardExpiryDate *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AmexCardSecurityCodeVersion1) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AmexCardSecurityCodeVersion1) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AmexCardSecurityCodeVersion1) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AmexCardSecurityCodeVersion1"}
	if s.CardExpiryDate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardExpiryDate"))
	}
	if s.CardExpiryDate != nil && len(*s.CardExpiryDate) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("CardExpiryDate", 4))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCardExpiryDate sets the CardExpiryDate field's value.
func (s *AmexCardSecurityCodeVersion1) SetCardExpiryDate(v string) *AmexCardSecurityCodeVersion1 {
	s.CardExpiryDate = &v
	return s
}

// Card data parameters that are required to generate a Card Security Code (CSC2)
// for an AMEX payment card.
type AmexCardSecurityCodeVersion2 struct {
	_ struct{} `type:"structure"`

	// The expiry date of a payment card.
	//
	// CardExpiryDate is a required field
	CardExpiryDate *string `min:"4" type:"string" required:"true"`

	// The service code of the AMEX payment card. This is different from the Card
	// Security Code (CSC).
	//
	// ServiceCode is a required field
	ServiceCode *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AmexCardSecurityCodeVersion2) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AmexCardSecurityCodeVersion2) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *AmexCardSecurityCodeVersion2) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "AmexCardSecurityCodeVersion2"}
	if s.CardExpiryDate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardExpiryDate"))
	}
	if s.CardExpiryDate != nil && len(*s.CardExpiryDate) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("CardExpiryDate", 4))
	}
	if s.ServiceCode == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceCode"))
	}
	if s.ServiceCode != nil && len(*s.ServiceCode) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("ServiceCode", 3))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCardExpiryDate sets the CardExpiryDate field's value.
func (s *AmexCardSecurityCodeVersion2) SetCardExpiryDate(v string) *AmexCardSecurityCodeVersion2 {
	s.CardExpiryDate = &v
	return s
}

// SetServiceCode sets the ServiceCode field's value.
func (s *AmexCardSecurityCodeVersion2) SetServiceCode(v string) *AmexCardSecurityCodeVersion2 {
	s.ServiceCode = &v
	return s
}

// Parameters for plaintext encryption using asymmetric keys.
type AsymmetricEncryptionAttributes struct {
	_ struct{} `type:"structure"`

	// The padding to be included with the data.
	PaddingType *string `type:"string" enum:"PaddingType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AsymmetricEncryptionAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s AsymmetricEncryptionAttributes) GoString() string {
	return s.String()
}

// SetPaddingType sets the PaddingType field's value.
func (s *AsymmetricEncryptionAttributes) SetPaddingType(v string) *AsymmetricEncryptionAttributes {
	s.PaddingType = &v
	return s
}

// Card data parameters that are required to generate Card Verification Values
// (CVV/CVV2), Dynamic Card Verification Values (dCVV/dCVV2), or Card Security
// Codes (CSC).
type CardGenerationAttributes struct {
	_ struct{} `type:"structure"`

	// Card data parameters that are required to generate a Card Security Code (CSC2)
	// for an AMEX payment card.
	AmexCardSecurityCodeVersion1 *AmexCardSecurityCodeVersion1 `type:"structure"`

	// Card data parameters that are required to generate a Card Security Code (CSC2)
	// for an AMEX payment card.
	AmexCardSecurityCodeVersion2 *AmexCardSecurityCodeVersion2 `type:"structure"`

	// Card data parameters that are required to generate a cardholder verification
	// value for the payment card.
	CardHolderVerificationValue *CardHolderVerificationValue `type:"structure"`

	// Card data parameters that are required to generate Card Verification Value
	// (CVV) for the payment card.
	CardVerificationValue1 *CardVerificationValue1 `type:"structure"`

	// Card data parameters that are required to generate Card Verification Value
	// (CVV2) for the payment card.
	CardVerificationValue2 *CardVerificationValue2 `type:"structure"`

	// Card data parameters that are required to generate CDynamic Card Verification
	// Code (dCVC) for the payment card.
	DynamicCardVerificationCode *DynamicCardVerificationCode `type:"structure"`

	// Card data parameters that are required to generate CDynamic Card Verification
	// Value (dCVV) for the payment card.
	DynamicCardVerificationValue *DynamicCardVerificationValue `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardGenerationAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardGenerationAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CardGenerationAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CardGenerationAttributes"}
	if s.AmexCardSecurityCodeVersion1 != nil {
		if err := s.AmexCardSecurityCodeVersion1.Validate(); err != nil {
			invalidParams.AddNested("AmexCardSecurityCodeVersion1", err.(request.ErrInvalidParams))
		}
	}
	if s.AmexCardSecurityCodeVersion2 != nil {
		if err := s.AmexCardSecurityCodeVersion2.Validate(); err != nil {
			invalidParams.AddNested("AmexCardSecurityCodeVersion2", err.(request.ErrInvalidParams))
		}
	}
	if s.CardHolderVerificationValue != nil {
		if err := s.CardHolderVerificationValue.Validate(); err != nil {
			invalidParams.AddNested("CardHolderVerificationValue", err.(request.ErrInvalidParams))
		}
	}
	if s.CardVerificationValue1 != nil {
		if err := s.CardVerificationValue1.Validate(); err != nil {
			invalidParams.AddNested("CardVerificationValue1", err.(request.ErrInvalidParams))
		}
	}
	if s.CardVerificationValue2 != nil {
		if err := s.CardVerificationValue2.Validate(); err != nil {
			invalidParams.AddNested("CardVerificationValue2", err.(request.ErrInvalidParams))
		}
	}
	if s.DynamicCardVerificationCode != nil {
		if err := s.DynamicCardVerificationCode.Validate(); err != nil {
			invalidParams.AddNested("DynamicCardVerificationCode", err.(request.ErrInvalidParams))
		}
	}
	if s.DynamicCardVerificationValue != nil {
		if err := s.DynamicCardVerificationValue.Validate(); err != nil {
			invalidParams.AddNested("DynamicCardVerificationValue", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAmexCardSecurityCodeVersion1 sets the AmexCardSecurityCodeVersion1 field's value.
func (s *CardGenerationAttributes) SetAmexCardSecurityCodeVersion1(v *AmexCardSecurityCodeVersion1) *CardGenerationAttributes {
	s.AmexCardSecurityCodeVersion1 = v
	return s
}

// SetAmexCardSecurityCodeVersion2 sets the AmexCardSecurityCodeVersion2 field's value.
func (s *CardGenerationAttributes) SetAmexCardSecurityCodeVersion2(v *AmexCardSecurityCodeVersion2) *CardGenerationAttributes {
	s.AmexCardSecurityCodeVersion2 = v
	return s
}

// SetCardHolderVerificationValue sets the CardHolderVerificationValue field's value.
func (s *CardGenerationAttributes) SetCardHolderVerificationValue(v *CardHolderVerificationValue) *CardGenerationAttributes {
	s.CardHolderVerificationValue = v
	return s
}

// SetCardVerificationValue1 sets the CardVerificationValue1 field's value.
func (s *CardGenerationAttributes) SetCardVerificationValue1(v *CardVerificationValue1) *CardGenerationAttributes {
	s.CardVerificationValue1 = v
	return s
}

// SetCardVerificationValue2 sets the CardVerificationValue2 field's value.
func (s *CardGenerationAttributes) SetCardVerificationValue2(v *CardVerificationValue2) *CardGenerationAttributes {
	s.CardVerificationValue2 = v
	return s
}

// SetDynamicCardVerificationCode sets the DynamicCardVerificationCode field's value.
func (s *CardGenerationAttributes) SetDynamicCardVerificationCode(v *DynamicCardVerificationCode) *CardGenerationAttributes {
	s.DynamicCardVerificationCode = v
	return s
}

// SetDynamicCardVerificationValue sets the DynamicCardVerificationValue field's value.
func (s *CardGenerationAttributes) SetDynamicCardVerificationValue(v *DynamicCardVerificationValue) *CardGenerationAttributes {
	s.DynamicCardVerificationValue = v
	return s
}

// Card data parameters that are required to generate a cardholder verification
// value for the payment card.
type CardHolderVerificationValue struct {
	_ struct{} `type:"structure"`

	// The transaction counter value that comes from a point of sale terminal.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// A random number generated by the issuer.
	//
	// UnpredictableNumber is a required field
	UnpredictableNumber *string `min:"2" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardHolderVerificationValue) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardHolderVerificationValue) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CardHolderVerificationValue) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CardHolderVerificationValue"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.UnpredictableNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("UnpredictableNumber"))
	}
	if s.UnpredictableNumber != nil && len(*s.UnpredictableNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("UnpredictableNumber", 2))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *CardHolderVerificationValue) SetApplicationTransactionCounter(v string) *CardHolderVerificationValue {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *CardHolderVerificationValue) SetPanSequenceNumber(v string) *CardHolderVerificationValue {
	s.PanSequenceNumber = &v
	return s
}

// SetUnpredictableNumber sets the UnpredictableNumber field's value.
func (s *CardHolderVerificationValue) SetUnpredictableNumber(v string) *CardHolderVerificationValue {
	s.UnpredictableNumber = &v
	return s
}

// Card data parameters that are requried to verify Card Verification Values
// (CVV/CVV2), Dynamic Card Verification Values (dCVV/dCVV2), or Card Security
// Codes (CSC).
type CardVerificationAttributes struct {
	_ struct{} `type:"structure"`

	// Card data parameters that are required to generate a Card Security Code (CSC2)
	// for an AMEX payment card.
	AmexCardSecurityCodeVersion1 *AmexCardSecurityCodeVersion1 `type:"structure"`

	// Card data parameters that are required to verify a Card Security Code (CSC2)
	// for an AMEX payment card.
	AmexCardSecurityCodeVersion2 *AmexCardSecurityCodeVersion2 `type:"structure"`

	// Card data parameters that are required to verify a cardholder verification
	// value for the payment card.
	CardHolderVerificationValue *CardHolderVerificationValue `type:"structure"`

	// Card data parameters that are required to verify Card Verification Value
	// (CVV) for the payment card.
	CardVerificationValue1 *CardVerificationValue1 `type:"structure"`

	// Card data parameters that are required to verify Card Verification Value
	// (CVV2) for the payment card.
	CardVerificationValue2 *CardVerificationValue2 `type:"structure"`

	// Card data parameters that are required to verify CDynamic Card Verification
	// Code (dCVC) for the payment card.
	DiscoverDynamicCardVerificationCode *DiscoverDynamicCardVerificationCode `type:"structure"`

	// Card data parameters that are required to verify CDynamic Card Verification
	// Code (dCVC) for the payment card.
	DynamicCardVerificationCode *DynamicCardVerificationCode `type:"structure"`

	// Card data parameters that are required to verify CDynamic Card Verification
	// Value (dCVV) for the payment card.
	DynamicCardVerificationValue *DynamicCardVerificationValue `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardVerificationAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardVerificationAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CardVerificationAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CardVerificationAttributes"}
	if s.AmexCardSecurityCodeVersion1 != nil {
		if err := s.AmexCardSecurityCodeVersion1.Validate(); err != nil {
			invalidParams.AddNested("AmexCardSecurityCodeVersion1", err.(request.ErrInvalidParams))
		}
	}
	if s.AmexCardSecurityCodeVersion2 != nil {
		if err := s.AmexCardSecurityCodeVersion2.Validate(); err != nil {
			invalidParams.AddNested("AmexCardSecurityCodeVersion2", err.(request.ErrInvalidParams))
		}
	}
	if s.CardHolderVerificationValue != nil {
		if err := s.CardHolderVerificationValue.Validate(); err != nil {
			invalidParams.AddNested("CardHolderVerificationValue", err.(request.ErrInvalidParams))
		}
	}
	if s.CardVerificationValue1 != nil {
		if err := s.CardVerificationValue1.Validate(); err != nil {
			invalidParams.AddNested("CardVerificationValue1", err.(request.ErrInvalidParams))
		}
	}
	if s.CardVerificationValue2 != nil {
		if err := s.CardVerificationValue2.Validate(); err != nil {
			invalidParams.AddNested("CardVerificationValue2", err.(request.ErrInvalidParams))
		}
	}
	if s.DiscoverDynamicCardVerificationCode != nil {
		if err := s.DiscoverDynamicCardVerificationCode.Validate(); err != nil {
			invalidParams.AddNested("DiscoverDynamicCardVerificationCode", err.(request.ErrInvalidParams))
		}
	}
	if s.DynamicCardVerificationCode != nil {
		if err := s.DynamicCardVerificationCode.Validate(); err != nil {
			invalidParams.AddNested("DynamicCardVerificationCode", err.(request.ErrInvalidParams))
		}
	}
	if s.DynamicCardVerificationValue != nil {
		if err := s.DynamicCardVerificationValue.Validate(); err != nil {
			invalidParams.AddNested("DynamicCardVerificationValue", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAmexCardSecurityCodeVersion1 sets the AmexCardSecurityCodeVersion1 field's value.
func (s *CardVerificationAttributes) SetAmexCardSecurityCodeVersion1(v *AmexCardSecurityCodeVersion1) *CardVerificationAttributes {
	s.AmexCardSecurityCodeVersion1 = v
	return s
}

// SetAmexCardSecurityCodeVersion2 sets the AmexCardSecurityCodeVersion2 field's value.
func (s *CardVerificationAttributes) SetAmexCardSecurityCodeVersion2(v *AmexCardSecurityCodeVersion2) *CardVerificationAttributes {
	s.AmexCardSecurityCodeVersion2 = v
	return s
}

// SetCardHolderVerificationValue sets the CardHolderVerificationValue field's value.
func (s *CardVerificationAttributes) SetCardHolderVerificationValue(v *CardHolderVerificationValue) *CardVerificationAttributes {
	s.CardHolderVerificationValue = v
	return s
}

// SetCardVerificationValue1 sets the CardVerificationValue1 field's value.
func (s *CardVerificationAttributes) SetCardVerificationValue1(v *CardVerificationValue1) *CardVerificationAttributes {
	s.CardVerificationValue1 = v
	return s
}

// SetCardVerificationValue2 sets the CardVerificationValue2 field's value.
func (s *CardVerificationAttributes) SetCardVerificationValue2(v *CardVerificationValue2) *CardVerificationAttributes {
	s.CardVerificationValue2 = v
	return s
}

// SetDiscoverDynamicCardVerificationCode sets the DiscoverDynamicCardVerificationCode field's value.
func (s *CardVerificationAttributes) SetDiscoverDynamicCardVerificationCode(v *DiscoverDynamicCardVerificationCode) *CardVerificationAttributes {
	s.DiscoverDynamicCardVerificationCode = v
	return s
}

// SetDynamicCardVerificationCode sets the DynamicCardVerificationCode field's value.
func (s *CardVerificationAttributes) SetDynamicCardVerificationCode(v *DynamicCardVerificationCode) *CardVerificationAttributes {
	s.DynamicCardVerificationCode = v
	return s
}

// SetDynamicCardVerificationValue sets the DynamicCardVerificationValue field's value.
func (s *CardVerificationAttributes) SetDynamicCardVerificationValue(v *DynamicCardVerificationValue) *CardVerificationAttributes {
	s.DynamicCardVerificationValue = v
	return s
}

// Card data parameters that are required to verify CVV (Card Verification Value)
// for the payment card.
type CardVerificationValue1 struct {
	_ struct{} `type:"structure"`

	// The expiry date of a payment card.
	//
	// CardExpiryDate is a required field
	CardExpiryDate *string `min:"4" type:"string" required:"true"`

	// The service code of the payment card. This is different from Card Security
	// Code (CSC).
	//
	// ServiceCode is a required field
	ServiceCode *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardVerificationValue1) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardVerificationValue1) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CardVerificationValue1) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CardVerificationValue1"}
	if s.CardExpiryDate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardExpiryDate"))
	}
	if s.CardExpiryDate != nil && len(*s.CardExpiryDate) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("CardExpiryDate", 4))
	}
	if s.ServiceCode == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceCode"))
	}
	if s.ServiceCode != nil && len(*s.ServiceCode) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("ServiceCode", 3))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCardExpiryDate sets the CardExpiryDate field's value.
func (s *CardVerificationValue1) SetCardExpiryDate(v string) *CardVerificationValue1 {
	s.CardExpiryDate = &v
	return s
}

// SetServiceCode sets the ServiceCode field's value.
func (s *CardVerificationValue1) SetServiceCode(v string) *CardVerificationValue1 {
	s.ServiceCode = &v
	return s
}

// Card data parameters that are required to verify Card Verification Value
// (CVV2) for the payment card.
type CardVerificationValue2 struct {
	_ struct{} `type:"structure"`

	// The expiry date of a payment card.
	//
	// CardExpiryDate is a required field
	CardExpiryDate *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardVerificationValue2) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CardVerificationValue2) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CardVerificationValue2) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CardVerificationValue2"}
	if s.CardExpiryDate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardExpiryDate"))
	}
	if s.CardExpiryDate != nil && len(*s.CardExpiryDate) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("CardExpiryDate", 4))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCardExpiryDate sets the CardExpiryDate field's value.
func (s *CardVerificationValue2) SetCardExpiryDate(v string) *CardVerificationValue2 {
	s.CardExpiryDate = &v
	return s
}

// Parameters that are required for Authorization Response Cryptogram (ARPC)
// generation after Authorization Request Cryptogram (ARQC) verification is
// successful.
type CryptogramAuthResponse struct {
	_ struct{} `type:"structure"`

	// Parameters that are required for ARPC response generation using method1 after
	// ARQC verification is successful.
	ArpcMethod1 *CryptogramVerificationArpcMethod1 `type:"structure"`

	// Parameters that are required for ARPC response generation using method2 after
	// ARQC verification is successful.
	ArpcMethod2 *CryptogramVerificationArpcMethod2 `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CryptogramAuthResponse) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CryptogramAuthResponse) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CryptogramAuthResponse) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CryptogramAuthResponse"}
	if s.ArpcMethod1 != nil {
		if err := s.ArpcMethod1.Validate(); err != nil {
			invalidParams.AddNested("ArpcMethod1", err.(request.ErrInvalidParams))
		}
	}
	if s.ArpcMethod2 != nil {
		if err := s.ArpcMethod2.Validate(); err != nil {
			invalidParams.AddNested("ArpcMethod2", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetArpcMethod1 sets the ArpcMethod1 field's value.
func (s *CryptogramAuthResponse) SetArpcMethod1(v *CryptogramVerificationArpcMethod1) *CryptogramAuthResponse {
	s.ArpcMethod1 = v
	return s
}

// SetArpcMethod2 sets the ArpcMethod2 field's value.
func (s *CryptogramAuthResponse) SetArpcMethod2(v *CryptogramVerificationArpcMethod2) *CryptogramAuthResponse {
	s.ArpcMethod2 = v
	return s
}

// Parameters that are required for ARPC response generation using method1 after
// ARQC verification is successful.
type CryptogramVerificationArpcMethod1 struct {
	_ struct{} `type:"structure"`

	// The auth code used to calculate APRC after ARQC verification is successful.
	// This is the same auth code used for ARQC generation outside of Amazon Web
	// Services Payment Cryptography.
	//
	// AuthResponseCode is a required field
	AuthResponseCode *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CryptogramVerificationArpcMethod1) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CryptogramVerificationArpcMethod1) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CryptogramVerificationArpcMethod1) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CryptogramVerificationArpcMethod1"}
	if s.AuthResponseCode == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthResponseCode"))
	}
	if s.AuthResponseCode != nil && len(*s.AuthResponseCode) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("AuthResponseCode", 4))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthResponseCode sets the AuthResponseCode field's value.
func (s *CryptogramVerificationArpcMethod1) SetAuthResponseCode(v string) *CryptogramVerificationArpcMethod1 {
	s.AuthResponseCode = &v
	return s
}

// Parameters that are required for ARPC response generation using method2 after
// ARQC verification is successful.
type CryptogramVerificationArpcMethod2 struct {
	_ struct{} `type:"structure"`

	// The data indicating whether the issuer approves or declines an online transaction
	// using an EMV chip card.
	//
	// CardStatusUpdate is a required field
	CardStatusUpdate *string `min:"8" type:"string" required:"true"`

	// The proprietary authentication data used by issuer for communication during
	// online transaction using an EMV chip card.
	ProprietaryAuthenticationData *string `min:"1" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CryptogramVerificationArpcMethod2) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s CryptogramVerificationArpcMethod2) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *CryptogramVerificationArpcMethod2) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "CryptogramVerificationArpcMethod2"}
	if s.CardStatusUpdate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardStatusUpdate"))
	}
	if s.CardStatusUpdate != nil && len(*s.CardStatusUpdate) < 8 {
		invalidParams.Add(request.NewErrParamMinLen("CardStatusUpdate", 8))
	}
	if s.ProprietaryAuthenticationData != nil && len(*s.ProprietaryAuthenticationData) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("ProprietaryAuthenticationData", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCardStatusUpdate sets the CardStatusUpdate field's value.
func (s *CryptogramVerificationArpcMethod2) SetCardStatusUpdate(v string) *CryptogramVerificationArpcMethod2 {
	s.CardStatusUpdate = &v
	return s
}

// SetProprietaryAuthenticationData sets the ProprietaryAuthenticationData field's value.
func (s *CryptogramVerificationArpcMethod2) SetProprietaryAuthenticationData(v string) *CryptogramVerificationArpcMethod2 {
	s.ProprietaryAuthenticationData = &v
	return s
}

type DecryptDataInput struct {
	_ struct{} `type:"structure"`

	// The ciphertext to decrypt.
	//
	// CipherText is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DecryptDataInput's
	// String and GoString methods.
	//
	// CipherText is a required field
	CipherText *string `min:"16" type:"string" required:"true" sensitive:"true"`

	// The encryption key type and attributes for ciphertext decryption.
	//
	// DecryptionAttributes is a required field
	DecryptionAttributes *EncryptionDecryptionAttributes `type:"structure" required:"true"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses for ciphertext decryption.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `location:"uri" locationName:"KeyIdentifier" min:"7" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DecryptDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DecryptDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DecryptDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DecryptDataInput"}
	if s.CipherText == nil {
		invalidParams.Add(request.NewErrParamRequired("CipherText"))
	}
	if s.CipherText != nil && len(*s.CipherText) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("CipherText", 16))
	}
	if s.DecryptionAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("DecryptionAttributes"))
	}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.DecryptionAttributes != nil {
		if err := s.DecryptionAttributes.Validate(); err != nil {
			invalidParams.AddNested("DecryptionAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCipherText sets the CipherText field's value.
func (s *DecryptDataInput) SetCipherText(v string) *DecryptDataInput {
	s.CipherText = &v
	return s
}

// SetDecryptionAttributes sets the DecryptionAttributes field's value.
func (s *DecryptDataInput) SetDecryptionAttributes(v *EncryptionDecryptionAttributes) *DecryptDataInput {
	s.DecryptionAttributes = v
	return s
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *DecryptDataInput) SetKeyIdentifier(v string) *DecryptDataInput {
	s.KeyIdentifier = &v
	return s
}

type DecryptDataOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses for ciphertext decryption.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The decrypted plaintext data.
	//
	// PlainText is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DecryptDataOutput's
	// String and GoString methods.
	//
	// PlainText is a required field
	PlainText *string `min:"16" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DecryptDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DecryptDataOutput) GoString() string {
	return s.String()
}

// SetKeyArn sets the KeyArn field's value.
func (s *DecryptDataOutput) SetKeyArn(v string) *DecryptDataOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *DecryptDataOutput) SetKeyCheckValue(v string) *DecryptDataOutput {
	s.KeyCheckValue = &v
	return s
}

// SetPlainText sets the PlainText field's value.
func (s *DecryptDataOutput) SetPlainText(v string) *DecryptDataOutput {
	s.PlainText = &v
	return s
}

// Parameters that are required to generate or verify dCVC (Dynamic Card Verification
// Code).
type DiscoverDynamicCardVerificationCode struct {
	_ struct{} `type:"structure"`

	// The transaction counter value that comes from the terminal.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// The expiry date of a payment card.
	//
	// CardExpiryDate is a required field
	CardExpiryDate *string `min:"4" type:"string" required:"true"`

	// A random number that is generated by the issuer.
	//
	// UnpredictableNumber is a required field
	UnpredictableNumber *string `min:"2" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DiscoverDynamicCardVerificationCode) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DiscoverDynamicCardVerificationCode) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DiscoverDynamicCardVerificationCode) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DiscoverDynamicCardVerificationCode"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.CardExpiryDate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardExpiryDate"))
	}
	if s.CardExpiryDate != nil && len(*s.CardExpiryDate) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("CardExpiryDate", 4))
	}
	if s.UnpredictableNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("UnpredictableNumber"))
	}
	if s.UnpredictableNumber != nil && len(*s.UnpredictableNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("UnpredictableNumber", 2))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *DiscoverDynamicCardVerificationCode) SetApplicationTransactionCounter(v string) *DiscoverDynamicCardVerificationCode {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetCardExpiryDate sets the CardExpiryDate field's value.
func (s *DiscoverDynamicCardVerificationCode) SetCardExpiryDate(v string) *DiscoverDynamicCardVerificationCode {
	s.CardExpiryDate = &v
	return s
}

// SetUnpredictableNumber sets the UnpredictableNumber field's value.
func (s *DiscoverDynamicCardVerificationCode) SetUnpredictableNumber(v string) *DiscoverDynamicCardVerificationCode {
	s.UnpredictableNumber = &v
	return s
}

// Parameters that are used for Derived Unique Key Per Transaction (DUKPT) derivation
// algorithm.
type DukptAttributes struct {
	_ struct{} `type:"structure"`

	// The key type derived using DUKPT from a Base Derivation Key (BDK) and Key
	// Serial Number (KSN). This must be less than or equal to the strength of the
	// BDK. For example, you can't use AES_128 as a derivation type for a BDK of
	// AES_128 or TDES_2KEY.
	//
	// DukptDerivationType is a required field
	DukptDerivationType *string `type:"string" required:"true" enum:"DukptDerivationType"`

	// The unique identifier known as Key Serial Number (KSN) that comes from an
	// encrypting device using DUKPT encryption method. The KSN is derived from
	// the encrypting device unique identifier and an internal transaction counter.
	//
	// KeySerialNumber is a required field
	KeySerialNumber *string `min:"10" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DukptAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DukptAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DukptAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DukptAttributes"}
	if s.DukptDerivationType == nil {
		invalidParams.Add(request.NewErrParamRequired("DukptDerivationType"))
	}
	if s.KeySerialNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("KeySerialNumber"))
	}
	if s.KeySerialNumber != nil && len(*s.KeySerialNumber) < 10 {
		invalidParams.Add(request.NewErrParamMinLen("KeySerialNumber", 10))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDukptDerivationType sets the DukptDerivationType field's value.
func (s *DukptAttributes) SetDukptDerivationType(v string) *DukptAttributes {
	s.DukptDerivationType = &v
	return s
}

// SetKeySerialNumber sets the KeySerialNumber field's value.
func (s *DukptAttributes) SetKeySerialNumber(v string) *DukptAttributes {
	s.KeySerialNumber = &v
	return s
}

// Parameters required for encryption or decryption of data using DUKPT.
type DukptDerivationAttributes struct {
	_ struct{} `type:"structure"`

	// The key type derived using DUKPT from a Base Derivation Key (BDK) and Key
	// Serial Number (KSN). This must be less than or equal to the strength of the
	// BDK. For example, you can't use AES_128 as a derivation type for a BDK of
	// AES_128 or TDES_2KEY
	DukptKeyDerivationType *string `type:"string" enum:"DukptDerivationType"`

	// The type of use of DUKPT, which can be for incoming data decryption, outgoing
	// data encryption, or both.
	DukptKeyVariant *string `type:"string" enum:"DukptKeyVariant"`

	// The unique identifier known as Key Serial Number (KSN) that comes from an
	// encrypting device using DUKPT encryption method. The KSN is derived from
	// the encrypting device unique identifier and an internal transaction counter.
	//
	// KeySerialNumber is a required field
	KeySerialNumber *string `min:"10" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DukptDerivationAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DukptDerivationAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DukptDerivationAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DukptDerivationAttributes"}
	if s.KeySerialNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("KeySerialNumber"))
	}
	if s.KeySerialNumber != nil && len(*s.KeySerialNumber) < 10 {
		invalidParams.Add(request.NewErrParamMinLen("KeySerialNumber", 10))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDukptKeyDerivationType sets the DukptKeyDerivationType field's value.
func (s *DukptDerivationAttributes) SetDukptKeyDerivationType(v string) *DukptDerivationAttributes {
	s.DukptKeyDerivationType = &v
	return s
}

// SetDukptKeyVariant sets the DukptKeyVariant field's value.
func (s *DukptDerivationAttributes) SetDukptKeyVariant(v string) *DukptDerivationAttributes {
	s.DukptKeyVariant = &v
	return s
}

// SetKeySerialNumber sets the KeySerialNumber field's value.
func (s *DukptDerivationAttributes) SetKeySerialNumber(v string) *DukptDerivationAttributes {
	s.KeySerialNumber = &v
	return s
}

// Parameters that are required to encrypt plaintext data using DUKPT.
type DukptEncryptionAttributes struct {
	_ struct{} `type:"structure"`

	// The key type encrypted using DUKPT from a Base Derivation Key (BDK) and Key
	// Serial Number (KSN). This must be less than or equal to the strength of the
	// BDK. For example, you can't use AES_128 as a derivation type for a BDK of
	// AES_128 or TDES_2KEY
	DukptKeyDerivationType *string `type:"string" enum:"DukptDerivationType"`

	// The type of use of DUKPT, which can be incoming data decryption, outgoing
	// data encryption, or both.
	DukptKeyVariant *string `type:"string" enum:"DukptKeyVariant"`

	// An input to cryptographic primitive used to provide the intial state. Typically
	// the InitializationVector must have a random or psuedo-random value, but sometimes
	// it only needs to be unpredictable or unique. If you don't provide a value,
	// Amazon Web Services Payment Cryptography generates a random value.
	//
	// InitializationVector is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by DukptEncryptionAttributes's
	// String and GoString methods.
	InitializationVector *string `min:"16" type:"string" sensitive:"true"`

	// The unique identifier known as Key Serial Number (KSN) that comes from an
	// encrypting device using DUKPT encryption method. The KSN is derived from
	// the encrypting device unique identifier and an internal transaction counter.
	//
	// KeySerialNumber is a required field
	KeySerialNumber *string `min:"10" type:"string" required:"true"`

	// The block cipher mode of operation. Block ciphers are designed to encrypt
	// a block of data of fixed size, for example, 128 bits. The size of the input
	// block is usually same as the size of the encrypted output block, while the
	// key length can be different. A mode of operation describes how to repeatedly
	// apply a cipher's single-block operation to securely transform amounts of
	// data larger than a block.
	//
	// The default is CBC.
	Mode *string `type:"string" enum:"DukptEncryptionMode"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DukptEncryptionAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DukptEncryptionAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DukptEncryptionAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DukptEncryptionAttributes"}
	if s.InitializationVector != nil && len(*s.InitializationVector) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("InitializationVector", 16))
	}
	if s.KeySerialNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("KeySerialNumber"))
	}
	if s.KeySerialNumber != nil && len(*s.KeySerialNumber) < 10 {
		invalidParams.Add(request.NewErrParamMinLen("KeySerialNumber", 10))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDukptKeyDerivationType sets the DukptKeyDerivationType field's value.
func (s *DukptEncryptionAttributes) SetDukptKeyDerivationType(v string) *DukptEncryptionAttributes {
	s.DukptKeyDerivationType = &v
	return s
}

// SetDukptKeyVariant sets the DukptKeyVariant field's value.
func (s *DukptEncryptionAttributes) SetDukptKeyVariant(v string) *DukptEncryptionAttributes {
	s.DukptKeyVariant = &v
	return s
}

// SetInitializationVector sets the InitializationVector field's value.
func (s *DukptEncryptionAttributes) SetInitializationVector(v string) *DukptEncryptionAttributes {
	s.InitializationVector = &v
	return s
}

// SetKeySerialNumber sets the KeySerialNumber field's value.
func (s *DukptEncryptionAttributes) SetKeySerialNumber(v string) *DukptEncryptionAttributes {
	s.KeySerialNumber = &v
	return s
}

// SetMode sets the Mode field's value.
func (s *DukptEncryptionAttributes) SetMode(v string) *DukptEncryptionAttributes {
	s.Mode = &v
	return s
}

// Parameters that are required to generate or verify Dynamic Card Verification
// Value (dCVV).
type DynamicCardVerificationCode struct {
	_ struct{} `type:"structure"`

	// The transaction counter value that comes from the terminal.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The data on the two tracks of magnetic cards used for financial transactions.
	// This includes the cardholder name, PAN, expiration date, bank ID (BIN) and
	// several other numbers the issuing bank uses to validate the data received.
	//
	// TrackData is a required field
	TrackData *string `min:"2" type:"string" required:"true"`

	// A random number generated by the issuer.
	//
	// UnpredictableNumber is a required field
	UnpredictableNumber *string `min:"2" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamicCardVerificationCode) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamicCardVerificationCode) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DynamicCardVerificationCode) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DynamicCardVerificationCode"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.TrackData == nil {
		invalidParams.Add(request.NewErrParamRequired("TrackData"))
	}
	if s.TrackData != nil && len(*s.TrackData) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("TrackData", 2))
	}
	if s.UnpredictableNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("UnpredictableNumber"))
	}
	if s.UnpredictableNumber != nil && len(*s.UnpredictableNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("UnpredictableNumber", 2))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *DynamicCardVerificationCode) SetApplicationTransactionCounter(v string) *DynamicCardVerificationCode {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *DynamicCardVerificationCode) SetPanSequenceNumber(v string) *DynamicCardVerificationCode {
	s.PanSequenceNumber = &v
	return s
}

// SetTrackData sets the TrackData field's value.
func (s *DynamicCardVerificationCode) SetTrackData(v string) *DynamicCardVerificationCode {
	s.TrackData = &v
	return s
}

// SetUnpredictableNumber sets the UnpredictableNumber field's value.
func (s *DynamicCardVerificationCode) SetUnpredictableNumber(v string) *DynamicCardVerificationCode {
	s.UnpredictableNumber = &v
	return s
}

// Parameters that are required to generate or verify Dynamic Card Verification
// Value (dCVV).
type DynamicCardVerificationValue struct {
	_ struct{} `type:"structure"`

	// The transaction counter value that comes from the terminal.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// The expiry date of a payment card.
	//
	// CardExpiryDate is a required field
	CardExpiryDate *string `min:"4" type:"string" required:"true"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The service code of the payment card. This is different from Card Security
	// Code (CSC).
	//
	// ServiceCode is a required field
	ServiceCode *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamicCardVerificationValue) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s DynamicCardVerificationValue) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *DynamicCardVerificationValue) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "DynamicCardVerificationValue"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.CardExpiryDate == nil {
		invalidParams.Add(request.NewErrParamRequired("CardExpiryDate"))
	}
	if s.CardExpiryDate != nil && len(*s.CardExpiryDate) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("CardExpiryDate", 4))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.ServiceCode == nil {
		invalidParams.Add(request.NewErrParamRequired("ServiceCode"))
	}
	if s.ServiceCode != nil && len(*s.ServiceCode) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("ServiceCode", 3))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *DynamicCardVerificationValue) SetApplicationTransactionCounter(v string) *DynamicCardVerificationValue {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetCardExpiryDate sets the CardExpiryDate field's value.
func (s *DynamicCardVerificationValue) SetCardExpiryDate(v string) *DynamicCardVerificationValue {
	s.CardExpiryDate = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *DynamicCardVerificationValue) SetPanSequenceNumber(v string) *DynamicCardVerificationValue {
	s.PanSequenceNumber = &v
	return s
}

// SetServiceCode sets the ServiceCode field's value.
func (s *DynamicCardVerificationValue) SetServiceCode(v string) *DynamicCardVerificationValue {
	s.ServiceCode = &v
	return s
}

type EncryptDataInput struct {
	_ struct{} `type:"structure"`

	// The encryption key type and attributes for plaintext encryption.
	//
	// EncryptionAttributes is a required field
	EncryptionAttributes *EncryptionDecryptionAttributes `type:"structure" required:"true"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses for plaintext encryption.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `location:"uri" locationName:"KeyIdentifier" min:"7" type:"string" required:"true"`

	// The plaintext to be encrypted.
	//
	// PlainText is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by EncryptDataInput's
	// String and GoString methods.
	//
	// PlainText is a required field
	PlainText *string `min:"16" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EncryptDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EncryptDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EncryptDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EncryptDataInput"}
	if s.EncryptionAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptionAttributes"))
	}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.PlainText == nil {
		invalidParams.Add(request.NewErrParamRequired("PlainText"))
	}
	if s.PlainText != nil && len(*s.PlainText) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("PlainText", 16))
	}
	if s.EncryptionAttributes != nil {
		if err := s.EncryptionAttributes.Validate(); err != nil {
			invalidParams.AddNested("EncryptionAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEncryptionAttributes sets the EncryptionAttributes field's value.
func (s *EncryptDataInput) SetEncryptionAttributes(v *EncryptionDecryptionAttributes) *EncryptDataInput {
	s.EncryptionAttributes = v
	return s
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *EncryptDataInput) SetKeyIdentifier(v string) *EncryptDataInput {
	s.KeyIdentifier = &v
	return s
}

// SetPlainText sets the PlainText field's value.
func (s *EncryptDataInput) SetPlainText(v string) *EncryptDataInput {
	s.PlainText = &v
	return s
}

type EncryptDataOutput struct {
	_ struct{} `type:"structure"`

	// The encrypted ciphertext.
	//
	// CipherText is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by EncryptDataOutput's
	// String and GoString methods.
	//
	// CipherText is a required field
	CipherText *string `min:"16" type:"string" required:"true" sensitive:"true"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses for plaintext encryption.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	KeyCheckValue *string `min:"4" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EncryptDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EncryptDataOutput) GoString() string {
	return s.String()
}

// SetCipherText sets the CipherText field's value.
func (s *EncryptDataOutput) SetCipherText(v string) *EncryptDataOutput {
	s.CipherText = &v
	return s
}

// SetKeyArn sets the KeyArn field's value.
func (s *EncryptDataOutput) SetKeyArn(v string) *EncryptDataOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *EncryptDataOutput) SetKeyCheckValue(v string) *EncryptDataOutput {
	s.KeyCheckValue = &v
	return s
}

// Parameters that are required to perform encryption and decryption operations.
type EncryptionDecryptionAttributes struct {
	_ struct{} `type:"structure"`

	// Parameters for plaintext encryption using asymmetric keys.
	Asymmetric *AsymmetricEncryptionAttributes `type:"structure"`

	// Parameters that are required to encrypt plaintext data using DUKPT.
	Dukpt *DukptEncryptionAttributes `type:"structure"`

	// Parameters that are required to perform encryption and decryption using symmetric
	// keys.
	Symmetric *SymmetricEncryptionAttributes `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EncryptionDecryptionAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s EncryptionDecryptionAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *EncryptionDecryptionAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "EncryptionDecryptionAttributes"}
	if s.Dukpt != nil {
		if err := s.Dukpt.Validate(); err != nil {
			invalidParams.AddNested("Dukpt", err.(request.ErrInvalidParams))
		}
	}
	if s.Symmetric != nil {
		if err := s.Symmetric.Validate(); err != nil {
			invalidParams.AddNested("Symmetric", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAsymmetric sets the Asymmetric field's value.
func (s *EncryptionDecryptionAttributes) SetAsymmetric(v *AsymmetricEncryptionAttributes) *EncryptionDecryptionAttributes {
	s.Asymmetric = v
	return s
}

// SetDukpt sets the Dukpt field's value.
func (s *EncryptionDecryptionAttributes) SetDukpt(v *DukptEncryptionAttributes) *EncryptionDecryptionAttributes {
	s.Dukpt = v
	return s
}

// SetSymmetric sets the Symmetric field's value.
func (s *EncryptionDecryptionAttributes) SetSymmetric(v *SymmetricEncryptionAttributes) *EncryptionDecryptionAttributes {
	s.Symmetric = v
	return s
}

type GenerateCardValidationDataInput struct {
	_ struct{} `type:"structure"`

	// The algorithm for generating CVV or CSC values for the card within Amazon
	// Web Services Payment Cryptography.
	//
	// GenerationAttributes is a required field
	GenerationAttributes *CardGenerationAttributes `type:"structure" required:"true"`

	// The keyARN of the CVK encryption key that Amazon Web Services Payment Cryptography
	// uses to generate card data.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The Primary Account Number (PAN), a unique identifier for a payment credit
	// or debit card that associates the card with a specific account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GenerateCardValidationDataInput's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`

	// The length of the CVV or CSC to be generated. The default value is 3.
	ValidationDataLength *int64 `min:"3" type:"integer"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateCardValidationDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateCardValidationDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GenerateCardValidationDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GenerateCardValidationDataInput"}
	if s.GenerationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("GenerationAttributes"))
	}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}
	if s.ValidationDataLength != nil && *s.ValidationDataLength < 3 {
		invalidParams.Add(request.NewErrParamMinValue("ValidationDataLength", 3))
	}
	if s.GenerationAttributes != nil {
		if err := s.GenerationAttributes.Validate(); err != nil {
			invalidParams.AddNested("GenerationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetGenerationAttributes sets the GenerationAttributes field's value.
func (s *GenerateCardValidationDataInput) SetGenerationAttributes(v *CardGenerationAttributes) *GenerateCardValidationDataInput {
	s.GenerationAttributes = v
	return s
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *GenerateCardValidationDataInput) SetKeyIdentifier(v string) *GenerateCardValidationDataInput {
	s.KeyIdentifier = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *GenerateCardValidationDataInput) SetPrimaryAccountNumber(v string) *GenerateCardValidationDataInput {
	s.PrimaryAccountNumber = &v
	return s
}

// SetValidationDataLength sets the ValidationDataLength field's value.
func (s *GenerateCardValidationDataInput) SetValidationDataLength(v int64) *GenerateCardValidationDataInput {
	s.ValidationDataLength = &v
	return s
}

type GenerateCardValidationDataOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the CVK encryption key that Amazon Web Services Payment Cryptography
	// uses to generate CVV or CSC.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The CVV or CSC value that Amazon Web Services Payment Cryptography generates
	// for the card.
	//
	// ValidationData is a required field
	ValidationData *string `min:"3" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateCardValidationDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateCardValidationDataOutput) GoString() string {
	return s.String()
}

// SetKeyArn sets the KeyArn field's value.
func (s *GenerateCardValidationDataOutput) SetKeyArn(v string) *GenerateCardValidationDataOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *GenerateCardValidationDataOutput) SetKeyCheckValue(v string) *GenerateCardValidationDataOutput {
	s.KeyCheckValue = &v
	return s
}

// SetValidationData sets the ValidationData field's value.
func (s *GenerateCardValidationDataOutput) SetValidationData(v string) *GenerateCardValidationDataOutput {
	s.ValidationData = &v
	return s
}

type GenerateMacInput struct {
	_ struct{} `type:"structure"`

	// The attributes and data values to use for MAC generation within Amazon Web
	// Services Payment Cryptography.
	//
	// GenerationAttributes is a required field
	GenerationAttributes *MacAttributes `type:"structure" required:"true"`

	// The keyARN of the MAC generation encryption key.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The length of a MAC under generation.
	MacLength *int64 `min:"4" type:"integer"`

	// The data for which a MAC is under generation.
	//
	// MessageData is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GenerateMacInput's
	// String and GoString methods.
	//
	// MessageData is a required field
	MessageData *string `min:"2" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateMacInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateMacInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GenerateMacInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GenerateMacInput"}
	if s.GenerationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("GenerationAttributes"))
	}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.MacLength != nil && *s.MacLength < 4 {
		invalidParams.Add(request.NewErrParamMinValue("MacLength", 4))
	}
	if s.MessageData == nil {
		invalidParams.Add(request.NewErrParamRequired("MessageData"))
	}
	if s.MessageData != nil && len(*s.MessageData) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("MessageData", 2))
	}
	if s.GenerationAttributes != nil {
		if err := s.GenerationAttributes.Validate(); err != nil {
			invalidParams.AddNested("GenerationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetGenerationAttributes sets the GenerationAttributes field's value.
func (s *GenerateMacInput) SetGenerationAttributes(v *MacAttributes) *GenerateMacInput {
	s.GenerationAttributes = v
	return s
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *GenerateMacInput) SetKeyIdentifier(v string) *GenerateMacInput {
	s.KeyIdentifier = &v
	return s
}

// SetMacLength sets the MacLength field's value.
func (s *GenerateMacInput) SetMacLength(v int64) *GenerateMacInput {
	s.MacLength = &v
	return s
}

// SetMessageData sets the MessageData field's value.
func (s *GenerateMacInput) SetMessageData(v string) *GenerateMacInput {
	s.MessageData = &v
	return s
}

type GenerateMacOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses for MAC generation.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The MAC cryptogram generated within Amazon Web Services Payment Cryptography.
	//
	// Mac is a required field
	Mac *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateMacOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GenerateMacOutput) GoString() string {
	return s.String()
}

// SetKeyArn sets the KeyArn field's value.
func (s *GenerateMacOutput) SetKeyArn(v string) *GenerateMacOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *GenerateMacOutput) SetKeyCheckValue(v string) *GenerateMacOutput {
	s.KeyCheckValue = &v
	return s
}

// SetMac sets the Mac field's value.
func (s *GenerateMacOutput) SetMac(v string) *GenerateMacOutput {
	s.Mac = &v
	return s
}

type GeneratePinDataInput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the PEK that Amazon Web Services Payment Cryptography uses
	// to encrypt the PIN Block.
	//
	// EncryptionKeyIdentifier is a required field
	EncryptionKeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The attributes and values to use for PIN, PVV, or PIN Offset generation.
	//
	// GenerationAttributes is a required field
	GenerationAttributes *PinGenerationAttributes `type:"structure" required:"true"`

	// The keyARN of the PEK that Amazon Web Services Payment Cryptography uses
	// for pin data generation.
	//
	// GenerationKeyIdentifier is a required field
	GenerationKeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The PIN encoding format for pin data generation as specified in ISO 9564.
	// Amazon Web Services Payment Cryptography supports ISO_Format_0 and ISO_Format_3.
	//
	// The ISO_Format_0 PIN block format is equivalent to the ANSI X9.8, VISA-1,
	// and ECI-1 PIN block formats. It is similar to a VISA-4 PIN block format.
	// It supports a PIN from 4 to 12 digits in length.
	//
	// The ISO_Format_3 PIN block format is the same as ISO_Format_0 except that
	// the fill digits are random values from 10 to 15.
	//
	// PinBlockFormat is a required field
	PinBlockFormat *string `type:"string" required:"true" enum:"PinBlockFormatForPinData"`

	// The length of PIN under generation.
	PinDataLength *int64 `min:"4" type:"integer"`

	// The Primary Account Number (PAN), a unique identifier for a payment credit
	// or debit card that associates the card with a specific account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by GeneratePinDataInput's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GeneratePinDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GeneratePinDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *GeneratePinDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "GeneratePinDataInput"}
	if s.EncryptionKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptionKeyIdentifier"))
	}
	if s.EncryptionKeyIdentifier != nil && len(*s.EncryptionKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("EncryptionKeyIdentifier", 7))
	}
	if s.GenerationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("GenerationAttributes"))
	}
	if s.GenerationKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("GenerationKeyIdentifier"))
	}
	if s.GenerationKeyIdentifier != nil && len(*s.GenerationKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("GenerationKeyIdentifier", 7))
	}
	if s.PinBlockFormat == nil {
		invalidParams.Add(request.NewErrParamRequired("PinBlockFormat"))
	}
	if s.PinDataLength != nil && *s.PinDataLength < 4 {
		invalidParams.Add(request.NewErrParamMinValue("PinDataLength", 4))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}
	if s.GenerationAttributes != nil {
		if err := s.GenerationAttributes.Validate(); err != nil {
			invalidParams.AddNested("GenerationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEncryptionKeyIdentifier sets the EncryptionKeyIdentifier field's value.
func (s *GeneratePinDataInput) SetEncryptionKeyIdentifier(v string) *GeneratePinDataInput {
	s.EncryptionKeyIdentifier = &v
	return s
}

// SetGenerationAttributes sets the GenerationAttributes field's value.
func (s *GeneratePinDataInput) SetGenerationAttributes(v *PinGenerationAttributes) *GeneratePinDataInput {
	s.GenerationAttributes = v
	return s
}

// SetGenerationKeyIdentifier sets the GenerationKeyIdentifier field's value.
func (s *GeneratePinDataInput) SetGenerationKeyIdentifier(v string) *GeneratePinDataInput {
	s.GenerationKeyIdentifier = &v
	return s
}

// SetPinBlockFormat sets the PinBlockFormat field's value.
func (s *GeneratePinDataInput) SetPinBlockFormat(v string) *GeneratePinDataInput {
	s.PinBlockFormat = &v
	return s
}

// SetPinDataLength sets the PinDataLength field's value.
func (s *GeneratePinDataInput) SetPinDataLength(v int64) *GeneratePinDataInput {
	s.PinDataLength = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *GeneratePinDataInput) SetPrimaryAccountNumber(v string) *GeneratePinDataInput {
	s.PrimaryAccountNumber = &v
	return s
}

type GeneratePinDataOutput struct {
	_ struct{} `type:"structure"`

	// The PIN block encrypted under PEK from Amazon Web Services Payment Cryptography.
	// The encrypted PIN block is a composite of PAN (Primary Account Number) and
	// PIN (Personal Identification Number), generated in accordance with ISO 9564
	// standard.
	//
	// EncryptedPinBlock is a required field
	EncryptedPinBlock *string `min:"16" type:"string" required:"true"`

	// The keyARN of the PEK that Amazon Web Services Payment Cryptography uses
	// for encrypted pin block generation.
	//
	// EncryptionKeyArn is a required field
	EncryptionKeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// EncryptionKeyCheckValue is a required field
	EncryptionKeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The keyARN of the pin data generation key that Amazon Web Services Payment
	// Cryptography uses for PIN, PVV or PIN Offset generation.
	//
	// GenerationKeyArn is a required field
	GenerationKeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// GenerationKeyCheckValue is a required field
	GenerationKeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The attributes and values Amazon Web Services Payment Cryptography uses for
	// pin data generation.
	//
	// PinData is a required field
	PinData *PinData `type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GeneratePinDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s GeneratePinDataOutput) GoString() string {
	return s.String()
}

// SetEncryptedPinBlock sets the EncryptedPinBlock field's value.
func (s *GeneratePinDataOutput) SetEncryptedPinBlock(v string) *GeneratePinDataOutput {
	s.EncryptedPinBlock = &v
	return s
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *GeneratePinDataOutput) SetEncryptionKeyArn(v string) *GeneratePinDataOutput {
	s.EncryptionKeyArn = &v
	return s
}

// SetEncryptionKeyCheckValue sets the EncryptionKeyCheckValue field's value.
func (s *GeneratePinDataOutput) SetEncryptionKeyCheckValue(v string) *GeneratePinDataOutput {
	s.EncryptionKeyCheckValue = &v
	return s
}

// SetGenerationKeyArn sets the GenerationKeyArn field's value.
func (s *GeneratePinDataOutput) SetGenerationKeyArn(v string) *GeneratePinDataOutput {
	s.GenerationKeyArn = &v
	return s
}

// SetGenerationKeyCheckValue sets the GenerationKeyCheckValue field's value.
func (s *GeneratePinDataOutput) SetGenerationKeyCheckValue(v string) *GeneratePinDataOutput {
	s.GenerationKeyCheckValue = &v
	return s
}

// SetPinData sets the PinData field's value.
func (s *GeneratePinDataOutput) SetPinData(v *PinData) *GeneratePinDataOutput {
	s.PinData = v
	return s
}

// Parameters that are required to generate or verify Ibm3624 natural PIN.
type Ibm3624NaturalPin struct {
	_ struct{} `type:"structure"`

	// The decimalization table to use for IBM 3624 PIN algorithm. The table is
	// used to convert the algorithm intermediate result from hexadecimal characters
	// to decimal.
	//
	// DecimalizationTable is a required field
	DecimalizationTable *string `min:"16" type:"string" required:"true"`

	// The unique data for cardholder identification.
	//
	// PinValidationData is a required field
	PinValidationData *string `min:"4" type:"string" required:"true"`

	// The padding character for validation data.
	//
	// PinValidationDataPadCharacter is a required field
	PinValidationDataPadCharacter *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624NaturalPin) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624NaturalPin) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Ibm3624NaturalPin) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Ibm3624NaturalPin"}
	if s.DecimalizationTable == nil {
		invalidParams.Add(request.NewErrParamRequired("DecimalizationTable"))
	}
	if s.DecimalizationTable != nil && len(*s.DecimalizationTable) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("DecimalizationTable", 16))
	}
	if s.PinValidationData == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationData"))
	}
	if s.PinValidationData != nil && len(*s.PinValidationData) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationData", 4))
	}
	if s.PinValidationDataPadCharacter == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationDataPadCharacter"))
	}
	if s.PinValidationDataPadCharacter != nil && len(*s.PinValidationDataPadCharacter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationDataPadCharacter", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDecimalizationTable sets the DecimalizationTable field's value.
func (s *Ibm3624NaturalPin) SetDecimalizationTable(v string) *Ibm3624NaturalPin {
	s.DecimalizationTable = &v
	return s
}

// SetPinValidationData sets the PinValidationData field's value.
func (s *Ibm3624NaturalPin) SetPinValidationData(v string) *Ibm3624NaturalPin {
	s.PinValidationData = &v
	return s
}

// SetPinValidationDataPadCharacter sets the PinValidationDataPadCharacter field's value.
func (s *Ibm3624NaturalPin) SetPinValidationDataPadCharacter(v string) *Ibm3624NaturalPin {
	s.PinValidationDataPadCharacter = &v
	return s
}

// Parameters that are required to generate or verify Ibm3624 PIN from offset
// PIN.
type Ibm3624PinFromOffset struct {
	_ struct{} `type:"structure"`

	// The decimalization table to use for IBM 3624 PIN algorithm. The table is
	// used to convert the algorithm intermediate result from hexadecimal characters
	// to decimal.
	//
	// DecimalizationTable is a required field
	DecimalizationTable *string `min:"16" type:"string" required:"true"`

	// The PIN offset value.
	//
	// PinOffset is a required field
	PinOffset *string `min:"4" type:"string" required:"true"`

	// The unique data for cardholder identification.
	//
	// PinValidationData is a required field
	PinValidationData *string `min:"4" type:"string" required:"true"`

	// The padding character for validation data.
	//
	// PinValidationDataPadCharacter is a required field
	PinValidationDataPadCharacter *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624PinFromOffset) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624PinFromOffset) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Ibm3624PinFromOffset) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Ibm3624PinFromOffset"}
	if s.DecimalizationTable == nil {
		invalidParams.Add(request.NewErrParamRequired("DecimalizationTable"))
	}
	if s.DecimalizationTable != nil && len(*s.DecimalizationTable) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("DecimalizationTable", 16))
	}
	if s.PinOffset == nil {
		invalidParams.Add(request.NewErrParamRequired("PinOffset"))
	}
	if s.PinOffset != nil && len(*s.PinOffset) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinOffset", 4))
	}
	if s.PinValidationData == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationData"))
	}
	if s.PinValidationData != nil && len(*s.PinValidationData) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationData", 4))
	}
	if s.PinValidationDataPadCharacter == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationDataPadCharacter"))
	}
	if s.PinValidationDataPadCharacter != nil && len(*s.PinValidationDataPadCharacter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationDataPadCharacter", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDecimalizationTable sets the DecimalizationTable field's value.
func (s *Ibm3624PinFromOffset) SetDecimalizationTable(v string) *Ibm3624PinFromOffset {
	s.DecimalizationTable = &v
	return s
}

// SetPinOffset sets the PinOffset field's value.
func (s *Ibm3624PinFromOffset) SetPinOffset(v string) *Ibm3624PinFromOffset {
	s.PinOffset = &v
	return s
}

// SetPinValidationData sets the PinValidationData field's value.
func (s *Ibm3624PinFromOffset) SetPinValidationData(v string) *Ibm3624PinFromOffset {
	s.PinValidationData = &v
	return s
}

// SetPinValidationDataPadCharacter sets the PinValidationDataPadCharacter field's value.
func (s *Ibm3624PinFromOffset) SetPinValidationDataPadCharacter(v string) *Ibm3624PinFromOffset {
	s.PinValidationDataPadCharacter = &v
	return s
}

// Pparameters that are required to generate or verify Ibm3624 PIN offset PIN.
type Ibm3624PinOffset struct {
	_ struct{} `type:"structure"`

	// The decimalization table to use for IBM 3624 PIN algorithm. The table is
	// used to convert the algorithm intermediate result from hexadecimal characters
	// to decimal.
	//
	// DecimalizationTable is a required field
	DecimalizationTable *string `min:"16" type:"string" required:"true"`

	// The encrypted PIN block data. According to ISO 9564 standard, a PIN Block
	// is an encoded representation of a payment card Personal Account Number (PAN)
	// and the cardholder Personal Identification Number (PIN).
	//
	// EncryptedPinBlock is a required field
	EncryptedPinBlock *string `min:"16" type:"string" required:"true"`

	// The unique data for cardholder identification.
	//
	// PinValidationData is a required field
	PinValidationData *string `min:"4" type:"string" required:"true"`

	// The padding character for validation data.
	//
	// PinValidationDataPadCharacter is a required field
	PinValidationDataPadCharacter *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624PinOffset) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624PinOffset) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Ibm3624PinOffset) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Ibm3624PinOffset"}
	if s.DecimalizationTable == nil {
		invalidParams.Add(request.NewErrParamRequired("DecimalizationTable"))
	}
	if s.DecimalizationTable != nil && len(*s.DecimalizationTable) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("DecimalizationTable", 16))
	}
	if s.EncryptedPinBlock == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptedPinBlock"))
	}
	if s.EncryptedPinBlock != nil && len(*s.EncryptedPinBlock) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("EncryptedPinBlock", 16))
	}
	if s.PinValidationData == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationData"))
	}
	if s.PinValidationData != nil && len(*s.PinValidationData) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationData", 4))
	}
	if s.PinValidationDataPadCharacter == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationDataPadCharacter"))
	}
	if s.PinValidationDataPadCharacter != nil && len(*s.PinValidationDataPadCharacter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationDataPadCharacter", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDecimalizationTable sets the DecimalizationTable field's value.
func (s *Ibm3624PinOffset) SetDecimalizationTable(v string) *Ibm3624PinOffset {
	s.DecimalizationTable = &v
	return s
}

// SetEncryptedPinBlock sets the EncryptedPinBlock field's value.
func (s *Ibm3624PinOffset) SetEncryptedPinBlock(v string) *Ibm3624PinOffset {
	s.EncryptedPinBlock = &v
	return s
}

// SetPinValidationData sets the PinValidationData field's value.
func (s *Ibm3624PinOffset) SetPinValidationData(v string) *Ibm3624PinOffset {
	s.PinValidationData = &v
	return s
}

// SetPinValidationDataPadCharacter sets the PinValidationDataPadCharacter field's value.
func (s *Ibm3624PinOffset) SetPinValidationDataPadCharacter(v string) *Ibm3624PinOffset {
	s.PinValidationDataPadCharacter = &v
	return s
}

// Parameters that are required to generate or verify Ibm3624 PIN verification
// PIN.
type Ibm3624PinVerification struct {
	_ struct{} `type:"structure"`

	// The decimalization table to use for IBM 3624 PIN algorithm. The table is
	// used to convert the algorithm intermediate result from hexadecimal characters
	// to decimal.
	//
	// DecimalizationTable is a required field
	DecimalizationTable *string `min:"16" type:"string" required:"true"`

	// The PIN offset value.
	//
	// PinOffset is a required field
	PinOffset *string `min:"4" type:"string" required:"true"`

	// The unique data for cardholder identification.
	//
	// PinValidationData is a required field
	PinValidationData *string `min:"4" type:"string" required:"true"`

	// The padding character for validation data.
	//
	// PinValidationDataPadCharacter is a required field
	PinValidationDataPadCharacter *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624PinVerification) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624PinVerification) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Ibm3624PinVerification) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Ibm3624PinVerification"}
	if s.DecimalizationTable == nil {
		invalidParams.Add(request.NewErrParamRequired("DecimalizationTable"))
	}
	if s.DecimalizationTable != nil && len(*s.DecimalizationTable) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("DecimalizationTable", 16))
	}
	if s.PinOffset == nil {
		invalidParams.Add(request.NewErrParamRequired("PinOffset"))
	}
	if s.PinOffset != nil && len(*s.PinOffset) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinOffset", 4))
	}
	if s.PinValidationData == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationData"))
	}
	if s.PinValidationData != nil && len(*s.PinValidationData) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationData", 4))
	}
	if s.PinValidationDataPadCharacter == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationDataPadCharacter"))
	}
	if s.PinValidationDataPadCharacter != nil && len(*s.PinValidationDataPadCharacter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationDataPadCharacter", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDecimalizationTable sets the DecimalizationTable field's value.
func (s *Ibm3624PinVerification) SetDecimalizationTable(v string) *Ibm3624PinVerification {
	s.DecimalizationTable = &v
	return s
}

// SetPinOffset sets the PinOffset field's value.
func (s *Ibm3624PinVerification) SetPinOffset(v string) *Ibm3624PinVerification {
	s.PinOffset = &v
	return s
}

// SetPinValidationData sets the PinValidationData field's value.
func (s *Ibm3624PinVerification) SetPinValidationData(v string) *Ibm3624PinVerification {
	s.PinValidationData = &v
	return s
}

// SetPinValidationDataPadCharacter sets the PinValidationDataPadCharacter field's value.
func (s *Ibm3624PinVerification) SetPinValidationDataPadCharacter(v string) *Ibm3624PinVerification {
	s.PinValidationDataPadCharacter = &v
	return s
}

// Parameters that are required to generate or verify Ibm3624 random PIN.
type Ibm3624RandomPin struct {
	_ struct{} `type:"structure"`

	// The decimalization table to use for IBM 3624 PIN algorithm. The table is
	// used to convert the algorithm intermediate result from hexadecimal characters
	// to decimal.
	//
	// DecimalizationTable is a required field
	DecimalizationTable *string `min:"16" type:"string" required:"true"`

	// The unique data for cardholder identification.
	//
	// PinValidationData is a required field
	PinValidationData *string `min:"4" type:"string" required:"true"`

	// The padding character for validation data.
	//
	// PinValidationDataPadCharacter is a required field
	PinValidationDataPadCharacter *string `min:"1" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624RandomPin) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s Ibm3624RandomPin) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *Ibm3624RandomPin) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "Ibm3624RandomPin"}
	if s.DecimalizationTable == nil {
		invalidParams.Add(request.NewErrParamRequired("DecimalizationTable"))
	}
	if s.DecimalizationTable != nil && len(*s.DecimalizationTable) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("DecimalizationTable", 16))
	}
	if s.PinValidationData == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationData"))
	}
	if s.PinValidationData != nil && len(*s.PinValidationData) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationData", 4))
	}
	if s.PinValidationDataPadCharacter == nil {
		invalidParams.Add(request.NewErrParamRequired("PinValidationDataPadCharacter"))
	}
	if s.PinValidationDataPadCharacter != nil && len(*s.PinValidationDataPadCharacter) < 1 {
		invalidParams.Add(request.NewErrParamMinLen("PinValidationDataPadCharacter", 1))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDecimalizationTable sets the DecimalizationTable field's value.
func (s *Ibm3624RandomPin) SetDecimalizationTable(v string) *Ibm3624RandomPin {
	s.DecimalizationTable = &v
	return s
}

// SetPinValidationData sets the PinValidationData field's value.
func (s *Ibm3624RandomPin) SetPinValidationData(v string) *Ibm3624RandomPin {
	s.PinValidationData = &v
	return s
}

// SetPinValidationDataPadCharacter sets the PinValidationDataPadCharacter field's value.
func (s *Ibm3624RandomPin) SetPinValidationDataPadCharacter(v string) *Ibm3624RandomPin {
	s.PinValidationDataPadCharacter = &v
	return s
}

// The request processing has failed because of an unknown error, exception,
// or failure.
type InternalServerException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"Message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalServerException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s InternalServerException) GoString() string {
	return s.String()
}

func newErrorInternalServerException(v protocol.ResponseMetadata) error {
	return &InternalServerException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *InternalServerException) Code() string {
	return "InternalServerException"
}

// Message returns the exception's message.
func (s *InternalServerException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *InternalServerException) OrigErr() error {
	return nil
}

func (s *InternalServerException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *InternalServerException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *InternalServerException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Parameters required for DUKPT MAC generation and verification.
type MacAlgorithmDukpt struct {
	_ struct{} `type:"structure"`

	// The key type derived using DUKPT from a Base Derivation Key (BDK) and Key
	// Serial Number (KSN). This must be less than or equal to the strength of the
	// BDK. For example, you can't use AES_128 as a derivation type for a BDK of
	// AES_128 or TDES_2KEY.
	DukptDerivationType *string `type:"string" enum:"DukptDerivationType"`

	// The type of use of DUKPT, which can be MAC generation, MAC verification,
	// or both.
	//
	// DukptKeyVariant is a required field
	DukptKeyVariant *string `type:"string" required:"true" enum:"DukptKeyVariant"`

	// The unique identifier known as Key Serial Number (KSN) that comes from an
	// encrypting device using DUKPT encryption method. The KSN is derived from
	// the encrypting device unique identifier and an internal transaction counter.
	//
	// KeySerialNumber is a required field
	KeySerialNumber *string `min:"10" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MacAlgorithmDukpt) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MacAlgorithmDukpt) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MacAlgorithmDukpt) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MacAlgorithmDukpt"}
	if s.DukptKeyVariant == nil {
		invalidParams.Add(request.NewErrParamRequired("DukptKeyVariant"))
	}
	if s.KeySerialNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("KeySerialNumber"))
	}
	if s.KeySerialNumber != nil && len(*s.KeySerialNumber) < 10 {
		invalidParams.Add(request.NewErrParamMinLen("KeySerialNumber", 10))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDukptDerivationType sets the DukptDerivationType field's value.
func (s *MacAlgorithmDukpt) SetDukptDerivationType(v string) *MacAlgorithmDukpt {
	s.DukptDerivationType = &v
	return s
}

// SetDukptKeyVariant sets the DukptKeyVariant field's value.
func (s *MacAlgorithmDukpt) SetDukptKeyVariant(v string) *MacAlgorithmDukpt {
	s.DukptKeyVariant = &v
	return s
}

// SetKeySerialNumber sets the KeySerialNumber field's value.
func (s *MacAlgorithmDukpt) SetKeySerialNumber(v string) *MacAlgorithmDukpt {
	s.KeySerialNumber = &v
	return s
}

// Parameters that are required for EMV MAC generation and verification.
type MacAlgorithmEmv struct {
	_ struct{} `type:"structure"`

	// The method to use when deriving the master key for EMV MAC generation or
	// verification.
	//
	// MajorKeyDerivationMode is a required field
	MajorKeyDerivationMode *string `type:"string" required:"true" enum:"MajorKeyDerivationMode"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The Primary Account Number (PAN), a unique identifier for a payment credit
	// or debit card and associates the card to a specific account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by MacAlgorithmEmv's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`

	// The method of deriving a session key for EMV MAC generation or verification.
	//
	// SessionKeyDerivationMode is a required field
	SessionKeyDerivationMode *string `type:"string" required:"true" enum:"SessionKeyDerivationMode"`

	// Parameters that are required to generate session key for EMV generation and
	// verification.
	//
	// SessionKeyDerivationValue is a required field
	SessionKeyDerivationValue *SessionKeyDerivationValue `type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MacAlgorithmEmv) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MacAlgorithmEmv) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MacAlgorithmEmv) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MacAlgorithmEmv"}
	if s.MajorKeyDerivationMode == nil {
		invalidParams.Add(request.NewErrParamRequired("MajorKeyDerivationMode"))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}
	if s.SessionKeyDerivationMode == nil {
		invalidParams.Add(request.NewErrParamRequired("SessionKeyDerivationMode"))
	}
	if s.SessionKeyDerivationValue == nil {
		invalidParams.Add(request.NewErrParamRequired("SessionKeyDerivationValue"))
	}
	if s.SessionKeyDerivationValue != nil {
		if err := s.SessionKeyDerivationValue.Validate(); err != nil {
			invalidParams.AddNested("SessionKeyDerivationValue", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetMajorKeyDerivationMode sets the MajorKeyDerivationMode field's value.
func (s *MacAlgorithmEmv) SetMajorKeyDerivationMode(v string) *MacAlgorithmEmv {
	s.MajorKeyDerivationMode = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *MacAlgorithmEmv) SetPanSequenceNumber(v string) *MacAlgorithmEmv {
	s.PanSequenceNumber = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *MacAlgorithmEmv) SetPrimaryAccountNumber(v string) *MacAlgorithmEmv {
	s.PrimaryAccountNumber = &v
	return s
}

// SetSessionKeyDerivationMode sets the SessionKeyDerivationMode field's value.
func (s *MacAlgorithmEmv) SetSessionKeyDerivationMode(v string) *MacAlgorithmEmv {
	s.SessionKeyDerivationMode = &v
	return s
}

// SetSessionKeyDerivationValue sets the SessionKeyDerivationValue field's value.
func (s *MacAlgorithmEmv) SetSessionKeyDerivationValue(v *SessionKeyDerivationValue) *MacAlgorithmEmv {
	s.SessionKeyDerivationValue = v
	return s
}

// Parameters that are required for DUKPT, HMAC, or EMV MAC generation or verification.
type MacAttributes struct {
	_ struct{} `type:"structure"`

	// The encryption algorithm for MAC generation or verification.
	Algorithm *string `type:"string" enum:"MacAlgorithm"`

	// Parameters that are required for MAC generation or verification using DUKPT
	// CMAC algorithm.
	DukptCmac *MacAlgorithmDukpt `type:"structure"`

	// Parameters that are required for MAC generation or verification using DUKPT
	// ISO 9797 algorithm1.
	DukptIso9797Algorithm1 *MacAlgorithmDukpt `type:"structure"`

	// Parameters that are required for MAC generation or verification using DUKPT
	// ISO 9797 algorithm2.
	DukptIso9797Algorithm3 *MacAlgorithmDukpt `type:"structure"`

	// Parameters that are required for MAC generation or verification using EMV
	// MAC algorithm.
	EmvMac *MacAlgorithmEmv `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MacAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s MacAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *MacAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "MacAttributes"}
	if s.DukptCmac != nil {
		if err := s.DukptCmac.Validate(); err != nil {
			invalidParams.AddNested("DukptCmac", err.(request.ErrInvalidParams))
		}
	}
	if s.DukptIso9797Algorithm1 != nil {
		if err := s.DukptIso9797Algorithm1.Validate(); err != nil {
			invalidParams.AddNested("DukptIso9797Algorithm1", err.(request.ErrInvalidParams))
		}
	}
	if s.DukptIso9797Algorithm3 != nil {
		if err := s.DukptIso9797Algorithm3.Validate(); err != nil {
			invalidParams.AddNested("DukptIso9797Algorithm3", err.(request.ErrInvalidParams))
		}
	}
	if s.EmvMac != nil {
		if err := s.EmvMac.Validate(); err != nil {
			invalidParams.AddNested("EmvMac", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAlgorithm sets the Algorithm field's value.
func (s *MacAttributes) SetAlgorithm(v string) *MacAttributes {
	s.Algorithm = &v
	return s
}

// SetDukptCmac sets the DukptCmac field's value.
func (s *MacAttributes) SetDukptCmac(v *MacAlgorithmDukpt) *MacAttributes {
	s.DukptCmac = v
	return s
}

// SetDukptIso9797Algorithm1 sets the DukptIso9797Algorithm1 field's value.
func (s *MacAttributes) SetDukptIso9797Algorithm1(v *MacAlgorithmDukpt) *MacAttributes {
	s.DukptIso9797Algorithm1 = v
	return s
}

// SetDukptIso9797Algorithm3 sets the DukptIso9797Algorithm3 field's value.
func (s *MacAttributes) SetDukptIso9797Algorithm3(v *MacAlgorithmDukpt) *MacAttributes {
	s.DukptIso9797Algorithm3 = v
	return s
}

// SetEmvMac sets the EmvMac field's value.
func (s *MacAttributes) SetEmvMac(v *MacAlgorithmEmv) *MacAttributes {
	s.EmvMac = v
	return s
}

// Parameters that are required to generate, translate, or verify PIN data.
type PinData struct {
	_ struct{} `type:"structure"`

	// The PIN offset value.
	PinOffset *string `min:"4" type:"string"`

	// The unique data to identify a cardholder. In most cases, this is the same
	// as cardholder's Primary Account Number (PAN). If a value is not provided,
	// it defaults to PAN.
	VerificationValue *string `min:"4" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PinData) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PinData) GoString() string {
	return s.String()
}

// SetPinOffset sets the PinOffset field's value.
func (s *PinData) SetPinOffset(v string) *PinData {
	s.PinOffset = &v
	return s
}

// SetVerificationValue sets the VerificationValue field's value.
func (s *PinData) SetVerificationValue(v string) *PinData {
	s.VerificationValue = &v
	return s
}

// Parameters that are required for PIN data generation.
type PinGenerationAttributes struct {
	_ struct{} `type:"structure"`

	// Parameters that are required to generate or verify Ibm3624 natural PIN.
	Ibm3624NaturalPin *Ibm3624NaturalPin `type:"structure"`

	// Parameters that are required to generate or verify Ibm3624 PIN from offset
	// PIN.
	Ibm3624PinFromOffset *Ibm3624PinFromOffset `type:"structure"`

	// Parameters that are required to generate or verify Ibm3624 PIN offset PIN.
	Ibm3624PinOffset *Ibm3624PinOffset `type:"structure"`

	// Parameters that are required to generate or verify Ibm3624 random PIN.
	Ibm3624RandomPin *Ibm3624RandomPin `type:"structure"`

	// Parameters that are required to generate or verify Visa PIN.
	VisaPin *VisaPin `type:"structure"`

	// Parameters that are required to generate or verify Visa PIN Verification
	// Value (PVV).
	VisaPinVerificationValue *VisaPinVerificationValue `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PinGenerationAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PinGenerationAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PinGenerationAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PinGenerationAttributes"}
	if s.Ibm3624NaturalPin != nil {
		if err := s.Ibm3624NaturalPin.Validate(); err != nil {
			invalidParams.AddNested("Ibm3624NaturalPin", err.(request.ErrInvalidParams))
		}
	}
	if s.Ibm3624PinFromOffset != nil {
		if err := s.Ibm3624PinFromOffset.Validate(); err != nil {
			invalidParams.AddNested("Ibm3624PinFromOffset", err.(request.ErrInvalidParams))
		}
	}
	if s.Ibm3624PinOffset != nil {
		if err := s.Ibm3624PinOffset.Validate(); err != nil {
			invalidParams.AddNested("Ibm3624PinOffset", err.(request.ErrInvalidParams))
		}
	}
	if s.Ibm3624RandomPin != nil {
		if err := s.Ibm3624RandomPin.Validate(); err != nil {
			invalidParams.AddNested("Ibm3624RandomPin", err.(request.ErrInvalidParams))
		}
	}
	if s.VisaPin != nil {
		if err := s.VisaPin.Validate(); err != nil {
			invalidParams.AddNested("VisaPin", err.(request.ErrInvalidParams))
		}
	}
	if s.VisaPinVerificationValue != nil {
		if err := s.VisaPinVerificationValue.Validate(); err != nil {
			invalidParams.AddNested("VisaPinVerificationValue", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIbm3624NaturalPin sets the Ibm3624NaturalPin field's value.
func (s *PinGenerationAttributes) SetIbm3624NaturalPin(v *Ibm3624NaturalPin) *PinGenerationAttributes {
	s.Ibm3624NaturalPin = v
	return s
}

// SetIbm3624PinFromOffset sets the Ibm3624PinFromOffset field's value.
func (s *PinGenerationAttributes) SetIbm3624PinFromOffset(v *Ibm3624PinFromOffset) *PinGenerationAttributes {
	s.Ibm3624PinFromOffset = v
	return s
}

// SetIbm3624PinOffset sets the Ibm3624PinOffset field's value.
func (s *PinGenerationAttributes) SetIbm3624PinOffset(v *Ibm3624PinOffset) *PinGenerationAttributes {
	s.Ibm3624PinOffset = v
	return s
}

// SetIbm3624RandomPin sets the Ibm3624RandomPin field's value.
func (s *PinGenerationAttributes) SetIbm3624RandomPin(v *Ibm3624RandomPin) *PinGenerationAttributes {
	s.Ibm3624RandomPin = v
	return s
}

// SetVisaPin sets the VisaPin field's value.
func (s *PinGenerationAttributes) SetVisaPin(v *VisaPin) *PinGenerationAttributes {
	s.VisaPin = v
	return s
}

// SetVisaPinVerificationValue sets the VisaPinVerificationValue field's value.
func (s *PinGenerationAttributes) SetVisaPinVerificationValue(v *VisaPinVerificationValue) *PinGenerationAttributes {
	s.VisaPinVerificationValue = v
	return s
}

// Parameters that are required for PIN data verification.
type PinVerificationAttributes struct {
	_ struct{} `type:"structure"`

	// Parameters that are required to generate or verify Ibm3624 PIN.
	Ibm3624Pin *Ibm3624PinVerification `type:"structure"`

	// Parameters that are required to generate or verify Visa PIN.
	VisaPin *VisaPinVerification `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PinVerificationAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s PinVerificationAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *PinVerificationAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "PinVerificationAttributes"}
	if s.Ibm3624Pin != nil {
		if err := s.Ibm3624Pin.Validate(); err != nil {
			invalidParams.AddNested("Ibm3624Pin", err.(request.ErrInvalidParams))
		}
	}
	if s.VisaPin != nil {
		if err := s.VisaPin.Validate(); err != nil {
			invalidParams.AddNested("VisaPin", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIbm3624Pin sets the Ibm3624Pin field's value.
func (s *PinVerificationAttributes) SetIbm3624Pin(v *Ibm3624PinVerification) *PinVerificationAttributes {
	s.Ibm3624Pin = v
	return s
}

// SetVisaPin sets the VisaPin field's value.
func (s *PinVerificationAttributes) SetVisaPin(v *VisaPinVerification) *PinVerificationAttributes {
	s.VisaPin = v
	return s
}

type ReEncryptDataInput struct {
	_ struct{} `type:"structure"`

	// Ciphertext to be encrypted. The minimum allowed length is 16 bytes and maximum
	// allowed length is 4096 bytes.
	//
	// CipherText is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ReEncryptDataInput's
	// String and GoString methods.
	//
	// CipherText is a required field
	CipherText *string `min:"16" type:"string" required:"true" sensitive:"true"`

	// The attributes and values for incoming ciphertext.
	//
	// IncomingEncryptionAttributes is a required field
	IncomingEncryptionAttributes *ReEncryptionAttributes `type:"structure" required:"true"`

	// The keyARN of the encryption key of incoming ciphertext data.
	//
	// IncomingKeyIdentifier is a required field
	IncomingKeyIdentifier *string `location:"uri" locationName:"IncomingKeyIdentifier" min:"7" type:"string" required:"true"`

	// The attributes and values for outgoing ciphertext data after encryption by
	// Amazon Web Services Payment Cryptography.
	//
	// OutgoingEncryptionAttributes is a required field
	OutgoingEncryptionAttributes *ReEncryptionAttributes `type:"structure" required:"true"`

	// The keyARN of the encryption key of outgoing ciphertext data after encryption
	// by Amazon Web Services Payment Cryptography.
	//
	// OutgoingKeyIdentifier is a required field
	OutgoingKeyIdentifier *string `min:"7" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReEncryptDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReEncryptDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ReEncryptDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ReEncryptDataInput"}
	if s.CipherText == nil {
		invalidParams.Add(request.NewErrParamRequired("CipherText"))
	}
	if s.CipherText != nil && len(*s.CipherText) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("CipherText", 16))
	}
	if s.IncomingEncryptionAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("IncomingEncryptionAttributes"))
	}
	if s.IncomingKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("IncomingKeyIdentifier"))
	}
	if s.IncomingKeyIdentifier != nil && len(*s.IncomingKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("IncomingKeyIdentifier", 7))
	}
	if s.OutgoingEncryptionAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("OutgoingEncryptionAttributes"))
	}
	if s.OutgoingKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("OutgoingKeyIdentifier"))
	}
	if s.OutgoingKeyIdentifier != nil && len(*s.OutgoingKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("OutgoingKeyIdentifier", 7))
	}
	if s.IncomingEncryptionAttributes != nil {
		if err := s.IncomingEncryptionAttributes.Validate(); err != nil {
			invalidParams.AddNested("IncomingEncryptionAttributes", err.(request.ErrInvalidParams))
		}
	}
	if s.OutgoingEncryptionAttributes != nil {
		if err := s.OutgoingEncryptionAttributes.Validate(); err != nil {
			invalidParams.AddNested("OutgoingEncryptionAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetCipherText sets the CipherText field's value.
func (s *ReEncryptDataInput) SetCipherText(v string) *ReEncryptDataInput {
	s.CipherText = &v
	return s
}

// SetIncomingEncryptionAttributes sets the IncomingEncryptionAttributes field's value.
func (s *ReEncryptDataInput) SetIncomingEncryptionAttributes(v *ReEncryptionAttributes) *ReEncryptDataInput {
	s.IncomingEncryptionAttributes = v
	return s
}

// SetIncomingKeyIdentifier sets the IncomingKeyIdentifier field's value.
func (s *ReEncryptDataInput) SetIncomingKeyIdentifier(v string) *ReEncryptDataInput {
	s.IncomingKeyIdentifier = &v
	return s
}

// SetOutgoingEncryptionAttributes sets the OutgoingEncryptionAttributes field's value.
func (s *ReEncryptDataInput) SetOutgoingEncryptionAttributes(v *ReEncryptionAttributes) *ReEncryptDataInput {
	s.OutgoingEncryptionAttributes = v
	return s
}

// SetOutgoingKeyIdentifier sets the OutgoingKeyIdentifier field's value.
func (s *ReEncryptDataInput) SetOutgoingKeyIdentifier(v string) *ReEncryptDataInput {
	s.OutgoingKeyIdentifier = &v
	return s
}

type ReEncryptDataOutput struct {
	_ struct{} `type:"structure"`

	// The encrypted ciphertext.
	//
	// CipherText is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by ReEncryptDataOutput's
	// String and GoString methods.
	//
	// CipherText is a required field
	CipherText *string `min:"16" type:"string" required:"true" sensitive:"true"`

	// The keyARN (Amazon Resource Name) of the encryption key that Amazon Web Services
	// Payment Cryptography uses for plaintext encryption.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReEncryptDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReEncryptDataOutput) GoString() string {
	return s.String()
}

// SetCipherText sets the CipherText field's value.
func (s *ReEncryptDataOutput) SetCipherText(v string) *ReEncryptDataOutput {
	s.CipherText = &v
	return s
}

// SetKeyArn sets the KeyArn field's value.
func (s *ReEncryptDataOutput) SetKeyArn(v string) *ReEncryptDataOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *ReEncryptDataOutput) SetKeyCheckValue(v string) *ReEncryptDataOutput {
	s.KeyCheckValue = &v
	return s
}

// Parameters that are required to perform reencryption operation.
type ReEncryptionAttributes struct {
	_ struct{} `type:"structure"`

	// Parameters that are required to encrypt plaintext data using DUKPT.
	Dukpt *DukptEncryptionAttributes `type:"structure"`

	// Parameters that are required to encrypt data using symmetric keys.
	Symmetric *SymmetricEncryptionAttributes `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReEncryptionAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ReEncryptionAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *ReEncryptionAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "ReEncryptionAttributes"}
	if s.Dukpt != nil {
		if err := s.Dukpt.Validate(); err != nil {
			invalidParams.AddNested("Dukpt", err.(request.ErrInvalidParams))
		}
	}
	if s.Symmetric != nil {
		if err := s.Symmetric.Validate(); err != nil {
			invalidParams.AddNested("Symmetric", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDukpt sets the Dukpt field's value.
func (s *ReEncryptionAttributes) SetDukpt(v *DukptEncryptionAttributes) *ReEncryptionAttributes {
	s.Dukpt = v
	return s
}

// SetSymmetric sets the Symmetric field's value.
func (s *ReEncryptionAttributes) SetSymmetric(v *SymmetricEncryptionAttributes) *ReEncryptionAttributes {
	s.Symmetric = v
	return s
}

// The request was denied due to an invalid resource error.
type ResourceNotFoundException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"message" type:"string"`

	// The resource that is missing.
	ResourceId *string `type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ResourceNotFoundException) GoString() string {
	return s.String()
}

func newErrorResourceNotFoundException(v protocol.ResponseMetadata) error {
	return &ResourceNotFoundException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ResourceNotFoundException) Code() string {
	return "ResourceNotFoundException"
}

// Message returns the exception's message.
func (s *ResourceNotFoundException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ResourceNotFoundException) OrigErr() error {
	return nil
}

func (s *ResourceNotFoundException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ResourceNotFoundException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ResourceNotFoundException) RequestID() string {
	return s.RespMetadata.RequestID
}

// Parameters to derive session key for an Amex payment card.
type SessionKeyAmex struct {
	_ struct{} `type:"structure"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The Primary Account Number (PAN) of the cardholder. A PAN is a unique identifier
	// for a payment credit or debit card and associates the card to a specific
	// account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SessionKeyAmex's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyAmex) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyAmex) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyAmex) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyAmex"}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *SessionKeyAmex) SetPanSequenceNumber(v string) *SessionKeyAmex {
	s.PanSequenceNumber = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *SessionKeyAmex) SetPrimaryAccountNumber(v string) *SessionKeyAmex {
	s.PrimaryAccountNumber = &v
	return s
}

// Parameters to derive a session key for Authorization Response Cryptogram
// (ARQC) verification.
type SessionKeyDerivation struct {
	_ struct{} `type:"structure"`

	// Parameters to derive session key for an Amex payment card for ARQC verification.
	Amex *SessionKeyAmex `type:"structure"`

	// Parameters to derive session key for an Emv2000 payment card for ARQC verification.
	Emv2000 *SessionKeyEmv2000 `type:"structure"`

	// Parameters to derive session key for an Emv common payment card for ARQC
	// verification.
	EmvCommon *SessionKeyEmvCommon `type:"structure"`

	// Parameters to derive session key for a Mastercard payment card for ARQC verification.
	Mastercard *SessionKeyMastercard `type:"structure"`

	// Parameters to derive session key for a Visa payment cardfor ARQC verification.
	Visa *SessionKeyVisa `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyDerivation) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyDerivation) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyDerivation) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyDerivation"}
	if s.Amex != nil {
		if err := s.Amex.Validate(); err != nil {
			invalidParams.AddNested("Amex", err.(request.ErrInvalidParams))
		}
	}
	if s.Emv2000 != nil {
		if err := s.Emv2000.Validate(); err != nil {
			invalidParams.AddNested("Emv2000", err.(request.ErrInvalidParams))
		}
	}
	if s.EmvCommon != nil {
		if err := s.EmvCommon.Validate(); err != nil {
			invalidParams.AddNested("EmvCommon", err.(request.ErrInvalidParams))
		}
	}
	if s.Mastercard != nil {
		if err := s.Mastercard.Validate(); err != nil {
			invalidParams.AddNested("Mastercard", err.(request.ErrInvalidParams))
		}
	}
	if s.Visa != nil {
		if err := s.Visa.Validate(); err != nil {
			invalidParams.AddNested("Visa", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAmex sets the Amex field's value.
func (s *SessionKeyDerivation) SetAmex(v *SessionKeyAmex) *SessionKeyDerivation {
	s.Amex = v
	return s
}

// SetEmv2000 sets the Emv2000 field's value.
func (s *SessionKeyDerivation) SetEmv2000(v *SessionKeyEmv2000) *SessionKeyDerivation {
	s.Emv2000 = v
	return s
}

// SetEmvCommon sets the EmvCommon field's value.
func (s *SessionKeyDerivation) SetEmvCommon(v *SessionKeyEmvCommon) *SessionKeyDerivation {
	s.EmvCommon = v
	return s
}

// SetMastercard sets the Mastercard field's value.
func (s *SessionKeyDerivation) SetMastercard(v *SessionKeyMastercard) *SessionKeyDerivation {
	s.Mastercard = v
	return s
}

// SetVisa sets the Visa field's value.
func (s *SessionKeyDerivation) SetVisa(v *SessionKeyVisa) *SessionKeyDerivation {
	s.Visa = v
	return s
}

// Parameters to derive session key value using a MAC EMV algorithm.
type SessionKeyDerivationValue struct {
	_ struct{} `type:"structure"`

	// The cryptogram provided by the terminal during transaction processing.
	ApplicationCryptogram *string `min:"16" type:"string"`

	// The transaction counter that is provided by the terminal during transaction
	// processing.
	ApplicationTransactionCounter *string `min:"2" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyDerivationValue) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyDerivationValue) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyDerivationValue) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyDerivationValue"}
	if s.ApplicationCryptogram != nil && len(*s.ApplicationCryptogram) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationCryptogram", 16))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationCryptogram sets the ApplicationCryptogram field's value.
func (s *SessionKeyDerivationValue) SetApplicationCryptogram(v string) *SessionKeyDerivationValue {
	s.ApplicationCryptogram = &v
	return s
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *SessionKeyDerivationValue) SetApplicationTransactionCounter(v string) *SessionKeyDerivationValue {
	s.ApplicationTransactionCounter = &v
	return s
}

// Parameters to derive session key for an Emv2000 payment card for ARQC verification.
type SessionKeyEmv2000 struct {
	_ struct{} `type:"structure"`

	// The transaction counter that is provided by the terminal during transaction
	// processing.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The Primary Account Number (PAN) of the cardholder. A PAN is a unique identifier
	// for a payment credit or debit card and associates the card to a specific
	// account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SessionKeyEmv2000's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyEmv2000) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyEmv2000) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyEmv2000) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyEmv2000"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *SessionKeyEmv2000) SetApplicationTransactionCounter(v string) *SessionKeyEmv2000 {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *SessionKeyEmv2000) SetPanSequenceNumber(v string) *SessionKeyEmv2000 {
	s.PanSequenceNumber = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *SessionKeyEmv2000) SetPrimaryAccountNumber(v string) *SessionKeyEmv2000 {
	s.PrimaryAccountNumber = &v
	return s
}

// Parameters to derive session key for an Emv common payment card for ARQC
// verification.
type SessionKeyEmvCommon struct {
	_ struct{} `type:"structure"`

	// The transaction counter that is provided by the terminal during transaction
	// processing.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The Primary Account Number (PAN) of the cardholder. A PAN is a unique identifier
	// for a payment credit or debit card and associates the card to a specific
	// account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SessionKeyEmvCommon's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyEmvCommon) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyEmvCommon) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyEmvCommon) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyEmvCommon"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *SessionKeyEmvCommon) SetApplicationTransactionCounter(v string) *SessionKeyEmvCommon {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *SessionKeyEmvCommon) SetPanSequenceNumber(v string) *SessionKeyEmvCommon {
	s.PanSequenceNumber = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *SessionKeyEmvCommon) SetPrimaryAccountNumber(v string) *SessionKeyEmvCommon {
	s.PrimaryAccountNumber = &v
	return s
}

// Parameters to derive session key for Mastercard payment card for ARQC verification.
type SessionKeyMastercard struct {
	_ struct{} `type:"structure"`

	// The transaction counter that is provided by the terminal during transaction
	// processing.
	//
	// ApplicationTransactionCounter is a required field
	ApplicationTransactionCounter *string `min:"2" type:"string" required:"true"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The Primary Account Number (PAN) of the cardholder. A PAN is a unique identifier
	// for a payment credit or debit card and associates the card to a specific
	// account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SessionKeyMastercard's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`

	// A random number generated by the issuer.
	//
	// UnpredictableNumber is a required field
	UnpredictableNumber *string `min:"2" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyMastercard) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyMastercard) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyMastercard) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyMastercard"}
	if s.ApplicationTransactionCounter == nil {
		invalidParams.Add(request.NewErrParamRequired("ApplicationTransactionCounter"))
	}
	if s.ApplicationTransactionCounter != nil && len(*s.ApplicationTransactionCounter) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("ApplicationTransactionCounter", 2))
	}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}
	if s.UnpredictableNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("UnpredictableNumber"))
	}
	if s.UnpredictableNumber != nil && len(*s.UnpredictableNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("UnpredictableNumber", 2))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetApplicationTransactionCounter sets the ApplicationTransactionCounter field's value.
func (s *SessionKeyMastercard) SetApplicationTransactionCounter(v string) *SessionKeyMastercard {
	s.ApplicationTransactionCounter = &v
	return s
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *SessionKeyMastercard) SetPanSequenceNumber(v string) *SessionKeyMastercard {
	s.PanSequenceNumber = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *SessionKeyMastercard) SetPrimaryAccountNumber(v string) *SessionKeyMastercard {
	s.PrimaryAccountNumber = &v
	return s
}

// SetUnpredictableNumber sets the UnpredictableNumber field's value.
func (s *SessionKeyMastercard) SetUnpredictableNumber(v string) *SessionKeyMastercard {
	s.UnpredictableNumber = &v
	return s
}

// Parameters to derive session key for Visa payment card for ARQC verification.
type SessionKeyVisa struct {
	_ struct{} `type:"structure"`

	// A number that identifies and differentiates payment cards with the same Primary
	// Account Number (PAN).
	//
	// PanSequenceNumber is a required field
	PanSequenceNumber *string `min:"2" type:"string" required:"true"`

	// The Primary Account Number (PAN) of the cardholder. A PAN is a unique identifier
	// for a payment credit or debit card and associates the card to a specific
	// account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SessionKeyVisa's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyVisa) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SessionKeyVisa) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SessionKeyVisa) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SessionKeyVisa"}
	if s.PanSequenceNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PanSequenceNumber"))
	}
	if s.PanSequenceNumber != nil && len(*s.PanSequenceNumber) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("PanSequenceNumber", 2))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPanSequenceNumber sets the PanSequenceNumber field's value.
func (s *SessionKeyVisa) SetPanSequenceNumber(v string) *SessionKeyVisa {
	s.PanSequenceNumber = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *SessionKeyVisa) SetPrimaryAccountNumber(v string) *SessionKeyVisa {
	s.PrimaryAccountNumber = &v
	return s
}

// Parameters requried to encrypt plaintext data using symmetric keys.
type SymmetricEncryptionAttributes struct {
	_ struct{} `type:"structure"`

	// An input to cryptographic primitive used to provide the intial state. The
	// InitializationVector is typically required have a random or psuedo-random
	// value, but sometimes it only needs to be unpredictable or unique. If a value
	// is not provided, Amazon Web Services Payment Cryptography generates a random
	// value.
	//
	// InitializationVector is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by SymmetricEncryptionAttributes's
	// String and GoString methods.
	InitializationVector *string `min:"16" type:"string" sensitive:"true"`

	// The block cipher mode of operation. Block ciphers are designed to encrypt
	// a block of data of fixed size (for example, 128 bits). The size of the input
	// block is usually same as the size of the encrypted output block, while the
	// key length can be different. A mode of operation describes how to repeatedly
	// apply a cipher's single-block operation to securely transform amounts of
	// data larger than a block.
	//
	// Mode is a required field
	Mode *string `type:"string" required:"true" enum:"EncryptionMode"`

	// The padding to be included with the data.
	PaddingType *string `type:"string" enum:"PaddingType"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SymmetricEncryptionAttributes) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s SymmetricEncryptionAttributes) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *SymmetricEncryptionAttributes) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "SymmetricEncryptionAttributes"}
	if s.InitializationVector != nil && len(*s.InitializationVector) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("InitializationVector", 16))
	}
	if s.Mode == nil {
		invalidParams.Add(request.NewErrParamRequired("Mode"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetInitializationVector sets the InitializationVector field's value.
func (s *SymmetricEncryptionAttributes) SetInitializationVector(v string) *SymmetricEncryptionAttributes {
	s.InitializationVector = &v
	return s
}

// SetMode sets the Mode field's value.
func (s *SymmetricEncryptionAttributes) SetMode(v string) *SymmetricEncryptionAttributes {
	s.Mode = &v
	return s
}

// SetPaddingType sets the PaddingType field's value.
func (s *SymmetricEncryptionAttributes) SetPaddingType(v string) *SymmetricEncryptionAttributes {
	s.PaddingType = &v
	return s
}

// The request was denied due to request throttling.
type ThrottlingException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"Message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ThrottlingException) GoString() string {
	return s.String()
}

func newErrorThrottlingException(v protocol.ResponseMetadata) error {
	return &ThrottlingException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ThrottlingException) Code() string {
	return "ThrottlingException"
}

// Message returns the exception's message.
func (s *ThrottlingException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ThrottlingException) OrigErr() error {
	return nil
}

func (s *ThrottlingException) Error() string {
	return fmt.Sprintf("%s: %s", s.Code(), s.Message())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ThrottlingException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ThrottlingException) RequestID() string {
	return s.RespMetadata.RequestID
}

type TranslatePinDataInput struct {
	_ struct{} `type:"structure"`

	// The encrypted PIN block data that Amazon Web Services Payment Cryptography
	// translates.
	//
	// EncryptedPinBlock is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by TranslatePinDataInput's
	// String and GoString methods.
	//
	// EncryptedPinBlock is a required field
	EncryptedPinBlock *string `min:"16" type:"string" required:"true" sensitive:"true"`

	// The attributes and values to use for incoming DUKPT encryption key for PIN
	// block tranlation.
	IncomingDukptAttributes *DukptDerivationAttributes `type:"structure"`

	// The keyARN of the encryption key under which incoming PIN block data is encrypted.
	// This key type can be PEK or BDK.
	//
	// IncomingKeyIdentifier is a required field
	IncomingKeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The format of the incoming PIN block data for tranlation within Amazon Web
	// Services Payment Cryptography.
	//
	// IncomingTranslationAttributes is a required field
	IncomingTranslationAttributes *TranslationIsoFormats `type:"structure" required:"true"`

	// The attributes and values to use for outgoing DUKPT encryption key after
	// PIN block translation.
	OutgoingDukptAttributes *DukptDerivationAttributes `type:"structure"`

	// The keyARN of the encryption key for encrypting outgoing PIN block data.
	// This key type can be PEK or BDK.
	//
	// OutgoingKeyIdentifier is a required field
	OutgoingKeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The format of the outgoing PIN block data after tranlation by Amazon Web
	// Services Payment Cryptography.
	//
	// OutgoingTranslationAttributes is a required field
	OutgoingTranslationAttributes *TranslationIsoFormats `type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslatePinDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslatePinDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TranslatePinDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TranslatePinDataInput"}
	if s.EncryptedPinBlock == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptedPinBlock"))
	}
	if s.EncryptedPinBlock != nil && len(*s.EncryptedPinBlock) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("EncryptedPinBlock", 16))
	}
	if s.IncomingKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("IncomingKeyIdentifier"))
	}
	if s.IncomingKeyIdentifier != nil && len(*s.IncomingKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("IncomingKeyIdentifier", 7))
	}
	if s.IncomingTranslationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("IncomingTranslationAttributes"))
	}
	if s.OutgoingKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("OutgoingKeyIdentifier"))
	}
	if s.OutgoingKeyIdentifier != nil && len(*s.OutgoingKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("OutgoingKeyIdentifier", 7))
	}
	if s.OutgoingTranslationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("OutgoingTranslationAttributes"))
	}
	if s.IncomingDukptAttributes != nil {
		if err := s.IncomingDukptAttributes.Validate(); err != nil {
			invalidParams.AddNested("IncomingDukptAttributes", err.(request.ErrInvalidParams))
		}
	}
	if s.IncomingTranslationAttributes != nil {
		if err := s.IncomingTranslationAttributes.Validate(); err != nil {
			invalidParams.AddNested("IncomingTranslationAttributes", err.(request.ErrInvalidParams))
		}
	}
	if s.OutgoingDukptAttributes != nil {
		if err := s.OutgoingDukptAttributes.Validate(); err != nil {
			invalidParams.AddNested("OutgoingDukptAttributes", err.(request.ErrInvalidParams))
		}
	}
	if s.OutgoingTranslationAttributes != nil {
		if err := s.OutgoingTranslationAttributes.Validate(); err != nil {
			invalidParams.AddNested("OutgoingTranslationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEncryptedPinBlock sets the EncryptedPinBlock field's value.
func (s *TranslatePinDataInput) SetEncryptedPinBlock(v string) *TranslatePinDataInput {
	s.EncryptedPinBlock = &v
	return s
}

// SetIncomingDukptAttributes sets the IncomingDukptAttributes field's value.
func (s *TranslatePinDataInput) SetIncomingDukptAttributes(v *DukptDerivationAttributes) *TranslatePinDataInput {
	s.IncomingDukptAttributes = v
	return s
}

// SetIncomingKeyIdentifier sets the IncomingKeyIdentifier field's value.
func (s *TranslatePinDataInput) SetIncomingKeyIdentifier(v string) *TranslatePinDataInput {
	s.IncomingKeyIdentifier = &v
	return s
}

// SetIncomingTranslationAttributes sets the IncomingTranslationAttributes field's value.
func (s *TranslatePinDataInput) SetIncomingTranslationAttributes(v *TranslationIsoFormats) *TranslatePinDataInput {
	s.IncomingTranslationAttributes = v
	return s
}

// SetOutgoingDukptAttributes sets the OutgoingDukptAttributes field's value.
func (s *TranslatePinDataInput) SetOutgoingDukptAttributes(v *DukptDerivationAttributes) *TranslatePinDataInput {
	s.OutgoingDukptAttributes = v
	return s
}

// SetOutgoingKeyIdentifier sets the OutgoingKeyIdentifier field's value.
func (s *TranslatePinDataInput) SetOutgoingKeyIdentifier(v string) *TranslatePinDataInput {
	s.OutgoingKeyIdentifier = &v
	return s
}

// SetOutgoingTranslationAttributes sets the OutgoingTranslationAttributes field's value.
func (s *TranslatePinDataInput) SetOutgoingTranslationAttributes(v *TranslationIsoFormats) *TranslatePinDataInput {
	s.OutgoingTranslationAttributes = v
	return s
}

type TranslatePinDataOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses to encrypt outgoing PIN block data after translation.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The ougoing encrypted PIN block data after tranlation.
	//
	// PinBlock is a required field
	PinBlock *string `min:"16" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslatePinDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslatePinDataOutput) GoString() string {
	return s.String()
}

// SetKeyArn sets the KeyArn field's value.
func (s *TranslatePinDataOutput) SetKeyArn(v string) *TranslatePinDataOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *TranslatePinDataOutput) SetKeyCheckValue(v string) *TranslatePinDataOutput {
	s.KeyCheckValue = &v
	return s
}

// SetPinBlock sets the PinBlock field's value.
func (s *TranslatePinDataOutput) SetPinBlock(v string) *TranslatePinDataOutput {
	s.PinBlock = &v
	return s
}

// Parameters that are required for translation between ISO9564 PIN block formats
// 0,1,3,4.
type TranslationIsoFormats struct {
	_ struct{} `type:"structure"`

	// Parameters that are required for ISO9564 PIN format 0 tranlation.
	IsoFormat0 *TranslationPinDataIsoFormat034 `type:"structure"`

	// Parameters that are required for ISO9564 PIN format 1 tranlation.
	IsoFormat1 *TranslationPinDataIsoFormat1 `type:"structure"`

	// Parameters that are required for ISO9564 PIN format 3 tranlation.
	IsoFormat3 *TranslationPinDataIsoFormat034 `type:"structure"`

	// Parameters that are required for ISO9564 PIN format 4 tranlation.
	IsoFormat4 *TranslationPinDataIsoFormat034 `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslationIsoFormats) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslationIsoFormats) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TranslationIsoFormats) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TranslationIsoFormats"}
	if s.IsoFormat0 != nil {
		if err := s.IsoFormat0.Validate(); err != nil {
			invalidParams.AddNested("IsoFormat0", err.(request.ErrInvalidParams))
		}
	}
	if s.IsoFormat3 != nil {
		if err := s.IsoFormat3.Validate(); err != nil {
			invalidParams.AddNested("IsoFormat3", err.(request.ErrInvalidParams))
		}
	}
	if s.IsoFormat4 != nil {
		if err := s.IsoFormat4.Validate(); err != nil {
			invalidParams.AddNested("IsoFormat4", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetIsoFormat0 sets the IsoFormat0 field's value.
func (s *TranslationIsoFormats) SetIsoFormat0(v *TranslationPinDataIsoFormat034) *TranslationIsoFormats {
	s.IsoFormat0 = v
	return s
}

// SetIsoFormat1 sets the IsoFormat1 field's value.
func (s *TranslationIsoFormats) SetIsoFormat1(v *TranslationPinDataIsoFormat1) *TranslationIsoFormats {
	s.IsoFormat1 = v
	return s
}

// SetIsoFormat3 sets the IsoFormat3 field's value.
func (s *TranslationIsoFormats) SetIsoFormat3(v *TranslationPinDataIsoFormat034) *TranslationIsoFormats {
	s.IsoFormat3 = v
	return s
}

// SetIsoFormat4 sets the IsoFormat4 field's value.
func (s *TranslationIsoFormats) SetIsoFormat4(v *TranslationPinDataIsoFormat034) *TranslationIsoFormats {
	s.IsoFormat4 = v
	return s
}

// Parameters that are required for tranlation between ISO9564 PIN format 0,3,4
// tranlation.
type TranslationPinDataIsoFormat034 struct {
	_ struct{} `type:"structure"`

	// The Primary Account Number (PAN) of the cardholder. A PAN is a unique identifier
	// for a payment credit or debit card and associates the card to a specific
	// account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by TranslationPinDataIsoFormat034's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslationPinDataIsoFormat034) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslationPinDataIsoFormat034) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *TranslationPinDataIsoFormat034) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "TranslationPinDataIsoFormat034"}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *TranslationPinDataIsoFormat034) SetPrimaryAccountNumber(v string) *TranslationPinDataIsoFormat034 {
	s.PrimaryAccountNumber = &v
	return s
}

// Parameters that are required for ISO9564 PIN format 1 tranlation.
type TranslationPinDataIsoFormat1 struct {
	_ struct{} `type:"structure"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslationPinDataIsoFormat1) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s TranslationPinDataIsoFormat1) GoString() string {
	return s.String()
}

// The request was denied due to an invalid request error.
type ValidationException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	// The request was denied due to an invalid request error.
	FieldList []*ValidationExceptionField `locationName:"fieldList" type:"list"`

	Message_ *string `locationName:"message" type:"string"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationException) GoString() string {
	return s.String()
}

func newErrorValidationException(v protocol.ResponseMetadata) error {
	return &ValidationException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *ValidationException) Code() string {
	return "ValidationException"
}

// Message returns the exception's message.
func (s *ValidationException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *ValidationException) OrigErr() error {
	return nil
}

func (s *ValidationException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *ValidationException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *ValidationException) RequestID() string {
	return s.RespMetadata.RequestID
}

// The request was denied due to an invalid request error.
type ValidationExceptionField struct {
	_ struct{} `type:"structure"`

	// The request was denied due to an invalid request error.
	//
	// Message is a required field
	Message *string `locationName:"message" type:"string" required:"true"`

	// The request was denied due to an invalid request error.
	//
	// Path is a required field
	Path *string `locationName:"path" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationExceptionField) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s ValidationExceptionField) GoString() string {
	return s.String()
}

// SetMessage sets the Message field's value.
func (s *ValidationExceptionField) SetMessage(v string) *ValidationExceptionField {
	s.Message = &v
	return s
}

// SetPath sets the Path field's value.
func (s *ValidationExceptionField) SetPath(v string) *ValidationExceptionField {
	s.Path = &v
	return s
}

// This request failed verification.
type VerificationFailedException struct {
	_            struct{}                  `type:"structure"`
	RespMetadata protocol.ResponseMetadata `json:"-" xml:"-"`

	Message_ *string `locationName:"Message" type:"string"`

	// The reason for the exception.
	//
	// Reason is a required field
	Reason *string `type:"string" required:"true" enum:"VerificationFailedReason"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerificationFailedException) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerificationFailedException) GoString() string {
	return s.String()
}

func newErrorVerificationFailedException(v protocol.ResponseMetadata) error {
	return &VerificationFailedException{
		RespMetadata: v,
	}
}

// Code returns the exception type name.
func (s *VerificationFailedException) Code() string {
	return "VerificationFailedException"
}

// Message returns the exception's message.
func (s *VerificationFailedException) Message() string {
	if s.Message_ != nil {
		return *s.Message_
	}
	return ""
}

// OrigErr always returns nil, satisfies awserr.Error interface.
func (s *VerificationFailedException) OrigErr() error {
	return nil
}

func (s *VerificationFailedException) Error() string {
	return fmt.Sprintf("%s: %s\n%s", s.Code(), s.Message(), s.String())
}

// Status code returns the HTTP status code for the request's response error.
func (s *VerificationFailedException) StatusCode() int {
	return s.RespMetadata.StatusCode
}

// RequestID returns the service's response RequestID for request.
func (s *VerificationFailedException) RequestID() string {
	return s.RespMetadata.RequestID
}

type VerifyAuthRequestCryptogramInput struct {
	_ struct{} `type:"structure"`

	// The auth request cryptogram imported into Amazon Web Services Payment Cryptography
	// for ARQC verification using a major encryption key and transaction data.
	//
	// AuthRequestCryptogram is a required field
	AuthRequestCryptogram *string `min:"16" type:"string" required:"true"`

	// The attributes and values for auth request cryptogram verification. These
	// parameters are required in case using ARPC Method 1 or Method 2 for ARQC
	// verification.
	AuthResponseAttributes *CryptogramAuthResponse `type:"structure"`

	// The keyARN of the major encryption key that Amazon Web Services Payment Cryptography
	// uses for ARQC verification.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The method to use when deriving the major encryption key for ARQC verification
	// within Amazon Web Services Payment Cryptography. The same key derivation
	// mode was used for ARQC generation outside of Amazon Web Services Payment
	// Cryptography.
	//
	// MajorKeyDerivationMode is a required field
	MajorKeyDerivationMode *string `type:"string" required:"true" enum:"MajorKeyDerivationMode"`

	// The attributes and values to use for deriving a session key for ARQC verification
	// within Amazon Web Services Payment Cryptography. The same attributes were
	// used for ARQC generation outside of Amazon Web Services Payment Cryptography.
	//
	// SessionKeyDerivationAttributes is a required field
	SessionKeyDerivationAttributes *SessionKeyDerivation `type:"structure" required:"true"`

	// The transaction data that Amazon Web Services Payment Cryptography uses for
	// ARQC verification. The same transaction is used for ARQC generation outside
	// of Amazon Web Services Payment Cryptography.
	//
	// TransactionData is a required field
	TransactionData *string `min:"2" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyAuthRequestCryptogramInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyAuthRequestCryptogramInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VerifyAuthRequestCryptogramInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VerifyAuthRequestCryptogramInput"}
	if s.AuthRequestCryptogram == nil {
		invalidParams.Add(request.NewErrParamRequired("AuthRequestCryptogram"))
	}
	if s.AuthRequestCryptogram != nil && len(*s.AuthRequestCryptogram) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("AuthRequestCryptogram", 16))
	}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.MajorKeyDerivationMode == nil {
		invalidParams.Add(request.NewErrParamRequired("MajorKeyDerivationMode"))
	}
	if s.SessionKeyDerivationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("SessionKeyDerivationAttributes"))
	}
	if s.TransactionData == nil {
		invalidParams.Add(request.NewErrParamRequired("TransactionData"))
	}
	if s.TransactionData != nil && len(*s.TransactionData) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("TransactionData", 2))
	}
	if s.AuthResponseAttributes != nil {
		if err := s.AuthResponseAttributes.Validate(); err != nil {
			invalidParams.AddNested("AuthResponseAttributes", err.(request.ErrInvalidParams))
		}
	}
	if s.SessionKeyDerivationAttributes != nil {
		if err := s.SessionKeyDerivationAttributes.Validate(); err != nil {
			invalidParams.AddNested("SessionKeyDerivationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetAuthRequestCryptogram sets the AuthRequestCryptogram field's value.
func (s *VerifyAuthRequestCryptogramInput) SetAuthRequestCryptogram(v string) *VerifyAuthRequestCryptogramInput {
	s.AuthRequestCryptogram = &v
	return s
}

// SetAuthResponseAttributes sets the AuthResponseAttributes field's value.
func (s *VerifyAuthRequestCryptogramInput) SetAuthResponseAttributes(v *CryptogramAuthResponse) *VerifyAuthRequestCryptogramInput {
	s.AuthResponseAttributes = v
	return s
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *VerifyAuthRequestCryptogramInput) SetKeyIdentifier(v string) *VerifyAuthRequestCryptogramInput {
	s.KeyIdentifier = &v
	return s
}

// SetMajorKeyDerivationMode sets the MajorKeyDerivationMode field's value.
func (s *VerifyAuthRequestCryptogramInput) SetMajorKeyDerivationMode(v string) *VerifyAuthRequestCryptogramInput {
	s.MajorKeyDerivationMode = &v
	return s
}

// SetSessionKeyDerivationAttributes sets the SessionKeyDerivationAttributes field's value.
func (s *VerifyAuthRequestCryptogramInput) SetSessionKeyDerivationAttributes(v *SessionKeyDerivation) *VerifyAuthRequestCryptogramInput {
	s.SessionKeyDerivationAttributes = v
	return s
}

// SetTransactionData sets the TransactionData field's value.
func (s *VerifyAuthRequestCryptogramInput) SetTransactionData(v string) *VerifyAuthRequestCryptogramInput {
	s.TransactionData = &v
	return s
}

type VerifyAuthRequestCryptogramOutput struct {
	_ struct{} `type:"structure"`

	// The result for ARQC verification or ARPC generation within Amazon Web Services
	// Payment Cryptography.
	AuthResponseValue *string `min:"1" type:"string"`

	// The keyARN of the major encryption key that Amazon Web Services Payment Cryptography
	// uses for ARQC verification.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyAuthRequestCryptogramOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyAuthRequestCryptogramOutput) GoString() string {
	return s.String()
}

// SetAuthResponseValue sets the AuthResponseValue field's value.
func (s *VerifyAuthRequestCryptogramOutput) SetAuthResponseValue(v string) *VerifyAuthRequestCryptogramOutput {
	s.AuthResponseValue = &v
	return s
}

// SetKeyArn sets the KeyArn field's value.
func (s *VerifyAuthRequestCryptogramOutput) SetKeyArn(v string) *VerifyAuthRequestCryptogramOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *VerifyAuthRequestCryptogramOutput) SetKeyCheckValue(v string) *VerifyAuthRequestCryptogramOutput {
	s.KeyCheckValue = &v
	return s
}

type VerifyCardValidationDataInput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the CVK encryption key that Amazon Web Services Payment Cryptography
	// uses to verify card data.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The Primary Account Number (PAN), a unique identifier for a payment credit
	// or debit card that associates the card with a specific account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by VerifyCardValidationDataInput's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`

	// The CVV or CSC value for use for card data verification within Amazon Web
	// Services Payment Cryptography.
	//
	// ValidationData is a required field
	ValidationData *string `min:"3" type:"string" required:"true"`

	// The algorithm to use for verification of card data within Amazon Web Services
	// Payment Cryptography.
	//
	// VerificationAttributes is a required field
	VerificationAttributes *CardVerificationAttributes `type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyCardValidationDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyCardValidationDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VerifyCardValidationDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VerifyCardValidationDataInput"}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}
	if s.ValidationData == nil {
		invalidParams.Add(request.NewErrParamRequired("ValidationData"))
	}
	if s.ValidationData != nil && len(*s.ValidationData) < 3 {
		invalidParams.Add(request.NewErrParamMinLen("ValidationData", 3))
	}
	if s.VerificationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("VerificationAttributes"))
	}
	if s.VerificationAttributes != nil {
		if err := s.VerificationAttributes.Validate(); err != nil {
			invalidParams.AddNested("VerificationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *VerifyCardValidationDataInput) SetKeyIdentifier(v string) *VerifyCardValidationDataInput {
	s.KeyIdentifier = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *VerifyCardValidationDataInput) SetPrimaryAccountNumber(v string) *VerifyCardValidationDataInput {
	s.PrimaryAccountNumber = &v
	return s
}

// SetValidationData sets the ValidationData field's value.
func (s *VerifyCardValidationDataInput) SetValidationData(v string) *VerifyCardValidationDataInput {
	s.ValidationData = &v
	return s
}

// SetVerificationAttributes sets the VerificationAttributes field's value.
func (s *VerifyCardValidationDataInput) SetVerificationAttributes(v *CardVerificationAttributes) *VerifyCardValidationDataInput {
	s.VerificationAttributes = v
	return s
}

type VerifyCardValidationDataOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the CVK encryption key that Amazon Web Services Payment Cryptography
	// uses to verify CVV or CSC.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyCardValidationDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyCardValidationDataOutput) GoString() string {
	return s.String()
}

// SetKeyArn sets the KeyArn field's value.
func (s *VerifyCardValidationDataOutput) SetKeyArn(v string) *VerifyCardValidationDataOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *VerifyCardValidationDataOutput) SetKeyCheckValue(v string) *VerifyCardValidationDataOutput {
	s.KeyCheckValue = &v
	return s
}

type VerifyMacInput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses to verify MAC data.
	//
	// KeyIdentifier is a required field
	KeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The MAC being verified.
	//
	// Mac is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by VerifyMacInput's
	// String and GoString methods.
	//
	// Mac is a required field
	Mac *string `min:"4" type:"string" required:"true" sensitive:"true"`

	// The length of the MAC.
	MacLength *int64 `min:"4" type:"integer"`

	// The data on for which MAC is under verification.
	//
	// MessageData is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by VerifyMacInput's
	// String and GoString methods.
	//
	// MessageData is a required field
	MessageData *string `min:"2" type:"string" required:"true" sensitive:"true"`

	// The attributes and data values to use for MAC verification within Amazon
	// Web Services Payment Cryptography.
	//
	// VerificationAttributes is a required field
	VerificationAttributes *MacAttributes `type:"structure" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyMacInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyMacInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VerifyMacInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VerifyMacInput"}
	if s.KeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("KeyIdentifier"))
	}
	if s.KeyIdentifier != nil && len(*s.KeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("KeyIdentifier", 7))
	}
	if s.Mac == nil {
		invalidParams.Add(request.NewErrParamRequired("Mac"))
	}
	if s.Mac != nil && len(*s.Mac) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("Mac", 4))
	}
	if s.MacLength != nil && *s.MacLength < 4 {
		invalidParams.Add(request.NewErrParamMinValue("MacLength", 4))
	}
	if s.MessageData == nil {
		invalidParams.Add(request.NewErrParamRequired("MessageData"))
	}
	if s.MessageData != nil && len(*s.MessageData) < 2 {
		invalidParams.Add(request.NewErrParamMinLen("MessageData", 2))
	}
	if s.VerificationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("VerificationAttributes"))
	}
	if s.VerificationAttributes != nil {
		if err := s.VerificationAttributes.Validate(); err != nil {
			invalidParams.AddNested("VerificationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetKeyIdentifier sets the KeyIdentifier field's value.
func (s *VerifyMacInput) SetKeyIdentifier(v string) *VerifyMacInput {
	s.KeyIdentifier = &v
	return s
}

// SetMac sets the Mac field's value.
func (s *VerifyMacInput) SetMac(v string) *VerifyMacInput {
	s.Mac = &v
	return s
}

// SetMacLength sets the MacLength field's value.
func (s *VerifyMacInput) SetMacLength(v int64) *VerifyMacInput {
	s.MacLength = &v
	return s
}

// SetMessageData sets the MessageData field's value.
func (s *VerifyMacInput) SetMessageData(v string) *VerifyMacInput {
	s.MessageData = &v
	return s
}

// SetVerificationAttributes sets the VerificationAttributes field's value.
func (s *VerifyMacInput) SetVerificationAttributes(v *MacAttributes) *VerifyMacInput {
	s.VerificationAttributes = v
	return s
}

type VerifyMacOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the encryption key that Amazon Web Services Payment Cryptography
	// uses for MAC verification.
	//
	// KeyArn is a required field
	KeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// KeyCheckValue is a required field
	KeyCheckValue *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyMacOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyMacOutput) GoString() string {
	return s.String()
}

// SetKeyArn sets the KeyArn field's value.
func (s *VerifyMacOutput) SetKeyArn(v string) *VerifyMacOutput {
	s.KeyArn = &v
	return s
}

// SetKeyCheckValue sets the KeyCheckValue field's value.
func (s *VerifyMacOutput) SetKeyCheckValue(v string) *VerifyMacOutput {
	s.KeyCheckValue = &v
	return s
}

type VerifyPinDataInput struct {
	_ struct{} `type:"structure"`

	// The attributes and values for the DUKPT encrypted PIN block data.
	DukptAttributes *DukptAttributes `type:"structure"`

	// The encrypted PIN block data that Amazon Web Services Payment Cryptography
	// verifies.
	//
	// EncryptedPinBlock is a required field
	EncryptedPinBlock *string `min:"16" type:"string" required:"true"`

	// The keyARN of the encryption key under which the PIN block data is encrypted.
	// This key type can be PEK or BDK.
	//
	// EncryptionKeyIdentifier is a required field
	EncryptionKeyIdentifier *string `min:"7" type:"string" required:"true"`

	// The PIN encoding format for pin data generation as specified in ISO 9564.
	// Amazon Web Services Payment Cryptography supports ISO_Format_0 and ISO_Format_3.
	//
	// The ISO_Format_0 PIN block format is equivalent to the ANSI X9.8, VISA-1,
	// and ECI-1 PIN block formats. It is similar to a VISA-4 PIN block format.
	// It supports a PIN from 4 to 12 digits in length.
	//
	// The ISO_Format_3 PIN block format is the same as ISO_Format_0 except that
	// the fill digits are random values from 10 to 15.
	//
	// PinBlockFormat is a required field
	PinBlockFormat *string `type:"string" required:"true" enum:"PinBlockFormatForPinData"`

	// The length of PIN being verified.
	PinDataLength *int64 `min:"4" type:"integer"`

	// The Primary Account Number (PAN), a unique identifier for a payment credit
	// or debit card that associates the card with a specific account holder.
	//
	// PrimaryAccountNumber is a sensitive parameter and its value will be
	// replaced with "sensitive" in string returned by VerifyPinDataInput's
	// String and GoString methods.
	//
	// PrimaryAccountNumber is a required field
	PrimaryAccountNumber *string `min:"12" type:"string" required:"true" sensitive:"true"`

	// The attributes and values for PIN data verification.
	//
	// VerificationAttributes is a required field
	VerificationAttributes *PinVerificationAttributes `type:"structure" required:"true"`

	// The keyARN of the PIN verification key.
	//
	// VerificationKeyIdentifier is a required field
	VerificationKeyIdentifier *string `min:"7" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyPinDataInput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyPinDataInput) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VerifyPinDataInput) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VerifyPinDataInput"}
	if s.EncryptedPinBlock == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptedPinBlock"))
	}
	if s.EncryptedPinBlock != nil && len(*s.EncryptedPinBlock) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("EncryptedPinBlock", 16))
	}
	if s.EncryptionKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptionKeyIdentifier"))
	}
	if s.EncryptionKeyIdentifier != nil && len(*s.EncryptionKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("EncryptionKeyIdentifier", 7))
	}
	if s.PinBlockFormat == nil {
		invalidParams.Add(request.NewErrParamRequired("PinBlockFormat"))
	}
	if s.PinDataLength != nil && *s.PinDataLength < 4 {
		invalidParams.Add(request.NewErrParamMinValue("PinDataLength", 4))
	}
	if s.PrimaryAccountNumber == nil {
		invalidParams.Add(request.NewErrParamRequired("PrimaryAccountNumber"))
	}
	if s.PrimaryAccountNumber != nil && len(*s.PrimaryAccountNumber) < 12 {
		invalidParams.Add(request.NewErrParamMinLen("PrimaryAccountNumber", 12))
	}
	if s.VerificationAttributes == nil {
		invalidParams.Add(request.NewErrParamRequired("VerificationAttributes"))
	}
	if s.VerificationKeyIdentifier == nil {
		invalidParams.Add(request.NewErrParamRequired("VerificationKeyIdentifier"))
	}
	if s.VerificationKeyIdentifier != nil && len(*s.VerificationKeyIdentifier) < 7 {
		invalidParams.Add(request.NewErrParamMinLen("VerificationKeyIdentifier", 7))
	}
	if s.DukptAttributes != nil {
		if err := s.DukptAttributes.Validate(); err != nil {
			invalidParams.AddNested("DukptAttributes", err.(request.ErrInvalidParams))
		}
	}
	if s.VerificationAttributes != nil {
		if err := s.VerificationAttributes.Validate(); err != nil {
			invalidParams.AddNested("VerificationAttributes", err.(request.ErrInvalidParams))
		}
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetDukptAttributes sets the DukptAttributes field's value.
func (s *VerifyPinDataInput) SetDukptAttributes(v *DukptAttributes) *VerifyPinDataInput {
	s.DukptAttributes = v
	return s
}

// SetEncryptedPinBlock sets the EncryptedPinBlock field's value.
func (s *VerifyPinDataInput) SetEncryptedPinBlock(v string) *VerifyPinDataInput {
	s.EncryptedPinBlock = &v
	return s
}

// SetEncryptionKeyIdentifier sets the EncryptionKeyIdentifier field's value.
func (s *VerifyPinDataInput) SetEncryptionKeyIdentifier(v string) *VerifyPinDataInput {
	s.EncryptionKeyIdentifier = &v
	return s
}

// SetPinBlockFormat sets the PinBlockFormat field's value.
func (s *VerifyPinDataInput) SetPinBlockFormat(v string) *VerifyPinDataInput {
	s.PinBlockFormat = &v
	return s
}

// SetPinDataLength sets the PinDataLength field's value.
func (s *VerifyPinDataInput) SetPinDataLength(v int64) *VerifyPinDataInput {
	s.PinDataLength = &v
	return s
}

// SetPrimaryAccountNumber sets the PrimaryAccountNumber field's value.
func (s *VerifyPinDataInput) SetPrimaryAccountNumber(v string) *VerifyPinDataInput {
	s.PrimaryAccountNumber = &v
	return s
}

// SetVerificationAttributes sets the VerificationAttributes field's value.
func (s *VerifyPinDataInput) SetVerificationAttributes(v *PinVerificationAttributes) *VerifyPinDataInput {
	s.VerificationAttributes = v
	return s
}

// SetVerificationKeyIdentifier sets the VerificationKeyIdentifier field's value.
func (s *VerifyPinDataInput) SetVerificationKeyIdentifier(v string) *VerifyPinDataInput {
	s.VerificationKeyIdentifier = &v
	return s
}

type VerifyPinDataOutput struct {
	_ struct{} `type:"structure"`

	// The keyARN of the PEK that Amazon Web Services Payment Cryptography uses
	// for encrypted pin block generation.
	//
	// EncryptionKeyArn is a required field
	EncryptionKeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// EncryptionKeyCheckValue is a required field
	EncryptionKeyCheckValue *string `min:"4" type:"string" required:"true"`

	// The keyARN of the PIN encryption key that Amazon Web Services Payment Cryptography
	// uses for PIN or PIN Offset verification.
	//
	// VerificationKeyArn is a required field
	VerificationKeyArn *string `min:"70" type:"string" required:"true"`

	// The key check value (KCV) of the encryption key. The KCV is used to check
	// if all parties holding a given key have the same key or to detect that a
	// key has changed. Amazon Web Services Payment Cryptography calculates the
	// KCV by using standard algorithms, typically by encrypting 8 or 16 bytes or
	// "00" or "01" and then truncating the result to the first 3 bytes, or 6 hex
	// digits, of the resulting cryptogram.
	//
	// VerificationKeyCheckValue is a required field
	VerificationKeyCheckValue *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyPinDataOutput) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VerifyPinDataOutput) GoString() string {
	return s.String()
}

// SetEncryptionKeyArn sets the EncryptionKeyArn field's value.
func (s *VerifyPinDataOutput) SetEncryptionKeyArn(v string) *VerifyPinDataOutput {
	s.EncryptionKeyArn = &v
	return s
}

// SetEncryptionKeyCheckValue sets the EncryptionKeyCheckValue field's value.
func (s *VerifyPinDataOutput) SetEncryptionKeyCheckValue(v string) *VerifyPinDataOutput {
	s.EncryptionKeyCheckValue = &v
	return s
}

// SetVerificationKeyArn sets the VerificationKeyArn field's value.
func (s *VerifyPinDataOutput) SetVerificationKeyArn(v string) *VerifyPinDataOutput {
	s.VerificationKeyArn = &v
	return s
}

// SetVerificationKeyCheckValue sets the VerificationKeyCheckValue field's value.
func (s *VerifyPinDataOutput) SetVerificationKeyCheckValue(v string) *VerifyPinDataOutput {
	s.VerificationKeyCheckValue = &v
	return s
}

// Parameters that are required to generate or verify Visa PIN.
type VisaPin struct {
	_ struct{} `type:"structure"`

	// The value for PIN verification index. It is used in the Visa PIN algorithm
	// to calculate the PVV (PIN Verification Value).
	//
	// PinVerificationKeyIndex is a required field
	PinVerificationKeyIndex *int64 `type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VisaPin) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VisaPin) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VisaPin) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VisaPin"}
	if s.PinVerificationKeyIndex == nil {
		invalidParams.Add(request.NewErrParamRequired("PinVerificationKeyIndex"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPinVerificationKeyIndex sets the PinVerificationKeyIndex field's value.
func (s *VisaPin) SetPinVerificationKeyIndex(v int64) *VisaPin {
	s.PinVerificationKeyIndex = &v
	return s
}

// Parameters that are required to generate or verify Visa PIN.
type VisaPinVerification struct {
	_ struct{} `type:"structure"`

	// The value for PIN verification index. It is used in the Visa PIN algorithm
	// to calculate the PVV (PIN Verification Value).
	//
	// PinVerificationKeyIndex is a required field
	PinVerificationKeyIndex *int64 `type:"integer" required:"true"`

	// Parameters that are required to generate or verify Visa PVV (PIN Verification
	// Value).
	//
	// VerificationValue is a required field
	VerificationValue *string `min:"4" type:"string" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VisaPinVerification) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VisaPinVerification) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VisaPinVerification) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VisaPinVerification"}
	if s.PinVerificationKeyIndex == nil {
		invalidParams.Add(request.NewErrParamRequired("PinVerificationKeyIndex"))
	}
	if s.VerificationValue == nil {
		invalidParams.Add(request.NewErrParamRequired("VerificationValue"))
	}
	if s.VerificationValue != nil && len(*s.VerificationValue) < 4 {
		invalidParams.Add(request.NewErrParamMinLen("VerificationValue", 4))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetPinVerificationKeyIndex sets the PinVerificationKeyIndex field's value.
func (s *VisaPinVerification) SetPinVerificationKeyIndex(v int64) *VisaPinVerification {
	s.PinVerificationKeyIndex = &v
	return s
}

// SetVerificationValue sets the VerificationValue field's value.
func (s *VisaPinVerification) SetVerificationValue(v string) *VisaPinVerification {
	s.VerificationValue = &v
	return s
}

// Parameters that are required to generate or verify Visa PVV (PIN Verification
// Value).
type VisaPinVerificationValue struct {
	_ struct{} `type:"structure"`

	// The encrypted PIN block data to verify.
	//
	// EncryptedPinBlock is a required field
	EncryptedPinBlock *string `min:"16" type:"string" required:"true"`

	// The value for PIN verification index. It is used in the Visa PIN algorithm
	// to calculate the PVV (PIN Verification Value).
	//
	// PinVerificationKeyIndex is a required field
	PinVerificationKeyIndex *int64 `type:"integer" required:"true"`
}

// String returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VisaPinVerificationValue) String() string {
	return awsutil.Prettify(s)
}

// GoString returns the string representation.
//
// API parameter values that are decorated as "sensitive" in the API will not
// be included in the string output. The member name will be present, but the
// value will be replaced with "sensitive".
func (s VisaPinVerificationValue) GoString() string {
	return s.String()
}

// Validate inspects the fields of the type to determine if they are valid.
func (s *VisaPinVerificationValue) Validate() error {
	invalidParams := request.ErrInvalidParams{Context: "VisaPinVerificationValue"}
	if s.EncryptedPinBlock == nil {
		invalidParams.Add(request.NewErrParamRequired("EncryptedPinBlock"))
	}
	if s.EncryptedPinBlock != nil && len(*s.EncryptedPinBlock) < 16 {
		invalidParams.Add(request.NewErrParamMinLen("EncryptedPinBlock", 16))
	}
	if s.PinVerificationKeyIndex == nil {
		invalidParams.Add(request.NewErrParamRequired("PinVerificationKeyIndex"))
	}

	if invalidParams.Len() > 0 {
		return invalidParams
	}
	return nil
}

// SetEncryptedPinBlock sets the EncryptedPinBlock field's value.
func (s *VisaPinVerificationValue) SetEncryptedPinBlock(v string) *VisaPinVerificationValue {
	s.EncryptedPinBlock = &v
	return s
}

// SetPinVerificationKeyIndex sets the PinVerificationKeyIndex field's value.
func (s *VisaPinVerificationValue) SetPinVerificationKeyIndex(v int64) *VisaPinVerificationValue {
	s.PinVerificationKeyIndex = &v
	return s
}

const (
	// DukptDerivationTypeTdes2key is a DukptDerivationType enum value
	DukptDerivationTypeTdes2key = "TDES_2KEY"

	// DukptDerivationTypeTdes3key is a DukptDerivationType enum value
	DukptDerivationTypeTdes3key = "TDES_3KEY"

	// DukptDerivationTypeAes128 is a DukptDerivationType enum value
	DukptDerivationTypeAes128 = "AES_128"

	// DukptDerivationTypeAes192 is a DukptDerivationType enum value
	DukptDerivationTypeAes192 = "AES_192"

	// DukptDerivationTypeAes256 is a DukptDerivationType enum value
	DukptDerivationTypeAes256 = "AES_256"
)

// DukptDerivationType_Values returns all elements of the DukptDerivationType enum
func DukptDerivationType_Values() []string {
	return []string{
		DukptDerivationTypeTdes2key,
		DukptDerivationTypeTdes3key,
		DukptDerivationTypeAes128,
		DukptDerivationTypeAes192,
		DukptDerivationTypeAes256,
	}
}

const (
	// DukptEncryptionModeEcb is a DukptEncryptionMode enum value
	DukptEncryptionModeEcb = "ECB"

	// DukptEncryptionModeCbc is a DukptEncryptionMode enum value
	DukptEncryptionModeCbc = "CBC"
)

// DukptEncryptionMode_Values returns all elements of the DukptEncryptionMode enum
func DukptEncryptionMode_Values() []string {
	return []string{
		DukptEncryptionModeEcb,
		DukptEncryptionModeCbc,
	}
}

const (
	// DukptKeyVariantBidirectional is a DukptKeyVariant enum value
	DukptKeyVariantBidirectional = "BIDIRECTIONAL"

	// DukptKeyVariantRequest is a DukptKeyVariant enum value
	DukptKeyVariantRequest = "REQUEST"

	// DukptKeyVariantResponse is a DukptKeyVariant enum value
	DukptKeyVariantResponse = "RESPONSE"
)

// DukptKeyVariant_Values returns all elements of the DukptKeyVariant enum
func DukptKeyVariant_Values() []string {
	return []string{
		DukptKeyVariantBidirectional,
		DukptKeyVariantRequest,
		DukptKeyVariantResponse,
	}
}

const (
	// EncryptionModeEcb is a EncryptionMode enum value
	EncryptionModeEcb = "ECB"

	// EncryptionModeCbc is a EncryptionMode enum value
	EncryptionModeCbc = "CBC"

	// EncryptionModeCfb is a EncryptionMode enum value
	EncryptionModeCfb = "CFB"

	// EncryptionModeCfb1 is a EncryptionMode enum value
	EncryptionModeCfb1 = "CFB1"

	// EncryptionModeCfb8 is a EncryptionMode enum value
	EncryptionModeCfb8 = "CFB8"

	// EncryptionModeCfb64 is a EncryptionMode enum value
	EncryptionModeCfb64 = "CFB64"

	// EncryptionModeCfb128 is a EncryptionMode enum value
	EncryptionModeCfb128 = "CFB128"

	// EncryptionModeOfb is a EncryptionMode enum value
	EncryptionModeOfb = "OFB"
)

// EncryptionMode_Values returns all elements of the EncryptionMode enum
func EncryptionMode_Values() []string {
	return []string{
		EncryptionModeEcb,
		EncryptionModeCbc,
		EncryptionModeCfb,
		EncryptionModeCfb1,
		EncryptionModeCfb8,
		EncryptionModeCfb64,
		EncryptionModeCfb128,
		EncryptionModeOfb,
	}
}

const (
	// MacAlgorithmIso9797Algorithm1 is a MacAlgorithm enum value
	MacAlgorithmIso9797Algorithm1 = "ISO9797_ALGORITHM1"

	// MacAlgorithmIso9797Algorithm3 is a MacAlgorithm enum value
	MacAlgorithmIso9797Algorithm3 = "ISO9797_ALGORITHM3"

	// MacAlgorithmCmac is a MacAlgorithm enum value
	MacAlgorithmCmac = "CMAC"

	// MacAlgorithmHmacSha224 is a MacAlgorithm enum value
	MacAlgorithmHmacSha224 = "HMAC_SHA224"

	// MacAlgorithmHmacSha256 is a MacAlgorithm enum value
	MacAlgorithmHmacSha256 = "HMAC_SHA256"

	// MacAlgorithmHmacSha384 is a MacAlgorithm enum value
	MacAlgorithmHmacSha384 = "HMAC_SHA384"

	// MacAlgorithmHmacSha512 is a MacAlgorithm enum value
	MacAlgorithmHmacSha512 = "HMAC_SHA512"
)

// MacAlgorithm_Values returns all elements of the MacAlgorithm enum
func MacAlgorithm_Values() []string {
	return []string{
		MacAlgorithmIso9797Algorithm1,
		MacAlgorithmIso9797Algorithm3,
		MacAlgorithmCmac,
		MacAlgorithmHmacSha224,
		MacAlgorithmHmacSha256,
		MacAlgorithmHmacSha384,
		MacAlgorithmHmacSha512,
	}
}

const (
	// MajorKeyDerivationModeEmvOptionA is a MajorKeyDerivationMode enum value
	MajorKeyDerivationModeEmvOptionA = "EMV_OPTION_A"

	// MajorKeyDerivationModeEmvOptionB is a MajorKeyDerivationMode enum value
	MajorKeyDerivationModeEmvOptionB = "EMV_OPTION_B"
)

// MajorKeyDerivationMode_Values returns all elements of the MajorKeyDerivationMode enum
func MajorKeyDerivationMode_Values() []string {
	return []string{
		MajorKeyDerivationModeEmvOptionA,
		MajorKeyDerivationModeEmvOptionB,
	}
}

const (
	// PaddingTypePkcs1 is a PaddingType enum value
	PaddingTypePkcs1 = "PKCS1"

	// PaddingTypeOaepSha1 is a PaddingType enum value
	PaddingTypeOaepSha1 = "OAEP_SHA1"

	// PaddingTypeOaepSha256 is a PaddingType enum value
	PaddingTypeOaepSha256 = "OAEP_SHA256"

	// PaddingTypeOaepSha512 is a PaddingType enum value
	PaddingTypeOaepSha512 = "OAEP_SHA512"
)

// PaddingType_Values returns all elements of the PaddingType enum
func PaddingType_Values() []string {
	return []string{
		PaddingTypePkcs1,
		PaddingTypeOaepSha1,
		PaddingTypeOaepSha256,
		PaddingTypeOaepSha512,
	}
}

const (
	// PinBlockFormatForPinDataIsoFormat0 is a PinBlockFormatForPinData enum value
	PinBlockFormatForPinDataIsoFormat0 = "ISO_FORMAT_0"

	// PinBlockFormatForPinDataIsoFormat3 is a PinBlockFormatForPinData enum value
	PinBlockFormatForPinDataIsoFormat3 = "ISO_FORMAT_3"
)

// PinBlockFormatForPinData_Values returns all elements of the PinBlockFormatForPinData enum
func PinBlockFormatForPinData_Values() []string {
	return []string{
		PinBlockFormatForPinDataIsoFormat0,
		PinBlockFormatForPinDataIsoFormat3,
	}
}

const (
	// SessionKeyDerivationModeEmvCommonSessionKey is a SessionKeyDerivationMode enum value
	SessionKeyDerivationModeEmvCommonSessionKey = "EMV_COMMON_SESSION_KEY"

	// SessionKeyDerivationModeEmv2000 is a SessionKeyDerivationMode enum value
	SessionKeyDerivationModeEmv2000 = "EMV2000"

	// SessionKeyDerivationModeAmex is a SessionKeyDerivationMode enum value
	SessionKeyDerivationModeAmex = "AMEX"

	// SessionKeyDerivationModeMastercardSessionKey is a SessionKeyDerivationMode enum value
	SessionKeyDerivationModeMastercardSessionKey = "MASTERCARD_SESSION_KEY"

	// SessionKeyDerivationModeVisa is a SessionKeyDerivationMode enum value
	SessionKeyDerivationModeVisa = "VISA"
)

// SessionKeyDerivationMode_Values returns all elements of the SessionKeyDerivationMode enum
func SessionKeyDerivationMode_Values() []string {
	return []string{
		SessionKeyDerivationModeEmvCommonSessionKey,
		SessionKeyDerivationModeEmv2000,
		SessionKeyDerivationModeAmex,
		SessionKeyDerivationModeMastercardSessionKey,
		SessionKeyDerivationModeVisa,
	}
}

const (
	// VerificationFailedReasonInvalidMac is a VerificationFailedReason enum value
	VerificationFailedReasonInvalidMac = "INVALID_MAC"

	// VerificationFailedReasonInvalidPin is a VerificationFailedReason enum value
	VerificationFailedReasonInvalidPin = "INVALID_PIN"

	// VerificationFailedReasonInvalidValidationData is a VerificationFailedReason enum value
	VerificationFailedReasonInvalidValidationData = "INVALID_VALIDATION_DATA"

	// VerificationFailedReasonInvalidAuthRequestCryptogram is a VerificationFailedReason enum value
	VerificationFailedReasonInvalidAuthRequestCryptogram = "INVALID_AUTH_REQUEST_CRYPTOGRAM"
)

// VerificationFailedReason_Values returns all elements of the VerificationFailedReason enum
func VerificationFailedReason_Values() []string {
	return []string{
		VerificationFailedReasonInvalidMac,
		VerificationFailedReasonInvalidPin,
		VerificationFailedReasonInvalidValidationData,
		VerificationFailedReasonInvalidAuthRequestCryptogram,
	}
}
© 2026 GrazzMean
Beegazpacho


Let’s  Start  Your  Online  Journey  with  Beegazpacho 

Welcome to Beegazpacho,
where creativity meets strategy,
and innovation drives success.


Contact
Now


OUR CLIENTS

WhatsApp-Image-2021-12-06.png
Untitled-design-11.png
niaf-logo.png
20220406-163308-scaled.jpg
karchi-logo.png
20220405-171252.png
20220405-171309.png
20220321-161603.png
20220321-161611.png
20220321-161628.png
20220321-161244.png
20220321-161256.png
20220321-161450.png
20220321-161205.png
20220226-170222.png
20220321-161051.png
20211202-170852.png
Untitled-design-9
pidilite-png-logo-colour
logo-black-e1706125740216-qisosldqhzgcaerhdt6n4t3m4s50jr0iik48z0h5vk
Fraikin-Dayim-logo-1
hpcl-logo-2-1
services

Transforming Ideas into
Success

.01
Digital Marketing

We drive growth through data-driven strategies and cutting-edge techniques.

Learn More

.02
SEO

Improve your online visibility and rank higher on search engines with our expert SEO services.

Learn More

.03
Website Designing

We design websites that are not only visually stunning but also user-centric, ensuring seamless navigation and enhanced user experience.

Learn More

.04
App Development

Our apps are crafted to be intuitive, engaging, and functional, providing your users with an exceptional mobile experience.

Learn More

.05
Social Media Ads

Target the right audience with precision and creativity to maximize engagement and conversions.

Learn More

.06
Google Ads

Maximize ROI with precision-targeted campaigns on Google’s powerful ad platform.

Learn More

.07
Google My Business

Optimize your local presence with strategies that put your business on the map and attract more customers.

Learn More

.08
Graphic Designing

Our designs tell your brand’s story in a visually compelling way.

Learn More

.09
3D Videos

Bring your product to life with immersive and dynamic 3D explainer videos.

Learn More

about BEEGAZPACHO

creating special Things
For special brands

Join the ranks of successful brands by partnering with Beegazpacho

00+

Happy Customer

00+

Continents

Our vision is not just to be a service provider but to be your partner in growth. We see ourselves as an extension of your team, working tirelessly to ensure that your brand not only meets its goals but surpasses them.

Explore
more

Our Recent Work

Crafted with Passion and Precision

Connect now


Web Design
Design, Development & Identity

Logo Design
Design, Development & Identity

Creative Brand design
Design, Development & Identity

Product Design Marketing
Design, Development & Identity

DIGITAL MARKETING
SEO
WEBSITE DESIGNING
APP DEVELOPMENT
SOCIAL MEDIA ADS
GOOGLE ADS
GOOGLE MY BUSINESS
GRAPHIC DESINING
3D VIDEOS
Client Stories

Hear It from Those Who Know Us Best

Our clients’ success stories speak volumes about our commitment to excellence. Don’t just take our word for it—hear directly from the brands we’ve partnered with. Their testimonials highlight our ability to bring visions to life and create a lasting impact on their businesses.

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors

“Beegazpacho feels like an extension of our team. Their content marketing and social media expertise have elevated our brand. They listen, adapt, and always deliver on time. We look forward to continuing this partnership.”

— Sarah Williams

Head of Marketing, GreenPlanet Apparel

“Beegazpacho’s data-driven strategies helped us improve our online ads, optimize our website, and enhance branding. We’ve seen great ROI and increased visibility. Their professionalism is unmatched.”

— Arvind Shah

CEO, InnovateTech Solutions

“Partnering with Beegazpacho has been a game-changer for our brand. Their creative ad campaigns and SEO services have boosted our online presence and significantly increased leads and sales. We couldn’t ask for a better partner!”

— Rina Kapoor

Marketing Director, Luxury Home Interiors