Get rid of the intermediate buffer in itunes_pairing_hash()
No need to build the string to be hashed in advance, it can just be written piece by piece to the md.
This commit is contained in:
parent
2dde2f180d
commit
c9e91532b3
|
@ -93,7 +93,6 @@ static uint64_t libhash;
|
||||||
static char *
|
static char *
|
||||||
itunes_pairing_hash(char *paircode, char *pin)
|
itunes_pairing_hash(char *paircode, char *pin)
|
||||||
{
|
{
|
||||||
char buf[24];
|
|
||||||
char hash[33];
|
char hash[33];
|
||||||
char ebuf[64];
|
char ebuf[64];
|
||||||
uint8_t *hash_bytes;
|
uint8_t *hash_bytes;
|
||||||
|
@ -114,15 +113,6 @@ itunes_pairing_hash(char *paircode, char *pin)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
|
||||||
memcpy(buf, paircode, 16);
|
|
||||||
|
|
||||||
/* Add pin code characters on 16 bits - remember Mac OS X is
|
|
||||||
* all UTF-16 (wchar_t).
|
|
||||||
*/
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
buf[16 + (2 * i)] = pin[i];
|
|
||||||
|
|
||||||
gc_err = gcry_md_open(&hd, GCRY_MD_MD5, 0);
|
gc_err = gcry_md_open(&hd, GCRY_MD_MD5, 0);
|
||||||
if (gc_err != GPG_ERR_NO_ERROR)
|
if (gc_err != GPG_ERR_NO_ERROR)
|
||||||
{
|
{
|
||||||
|
@ -132,7 +122,15 @@ itunes_pairing_hash(char *paircode, char *pin)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gcry_md_write(hd, buf, sizeof(buf));
|
gcry_md_write(hd, paircode, 16);
|
||||||
|
/* Add pin code characters on 16 bits - remember Mac OS X is
|
||||||
|
* all UTF-16 (wchar_t).
|
||||||
|
*/
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
gcry_md_write(hd, pin + i, 1);
|
||||||
|
gcry_md_write(hd, "\0", 1);
|
||||||
|
}
|
||||||
|
|
||||||
hash_bytes = gcry_md_read(hd, GCRY_MD_MD5);
|
hash_bytes = gcry_md_read(hd, GCRY_MD_MD5);
|
||||||
if (!hash_bytes)
|
if (!hash_bytes)
|
||||||
|
|
Loading…
Reference in New Issue