zcrypt_cex2a.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright IBM Corp. 2001, 2006
  4. * Author(s): Robert Burroughs
  5. * Eric Rossman (edrossma@us.ibm.com)
  6. *
  7. * Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
  8. * Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
  9. */
  10. #ifndef _ZCRYPT_CEX2A_H_
  11. #define _ZCRYPT_CEX2A_H_
  12. /**
  13. * The type 50 message family is associated with CEXxA cards.
  14. *
  15. * The four members of the family are described below.
  16. *
  17. * Note that all unsigned char arrays are right-justified and left-padded
  18. * with zeroes.
  19. *
  20. * Note that all reserved fields must be zeroes.
  21. */
  22. struct type50_hdr {
  23. unsigned char reserved1;
  24. unsigned char msg_type_code; /* 0x50 */
  25. unsigned short msg_len;
  26. unsigned char reserved2;
  27. unsigned char ignored;
  28. unsigned short reserved3;
  29. } __packed;
  30. #define TYPE50_TYPE_CODE 0x50
  31. #define TYPE50_MEB1_FMT 0x0001
  32. #define TYPE50_MEB2_FMT 0x0002
  33. #define TYPE50_MEB3_FMT 0x0003
  34. #define TYPE50_CRB1_FMT 0x0011
  35. #define TYPE50_CRB2_FMT 0x0012
  36. #define TYPE50_CRB3_FMT 0x0013
  37. /* Mod-Exp, with a small modulus */
  38. struct type50_meb1_msg {
  39. struct type50_hdr header;
  40. unsigned short keyblock_type; /* 0x0001 */
  41. unsigned char reserved[6];
  42. unsigned char exponent[128];
  43. unsigned char modulus[128];
  44. unsigned char message[128];
  45. } __packed;
  46. /* Mod-Exp, with a large modulus */
  47. struct type50_meb2_msg {
  48. struct type50_hdr header;
  49. unsigned short keyblock_type; /* 0x0002 */
  50. unsigned char reserved[6];
  51. unsigned char exponent[256];
  52. unsigned char modulus[256];
  53. unsigned char message[256];
  54. } __packed;
  55. /* Mod-Exp, with a larger modulus */
  56. struct type50_meb3_msg {
  57. struct type50_hdr header;
  58. unsigned short keyblock_type; /* 0x0003 */
  59. unsigned char reserved[6];
  60. unsigned char exponent[512];
  61. unsigned char modulus[512];
  62. unsigned char message[512];
  63. } __packed;
  64. /* CRT, with a small modulus */
  65. struct type50_crb1_msg {
  66. struct type50_hdr header;
  67. unsigned short keyblock_type; /* 0x0011 */
  68. unsigned char reserved[6];
  69. unsigned char p[64];
  70. unsigned char q[64];
  71. unsigned char dp[64];
  72. unsigned char dq[64];
  73. unsigned char u[64];
  74. unsigned char message[128];
  75. } __packed;
  76. /* CRT, with a large modulus */
  77. struct type50_crb2_msg {
  78. struct type50_hdr header;
  79. unsigned short keyblock_type; /* 0x0012 */
  80. unsigned char reserved[6];
  81. unsigned char p[128];
  82. unsigned char q[128];
  83. unsigned char dp[128];
  84. unsigned char dq[128];
  85. unsigned char u[128];
  86. unsigned char message[256];
  87. } __packed;
  88. /* CRT, with a larger modulus */
  89. struct type50_crb3_msg {
  90. struct type50_hdr header;
  91. unsigned short keyblock_type; /* 0x0013 */
  92. unsigned char reserved[6];
  93. unsigned char p[256];
  94. unsigned char q[256];
  95. unsigned char dp[256];
  96. unsigned char dq[256];
  97. unsigned char u[256];
  98. unsigned char message[512];
  99. } __packed;
  100. /**
  101. * The type 80 response family is associated with a CEXxA cards.
  102. *
  103. * Note that all unsigned char arrays are right-justified and left-padded
  104. * with zeroes.
  105. *
  106. * Note that all reserved fields must be zeroes.
  107. */
  108. #define TYPE80_RSP_CODE 0x80
  109. struct type80_hdr {
  110. unsigned char reserved1;
  111. unsigned char type; /* 0x80 */
  112. unsigned short len;
  113. unsigned char code; /* 0x00 */
  114. unsigned char reserved2[3];
  115. unsigned char reserved3[8];
  116. } __packed;
  117. int zcrypt_cex2a_init(void);
  118. void zcrypt_cex2a_exit(void);
  119. #endif /* _ZCRYPT_CEX2A_H_ */