@@ -128,15 +128,14 @@ int wh_MessageAuth_FlattenPermissions(whAuthPermissions* permissions,
128128 buffer [idx ++ ] = (uint8_t )(permissions -> groupPermissions & 0xFF );
129129 buffer [idx ++ ] = (uint8_t )((permissions -> groupPermissions >> 8 ) & 0xFF );
130130
131- /* Serialize actionPermissions array (2 *WH_NUMBER_OF_GROUPS bytes) */
132- for (i = 0 ; i < WH_NUMBER_OF_GROUPS && (idx + ( i * 2 ) + 1 ) < buffer_len ;
133- i ++ ) {
134- buffer [idx + ( i * 2 )] =
135- (uint8_t )(permissions -> actionPermissions [ i ] & 0xFF );
136- buffer [idx + ( i * 2 ) + 1 ] =
137- (uint8_t )((permissions -> actionPermissions [ i ] >> 8 ) & 0xFF );
131+ /* Serialize actionPermissions array (4 *WH_NUMBER_OF_GROUPS bytes) */
132+ for (i = 0 ; i < WH_NUMBER_OF_GROUPS && (idx + 3 ) < buffer_len ; i ++ ) {
133+ uint32_t actionPerm = permissions -> actionPermissions [ i ];
134+ buffer [idx ++ ] = ( uint8_t )( actionPerm & 0xFF );
135+ buffer [ idx ++ ] = (uint8_t )(( actionPerm >> 8 ) & 0xFF );
136+ buffer [idx ++ ] = ( uint8_t )(( actionPerm >> 16 ) & 0xFF );
137+ buffer [ idx ++ ] = (uint8_t )((actionPerm >> 24 ) & 0xFF );
138138 }
139- idx += (2 * WH_NUMBER_OF_GROUPS );
140139
141140 /* Serialize keyIdCount (2 bytes) */
142141 keyIdCount = (permissions -> keyIdCount > WH_AUTH_MAX_KEY_IDS )
@@ -146,15 +145,17 @@ int wh_MessageAuth_FlattenPermissions(whAuthPermissions* permissions,
146145 buffer [idx ++ ] = (uint8_t )((keyIdCount >> 8 ) & 0xFF );
147146
148147 /* Serialize keyIds array (4*WH_AUTH_MAX_KEY_IDS bytes) */
149- for (i = 0 ; i < WH_AUTH_MAX_KEY_IDS && (idx + (i * 4 ) + 3 ) < buffer_len ;
150- i ++ ) {
148+ for (i = 0 ; i < WH_AUTH_MAX_KEY_IDS && (idx + 3 ) < buffer_len ; i ++ ) {
151149 if (i < keyIdCount ) {
152150 keyId = permissions -> keyIds [i ];
153151 }
154152 else {
155153 keyId = 0 ; /* Pad with zeros */
156154 }
157- memcpy (& buffer [idx + (i * 4 )], & keyId , sizeof (keyId ));
155+ buffer [idx ++ ] = (uint8_t )(keyId & 0xFF );
156+ buffer [idx ++ ] = (uint8_t )((keyId >> 8 ) & 0xFF );
157+ buffer [idx ++ ] = (uint8_t )((keyId >> 16 ) & 0xFF );
158+ buffer [idx ++ ] = (uint8_t )((keyId >> 24 ) & 0xFF );
158159 }
159160
160161 return 0 ;
@@ -177,13 +178,15 @@ int wh_MessageAuth_UnflattenPermissions(uint8_t* buffer, uint16_t buffer_len,
177178 permissions -> groupPermissions = buffer [idx ] | (buffer [idx + 1 ] << 8 );
178179 idx += 2 ;
179180
180- /* Deserialize actionPermissions array (2*WH_NUMBER_OF_GROUPS bytes) */
181- for (i = 0 ; i < WH_NUMBER_OF_GROUPS && (idx + (i * 2 ) + 1 ) < buffer_len ;
182- i ++ ) {
181+ /* Deserialize actionPermissions array (4*WH_NUMBER_OF_GROUPS bytes) */
182+ for (i = 0 ; i < WH_NUMBER_OF_GROUPS && (idx + 3 ) < buffer_len ; i ++ ) {
183183 permissions -> actionPermissions [i ] =
184- buffer [idx + (i * 2 )] | (buffer [idx + (i * 2 ) + 1 ] << 8 );
184+ buffer [idx ] |
185+ (buffer [idx + 1 ] << 8 ) |
186+ (buffer [idx + 2 ] << 16 ) |
187+ (buffer [idx + 3 ] << 24 );
188+ idx += 4 ;
185189 }
186- idx += (2 * WH_NUMBER_OF_GROUPS );
187190
188191 /* Deserialize keyIdCount (2 bytes) */
189192 keyIdCount = buffer [idx ] | (buffer [idx + 1 ] << 8 );
@@ -194,10 +197,13 @@ int wh_MessageAuth_UnflattenPermissions(uint8_t* buffer, uint16_t buffer_len,
194197 permissions -> keyIdCount = keyIdCount ;
195198
196199 /* Deserialize keyIds array (4*WH_AUTH_MAX_KEY_IDS bytes) */
197- for (i = 0 ; i < WH_AUTH_MAX_KEY_IDS && (idx + (i * 4 ) + 3 ) < buffer_len ;
198- i ++ ) {
199- memcpy (& keyId , & buffer [idx + (i * 4 )], sizeof (keyId ));
200+ for (i = 0 ; i < WH_AUTH_MAX_KEY_IDS && (idx + 3 ) < buffer_len ; i ++ ) {
201+ keyId = buffer [idx ] |
202+ (buffer [idx + 1 ] << 8 ) |
203+ (buffer [idx + 2 ] << 16 ) |
204+ (buffer [idx + 3 ] << 24 );
200205 permissions -> keyIds [i ] = keyId ;
206+ idx += 4 ;
201207 }
202208
203209 return 0 ;
0 commit comments