linux/drivers/s390/crypto/zcrypt_cex2a.h
<<
>>
Prefs
   1/*
   2 *  linux/drivers/s390/crypto/zcrypt_cex2a.h
   3 *
   4 *  zcrypt 2.1.0
   5 *
   6 *  Copyright (C)  2001, 2006 IBM Corporation
   7 *  Author(s): Robert Burroughs
   8 *             Eric Rossman (edrossma@us.ibm.com)
   9 *
  10 *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
  11 *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
  12 *
  13 * This program is free software; you can redistribute it and/or modify
  14 * it under the terms of the GNU General Public License as published by
  15 * the Free Software Foundation; either version 2, or (at your option)
  16 * any later version.
  17 *
  18 * This program is distributed in the hope that it will be useful,
  19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21 * GNU General Public License for more details.
  22 *
  23 * You should have received a copy of the GNU General Public License
  24 * along with this program; if not, write to the Free Software
  25 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  26 */
  27
  28#ifndef _ZCRYPT_CEX2A_H_
  29#define _ZCRYPT_CEX2A_H_
  30
  31/**
  32 * The type 50 message family is associated with a CEX2A card.
  33 *
  34 * The four members of the family are described below.
  35 *
  36 * Note that all unsigned char arrays are right-justified and left-padded
  37 * with zeroes.
  38 *
  39 * Note that all reserved fields must be zeroes.
  40 */
  41struct type50_hdr {
  42        unsigned char   reserved1;
  43        unsigned char   msg_type_code;  /* 0x50 */
  44        unsigned short  msg_len;
  45        unsigned char   reserved2;
  46        unsigned char   ignored;
  47        unsigned short  reserved3;
  48} __attribute__((packed));
  49
  50#define TYPE50_TYPE_CODE        0x50
  51
  52#define TYPE50_MEB1_FMT         0x0001
  53#define TYPE50_MEB2_FMT         0x0002
  54#define TYPE50_MEB3_FMT         0x0003
  55#define TYPE50_CRB1_FMT         0x0011
  56#define TYPE50_CRB2_FMT         0x0012
  57#define TYPE50_CRB3_FMT         0x0013
  58
  59/* Mod-Exp, with a small modulus */
  60struct type50_meb1_msg {
  61        struct type50_hdr header;
  62        unsigned short  keyblock_type;  /* 0x0001 */
  63        unsigned char   reserved[6];
  64        unsigned char   exponent[128];
  65        unsigned char   modulus[128];
  66        unsigned char   message[128];
  67} __attribute__((packed));
  68
  69/* Mod-Exp, with a large modulus */
  70struct type50_meb2_msg {
  71        struct type50_hdr header;
  72        unsigned short  keyblock_type;  /* 0x0002 */
  73        unsigned char   reserved[6];
  74        unsigned char   exponent[256];
  75        unsigned char   modulus[256];
  76        unsigned char   message[256];
  77} __attribute__((packed));
  78
  79/* Mod-Exp, with a larger modulus */
  80struct type50_meb3_msg {
  81        struct type50_hdr header;
  82        unsigned short  keyblock_type;  /* 0x0003 */
  83        unsigned char   reserved[6];
  84        unsigned char   exponent[512];
  85        unsigned char   modulus[512];
  86        unsigned char   message[512];
  87} __attribute__((packed));
  88
  89/* CRT, with a small modulus */
  90struct type50_crb1_msg {
  91        struct type50_hdr header;
  92        unsigned short  keyblock_type;  /* 0x0011 */
  93        unsigned char   reserved[6];
  94        unsigned char   p[64];
  95        unsigned char   q[64];
  96        unsigned char   dp[64];
  97        unsigned char   dq[64];
  98        unsigned char   u[64];
  99        unsigned char   message[128];
 100} __attribute__((packed));
 101
 102/* CRT, with a large modulus */
 103struct type50_crb2_msg {
 104        struct type50_hdr header;
 105        unsigned short  keyblock_type;  /* 0x0012 */
 106        unsigned char   reserved[6];
 107        unsigned char   p[128];
 108        unsigned char   q[128];
 109        unsigned char   dp[128];
 110        unsigned char   dq[128];
 111        unsigned char   u[128];
 112        unsigned char   message[256];
 113} __attribute__((packed));
 114
 115/* CRT, with a larger modulus */
 116struct type50_crb3_msg {
 117        struct type50_hdr header;
 118        unsigned short  keyblock_type;  /* 0x0013 */
 119        unsigned char   reserved[6];
 120        unsigned char   p[256];
 121        unsigned char   q[256];
 122        unsigned char   dp[256];
 123        unsigned char   dq[256];
 124        unsigned char   u[256];
 125        unsigned char   message[512];
 126} __attribute__((packed));
 127
 128/**
 129 * The type 80 response family is associated with a CEX2A card.
 130 *
 131 * Note that all unsigned char arrays are right-justified and left-padded
 132 * with zeroes.
 133 *
 134 * Note that all reserved fields must be zeroes.
 135 */
 136
 137#define TYPE80_RSP_CODE 0x80
 138
 139struct type80_hdr {
 140        unsigned char   reserved1;
 141        unsigned char   type;           /* 0x80 */
 142        unsigned short  len;
 143        unsigned char   code;           /* 0x00 */
 144        unsigned char   reserved2[3];
 145        unsigned char   reserved3[8];
 146} __attribute__((packed));
 147
 148int zcrypt_cex2a_init(void);
 149void zcrypt_cex2a_exit(void);
 150
 151#endif /* _ZCRYPT_CEX2A_H_ */
 152