Decrypt Data (QC3DECDT, Qc3DecryptData) API


  Required Parameter Group:


  Service Program Name: QC3DTADE

  Default Public Authority: *USE

  Threadsafe: Yes

The Decrypt Data (OPM, QC3DECDT; ILE, Qc3DecryptData) API restores encrypted data to a clear (intelligible) form.

Information on cryptographic standards can be found in Create Algorithm Context (OPM, QC3CRTAX; ILE, Qc3CreateAlgorithmContext) API.


Authorities and Locks

Required device description authority
*USE

Required file authority
*OBJOPR, *READ

Required Parameter Group

Encrypted data
INPUT; CHAR(*)

The data to decrypt.

Length of encrypted data
INPUT; BINARY(4)

The length of the encrypted data parameter.
If the mode of operation is CFB 1-bit, this length must be specified in bits.

Algorithm description
INPUT; CHAR(*)

The algorithm and associated parameters for decrypting the data.
The format of the algorithm description is specified in the algorithm description format name parameter.

Algorithm description format name
INPUT; CHAR(8)

The format of the algorithm description. The possible format names follow.

ALGD0100
The token for an algorithm context. This format must be used when performing the decrypt operation over multiple calls. After the last call (when the final operation flag is on), the context will reset to its initial state and can be used in another API.

ALGD0200
Parameters for a block cipher algorithm (DES, Triple DES, AES, and RC2).

ALGD0300
Parameters for a stream cipher algorithm (RC4-compatible).

ALGD0400
Parameters for a public key algorithm (RSA).

See Algorithm Description Formats for a description of these formats.

Key description
INPUT; CHAR(*)

The key and associated parameters for decrypting the data.
The format of the key description is specified in the key description format name parameter.

If the decrypt operation extends over multiple calls (see ALGD0100 description above), only the key description from the first call will be used. Therefore, on subsequent calls, you may set the pointer to this parameter to NULL.

Key description format name
INPUT; CHAR(8)

The format of the key description.
If the pointer to the key description parameter is NULL, this parameter will be ignored. The possible format names follow.

KEYD0100
Key context token. This format identifies a key context. A key context is used to store a key value so it need not be recreated or retrieved every time it is used. To create a key context, use the Create Key Context (OPM, QC3CRTKX; ILE, Qc3CreateKeyContext) API.

KEYD0200
Key parameters.

KEYD0400
Keystore label. This format identifies a key from keystore. For more information about cryptographic services keystore, see Cryptographic Services Keystore.

KEYD0500
PKCS5 passphrase. This format derives a key using RSA Data Security, Inc. Public-Key Cryptography Standard (PKCS) #5.

KEYD0600
PEM certificate. This format uses the PKA key in an ASCII encoded PEM based certificate.

KEYD0700
Certificate label. This format uses the public PKA key identified by a label into system certificate keystore (*SYSTEM).

KEYD0800
Distinguished name. This format uses the public PKA key identified by a distinguished name for a certificate in system certificate keystore (*SYSTEM).

KEYD0900
Application identifier. This format uses the private PKA key identified by an application identifier. The application identifier must be assigned to a valid certificate label in system certificate keystore (*SYSTEM).

See Key Description Formats for a description of these formats.

Cryptographic service provider
INPUT; CHAR(1)

The cryptographic service provider (CSP) that will perform the decryption operation.


Cryptographic device name
INPUT; CHAR(10)

The name of a cryptographic device description.
This parameter is valid when the cryptographic service provider parameter specifies 2 (hardware CSP). Otherwise, this parameter must be blanks or the pointer to this parameter set to NULL.

Clear data
OUTPUT; CHAR(*)

The area to store the decrypted data.

Length of area provided for clear data
INPUT; BINARY(4)

The length of the clear data parameter.
If the mode of operation is CFB 1-bit, this length must be specified in bits.
To ensure sufficient space, specify an area at least as large as the length of encrypted data. If the length of area provided for clear data is too small, an error will be generated and no data will be returned in the clear data parameter.

Length of clear data returned
OUTPUT; BINARY(4)

The length of the clear data returned in the clear data parameter.
If the mode of operation is CFB 1-bit, this length will be returned in bits.

Error code
I/O; CHAR(*)

The structure in which to return error information.
For the format of the structure, see Error code parameter.



Algorithm Description Formats

For detailed descriptions of the table fields, see Algorithm Description Formats Field Descriptions.

ALGD0100 Format

ALGD0200 Format

ALGD0300 Format

ALGD0400 Format



Algorithm Description Formats Field Descriptions

Algorithm context token
A token for an algorithm context. The algorithm context is created by using the Create Algorithm Context (OPM, QC3CRTAX; ILE, Qc3CreateAlgorithmContext) API.

Block cipher algorithm
The decryption algorithm. Following are the valid block cipher algorithms.

Block length
The algorithm block length. For DES, Triple DES, and RC2, the block length field must specify 8. The valid block length values for AES are 16, 24, and 32.

