@@ -187,7 +187,6 @@ void signerAtsha204SoftPutNonce(MyMessage &msg)
187
187
if (!_signing_init_ok) {
188
188
return ;
189
189
}
190
-
191
190
(void )memcpy ((void *)_signing_nonce, (const void *)msg.getCustom (), MIN (MAX_PAYLOAD, 32 ));
192
191
if (MAX_PAYLOAD < 32 ) {
193
192
// We set the part of the 32-byte nonce that does not fit into a message to 0xAA
@@ -355,36 +354,40 @@ static void signerAtsha204AHmac(uint8_t *dest, const uint8_t *nonce, const uint8
355
354
// 25 bytes zeroes
356
355
// 32 bytes nonce
357
356
358
- uint8_t buffer[96 ];
357
+ #if defined(MY_CRYPTO_SHA256_ASM)
358
+ static uint8_t _signing_buffer[96 ]; // static for AVR ASM SHA256
359
+ #else
360
+ uint8_t _signing_buffer[96 ];
361
+ #endif
359
362
// Calculate message digest first
360
- (void )memset ((void *)buffer , 0x00 , sizeof (buffer ));
361
- (void )memcpy ((void *)buffer , (const void *)data, 32 );
362
- buffer [0 + 32 ] = 0x15 ; // OPCODE
363
- buffer [1 + 32 ] = 0x02 ; // param1
364
- buffer [2 + 32 ] = 0x08 ; // param2(1)
365
- // buffer [3 + 32] = 0x00; // param2(2)
366
- buffer [4 + 32 ] = 0xEE ; // SN[8]
367
- buffer [5 + 32 ] = 0x01 ; // SN[0]
368
- buffer [6 + 32 ] = 0x23 ; // SN[1]
369
- // buffer [7 + 32..31 + 32] => 0x00;
370
- (void )memcpy ((void *)&buffer [64 ], (const void *)nonce, 32 );
371
- SHA256 (_signing_hmac, buffer , 96 );
363
+ (void )memset ((void *)_signing_buffer , 0x00 , sizeof (_signing_buffer ));
364
+ (void )memcpy ((void *)_signing_buffer , (const void *)data, 32 );
365
+ _signing_buffer [0 + 32 ] = 0x15 ; // OPCODE
366
+ _signing_buffer [1 + 32 ] = 0x02 ; // param1
367
+ _signing_buffer [2 + 32 ] = 0x08 ; // param2(1)
368
+ // _signing_buffer [3 + 32] = 0x00; // param2(2)
369
+ _signing_buffer [4 + 32 ] = 0xEE ; // SN[8]
370
+ _signing_buffer [5 + 32 ] = 0x01 ; // SN[0]
371
+ _signing_buffer [6 + 32 ] = 0x23 ; // SN[1]
372
+ // _signing_buffer [7 + 32..31 + 32] => 0x00;
373
+ (void )memcpy ((void *)&_signing_buffer [64 ], (const void *)nonce, 32 );
374
+ SHA256 (_signing_hmac, _signing_buffer , 96 );
372
375
373
376
// Feed "message" to HMAC calculator
374
- (void )memset ((void *)buffer , 0x00 , sizeof (buffer ));
375
- (void )memcpy ((void *)&buffer [32 ], (const void *)_signing_hmac, 32 );
376
- buffer [0 + 64 ] = 0x11 ; // OPCODE
377
- buffer [1 + 64 ] = 0x04 ; // Mode
378
- // buffer [2 + 64] = 0x00; // SlotID(1)
379
- // buffer [3 + 64] = 0x00; // SlotID(2)
380
- // buffer [4 + 64..14 + 64] => 0x00; // 11 bytes zeroes
381
- buffer [15 + 64 ] = 0xEE ; // SN[8]
382
- // buffer [16 + 64..19 + 64] => 0x00; // 4 bytes zeroes
383
- buffer [20 + 64 ] = 0x01 ;
384
- buffer [21 + 64 ] = 0x23 ;
385
- // buffer [22 + 64] = 0x00; // SN[0]
386
- // buffer [23 + 64] = 0x00; // SN[1]
387
- SHA256HMAC (dest, _signing_hmac_key, 32 , buffer , 88 );
377
+ (void )memset ((void *)_signing_buffer , 0x00 , sizeof (_signing_buffer ));
378
+ (void )memcpy ((void *)&_signing_buffer [32 ], (const void *)_signing_hmac, 32 );
379
+ _signing_buffer [0 + 64 ] = 0x11 ; // OPCODE
380
+ _signing_buffer [1 + 64 ] = 0x04 ; // Mode
381
+ // _signing_buffer [2 + 64] = 0x00; // SlotID(1)
382
+ // _signing_buffer [3 + 64] = 0x00; // SlotID(2)
383
+ // _signing_buffer [4 + 64..14 + 64] => 0x00; // 11 bytes zeroes
384
+ _signing_buffer [15 + 64 ] = 0xEE ; // SN[8]
385
+ // _signing_buffer [16 + 64..19 + 64] => 0x00; // 4 bytes zeroes
386
+ _signing_buffer [20 + 64 ] = 0x01 ;
387
+ _signing_buffer [21 + 64 ] = 0x23 ;
388
+ // _signing_buffer [22 + 64] = 0x00; // SN[0]
389
+ // _signing_buffer [23 + 64] = 0x00; // SN[1]
390
+ SHA256HMAC (dest, _signing_hmac_key, 32 , _signing_buffer , 88 );
388
391
}
389
392
390
393
#endif // MY_SIGNING_SOFT
0 commit comments