@@ -704,6 +704,59 @@ int wh_MessageCrypto_TranslateSha2Response(
704704 return 0 ;
705705}
706706
707+ /* SHA3 state translation - shared across all SHA3 variants and across the
708+ * non-DMA and DMA wire formats. */
709+ int wh_MessageCrypto_TranslateSha3State (uint16_t magic ,
710+ const whMessageCrypto_Sha3State * src ,
711+ whMessageCrypto_Sha3State * dest )
712+ {
713+ int k ;
714+
715+ if ((src == NULL ) || (dest == NULL )) {
716+ return WH_ERROR_BADARGS ;
717+ }
718+ for (k = 0 ; k < 25 ; k ++ ) {
719+ WH_T64 (magic , dest , src , s [k ]);
720+ }
721+ return 0 ;
722+ }
723+
724+ /* SHA3 Request translation. Trailing input bytes are raw and need no
725+ * translation. */
726+ int wh_MessageCrypto_TranslateSha3Request (
727+ uint16_t magic , const whMessageCrypto_Sha3Request * src ,
728+ whMessageCrypto_Sha3Request * dest )
729+ {
730+ if ((src == NULL ) || (dest == NULL )) {
731+ return WH_ERROR_BADARGS ;
732+ }
733+ WH_T32 (magic , dest , src , isLastBlock );
734+ WH_T32 (magic , dest , src , inSz );
735+ return wh_MessageCrypto_TranslateSha3State (magic , & src -> resumeState ,
736+ & dest -> resumeState );
737+ }
738+
739+ /* SHA3 Response translation */
740+ int wh_MessageCrypto_TranslateSha3Response (
741+ uint16_t magic , const whMessageCrypto_Sha3Response * src ,
742+ whMessageCrypto_Sha3Response * dest )
743+ {
744+ int ret ;
745+
746+ if ((src == NULL ) || (dest == NULL )) {
747+ return WH_ERROR_BADARGS ;
748+ }
749+ ret = wh_MessageCrypto_TranslateSha3State (magic , & src -> resumeState ,
750+ & dest -> resumeState );
751+ if (ret != 0 ) {
752+ return ret ;
753+ }
754+ if (src != dest ) {
755+ memcpy (dest -> hash , src -> hash , sizeof (src -> hash ));
756+ }
757+ return 0 ;
758+ }
759+
707760
708761/* CMAC-AES State translation */
709762int wh_MessageCrypto_TranslateCmacAesState (
@@ -1037,6 +1090,48 @@ int wh_MessageCrypto_TranslateSha2DmaResponse(
10371090 & dest -> dmaAddrStatus );
10381091}
10391092
1093+ /* SHA3 DMA Request translation */
1094+ int wh_MessageCrypto_TranslateSha3DmaRequest (
1095+ uint16_t magic , const whMessageCrypto_Sha3DmaRequest * src ,
1096+ whMessageCrypto_Sha3DmaRequest * dest )
1097+ {
1098+ int ret ;
1099+
1100+ if ((src == NULL ) || (dest == NULL )) {
1101+ return WH_ERROR_BADARGS ;
1102+ }
1103+ ret = wh_MessageCrypto_TranslateDmaBuffer (magic , & src -> input , & dest -> input );
1104+ if (ret != 0 ) {
1105+ return ret ;
1106+ }
1107+ WH_T32 (magic , dest , src , isLastBlock );
1108+ WH_T32 (magic , dest , src , inSz );
1109+ return wh_MessageCrypto_TranslateSha3State (magic , & src -> resumeState ,
1110+ & dest -> resumeState );
1111+ }
1112+
1113+ /* SHA3 DMA Response translation */
1114+ int wh_MessageCrypto_TranslateSha3DmaResponse (
1115+ uint16_t magic , const whMessageCrypto_Sha3DmaResponse * src ,
1116+ whMessageCrypto_Sha3DmaResponse * dest )
1117+ {
1118+ int ret ;
1119+
1120+ if ((src == NULL ) || (dest == NULL )) {
1121+ return WH_ERROR_BADARGS ;
1122+ }
1123+ ret = wh_MessageCrypto_TranslateSha3State (magic , & src -> resumeState ,
1124+ & dest -> resumeState );
1125+ if (ret != 0 ) {
1126+ return ret ;
1127+ }
1128+ if (src != dest ) {
1129+ memcpy (dest -> hash , src -> hash , sizeof (src -> hash ));
1130+ }
1131+ return wh_MessageCrypto_TranslateDmaAddrStatus (magic , & src -> dmaAddrStatus ,
1132+ & dest -> dmaAddrStatus );
1133+ }
1134+
10401135/* CMAC-AES DMA Request translation */
10411136int wh_MessageCrypto_TranslateCmacAesDmaRequest (
10421137 uint16_t magic , const whMessageCrypto_CmacAesDmaRequest * src ,
0 commit comments