mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
To be able to calculate the key verification pattern of a key blob without the use of AF_ALG, the file descriptor of the /dev/pkey device needs to be passed through to all functions that might need to calculate the key verification pattern. Also make sure that all commands that might need to calculate the key verification pattern have 'need_pkey_device = 1' so that the device is opened. Reviewed-by: Finn Callies <fcallies@linux.ibm.com> Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
129 lines
4.4 KiB
C
129 lines
4.4 KiB
C
/*
|
|
* zkey - Generate, re-encipher, and validate secure keys
|
|
*
|
|
* This header file defines functions for Key Management System (KMS) plugin
|
|
* handling
|
|
*
|
|
* Copyright IBM Corp. 2020
|
|
*
|
|
* 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 KMS_H
|
|
#define KMS_H
|
|
|
|
#include "kms-plugin.h"
|
|
#include "properties.h"
|
|
#include "keystore.h"
|
|
|
|
struct kms_info {
|
|
void *plugin_lib;
|
|
const struct kms_functions *funcs;
|
|
char *plugin_name;
|
|
struct properties *props;
|
|
struct kms_apqn *apqns;
|
|
size_t num_apqns;
|
|
kms_handle_t handle;
|
|
};
|
|
|
|
struct keystore;
|
|
|
|
int list_kms_plugins(bool verbose);
|
|
|
|
int check_for_kms_plugin(struct kms_info *kms_info, bool verbose);
|
|
|
|
int init_kms_plugin(struct kms_info *kms_info, bool verbose);
|
|
|
|
void free_kms_plugin(struct kms_info *kms_info);
|
|
|
|
void print_last_kms_error(const struct kms_info *kms_info);
|
|
|
|
int bind_kms_plugin(struct keystore *keystore, const char *plugin,
|
|
bool verbose);
|
|
|
|
int unbind_kms_plugin(struct kms_info *kms_info, struct keystore *keystore,
|
|
bool verbose);
|
|
|
|
int print_kms_info(struct kms_info *kms_info);
|
|
|
|
int get_kms_options(struct kms_info *kms_info, struct util_opt *opt_vec,
|
|
const char *placeholder_cmd, const char *plugin_command,
|
|
const char *opt_vec_command, int *first_plugin_opt,
|
|
bool verbose);
|
|
|
|
int handle_kms_option(struct kms_info *kms_info, struct util_opt *opt_vec,
|
|
int first_kms_option, const char *command, int option,
|
|
const char *optarg, struct kms_option **kms_options,
|
|
size_t *num_kms_options, bool verbose);
|
|
|
|
int configure_kms_plugin(struct keystore *keystore, const char *apqns,
|
|
struct kms_option *kms_options, size_t num_kms_options,
|
|
bool has_plugin_optins, bool verbose);
|
|
|
|
int reencipher_kms(struct kms_info *kms_info, bool from_old, bool to_new,
|
|
bool inplace, bool staged, bool complete,
|
|
struct kms_option *kms_options, size_t num_kms_options,
|
|
bool verbose);
|
|
|
|
int perform_kms_login(struct kms_info *kms_info, bool verbose);
|
|
|
|
int get_kms_apqns_for_key_type(struct kms_info *kms_info, const char *key_type,
|
|
bool cross_check, char **apqns, bool verbose);
|
|
|
|
int generate_kms_key(struct kms_info *kms_info, const char *name,
|
|
const char *key_type, struct properties *key_props,
|
|
bool xts, size_t keybits, const char *filename,
|
|
const char *passphrase_file,
|
|
struct kms_option *kms_options, size_t num_kms_options,
|
|
bool verbose, int pkey_fd);
|
|
|
|
int set_kms_key_properties(struct kms_info *kms_info,
|
|
struct properties *key_props,
|
|
const char *name, const char *description,
|
|
const char *volumes, const char *vol_type,
|
|
const char *sector_size,
|
|
const char **passphrase_file,
|
|
bool verbose);
|
|
|
|
int remove_kms_key(struct kms_info *kms_info, struct properties *key_props,
|
|
struct kms_option *kms_options, size_t num_kms_options,
|
|
bool verbose);
|
|
|
|
typedef int (*kms_process_callback)(const char *key1_id, const char *key1_label,
|
|
const char *key2_id, const char *key2_label,
|
|
bool xts, const char *name,
|
|
const char *key_type, size_t key_bits,
|
|
const char *description, const char *cipher,
|
|
const char *iv_mode, const char *volumes,
|
|
const char *volume_type, size_t sector_size,
|
|
const char *passphrase,
|
|
const char *addl_info_argz,
|
|
size_t addl_info_len,
|
|
void *private_data);
|
|
|
|
int process_kms_keys(struct kms_info *kms_info,
|
|
const char *label_filter, const char *name_filter,
|
|
const char *volume_filter, const char *volume_type,
|
|
struct kms_option *kms_options, size_t num_kms_options,
|
|
kms_process_callback callback, void *private_data,
|
|
bool verbose);
|
|
|
|
int list_kms_keys(struct kms_info *kms_info, const char *label_filter,
|
|
const char *name_filter, const char *volume_filter,
|
|
const char *volume_type, struct kms_option *kms_options,
|
|
size_t num_kms_options, bool verbose);
|
|
|
|
int import_kms_key(struct kms_info *kms_info, const char *key1_id,
|
|
const char *key2_id, bool xts, const char *name,
|
|
unsigned char *key_blob, size_t *key_blob_length,
|
|
const char *key_type, bool verbose);
|
|
|
|
int refresh_kms_key(struct kms_info *kms_info, struct properties *key_props,
|
|
char **description, char **cipher, char **iv_mode,
|
|
char **volumes, char **volume_type, ssize_t *sector_size,
|
|
const char *filename, const char *passphrase_file,
|
|
const char *key_type, bool verbose, int pkey_fd);
|
|
|
|
#endif
|