Effective key size
For RC2, the number of key bits to use in the cipher operation. Valid values are from 1 to 1024. If RC2 is not specifed for the block cipher algorithm, this field must be set to 0.

Final operation flag
The final processing indicator.

Initialization vector or counter
An initialization vector (IV) is used for modes CBC, OFB, CFB, and CUSP. A counter is used for CTR mode. Refer to the mode standards for an explanation of how each mode uses the IV or counter. This field is not used for ECB mode, and must be set to NULL (binary 0s).
For DES, Triple DES, and RC2, the first 8 bytes are used as the IV/counter. For AES, the length of the IV/counter is that specified by block length.
The IV/counter must be the same as the IV/counter used to encrypt the data.

MAC length
This field is not used on a decrypt operation and must be set to null (binary 0s).

Mode
The mode of operation. Information on modes can be found in FIPS PUB 81 and ANSI X9.52. Following are the valid modes.

Pad character
This field is not used on a decrypt operation and must be set to null (binary 0s).

Pad option
If requested, padding is removed at the end of the decrypt operation. Padding is not performed for modes CFB 1-bit, CFB 8-bit, and CUSP. In these cases, the pad option must be set to 0. Do not specify remove padding if the data was not padded when encrypted. Following are the valid pad options.

PKA block format
The public key algorithm block format. Following are the valid values.

Public key cipher algorithm
The decryption algorithm. Following are the valid public key cipher algorithms.

Reserved
Must be null (binary 0s).

Signing hash algorithm
This field is not used on a decrypt operation and must be set to null (binary 0s).

Stream cipher algorithm
The decryption algorithm. Following are the valid stream cipher algorithms.


Key Description Formats

For detailed descriptions of the table fields, see Key Description Formats Field Descriptions.

KEYD0100 Format

KEYD0200 Format

KEYD0400 Format

KEYD0500 Format

KEYD0600 Format

KEYD0700 Format

KEYD0800 Format

KEYD0900 Format



Key Description Formats Field Descriptions

Application identifer
The application ID assigned to a certificate with a private key in system certificate keystore (*SYSTEM).

Application identifier length
The length of the application ID. The length can not be greater than 32.

Certificate label
The label of the certificate in system certificate keystore (*SYSTEM). The certificate's public key will be used in the decryption operation.

Certificate label length
The length of the certificate label.

Derived key length
The length of key requested. The minimum allowed length is 1.

Distinguished name
The distinguished name of the certificate in system certificate keystore (*SYSTEM). The certificate's public key will be used in the decryption operation.

Distinguished name length
The length of the distinguished name.

Iteration count
Used to greatly increase the cost of an exhaustive search while modestly increasing the cost of key derivation. The minimum allowed value is 1. The standard recommends a minimum of 1000. The maximum allowed length is 100,000.

Key context token
A token for a key context. The key context is created by using the Create Key Context (OPM, QC3CRTKX; ILE, Qc3CreateKeyContext) API.

Key format
The format of the key string field. Following are the valid values.
Key string
The key to use in the decrypt operation.

Key string length
Length of the key string specified in the key string field.

Key type
The type of key. Following are the valid values.
Passphrase
A text string.

Passphrase CCSID
INPUT; BINARY(4)

The CCSID of the passphrase. The passphrase will be converted from the specified CCSID to Unicode before calling the PKCS5 algorithm.


Passphrase length
The length of passphrase. The length must be in the range of 1 to 256.

PEM certificate
An ASCII encoded PEM formated certificate.

PEM certificate length
The length of the PEM certificate.

Qualified keystore file name
The keystore file where the key is stored. Keystore files are created by using the Create Keystore (OPM, QC3CRTKS; ILE, Qc3CreateKeyStore) API. The first 10 characters contain the file name. The second 10 characters contain the name of the library where the keystore file is located. You can use the following special values for the library name.
Record label
The label of a key record in a keystore file. The label will be converted from the job CCSID, or if 65535, the job default CCSID (DFTCCSID) job attribute to CCSID 1200 (Unicode UTF-16). Key records are created by using the Write Key Record (OPM, QC3WRTKR; ILE, Qc3WriteKeyRecord) API or the Generate Key Record (OPM, QC3GENKR; ILE, Qc3GenKeyRecord) API.
Reserved
Must be null (binary 0s).

Salt
Used to help thwart attacks by producing a large set of keys for each passphrase. The standard recommends the salt be generated at random and be at least 8 bytes long. You may use the Generate Pseudorandom Numbers (OPM, QC3GENPRN; ILE, Qc3GenPRNs) API to obtain a random value. Additionally, data that distinguishes between various operations can be added to the salt for additional security. Refer to the standard for more information.

Salt length
The length of salt. The length must be in the range of 1 to 16.

Error Messages



API introduced: V5R3

[ Back to top | Cryptographic Services APIs | APIs by category ]