mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
The CCA Key Translate2 verb needs a pre-built AES CIPHER key token skeleton with XPRTCPAC set in the output buffer, to produce an AES CIPHER key that can be exported to CAPCF. Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com> Reviewed-by: Harald Freudenberger <freude@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
168 lines
4.7 KiB
C
168 lines
4.7 KiB
C
/*
|
|
* zkey - Generate, re-encipher, and validate secure keys
|
|
*
|
|
* This header file defines the interface to the CCA host library.
|
|
*
|
|
* Copyright IBM Corp. 2019
|
|
*
|
|
* s390-tools is free software; you can redistribute it and/or modify
|
|
* it under the terms of the MIT license. See LICENSE for details.
|
|
*/
|
|
|
|
#ifndef CCA_H
|
|
#define CCA_H
|
|
|
|
#include "lib/zt_common.h"
|
|
|
|
#define METHOD_OLD_TO_CURRENT "RTCMK "
|
|
#define METHOD_CURRENT_TO_NEW "RTNMK "
|
|
|
|
typedef void (*t_CSNBKTC)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
unsigned char *key_identifier);
|
|
|
|
typedef void (*t_CSNBKTC2)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *key_identifier_length,
|
|
unsigned char *key_identifier);
|
|
|
|
typedef void (*t_CSUACFV)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *version_data_length,
|
|
unsigned char *version_data);
|
|
|
|
typedef void (*t_CSUACFQ)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *verb_data_length,
|
|
unsigned char *verb_data);
|
|
|
|
typedef void (*t_CSUACRA)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *ressource_name_length,
|
|
unsigned char *ressource_name);
|
|
|
|
typedef void (*t_CSUACRD)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *ressource_name_length,
|
|
unsigned char *ressource_name);
|
|
|
|
typedef void (*t_CSNBKTB2)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *clear_key_bit_length,
|
|
unsigned char *clear_key_value,
|
|
long *key_name_length,
|
|
unsigned char *key_name,
|
|
long *user_associated_data_length,
|
|
unsigned char *user_associated_data,
|
|
long *token_data_length,
|
|
unsigned char *token_data,
|
|
long *verb_data_length,
|
|
unsigned char *verb_data,
|
|
long *target_key_token_length,
|
|
unsigned char *target_key_token);
|
|
|
|
typedef void (*t_CSNBKTR2)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *input_key_token_length,
|
|
unsigned char *input_key_token,
|
|
long *input_KEK_key_identifier_length,
|
|
unsigned char *input_KEK_key_identifier,
|
|
long *output_KEK_key_identifier_length,
|
|
unsigned char *output_KEK_key_identifier,
|
|
long *output_key_token_length,
|
|
unsigned char *output_key_token);
|
|
|
|
typedef void (*t_CSNBRKA)(long *return_code,
|
|
long *reason_code,
|
|
long *exit_data_length,
|
|
unsigned char *exit_data,
|
|
long *rule_array_count,
|
|
unsigned char *rule_array,
|
|
long *key_identifier_length,
|
|
unsigned char *key_identifier,
|
|
long *ey_encrypting_key_identifier_length,
|
|
unsigned char *ey_encrypting_key_identifier,
|
|
long *opt_parameter1_length,
|
|
unsigned char *opt_parameter1,
|
|
long *opt_parameter2_length,
|
|
unsigned char *opt_parameter2);
|
|
|
|
struct cca_version {
|
|
unsigned int ver;
|
|
unsigned int rel;
|
|
unsigned int mod;
|
|
};
|
|
|
|
struct cca_lib {
|
|
void *lib_csulcca;
|
|
t_CSNBKTC dll_CSNBKTC;
|
|
t_CSNBKTC2 dll_CSNBKTC2;
|
|
t_CSUACFV dll_CSUACFV;
|
|
t_CSUACFQ dll_CSUACFQ;
|
|
t_CSUACRA dll_CSUACRA;
|
|
t_CSUACRD dll_CSUACRD;
|
|
t_CSNBKTB2 dll_CSNBKTB2;
|
|
t_CSNBKTR2 dll_CSNBKTR2;
|
|
t_CSNBRKA dll_CSNBRKA;
|
|
struct cca_version version;
|
|
};
|
|
|
|
int load_cca_library(struct cca_lib *cca, bool verbose);
|
|
|
|
int key_token_change(struct cca_lib *cca,
|
|
u8 *secure_key, unsigned int secure_key_size,
|
|
char *method, bool verbose);
|
|
|
|
int select_cca_adapter(struct cca_lib *cca, unsigned int card,
|
|
unsigned int domain, bool verbose);
|
|
|
|
#define FLAG_SEL_CCA_MATCH_CUR_MKVP 0x01
|
|
#define FLAG_SEL_CCA_MATCH_OLD_MKVP 0x02
|
|
#define FLAG_SEL_CCA_NEW_MUST_BE_SET 0x80
|
|
|
|
int select_cca_adapter_by_mkvp(struct cca_lib *cca, u8 *mkvp, const char *apqns,
|
|
unsigned int flags, bool verbose);
|
|
|
|
void print_msg_for_cca_envvars(const char *key_name);
|
|
|
|
int convert_aes_data_to_cipher_key(struct cca_lib *cca,
|
|
u8 *input_key, unsigned int input_key_size,
|
|
u8 *output_key,
|
|
unsigned int *output_key_size,
|
|
bool verbose);
|
|
|
|
int restrict_key_export(struct cca_lib *cca, u8 *secure_key,
|
|
unsigned int secure_key_size, bool verbose);
|
|
|
|
#endif
|