mirror of
https://github.com/clearml/dropbear
synced 2025-03-10 05:50:15 +00:00
Avoid malloc in hmac
--HG-- branch : nocircbuffer
This commit is contained in:
parent
579463933b
commit
91ef9b2fa9
@ -28,7 +28,7 @@
|
|||||||
*/
|
*/
|
||||||
int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen)
|
int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen)
|
||||||
{
|
{
|
||||||
unsigned char *buf, *isha;
|
unsigned char buf[MAXBLOCKSIZE], isha[MAXBLOCKSIZE];
|
||||||
unsigned long hashsize, i;
|
unsigned long hashsize, i;
|
||||||
int hash, err;
|
int hash, err;
|
||||||
|
|
||||||
@ -44,19 +44,6 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen)
|
|||||||
/* get the hash message digest size */
|
/* get the hash message digest size */
|
||||||
hashsize = hash_descriptor[hash].hashsize;
|
hashsize = hash_descriptor[hash].hashsize;
|
||||||
|
|
||||||
/* allocate buffers */
|
|
||||||
buf = XMALLOC(HMAC_BLOCKSIZE);
|
|
||||||
isha = XMALLOC(hashsize);
|
|
||||||
if (buf == NULL || isha == NULL) {
|
|
||||||
if (buf != NULL) {
|
|
||||||
XFREE(buf);
|
|
||||||
}
|
|
||||||
if (isha != NULL) {
|
|
||||||
XFREE(isha);
|
|
||||||
}
|
|
||||||
return CRYPT_MEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the hash of the first HMAC vector plus the data */
|
/* Get the hash of the first HMAC vector plus the data */
|
||||||
if ((err = hash_descriptor[hash].done(&hmac->md, isha)) != CRYPT_OK) {
|
if ((err = hash_descriptor[hash].done(&hmac->md, isha)) != CRYPT_OK) {
|
||||||
goto LBL_ERR;
|
goto LBL_ERR;
|
||||||
@ -96,9 +83,6 @@ LBL_ERR:
|
|||||||
zeromem(hmac, sizeof(*hmac));
|
zeromem(hmac, sizeof(*hmac));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
XFREE(isha);
|
|
||||||
XFREE(buf);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen)
|
int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen)
|
||||||
{
|
{
|
||||||
unsigned char *buf;
|
unsigned char buf[MAXBLOCKSIZE];
|
||||||
unsigned long hashsize;
|
unsigned long hashsize;
|
||||||
unsigned long i, z;
|
unsigned long i, z;
|
||||||
int err;
|
int err;
|
||||||
@ -49,16 +49,9 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon
|
|||||||
return CRYPT_INVALID_KEYSIZE;
|
return CRYPT_INVALID_KEYSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate ram for buf */
|
|
||||||
buf = XMALLOC(HMAC_BLOCKSIZE);
|
|
||||||
if (buf == NULL) {
|
|
||||||
return CRYPT_MEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* allocate memory for key */
|
/* allocate memory for key */
|
||||||
hmac->key = XMALLOC(HMAC_BLOCKSIZE);
|
hmac->key = XMALLOC(HMAC_BLOCKSIZE);
|
||||||
if (hmac->key == NULL) {
|
if (hmac->key == NULL) {
|
||||||
XFREE(buf);
|
|
||||||
return CRYPT_MEM;
|
return CRYPT_MEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +94,6 @@ done:
|
|||||||
zeromem(buf, HMAC_BLOCKSIZE);
|
zeromem(buf, HMAC_BLOCKSIZE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
XFREE(buf);
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user