summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt/irivertools
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2008-09-28 17:02:36 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2008-09-28 17:02:36 +0000
commit197c24c5d331703b8b1d743f5699263cd623df38 (patch)
tree9c054f54f43b0c788b0760adf08595fe48643afb /rbutil/rbutilqt/irivertools
parent063d37b08f6110a250c1f1a70883c4c45705f7b8 (diff)
downloadrockbox-197c24c5d331703b8b1d743f5699263cd623df38.tar.gz
rockbox-197c24c5d331703b8b1d743f5699263cd623df38.tar.bz2
rockbox-197c24c5d331703b8b1d743f5699263cd623df38.zip
Completely rework the bootloader installation class:
- create a base class and make derived classes for each installation type. - sort installations by type, not by player model. - remove duplicated code for iriver (de)scrambling functionality and use the functions inside of the tools folder directly -- we already do the same for rbspeex. - make bootloader file backup optional and allow choosing a target location. - clean up some wording and add some more guiding messages. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18657 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/irivertools')
-rw-r--r--rbutil/rbutilqt/irivertools/checksums.h41
-rw-r--r--rbutil/rbutilqt/irivertools/irivertools.cpp527
-rw-r--r--rbutil/rbutilqt/irivertools/irivertools.h55
-rw-r--r--rbutil/rbutilqt/irivertools/md5sum.cpp295
-rw-r--r--rbutil/rbutilqt/irivertools/md5sum.h52
5 files changed, 0 insertions, 970 deletions
diff --git a/rbutil/rbutilqt/irivertools/checksums.h b/rbutil/rbutilqt/irivertools/checksums.h
deleted file mode 100644
index 6b66455f1f..0000000000
--- a/rbutil/rbutilqt/irivertools/checksums.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * Module: rbutil
- * File: irivertools.h
- *
- * Copyright (C) 2007 Dominik Wenger
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-#ifndef CHECKSUMS_H
-#define CHECKSUMS_H
-
-/* precalculated checksums for H110/H115 */
-static struct sumpairs h100pairs[] = {
-#include "h100sums.h"
-};
-
-/* precalculated checksums for H120/H140 */
-static struct sumpairs h120pairs[] = {
-#include "h120sums.h"
-};
-
-/* precalculated checksums for H320/H340 */
-static struct sumpairs h300pairs[] = {
-#include "h300sums.h"
-};
-
-#endif
diff --git a/rbutil/rbutilqt/irivertools/irivertools.cpp b/rbutil/rbutilqt/irivertools/irivertools.cpp
deleted file mode 100644
index 2bcd9ffb80..0000000000
--- a/rbutil/rbutilqt/irivertools/irivertools.cpp
+++ /dev/null
@@ -1,527 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * Module: rbutil
- * File: irivertools.cpp
- *
- * Copyright (C) 2007 Dominik Wenger
- *
- * All files in this archive are subject to the GNU General Public License.
- * See the file COPYING in the source tree root for full license agreement.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-#include <QtCore>
-#include "irivertools.h"
-
-const unsigned char munge[] = {
- 0x7a, 0x36, 0xc4, 0x43, 0x49, 0x6b, 0x35, 0x4e, 0xa3, 0x46, 0x25, 0x84,
- 0x4d, 0x73, 0x74, 0x61
-};
-
-const unsigned char header_modify[] = "* IHPFIRM-DECODED ";
-
-const char * const models[] = { "iHP-100", "iHP-120/iHP-140", "H300 series",
- NULL };
-
-/* aligns with models array; expected min firmware size */
-const unsigned int firmware_minsize[] = { 0x100000, 0x100000, 0x200000 };
-/* aligns with models array; expected max firmware size */
-const unsigned int firmware_maxsize[] = { 0x200000, 0x200000, 0x400000 };
-
-const unsigned char header[][16] = {
- { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
- { 0x20, 0x03, 0x08, 0x27, 0x24, 0x00, 0x02, 0x30, 0x19, 0x17, 0x65, 0x73,
- 0x85, 0x32, 0x83, 0x22 },
- { 0x20, 0x04, 0x03, 0x27, 0x20, 0x50, 0x01, 0x70, 0x80, 0x30, 0x80, 0x06,
- 0x30, 0x19, 0x17, 0x65 }
-};
-
-/* begin mkboot.c excerpt */
-unsigned char image[0x400000 + 0x220 + 0x400000/0x200];
-
-int mkboot(QString infile, QString outfile, QString bootloader, int origin)
-{
- int i;
- int len,bllen;
- int actual_length, total_length, binary_length, num_chksums;
-
- memset(image, 0xff, sizeof(image));
-
- /* First, read the iriver original firmware into the image */
- QFile f(infile);
- if(!f.open(QIODevice::ReadOnly))
- {
- // can't open input file
- return -1;
- }
- i = f.read((char*)image,16);
- if(i < 16) {
- // reading header failed
- return -2;
- }
-
- /* This is the length of the binary image without the scrambling
- overhead (but including the ESTFBINR header) */
- binary_length = image[4] + (image[5] << 8) +
- (image[6] << 16) + (image[7] << 24);
-
- /* Read the rest of the binary data, but not the checksum block */
- len = binary_length+0x200-16;
- i = f.read((char*)image+16, len);
- if(i < len) {
- // reading firmware failed
- return -3;
- }
-
- f.close();
- /* Now, read the boot loader into the image */
- f.setFileName(bootloader);
- if(!f.open(QIODevice::ReadOnly))
- {
- // can't open bootloader file
- return -4;
- }
-
- bllen = f.size();
-
- i = f.read((char*)image+0x220 + origin, bllen);
- if(i < bllen) {
- // reading bootloader file failed
- return -5;
- }
-
- f.close();
- f.setFileName(outfile);
- if(!f.open(QIODevice::WriteOnly))
- {
- // can't open output file
- return -6;
- }
-
- /* Patch the reset vector to start the boot loader */
- image[0x220 + 4] = image[origin + 0x220 + 4];
- image[0x220 + 5] = image[origin + 0x220 + 5];
- image[0x220 + 6] = image[origin + 0x220 + 6];
- image[0x220 + 7] = image[origin + 0x220 + 7];
-
- /* This is the actual length of the binary, excluding all headers */
- actual_length = origin + bllen;
-
- /* Patch the ESTFBINR header */
- image[0x20c] = (actual_length >> 24) & 0xff;
- image[0x20d] = (actual_length >> 16) & 0xff;
- image[0x20e] = (actual_length >> 8) & 0xff;
- image[0x20f] = actual_length & 0xff;
-
- image[0x21c] = (actual_length >> 24) & 0xff;
- image[0x21d] = (actual_length >> 16) & 0xff;
- image[0x21e] = (actual_length >> 8) & 0xff;
- image[0x21f] = actual_length & 0xff;
-
- /* This is the length of the binary, including the ESTFBINR header and
- rounded up to the nearest 0x200 boundary */
- binary_length = (actual_length + 0x20 + 0x1ff) & 0xfffffe00;
-
- /* The number of checksums, i.e number of 0x200 byte blocks */
- num_chksums = binary_length / 0x200;
-
- /* The total file length, including all headers and checksums */
- total_length = binary_length + num_chksums + 0x200;
-
- /* Patch the scrambler header with the new length info */
- image[0] = total_length & 0xff;
- image[1] = (total_length >> 8) & 0xff;
- image[2] = (total_length >> 16) & 0xff;
- image[3] = (total_length >> 24) & 0xff;
-
- image[4] = binary_length & 0xff;
- image[5] = (binary_length >> 8) & 0xff;
- image[6] = (binary_length >> 16) & 0xff;
- image[7] = (binary_length >> 24) & 0xff;
-
- image[8] = num_chksums & 0xff;
- image[9] = (num_chksums >> 8) & 0xff;
- image[10] = (num_chksums >> 16) & 0xff;
- image[11] = (num_chksums >> 24) & 0xff;
-
- i = f.write((char*)image,total_length);
- if(i < total_length) {
- // writing bootloader file failed
- return -7;
- }
-
- f.close();
-
- return 0;
-}
-
-/* end mkboot.c excerpt */
-
-
-int intable(char *md5, struct sumpairs *table, int len)
-{
- int i;
- for (i = 0; i < len; i++) {
- if (strncmp(md5, table[i].unpatched, 32) == 0) {
- return i;
- }
- }
- return -1;
-}
-
-
-
-
-static int testheader( const unsigned char * const data )
-{
- const unsigned char * const d = data+16;
- const char * const * m = models;
- int index = 0;
- while( *m )
- {
- if( memcmp( header[ index ], d, 16 ) == 0 )
- return index;
- index++;
- m++;
- };
- return -1;
-};
-
-static void modifyheader( unsigned char * data )
-{
- const unsigned char * h = header_modify;
- int i;
- for( i=0; i<512; i++ )
- {
- if( *h == '\0' )
- h = header_modify;
- *data++ ^= *h++;
- };
-};
-
-int iriver_decode(QString infile_name, QString outfile_name, unsigned int modify,
- enum striptype stripmode)
-{
- QFile infile(infile_name);
- QFile outfile(outfile_name);
- int i = -1;
- unsigned char headerdata[512];
- unsigned long dwLength1, dwLength2, dwLength3, fp = 0;
- unsigned char blockdata[16+16];
- unsigned char out[16];
- unsigned char newmunge;
- signed long lenread;
- int s = 0;
- unsigned char * pChecksums, * ppChecksums = 0;
- unsigned char ck;
-
-
- if(!infile.open(QIODevice::ReadOnly))
- {
- // can't open input file
- return -1;
- }
- if(!outfile.open(QIODevice::WriteOnly))
- {
- // can't open output file
- return -2;
- }
- lenread = infile.read( (char*)headerdata, 512);
- if( lenread != 512 )
- {
- // header length doesn't match
- infile.close();
- outfile.close();
- return -3;
- };
-
- i = testheader( headerdata );
- if( i == -1 )
- {
- // header unknown
- infile.close();
- outfile.close();
- return -4;
- };
- fprintf( stderr, "Model %s\n", models[ i ] );
-
- dwLength1 = headerdata[0] | (headerdata[1]<<8) |
- (headerdata[2]<<16) | (headerdata[3]<<24);
- dwLength2 = headerdata[4] | (headerdata[5]<<8) |
- (headerdata[6]<<16) | (headerdata[7]<<24);
- dwLength3 = headerdata[8] | (headerdata[9]<<8) |
- (headerdata[10]<<16) | (headerdata[11]<<24);
-
- if( dwLength1 < firmware_minsize[ i ] ||
- dwLength1 > firmware_maxsize[ i ] ||
- dwLength2 < firmware_minsize[ i ] ||
- dwLength2 > dwLength1 ||
- dwLength3 > dwLength1 ||
- dwLength2>>9 != dwLength3 ||
- dwLength2+dwLength3+512 != dwLength1 )
- {
- // file 'length' data is wrong
- infile.close();
- outfile.close();
- return -5;
- };
-
- pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) );
-
- if( modify )
- {
- modifyheader( headerdata );
- };
-
- if( stripmode == STRIP_NONE )
- outfile.write( (char*)headerdata, 512);
-
- memset( blockdata, 0, 16 );
-
- ck = 0;
- while( ( fp < dwLength2 ) &&
- ( lenread = infile.read( (char*)blockdata+16, 16) == 16) )
- {
- fp += 16;
-
- for( i=0; i<16; ++i )
- {
- newmunge = blockdata[16+i] ^ munge[i];
- out[i] = newmunge ^ blockdata[i];
- blockdata[i] = newmunge;
- ck += out[i];
- }
-
- if( fp > ESTF_SIZE || stripmode != STRIP_HEADER_CHECKSUM_ESTF )
- {
- outfile.write( (char*)out+4, 12);
- outfile.write( (char*)out, 4);
- }
- else
- {
- if( ESTF_SIZE - fp < 16 )
- {
- memcpy( out+4, blockdata+16, 12 );
- memcpy( out, blockdata+28, 4 );
- outfile.write((char*) blockdata+16+ESTF_SIZE-fp, ESTF_SIZE-fp);
- }
- }
-
-
- if( s == 496 )
- {
- s = 0;
- memset( blockdata, 0, 16 );
- *ppChecksums++ = ck;
- ck = 0;
- }
- else
- s+=16;
- };
-
- if( fp != dwLength2 )
- {
- // 'length2' field mismatch
- infile.close();
- outfile.close();
- return -6;
- };
-
- fp = 0;
- ppChecksums = pChecksums;
- while( ( fp < dwLength3 ) &&
- ( lenread = infile.read((char*) blockdata, 32 ) ) > 0 )
- {
- fp += lenread;
- if( stripmode == STRIP_NONE )
- outfile.write((char*) blockdata, lenread );
- if( memcmp( ppChecksums, blockdata, lenread ) != 0 )
- {
- // file checksum wrong
- infile.close();
- outfile.close();
- return -7;
- };
- ppChecksums += lenread;
- };
-
- if( fp != dwLength3 )
- {
- // 'length3' field mismatch
- infile.close();
- outfile.close();
- return -8;
- };
-
-
- fprintf( stderr, "File decoded correctly and all checksums matched!\n" );
- switch( stripmode )
- {
- default:
- case STRIP_NONE:
- fprintf(stderr, "Output file contains all headers and "
- "checksums\n");
- break;
- case STRIP_HEADER_CHECKSUM:
- fprintf( stderr, "NB: output file contains only ESTFBINR header"
- " and decoded firmware code\n" );
- break;
- case STRIP_HEADER_CHECKSUM_ESTF:
- fprintf( stderr, "NB: output file contains only raw decoded "
- "firmware code\n" );
- break;
- };
-
- infile.close();
- outfile.close();
- return 0;
-
-};
-
-int iriver_encode(QString infile_name, QString outfile_name, unsigned int modify)
-{
- QFile infile(infile_name);
- QFile outfile(outfile_name);
- int i = -1;
- unsigned char headerdata[512];
- unsigned long dwLength1, dwLength2, dwLength3, fp = 0;
- unsigned char blockdata[16+16];
- unsigned char out[16];
- unsigned char newmunge;
- signed long lenread;
- int s = 0;
- unsigned char * pChecksums, * ppChecksums;
- unsigned char ck;
-
- if(!infile.open(QIODevice::ReadOnly))
- {
- // can't open input file
- return -1;
- }
- if(!outfile.open(QIODevice::WriteOnly))
- {
- // can't open output file
- infile.close();
- return -2;
- }
-
- lenread = infile.read((char*) headerdata, 512 );
- if( lenread != 512 )
- {
- // header length error
- infile.close();
- outfile.close();
- return -3;
- };
-
- if( modify )
- {
- modifyheader( headerdata ); /* reversible */
- };
-
- i = testheader( headerdata );
- if( i == -1 )
- {
- // header verification error
- infile.close();
- outfile.close();
- return -4;
- };
- fprintf( stderr, "Model %s\n", models[ i ] );
-
- dwLength1 = headerdata[0] | (headerdata[1]<<8) |
- (headerdata[2]<<16) | (headerdata[3]<<24);
- dwLength2 = headerdata[4] | (headerdata[5]<<8) |
- (headerdata[6]<<16) | (headerdata[7]<<24);
- dwLength3 = headerdata[8] | (headerdata[9]<<8) |
- (headerdata[10]<<16) | (headerdata[11]<<24);
-
- if( dwLength1 < firmware_minsize[i] ||
- dwLength1 > firmware_maxsize[i] ||
- dwLength2 < firmware_minsize[i] ||
- dwLength2 > dwLength1 ||
- dwLength3 > dwLength1 ||
- dwLength2+dwLength3+512 != dwLength1 )
- {
- // file 'length' error
- infile.close();
- outfile.close();
- return -5;
- };
-
- pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) );
-
- outfile.write( (char*)headerdata, 512);
-
- memset( blockdata, 0, 16 );
- ck = 0;
- while( ( fp < dwLength2 ) &&
- ( lenread = infile.read((char*) blockdata+16, 16) ) == 16 )
- {
- fp += 16;
- for( i=0; i<16; ++i )
- {
- newmunge = blockdata[16+((12+i)&0xf)] ^ blockdata[i];
- out[i] = newmunge ^ munge[i];
- ck += blockdata[16+i];
- blockdata[i] = newmunge;
- };
- outfile.write( (char*)out, 16);
-
- if( s == 496 )
- {
- s = 0;
- memset( blockdata, 0, 16 );
- *ppChecksums++ = ck;
- ck = 0;
- }
- else
- s+=16;
- };
-
- if( fp != dwLength2 )
- {
- // file 'length1' mismatch
- infile.close();
- outfile.close();
- return -6;
- };
-
- /* write out remainder w/out applying descrambler */
- fp = 0;
- lenread = dwLength3;
- ppChecksums = pChecksums;
- while( ( fp < dwLength3) &&
- ( lenread = outfile.write((char*) ppChecksums, lenread) ) > 0 )
- {
- fp += lenread;
- ppChecksums += lenread;
- lenread = dwLength3 - fp;
- };
-
- if( fp != dwLength3 )
- {
- // 'length2' field mismatch
- infile.close();
- outfile.close();
- return -8;
- };
-
- fprintf( stderr, "File encoded successfully and checksum table built!\n" );
-
- infile.close();
- outfile.close();
- return 0;
-
-};
-
-
-
diff --git a/rbutil/rbutilqt/irivertools/irivertools.h b/rbutil/rbutilqt/irivertools/irivertools.h
deleted file mode 100644
index 6d61300d79..0000000000
--- a/rbutil/rbutilqt/irivertools/irivertools.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * Module: rbutil
- * File: irivertools.h
- *
- * Copyright (C) 2007 Dominik Wenger
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-
-#ifndef IRIVERTOOLS_H_INCLUDED
-#define IRIVERTOOLS_H_INCLUDED
-
-#include <QtCore>
-
-#include "md5sum.h"
-
-#define ESTF_SIZE 32
-
-struct sumpairs {
- const char *unpatched;
- const char *patched;
-};
-
-
-enum striptype
-{
- STRIP_NONE,
- STRIP_HEADER_CHECKSUM,
- STRIP_HEADER_CHECKSUM_ESTF
-};
-
-/* protos for iriver.c */
-
-int intable(char *md5, struct sumpairs *table, int len);
-
-int mkboot(QString infile, QString outfile,QString bootloader,int origin);
-int iriver_decode(QString infile_name, QString outfile_name, unsigned int modify,
- enum striptype stripmode);
-int iriver_encode(QString infile_name, QString outfile_name, unsigned int modify);
-
-#endif // IRIVERTOOLS_H_INCLUDED
diff --git a/rbutil/rbutilqt/irivertools/md5sum.cpp b/rbutil/rbutilqt/irivertools/md5sum.cpp
deleted file mode 100644
index f4d25e67ef..0000000000
--- a/rbutil/rbutilqt/irivertools/md5sum.cpp
+++ /dev/null
@@ -1,295 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * Module: rbutil
- * File: md5sum.cpp
- *
- * Copyright (C) 2007 Dominik Wenger
- *
- * All files in this archive are subject to the GNU General Public License.
- * See the file COPYING in the source tree root for full license agreement.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-
-/*
- * RFC 1321 compliant MD5 implementation
- *
- * Copyright (C) 2001-2003 Christophe Devine
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include "md5sum.h"
-
-
-#define GET_UINT32(n,b,i) \
-{ \
- (n) = ( (uint32) (b)[(i) ] ) \
- | ( (uint32) (b)[(i) + 1] << 8 ) \
- | ( (uint32) (b)[(i) + 2] << 16 ) \
- | ( (uint32) (b)[(i) + 3] << 24 ); \
-}
-
-#define PUT_UINT32(n,b,i) \
-{ \
- (b)[(i) ] = (uint8) ( (n) ); \
- (b)[(i) + 1] = (uint8) ( (n) >> 8 ); \
- (b)[(i) + 2] = (uint8) ( (n) >> 16 ); \
- (b)[(i) + 3] = (uint8) ( (n) >> 24 ); \
-}
-
-void md5_starts( md5_context *ctx )
-{
- ctx->total[0] = 0;
- ctx->total[1] = 0;
-
- ctx->state[0] = 0x67452301;
- ctx->state[1] = 0xEFCDAB89;
- ctx->state[2] = 0x98BADCFE;
- ctx->state[3] = 0x10325476;
-}
-
-void md5_process( md5_context *ctx, uint8 data[64] )
-{
- uint32 X[16], A, B, C, D;
-
- GET_UINT32( X[0], data, 0 );
- GET_UINT32( X[1], data, 4 );
- GET_UINT32( X[2], data, 8 );
- GET_UINT32( X[3], data, 12 );
- GET_UINT32( X[4], data, 16 );
- GET_UINT32( X[5], data, 20 );
- GET_UINT32( X[6], data, 24 );
- GET_UINT32( X[7], data, 28 );
- GET_UINT32( X[8], data, 32 );
- GET_UINT32( X[9], data, 36 );
- GET_UINT32( X[10], data, 40 );
- GET_UINT32( X[11], data, 44 );
- GET_UINT32( X[12], data, 48 );
- GET_UINT32( X[13], data, 52 );
- GET_UINT32( X[14], data, 56 );
- GET_UINT32( X[15], data, 60 );
-
-#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
-
-#define P(a,b,c,d,k,s,t) \
-{ \
- a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
-}
-
- A = ctx->state[0];
- B = ctx->state[1];
- C = ctx->state[2];
- D = ctx->state[3];
-
-#define F(x,y,z) (z ^ (x & (y ^ z)))
-
- P( A, B, C, D, 0, 7, 0xD76AA478 );
- P( D, A, B, C, 1, 12, 0xE8C7B756 );
- P( C, D, A, B, 2, 17, 0x242070DB );
- P( B, C, D, A, 3, 22, 0xC1BDCEEE );
- P( A, B, C, D, 4, 7, 0xF57C0FAF );
- P( D, A, B, C, 5, 12, 0x4787C62A );
- P( C, D, A, B, 6, 17, 0xA8304613 );
- P( B, C, D, A, 7, 22, 0xFD469501 );
- P( A, B, C, D, 8, 7, 0x698098D8 );
- P( D, A, B, C, 9, 12, 0x8B44F7AF );
- P( C, D, A, B, 10, 17, 0xFFFF5BB1 );
- P( B, C, D, A, 11, 22, 0x895CD7BE );
- P( A, B, C, D, 12, 7, 0x6B901122 );
- P( D, A, B, C, 13, 12, 0xFD987193 );
- P( C, D, A, B, 14, 17, 0xA679438E );
- P( B, C, D, A, 15, 22, 0x49B40821 );
-
-#undef F
-
-#define F(x,y,z) (y ^ (z & (x ^ y)))
-
- P( A, B, C, D, 1, 5, 0xF61E2562 );
- P( D, A, B, C, 6, 9, 0xC040B340 );
- P( C, D, A, B, 11, 14, 0x265E5A51 );
- P( B, C, D, A, 0, 20, 0xE9B6C7AA );
- P( A, B, C, D, 5, 5, 0xD62F105D );
- P( D, A, B, C, 10, 9, 0x02441453 );
- P( C, D, A, B, 15, 14, 0xD8A1E681 );
- P( B, C, D, A, 4, 20, 0xE7D3FBC8 );
- P( A, B, C, D, 9, 5, 0x21E1CDE6 );
- P( D, A, B, C, 14, 9, 0xC33707D6 );
- P( C, D, A, B, 3, 14, 0xF4D50D87 );
- P( B, C, D, A, 8, 20, 0x455A14ED );
- P( A, B, C, D, 13, 5, 0xA9E3E905 );
- P( D, A, B, C, 2, 9, 0xFCEFA3F8 );
- P( C, D, A, B, 7, 14, 0x676F02D9 );
- P( B, C, D, A, 12, 20, 0x8D2A4C8A );
-
-#undef F
-
-#define F(x,y,z) (x ^ y ^ z)
-
- P( A, B, C, D, 5, 4, 0xFFFA3942 );
- P( D, A, B, C, 8, 11, 0x8771F681 );
- P( C, D, A, B, 11, 16, 0x6D9D6122 );
- P( B, C, D, A, 14, 23, 0xFDE5380C );
- P( A, B, C, D, 1, 4, 0xA4BEEA44 );
- P( D, A, B, C, 4, 11, 0x4BDECFA9 );
- P( C, D, A, B, 7, 16, 0xF6BB4B60 );
- P( B, C, D, A, 10, 23, 0xBEBFBC70 );
- P( A, B, C, D, 13, 4, 0x289B7EC6 );
- P( D, A, B, C, 0, 11, 0xEAA127FA );
- P( C, D, A, B, 3, 16, 0xD4EF3085 );
- P( B, C, D, A, 6, 23, 0x04881D05 );
- P( A, B, C, D, 9, 4, 0xD9D4D039 );
- P( D, A, B, C, 12, 11, 0xE6DB99E5 );
- P( C, D, A, B, 15, 16, 0x1FA27CF8 );
- P( B, C, D, A, 2, 23, 0xC4AC5665 );
-
-#undef F
-
-#define F(x,y,z) (y ^ (x | ~z))
-
- P( A, B, C, D, 0, 6, 0xF4292244 );
- P( D, A, B, C, 7, 10, 0x432AFF97 );
- P( C, D, A, B, 14, 15, 0xAB9423A7 );
- P( B, C, D, A, 5, 21, 0xFC93A039 );
- P( A, B, C, D, 12, 6, 0x655B59C3 );
- P( D, A, B, C, 3, 10, 0x8F0CCC92 );
- P( C, D, A, B, 10, 15, 0xFFEFF47D );
- P( B, C, D, A, 1, 21, 0x85845DD1 );
- P( A, B, C, D, 8, 6, 0x6FA87E4F );
- P( D, A, B, C, 15, 10, 0xFE2CE6E0 );
- P( C, D, A, B, 6, 15, 0xA3014314 );
- P( B, C, D, A, 13, 21, 0x4E0811A1 );
- P( A, B, C, D, 4, 6, 0xF7537E82 );
- P( D, A, B, C, 11, 10, 0xBD3AF235 );
- P( C, D, A, B, 2, 15, 0x2AD7D2BB );
- P( B, C, D, A, 9, 21, 0xEB86D391 );
-
-#undef F
-#undef S
-#undef P
-
-
- ctx->state[0] += A;
- ctx->state[1] += B;
- ctx->state[2] += C;
- ctx->state[3] += D;
-}
-
-void md5_update( md5_context *ctx, uint8 *input, uint32 length )
-{
- uint32 left, fill;
-
- if( ! length ) return;
-
- left = ctx->total[0] & 0x3F;
- fill = 64 - left;
-
- ctx->total[0] += length;
- ctx->total[0] &= 0xFFFFFFFF;
-
- if( ctx->total[0] < length )
- ctx->total[1]++;
-
- if( left && length >= fill )
- {
- memcpy( (void *) (ctx->buffer + left),
- (void *) input, fill );
- md5_process( ctx, ctx->buffer );
- length -= fill;
- input += fill;
- left = 0;
- }
-
- while( length >= 64 )
- {
- md5_process( ctx, input );
- length -= 64;
- input += 64;
- }
-
- if( length )
- {
- memcpy( (void *) (ctx->buffer + left),
- (void *) input, length );
- }
-}
-
-static uint8 md5_padding[64] =
-{
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-void md5_finish( md5_context *ctx, uint8 digest[16] )
-{
- uint32 last, padn;
- uint32 high, low;
- uint8 msglen[8];
-
- high = ( ctx->total[0] >> 29 )
- | ( ctx->total[1] << 3 );
- low = ( ctx->total[0] << 3 );
-
- PUT_UINT32( low, msglen, 0 );
- PUT_UINT32( high, msglen, 4 );
-
- last = ctx->total[0] & 0x3F;
- padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
-
- md5_update( ctx, md5_padding, padn );
- md5_update( ctx, msglen, 8 );
-
- PUT_UINT32( ctx->state[0], digest, 0 );
- PUT_UINT32( ctx->state[1], digest, 4 );
- PUT_UINT32( ctx->state[2], digest, 8 );
- PUT_UINT32( ctx->state[3], digest, 12 );
-}
-
-int FileMD5(QString name, char *md5)
-{
- int i, read;
- md5_context ctx;
- unsigned char md5sum[16];
- unsigned char block[32768];
-
- QFile file(name);
-
- if (!file.open(QIODevice::ReadOnly)) {
- return 0;
- }
- md5_starts(&ctx);
- while ( !file.atEnd() ) {
- read = file.read((char*)block, sizeof(block));
- md5_update(&ctx, block, read);
- }
- file.close();
- md5_finish(&ctx, md5sum);
- for (i = 0; i < 16; ++i)
- {
- sprintf(md5 + 2*i, "%02x", md5sum[i]);
- }
- return 1;
-}
diff --git a/rbutil/rbutilqt/irivertools/md5sum.h b/rbutil/rbutilqt/irivertools/md5sum.h
deleted file mode 100644
index 45cc734034..0000000000
--- a/rbutil/rbutilqt/irivertools/md5sum.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * Module: rbutil
- * File: md5sum.h
- *
- * Copyright (C) 2007 Dominik Wenger
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-
-#ifndef MD5SUM_H_INCLUDED
-#define MD5SUM_H_INCLUDED
-
-#ifndef uint8
-#define uint8 unsigned char
-#endif
-
-
-#ifndef uint32
-#define uint32 unsigned long int
-#endif
-
-#include <QtCore>
-
-typedef struct
-{
- uint32 total[2];
- uint32 state[4];
- uint8 buffer[64];
-}
-md5_context;
-
-void md5_starts( md5_context *ctx );
-void md5_update( md5_context *ctx, uint8 *input, uint32 length );
-void md5_finish( md5_context *ctx, uint8 digest[16] );
-
-int FileMD5(QString name, char *md5);
-
-#endif // MD5SUM_H_INCLUDED