mirror of
				https://github.com/clearml/dropbear
				synced 2025-06-26 18:17:32 +00:00 
			
		
		
		
	Fix ChaCha20 on 32-bit platforms (#99)
* Fix ChaCha20 on 32-bit platforms On 32-bit platforms with old compiler STORE64H() parameter is not auto-expanded to 64-bit value, causing wrong IV data. Spotted on BCM4706 MIPS32r2 with GCC 4.2.4: Exit before auth: Integrity error (bad packet size 2065808956) * Fix Chacha20-Poly1305 and AES-GCM debug messages Functions were renamed earlier and trace messages - not.
This commit is contained in:
		
							parent
							
								
									4faf06aae7
								
							
						
					
					
						commit
						b0243b0e7b
					
				| @ -82,7 +82,7 @@ static int dropbear_chachapoly_crypt(unsigned int seq, | |||||||
| 		return CRYPT_ERROR; | 		return CRYPT_ERROR; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	STORE64H(seq, seqbuf); | 	STORE64H((uint64_t)seq, seqbuf); | ||||||
| 	chacha_ivctr64(&state->chacha, seqbuf, sizeof(seqbuf), 0); | 	chacha_ivctr64(&state->chacha, seqbuf, sizeof(seqbuf), 0); | ||||||
| 	if ((err = chacha_keystream(&state->chacha, key, sizeof(key))) != CRYPT_OK) { | 	if ((err = chacha_keystream(&state->chacha, key, sizeof(key))) != CRYPT_OK) { | ||||||
| 		return err; | 		return err; | ||||||
| @ -122,13 +122,13 @@ static int dropbear_chachapoly_getlength(unsigned int seq, | |||||||
| 	unsigned char seqbuf[8], buf[4]; | 	unsigned char seqbuf[8], buf[4]; | ||||||
| 	int err; | 	int err; | ||||||
| 
 | 
 | ||||||
| 	TRACE2(("enter dropbear_chachapoly_parse")) | 	TRACE2(("enter dropbear_chachapoly_getlength")) | ||||||
| 
 | 
 | ||||||
| 	if (len < sizeof(buf)) { | 	if (len < sizeof(buf)) { | ||||||
| 		return CRYPT_ERROR; | 		return CRYPT_ERROR; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	STORE64H(seq, seqbuf); | 	STORE64H((uint64_t)seq, seqbuf); | ||||||
| 	chacha_ivctr64(&state->header, seqbuf, sizeof(seqbuf), 0); | 	chacha_ivctr64(&state->header, seqbuf, sizeof(seqbuf), 0); | ||||||
| 	if ((err = chacha_crypt(&state->header, in, sizeof(buf), buf)) != CRYPT_OK) { | 	if ((err = chacha_crypt(&state->header, in, sizeof(buf), buf)) != CRYPT_OK) { | ||||||
| 		return err; | 		return err; | ||||||
| @ -136,7 +136,7 @@ static int dropbear_chachapoly_getlength(unsigned int seq, | |||||||
| 
 | 
 | ||||||
| 	LOAD32H(*outlen, buf); | 	LOAD32H(*outlen, buf); | ||||||
| 
 | 
 | ||||||
| 	TRACE2(("leave dropbear_chachapoly_parse")) | 	TRACE2(("leave dropbear_chachapoly_getlength")) | ||||||
| 	return CRYPT_OK; | 	return CRYPT_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								gcm.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								gcm.c
									
									
									
									
									
								
							| @ -100,7 +100,7 @@ static int dropbear_gcm_crypt(unsigned int UNUSED(seq), | |||||||
| static int dropbear_gcm_getlength(unsigned int UNUSED(seq), | static int dropbear_gcm_getlength(unsigned int UNUSED(seq), | ||||||
| 			const unsigned char *in, unsigned int *outlen, | 			const unsigned char *in, unsigned int *outlen, | ||||||
| 			unsigned long len, dropbear_gcm_state* UNUSED(state)) { | 			unsigned long len, dropbear_gcm_state* UNUSED(state)) { | ||||||
| 	TRACE2(("enter dropbear_gcm_parse")) | 	TRACE2(("enter dropbear_gcm_getlength")) | ||||||
| 
 | 
 | ||||||
| 	if (len < 4) { | 	if (len < 4) { | ||||||
| 		return CRYPT_ERROR; | 		return CRYPT_ERROR; | ||||||
| @ -108,7 +108,7 @@ static int dropbear_gcm_getlength(unsigned int UNUSED(seq), | |||||||
| 
 | 
 | ||||||
| 	LOAD32H(*outlen, in); | 	LOAD32H(*outlen, in); | ||||||
| 
 | 
 | ||||||
| 	TRACE2(("leave dropbear_gcm_parse")) | 	TRACE2(("leave dropbear_gcm_getlength")) | ||||||
| 	return CRYPT_OK; | 	return CRYPT_OK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user