mirror of
https://github.com/clearml/dropbear
synced 2025-01-31 10:57:01 +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