2018-08-17 12:36:01 +02:00
/* SPDX-License-Identifier: GPL-2.0+ */
2006-09-20 15:58:29 +02:00
/*
2012-07-20 11:15:04 +02:00
* Copyright IBM Corp . 2001 , 2006
2006-09-20 15:58:29 +02:00
* Author ( s ) : Robert Burroughs
* Eric Rossman ( edrossma @ us . ibm . com )
*
* Hotplug & misc device support : Jochen Roehrig ( roehrig @ de . ibm . com )
* Major cleanup & driver split : Martin Schwidefsky < schwidefsky @ de . ibm . com >
*/
# ifndef _ZCRYPT_CEX2A_H_
# define _ZCRYPT_CEX2A_H_
/**
2018-10-04 15:30:24 +02:00
* The type 50 message family is associated with CEXxA cards .
2006-09-20 15:58:29 +02:00
*
* The four members of the family are described below .
*
* Note that all unsigned char arrays are right - justified and left - padded
* with zeroes .
*
* Note that all reserved fields must be zeroes .
*/
struct type50_hdr {
unsigned char reserved1 ;
unsigned char msg_type_code ; /* 0x50 */
unsigned short msg_len ;
unsigned char reserved2 ;
unsigned char ignored ;
unsigned short reserved3 ;
2018-08-17 12:36:01 +02:00
} __packed ;
2006-09-20 15:58:29 +02:00
# define TYPE50_TYPE_CODE 0x50
# define TYPE50_MEB1_FMT 0x0001
# define TYPE50_MEB2_FMT 0x0002
2011-01-05 12:47:45 +01:00
# define TYPE50_MEB3_FMT 0x0003
2006-09-20 15:58:29 +02:00
# define TYPE50_CRB1_FMT 0x0011
# define TYPE50_CRB2_FMT 0x0012
2011-01-05 12:47:45 +01:00
# define TYPE50_CRB3_FMT 0x0013
2006-09-20 15:58:29 +02:00
/* Mod-Exp, with a small modulus */
struct type50_meb1_msg {
struct type50_hdr header ;
unsigned short keyblock_type ; /* 0x0001 */
unsigned char reserved [ 6 ] ;
unsigned char exponent [ 128 ] ;
unsigned char modulus [ 128 ] ;
unsigned char message [ 128 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2006-09-20 15:58:29 +02:00
/* Mod-Exp, with a large modulus */
struct type50_meb2_msg {
struct type50_hdr header ;
unsigned short keyblock_type ; /* 0x0002 */
unsigned char reserved [ 6 ] ;
unsigned char exponent [ 256 ] ;
unsigned char modulus [ 256 ] ;
unsigned char message [ 256 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2006-09-20 15:58:29 +02:00
2011-01-05 12:47:45 +01:00
/* Mod-Exp, with a larger modulus */
struct type50_meb3_msg {
struct type50_hdr header ;
unsigned short keyblock_type ; /* 0x0003 */
unsigned char reserved [ 6 ] ;
unsigned char exponent [ 512 ] ;
unsigned char modulus [ 512 ] ;
unsigned char message [ 512 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2011-01-05 12:47:45 +01:00
2006-09-20 15:58:29 +02:00
/* CRT, with a small modulus */
struct type50_crb1_msg {
struct type50_hdr header ;
unsigned short keyblock_type ; /* 0x0011 */
unsigned char reserved [ 6 ] ;
unsigned char p [ 64 ] ;
unsigned char q [ 64 ] ;
unsigned char dp [ 64 ] ;
unsigned char dq [ 64 ] ;
unsigned char u [ 64 ] ;
unsigned char message [ 128 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2006-09-20 15:58:29 +02:00
/* CRT, with a large modulus */
struct type50_crb2_msg {
struct type50_hdr header ;
unsigned short keyblock_type ; /* 0x0012 */
unsigned char reserved [ 6 ] ;
unsigned char p [ 128 ] ;
unsigned char q [ 128 ] ;
unsigned char dp [ 128 ] ;
unsigned char dq [ 128 ] ;
unsigned char u [ 128 ] ;
unsigned char message [ 256 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2006-09-20 15:58:29 +02:00
2011-01-05 12:47:45 +01:00
/* CRT, with a larger modulus */
struct type50_crb3_msg {
struct type50_hdr header ;
unsigned short keyblock_type ; /* 0x0013 */
unsigned char reserved [ 6 ] ;
unsigned char p [ 256 ] ;
unsigned char q [ 256 ] ;
unsigned char dp [ 256 ] ;
unsigned char dq [ 256 ] ;
unsigned char u [ 256 ] ;
unsigned char message [ 512 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2011-01-05 12:47:45 +01:00
2006-09-20 15:58:29 +02:00
/**
2018-10-04 15:30:24 +02:00
* The type 80 response family is associated with a CEXxA cards .
2006-09-20 15:58:29 +02:00
*
* Note that all unsigned char arrays are right - justified and left - padded
* with zeroes .
*
* Note that all reserved fields must be zeroes .
*/
# define TYPE80_RSP_CODE 0x80
struct type80_hdr {
unsigned char reserved1 ;
unsigned char type ; /* 0x80 */
unsigned short len ;
unsigned char code ; /* 0x00 */
unsigned char reserved2 [ 3 ] ;
unsigned char reserved3 [ 8 ] ;
2018-08-17 12:36:01 +02:00
} __packed ;
2006-09-20 15:58:29 +02:00
int zcrypt_cex2a_init ( void ) ;
void zcrypt_cex2a_exit ( void ) ;
# endif /* _ZCRYPT_CEX2A_H_ */