commit 8bc02fb59874be372520e06cbf2c887efc59fba6
Author: Christophe Fergeau <[email protected]>
Date: Mon Oct 26 23:20:55 2009 +0100
move itdb_device_write_hash58 to itdb_hash58.c
src/Makefile.am | 1 -
src/itdb_device.c | 55 +----------------------------------------
src/itdb_hash58.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++----
src/itdb_hash58.h | 37 ---------------------------
src/itdb_private.h | 4 +++
5 files changed, 69 insertions(+), 98 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index f3e426b..4537fb4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -47,7 +47,6 @@ noinst_HEADERS = \
itdb_endianness.h \
itdb_plist.h \
itdb_private.h \
- itdb_hash58.h \
itdb_sqlite_queries.h \
itdb_sysinfo_extended_parser.h \
itdb_thumb.h \
diff --git a/src/itdb_device.c b/src/itdb_device.c
index 86ad2ca..66eaf3b 100644
--- a/src/itdb_device.c
+++ b/src/itdb_device.c
@@ -34,7 +34,6 @@
#include "db-itunes-parser.h"
#include "itdb_device.h"
#include "itdb_private.h"
-#include "itdb_hash58.h"
#include <ctype.h>
#include <fcntl.h>
#include <stdio.h>
@@ -1782,58 +1781,6 @@ ItdbChecksumType itdb_device_get_checksum_type (const
Itdb_Device *device)
return ITDB_CHECKSUM_NONE;
}
-static gboolean itdb_device_write_hash58 (Itdb_Device *device,
- unsigned char *itdb_data,
- gsize itdb_len,
- GError **error)
-{
- guint64 fwid;
- guchar backup18[8];
- guchar backup32[20];
- unsigned char *checksum;
- gsize len;
- MhbdHeader *header;
-
- g_assert (itdb_device_get_checksum_type (device) == ITDB_CHECKSUM_HASH58);
-
- fwid = itdb_device_get_firewire_id (device);
- if (fwid == 0) {
- g_set_error (error, 0, -1, "Couldn't find the iPod firewire ID");
- return FALSE;
- }
-
- if (itdb_len < 0x6c) {
- g_set_error (error, 0, -1, "iTunesDB file too small to write checksum");
- return FALSE;
- }
-
- header = (MhbdHeader *)itdb_data;
- g_assert (strncmp (header->header_id, "mhbd", strlen ("mhbd")) == 0);
- memcpy (backup18, &header->db_id, sizeof (backup18));
- memcpy (backup32, &header->unknown6, sizeof (backup32));
-
- /* Those fields must be zero'ed out for the sha1 calculation */
- memset(&header->db_id, 0, sizeof (header->db_id));
- memset(&header->unknown6, 0, sizeof (header->unknown6));
- memset(&header->hash58, 0, sizeof (header->hash58));
-
- header->hashing_scheme = GUINT16_FROM_LE (ITDB_CHECKSUM_HASH58);
-
- checksum = itdb_compute_hash (fwid, itdb_data, itdb_len, &len);
- if (checksum == NULL) {
- g_set_error (error, 0, -1, "Failed to compute checksum");
- return FALSE;
- }
- g_assert (len <= sizeof (header->hash58));
- memcpy (&header->hash58, checksum, len);
- g_free (checksum);
-
- memcpy (&header->db_id, backup18, sizeof (backup18));
- memcpy (&header->unknown6, backup32, sizeof (backup32));
-
- return TRUE;
-}
-
G_GNUC_INTERNAL gboolean itdb_device_write_checksum (Itdb_Device *device,
unsigned char *itdb_data,
gsize itdb_len,
@@ -1843,7 +1790,7 @@ G_GNUC_INTERNAL gboolean itdb_device_write_checksum
(Itdb_Device *device,
case ITDB_CHECKSUM_NONE:
return TRUE;
case ITDB_CHECKSUM_HASH58:
- return itdb_device_write_hash58 (device, itdb_data, itdb_len,
error);
+ return itdb_hash58_write_hash (device, itdb_data, itdb_len, error);
case ITDB_CHECKSUM_HASH72:
return itdb_hash72_write_hash (device, itdb_data, itdb_len, error);
case ITDB_CHECKSUM_UNKNOWN:
diff --git a/src/itdb_hash58.c b/src/itdb_hash58.c
index 88a1235..43c975b 100644
--- a/src/itdb_hash58.c
+++ b/src/itdb_hash58.c
@@ -33,9 +33,14 @@
|
| This product is not supported/written/published by Apple!
*/
-
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <glib.h>
-#include "itdb_hash58.h"
+#include <string.h>
+#include "itdb.h"
+#include "db-itunes-parser.h"
+#include "itdb_private.h"
#include "sha1.h"
static const unsigned char table1[256] = {
@@ -169,10 +174,10 @@ static unsigned char *generate_key (guint64 fwid)
return key;
}
-unsigned char *itdb_compute_hash (guint64 firewire_id,
- const unsigned char *itdb,
- unsigned long size,
- gsize *len)
+static unsigned char *itdb_compute_hash (guint64 firewire_id,
+ const unsigned char *itdb,
+ unsigned long size,
+ gsize *len)
{
unsigned char *key;
unsigned char *hash;
@@ -211,3 +216,56 @@ unsigned char *itdb_compute_hash (guint64 firewire_id,
return hash;
}
+
+gboolean itdb_hash58_write_hash (Itdb_Device *device,
+ unsigned char *itdb_data,
+ gsize itdb_len,
+ GError **error)
+{
+ guint64 fwid;
+ guchar backup18[8];
+ guchar backup32[20];
+ unsigned char *checksum;
+ gsize len;
+ MhbdHeader *header;
+
+ g_assert (itdb_device_get_checksum_type (device) == ITDB_CHECKSUM_HASH58);
+
+ fwid = itdb_device_get_firewire_id (device);
+ if (fwid == 0) {
+ g_set_error (error, 0, -1, "Couldn't find the iPod firewire ID");
+ return FALSE;
+ }
+
+ if (itdb_len < 0x6c) {
+ g_set_error (error, 0, -1, "iTunesDB file too small to write checksum");
+ return FALSE;
+ }
+
+ header = (MhbdHeader *)itdb_data;
+ g_assert (strncmp (header->header_id, "mhbd", strlen ("mhbd")) == 0);
+ memcpy (backup18, &header->db_id, sizeof (backup18));
+ memcpy (backup32, &header->unknown6, sizeof (backup32));
+
+ /* Those fields must be zero'ed out for the sha1 calculation */
+ memset(&header->db_id, 0, sizeof (header->db_id));
+ memset(&header->unknown6, 0, sizeof (header->unknown6));
+ memset(&header->hash58, 0, sizeof (header->hash58));
+
+ header->hashing_scheme = GUINT16_FROM_LE (ITDB_CHECKSUM_HASH58);
+
+ checksum = itdb_compute_hash (fwid, itdb_data, itdb_len, &len);
+ if (checksum == NULL) {
+ g_set_error (error, 0, -1, "Failed to compute checksum");
+ return FALSE;
+ }
+ g_assert (len <= sizeof (header->hash58));
+ memcpy (&header->hash58, checksum, len);
+ g_free (checksum);
+
+ memcpy (&header->db_id, backup18, sizeof (backup18));
+ memcpy (&header->unknown6, backup32, sizeof (backup32));
+
+ return TRUE;
+}
+
diff --git a/src/itdb_private.h b/src/itdb_private.h
index 8793bf8..ee1f229 100644
--- a/src/itdb_private.h
+++ b/src/itdb_private.h
@@ -207,6 +207,10 @@ G_GNUC_INTERNAL gboolean itdb_hash72_write_hash (const
Itdb_Device *device,
unsigned char *itdb_data,
gsize itdb_len,
GError **error);
+G_GNUC_INTERNAL gboolean itdb_hash58_write_hash (Itdb_Device *device,
+ unsigned char *itdb_data,
+ gsize itdb_len,
+ GError **error);
G_GNUC_INTERNAL gboolean itdb_hash72_compute_hash_for_sha1 (const Itdb_Device
*device,
const guchar
sha1[20],
guchar
signature[46]);
------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2