nx_csbcpb.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #ifndef __NX_CSBCPB_H__
  2. #define __NX_CSBCPB_H__
  3. struct cop_symcpb_aes_ecb {
  4. u8 key[32];
  5. u8 __rsvd[80];
  6. } __packed;
  7. struct cop_symcpb_aes_cbc {
  8. u8 iv[16];
  9. u8 key[32];
  10. u8 cv[16];
  11. u32 spbc;
  12. u8 __rsvd[44];
  13. } __packed;
  14. struct cop_symcpb_aes_gca {
  15. u8 in_pat[16];
  16. u8 key[32];
  17. u8 out_pat[16];
  18. u32 spbc;
  19. u8 __rsvd[44];
  20. } __packed;
  21. struct cop_symcpb_aes_gcm {
  22. u8 in_pat_or_aad[16];
  23. u8 iv_or_cnt[16];
  24. u64 bit_length_aad;
  25. u64 bit_length_data;
  26. u8 in_s0[16];
  27. u8 key[32];
  28. u8 __rsvd1[16];
  29. u8 out_pat_or_mac[16];
  30. u8 out_s0[16];
  31. u8 out_cnt[16];
  32. u32 spbc;
  33. u8 __rsvd2[12];
  34. } __packed;
  35. struct cop_symcpb_aes_ctr {
  36. u8 iv[16];
  37. u8 key[32];
  38. u8 cv[16];
  39. u32 spbc;
  40. u8 __rsvd2[44];
  41. } __packed;
  42. struct cop_symcpb_aes_cca {
  43. u8 b0[16];
  44. u8 b1[16];
  45. u8 key[16];
  46. u8 out_pat_or_b0[16];
  47. u32 spbc;
  48. u8 __rsvd[44];
  49. } __packed;
  50. struct cop_symcpb_aes_ccm {
  51. u8 in_pat_or_b0[16];
  52. u8 iv_or_ctr[16];
  53. u8 in_s0[16];
  54. u8 key[16];
  55. u8 __rsvd1[48];
  56. u8 out_pat_or_mac[16];
  57. u8 out_s0[16];
  58. u8 out_ctr[16];
  59. u32 spbc;
  60. u8 __rsvd2[12];
  61. } __packed;
  62. struct cop_symcpb_aes_xcbc {
  63. u8 cv[16];
  64. u8 key[16];
  65. u8 __rsvd1[16];
  66. u8 out_cv_mac[16];
  67. u32 spbc;
  68. u8 __rsvd2[44];
  69. } __packed;
  70. struct cop_symcpb_sha256 {
  71. u64 message_bit_length;
  72. u64 __rsvd1;
  73. u8 input_partial_digest[32];
  74. u8 message_digest[32];
  75. u32 spbc;
  76. u8 __rsvd2[44];
  77. } __packed;
  78. struct cop_symcpb_sha512 {
  79. u64 message_bit_length_hi;
  80. u64 message_bit_length_lo;
  81. u8 input_partial_digest[64];
  82. u8 __rsvd1[32];
  83. u8 message_digest[64];
  84. u32 spbc;
  85. u8 __rsvd2[76];
  86. } __packed;
  87. #define NX_FDM_INTERMEDIATE 0x01
  88. #define NX_FDM_CONTINUATION 0x02
  89. #define NX_FDM_ENDE_ENCRYPT 0x80
  90. #define NX_CPB_FDM(c) ((c)->cpb.hdr.fdm)
  91. #define NX_CPB_KS_DS(c) ((c)->cpb.hdr.ks_ds)
  92. #define NX_CPB_KEY_SIZE(c) (NX_CPB_KS_DS(c) >> 4)
  93. #define NX_CPB_SET_KEY_SIZE(c, x) NX_CPB_KS_DS(c) |= ((x) << 4)
  94. #define NX_CPB_SET_DIGEST_SIZE(c, x) NX_CPB_KS_DS(c) |= (x)
  95. struct cop_symcpb_header {
  96. u8 mode;
  97. u8 fdm;
  98. u8 ks_ds;
  99. u8 pad_byte;
  100. u8 __rsvd[12];
  101. } __packed;
  102. struct cop_parameter_block {
  103. struct cop_symcpb_header hdr;
  104. union {
  105. struct cop_symcpb_aes_ecb aes_ecb;
  106. struct cop_symcpb_aes_cbc aes_cbc;
  107. struct cop_symcpb_aes_gca aes_gca;
  108. struct cop_symcpb_aes_gcm aes_gcm;
  109. struct cop_symcpb_aes_cca aes_cca;
  110. struct cop_symcpb_aes_ccm aes_ccm;
  111. struct cop_symcpb_aes_ctr aes_ctr;
  112. struct cop_symcpb_aes_xcbc aes_xcbc;
  113. struct cop_symcpb_sha256 sha256;
  114. struct cop_symcpb_sha512 sha512;
  115. };
  116. } __packed;
  117. #define NX_CSB_VALID_BIT 0x80
  118. /* co-processor status block */
  119. struct cop_status_block {
  120. u8 valid;
  121. u8 crb_seq_number;
  122. u8 completion_code;
  123. u8 completion_extension;
  124. u32 processed_byte_count;
  125. u64 address;
  126. } __packed;
  127. /* Nest accelerator workbook section 4.4 */
  128. struct nx_csbcpb {
  129. unsigned char __rsvd[112];
  130. struct cop_status_block csb;
  131. struct cop_parameter_block cpb;
  132. } __packed;
  133. /* nx_csbcpb related definitions */
  134. #define NX_MODE_AES_ECB 0
  135. #define NX_MODE_AES_CBC 1
  136. #define NX_MODE_AES_GMAC 2
  137. #define NX_MODE_AES_GCA 3
  138. #define NX_MODE_AES_GCM 4
  139. #define NX_MODE_AES_CCA 5
  140. #define NX_MODE_AES_CCM 6
  141. #define NX_MODE_AES_CTR 7
  142. #define NX_MODE_AES_XCBC_MAC 20
  143. #define NX_MODE_SHA 0
  144. #define NX_MODE_SHA_HMAC 1
  145. #define NX_MODE_AES_CBC_HMAC_ETA 8
  146. #define NX_MODE_AES_CBC_HMAC_ATE 9
  147. #define NX_MODE_AES_CBC_HMAC_EAA 10
  148. #define NX_MODE_AES_CTR_HMAC_ETA 12
  149. #define NX_MODE_AES_CTR_HMAC_ATE 13
  150. #define NX_MODE_AES_CTR_HMAC_EAA 14
  151. #define NX_FDM_CI_FULL 0
  152. #define NX_FDM_CI_FIRST 1
  153. #define NX_FDM_CI_LAST 2
  154. #define NX_FDM_CI_MIDDLE 3
  155. #define NX_FDM_PR_NONE 0
  156. #define NX_FDM_PR_PAD 1
  157. #define NX_KS_AES_128 1
  158. #define NX_KS_AES_192 2
  159. #define NX_KS_AES_256 3
  160. #define NX_DS_SHA256 2
  161. #define NX_DS_SHA512 3
  162. #define NX_FC_AES 0
  163. #define NX_FC_SHA 2
  164. #define NX_FC_AES_HMAC 6
  165. #define NX_MAX_FC (NX_FC_AES_HMAC + 1)
  166. #define NX_MAX_MODE (NX_MODE_AES_XCBC_MAC + 1)
  167. #define HCOP_FC_AES NX_FC_AES
  168. #define HCOP_FC_SHA NX_FC_SHA
  169. #define HCOP_FC_AES_HMAC NX_FC_AES_HMAC
  170. /* indices into the array of algorithm properties */
  171. #define NX_PROPS_AES_128 0
  172. #define NX_PROPS_AES_192 1
  173. #define NX_PROPS_AES_256 2
  174. #define NX_PROPS_SHA256 1
  175. #define NX_PROPS_SHA512 2
  176. #endif