Example: ILE C program for setting the min and max values for master key shares in your Cryptographic Coprocessor
Change this IBM i ILE C program example to suit your needs for setting the minimum and maximum values for master key shares in your Cryptographic Coprocessor.
Note: Read the Code license and disclaimer information for important legal
information.
/*-------------------------------------------------------------------*/
/* Set the M-of-N values in the Coprocessor. These values are */
/* used in cloning of the master key. The master key is */
/* cryptographically split into N number of parts and M number of */
/* parts are needed to recover it. */
/* */
/* COPYRIGHT 5769-SS1 (C) IBM CORP. 1999, 2007 */
/* */
/* This material contains programming source code for your */
/* consideration. These examples have not been thoroughly */
/* tested under all conditions. IBM, therefore, cannot */
/* guarantee or imply reliability, serviceability, or function */
/* of these program. All programs contained herein are */
/* provided to you "AS IS". THE IMPLIED WARRANTIES OF */
/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */
/* ARE EXPRESSLY DISCLAIMED. IBM provides no program services for */
/* these programs and files. */
/* */
/* */
/* Note: Input format is more fully described in Chapter 2 of */
/* IBM CCA Basic Services Reference and Guide */
/* (SC31-8609) publication. */
/* */
/* Parameters: */
/* none. */
/* */
/* Example: */
/* CALL PGM(SETMOFN) PARM(5 15) */
/* */
/* */
/* Note: This program assumes the device to use */
/* already identified either by defaulting to the CRP01 */
/* device or by being explicitly named using the */
/* Cryptographic_Resource_Allocate verb. Also this */
/* device must be varied on and you must be authorized */
/* to use this device description. */
/* */
/* Use these commands to compile this program on the system: */
/* ADDLIBLE LIB(QCCA) */
/* CRTCMOD MODULE(SETMOFN) SRCFILE(SAMPLE) */
/* CRTPGM PGM(SETMOFN) MODULE(SETMOFN) */
/* BNDSRVPGM(QCCA/CSUACFC) */
/* */
/* Note: Authority to the CSUACFC service program in the */
/* QCCA library is assumed. */
/* */
/* The Common Cryptographic Architecture (CCA) verb used is */
/* Cryptographic_Facilites_Control (CSUACFC). */
/* */
/*-------------------------------------------------------------------*/
#include "csucincl.h" /* header file for CCA Cryptographic */
/* Service Provider */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "decimal.h"
/*-------------------------------------------------------------------*/
/* standard return codes */
/*-------------------------------------------------------------------*/
#define ERROR -1
#define OK 0
#define WARNING 4
int main(int argc, char *argv[])
{
/*-------------------------------------------------------------------*/
/* standard CCA parameters */
/*-------------------------------------------------------------------*/
long return_code = 0;
long reason_code = 0;
long exit_data_length = 2;
char exit_data[4];
char rule_array[2][8];
long rule_array_count = 2;
/*-------------------------------------------------------------------*/
/* fields unique to this sample program */
/*-------------------------------------------------------------------*/
decimal(15,5) mparm, nparm;
long verb_data[2];
long verb_data_length = 8;
/*-------------------------------------------------------------------*/
/* Process parameters. Numeric parms from the command line are */
/* passed in decimal 15,5 format. The parms need to be converted */
/* to int format. */
/*-------------------------------------------------------------------*/
memcpy(&mparm,argv[1],sizeof(mparm));
memcpy(&nparm,argv[2],sizeof(nparm));
verb_data[0] = mparm;
verb_data[1] = nparm;
/*-------------------------------------------------------------------*/
/* Set keywords in the rule array */
/*-------------------------------------------------------------------*/
memcpy(rule_array,"ADAPTER1SET-MOFN", 16);
/*-------------------------------------------------------------------*/
/* Invoke the verb to set the M of N values */
/*-------------------------------------------------------------------*/
CSUACFC( &return_code,
&reason_code,
&exit_data_length,
exit_data,
&rule_array_count,
(char *)rule_array,
&verb_data_length,
(unsigned char *)verb_data);
/*-------------------------------------------------------------------*/
/* Check the results of the call */
/*-------------------------------------------------------------------*/
if ( (return_code == OK) | (return_code == WARNING) )
{
printf("M of N values were successfully set with ");
printf("return/reason codes %ld/%ld\n\n",
return_code, reason_code);
return(OK);
}
else
{
printf("An error occurred while setting the M of N values.\n");
printf("Return/reason codes %ld/%ld\n\n",
return_code, reason_code);
return(ERROR);
}
}