A new user interface for you! Read more...

File 0009-Fix-Ampache-plugin-connections.patch of Package amarok

From a3531714612cb88c4d6da479e65f1823d7b467ef Mon Sep 17 00:00:00 2001
From: Luca Beltrame <lbeltrame@kde.org>
Date: Sat, 10 Jan 2015 10:03:15 +0100
Subject: [PATCH] Use QCA to generate hashes for the Ampache login process

The sha256() function provided to generate hashes for Ampache is
incorrect (generates wrong hashes), and thus will not generate a proper
passphrase for Ampache versions greater than 35, which will fail with an
"incorrect password" message.

The solution is to use the hash functions provided by QCA, which work
correctly. However this adds a (conditional and optional) dependency to
QCA to build the Ampache plugin.
---
 src/services/CMakeLists.txt                  |   4 +-
 src/services/ampache/AmpacheAccountLogin.cpp |  49 ++--
 src/services/ampache/CMakeLists.txt          |   5 +-
 src/services/ampache/sha256/sha256.cpp       | 406 ---------------------------
 src/services/ampache/sha256/sha256.h         |  49 ----
 5 files changed, 28 insertions(+), 485 deletions(-)
 delete mode 100644 src/services/ampache/sha256/sha256.cpp
 delete mode 100644 src/services/ampache/sha256/sha256.h

diff --git a/src/services/CMakeLists.txt b/src/services/CMakeLists.txt
index 83ccdfb..25c6564 100644
--- a/src/services/CMakeLists.txt
+++ b/src/services/CMakeLists.txt
@@ -8,7 +8,9 @@ add_subdirectory( amazon )
 add_subdirectory( magnatune )
 add_subdirectory( jamendo )
 add_subdirectory( mp3tunes )
-add_subdirectory( ampache )
+if (QCA2_FOUND)
+    add_subdirectory( ampache )
+endif (QCA2_FOUND)
 if (LIBMYGPO_QT_FOUND )
     add_subdirectory( gpodder )
 endif( LIBMYGPO_QT_FOUND )
diff --git a/src/services/ampache/AmpacheAccountLogin.cpp b/src/services/ampache/AmpacheAccountLogin.cpp
index 26aebed..f854dcc 100644
--- a/src/services/ampache/AmpacheAccountLogin.cpp
+++ b/src/services/ampache/AmpacheAccountLogin.cpp
@@ -21,39 +21,17 @@
 
 #include "AmpacheAccountLogin.h"
 
-#include "sha256/sha256.h"
-
 #include "core/support/Amarok.h"
 #include "core/support/Components.h"
 #include "core/support/Debug.h"
 
 #include <QDomDocument>
 #include <QNetworkRequest>
+#include <QtCrypto>
 
 #include <KLocale>
 #include <KPasswordDialog>
 #include <KMessageBox>
-#include <KMD5>
-
-QString sha256( QString in )
-{
-    unsigned char digest[ SHA512_DIGEST_SIZE];
-    unsigned char* toHash = (unsigned char*)in.toUtf8().data();
-    
-    sha256( toHash , qstrlen( ( char* )toHash ), digest );
-    
-    // this part copied from main() in sha256.cpp
-    unsigned char output[2 * SHA512_DIGEST_SIZE + 1];
-    int i;
-    
-    output[2 * SHA256_DIGEST_SIZE ] = '\0';
-    
-    for (i = 0; i < SHA256_DIGEST_SIZE ; i++) {
-        sprintf((char *) output + 2*i, "%02x", digest[i]);
-    }
-    
-    return QString::fromAscii( (const char*)output );
-}
 
 
 AmpacheAccountLogin::AmpacheAccountLogin( const QString& url, const QString& username, const QString& password, QWidget* parent )
@@ -66,6 +44,7 @@ AmpacheAccountLogin::AmpacheAccountLogin( const QString& url, const QString& use
     , m_lastRequest( 0 )
 {
     reauthenticate();
+
 }
 
 
@@ -97,6 +76,8 @@ AmpacheAccountLogin::authenticate( const KUrl &requestUrl, QByteArray data, Netw
     if( !m_lastRequest )
         return;
 
+    QCA::Initializer init;
+
     DEBUG_BLOCK
     Q_UNUSED( requestUrl );
 
@@ -117,19 +98,33 @@ AmpacheAccountLogin::authenticate( const KUrl &requestUrl, QByteArray data, Netw
     // We need to use different authentication strings depending on the version of ampache
     if( version > 350000 )
     {
+
+
+
         debug() << "New Password Scheme " << version;
         url.addQueryItem( "version", "350001" );
 
-        QString rawHandshake = timestamp + sha256( m_password );
-        passPhrase = sha256( rawHandshake );
+        QCA::Hash sha256Hash( "sha256" );
+        sha256Hash.update( m_password.toUtf8() );
+        QString hashedPassword = QCA::arrayToHex( sha256Hash.final().toByteArray() );
+
+        QString rawHandshake = timestamp + hashedPassword;
+        sha256Hash.clear();
+        sha256Hash.update( rawHandshake.toUtf8() );
+
+        passPhrase = QCA::arrayToHex( sha256Hash.final().toByteArray() );
+
+//         passPhrase = sha256( rawHandshake );
     }
     else
     {
         debug() << "Version Older than 35001 Generated MD5 Auth " << version;
 
         QString rawHandshake = timestamp + m_password;
-        KMD5 context( rawHandshake.toUtf8() );
-        passPhrase = context.hexDigest().data();
+        QCA::Hash md5Hash( "md5" );
+
+        md5Hash.update( rawHandshake.toUtf8() );
+        passPhrase = QCA::arrayToHex( md5Hash.final().toByteArray() );
     }
 
     url.addQueryItem( "timestamp", timestamp );
diff --git a/src/services/ampache/CMakeLists.txt b/src/services/ampache/CMakeLists.txt
index dd298e8..b0fd9c7 100644
--- a/src/services/ampache/CMakeLists.txt
+++ b/src/services/ampache/CMakeLists.txt
@@ -6,6 +6,7 @@
             ${Amarok_SOURCE_DIR}/src/statusbar
             ${CMAKE_CURRENT_BINARY_DIR}/../../..
             ${KDE4_INCLUDE_DIR}
+            ${QCA2_INCLUDE_DIR}
             ${QT_INCLUDES}
             )
 
@@ -20,8 +21,7 @@ add_subdirectory( images )
 ########### next target ###############
 
 set(libampache_account_login_SRCS
-    AmpacheAccountLogin.cpp
-    sha256/sha256.cpp)
+    AmpacheAccountLogin.cpp)
 kde4_add_library(ampache_account_login SHARED ${libampache_account_login_SRCS})
 target_link_libraries(ampache_account_login
     amaroklib
@@ -29,6 +29,7 @@ target_link_libraries(ampache_account_login
     ${KDE4_KDECORE_LIBS}
     ${KDE4_KDEUI_LIBS}
     ${KDE4_KIO_LIBS}
+    ${QCA2_LIBRARIES}
 )
 install(TARGETS ampache_account_login DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS})
 
diff --git a/src/services/ampache/sha256/sha256.cpp b/src/services/ampache/sha256/sha256.cpp
deleted file mode 100644
index 01b3764..0000000
--- a/src/services/ampache/sha256/sha256.cpp
+++ /dev/null
@@ -1,406 +0,0 @@
-/****************************************************************************************
- * Copyright (c) 2005 Olivier Gay <olivier.gay@a3.epfl.ch>                              *
- * Copyright (c) 2009 Leo Franchi <lfranchi@kde.org>                                    *
- *                                                                                      *
- * 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, see <http://www.gnu.org/licenses/>.                           *
- ****************************************************************************************/
-
-#if 0
-#define UNROLL_LOOPS /* Enable loops unrolling */
-#endif
-
-#include "sha256.h"
-
-#include <string.h>
-
-
-#define SHFR(x, n)    (x >> n)
-#define ROTR(x, n)   ((x >> n) | (x << ((sizeof(x) << 3) - n)))
-#define ROTL(x, n)   ((x << n) | (x >> ((sizeof(x) << 3) - n)))
-#define CH(x, y, z)  ((x & y) ^ (~x & z))
-#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
-
-#define SHA256_F1(x) (ROTR(x,  2) ^ ROTR(x, 13) ^ ROTR(x, 22))
-#define SHA256_F2(x) (ROTR(x,  6) ^ ROTR(x, 11) ^ ROTR(x, 25))
-#define SHA256_F3(x) (ROTR(x,  7) ^ ROTR(x, 18) ^ SHFR(x,  3))
-#define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10))
-
-#define UNPACK32(x, str)                       \
-{                                              \
-    *((str) + 3) = (uint8_t) ((x)      );      \
-    *((str) + 2) = (uint8_t) ((x) >>  8);      \
-    *((str) + 1) = (uint8_t) ((x) >> 16);      \
-    *((str) + 0) = (uint8_t) ((x) >> 24);      \
-}
-
-#define PACK32(str, x)                         \
-{                                              \
-    *(x) = ((uint32_t) *((str) + 3)      )     \
-         | ((uint32_t) *((str) + 2) <<  8)     \
-         | ((uint32_t) *((str) + 1) << 16)     \
-         | ((uint32_t) *((str) + 0) << 24);    \
-}
-
-#define UNPACK64(x, str)                       \
-{                                              \
-    *((str) + 7) = (uint8_t) ((x)      );      \
-    *((str) + 6) = (uint8_t) ((x) >>  8);      \
-    *((str) + 5) = (uint8_t) ((x) >> 16);      \
-    *((str) + 4) = (uint8_t) ((x) >> 24);      \
-    *((str) + 3) = (uint8_t) ((x) >> 32);      \
-    *((str) + 2) = (uint8_t) ((x) >> 40);      \
-    *((str) + 1) = (uint8_t) ((x) >> 48);      \
-    *((str) + 0) = (uint8_t) ((x) >> 56);      \
-}
-
-#define PACK64(str, x)                         \
-{                                              \
-    *(x) = ((uint64_t) *((str) + 7)      )     \
-         | ((uint64_t) *((str) + 6) <<  8)     \
-         | ((uint64_t) *((str) + 5) << 16)     \
-         | ((uint64_t) *((str) + 4) << 24)     \
-         | ((uint64_t) *((str) + 3) << 32)     \
-         | ((uint64_t) *((str) + 2) << 40)     \
-         | ((uint64_t) *((str) + 1) << 48)     \
-         | ((uint64_t) *((str) + 0) << 56);    \
-}
-
-/* Macros used for loops unrolling */
-
-#define SHA256_SCR(i)                          \
-{                                              \
-    w[i] =  SHA256_F4(w[i - 2]) + w[i - 7]     \
-          + SHA256_F3(w[i - 15]) + w[i - 16];  \
-}
-
-#define SHA256_EXP(a, b, c, d, e, f, g, h, j)               \
-{                                                           \
-    t1 = wv[h] + SHA256_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \
-         + sha256_k[j] + w[j];                              \
-    t2 = SHA256_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]);       \
-    wv[d] += t1;                                            \
-    wv[h] = t1 + t2;                                        \
-}
-
-uint32_t sha256_h0[8] =
-            {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
-             0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
-
-uint32_t sha256_k[64] =
-            {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-             0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-             0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-             0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-             0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-             0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-             0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-             0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-             0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-             0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-             0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-             0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-             0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-             0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-             0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-             0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
-
-/* SHA-256 functions */
-
-void sha256_transf(sha256_ctx *ctx, unsigned char *message,
-                   unsigned int block_nb)
-{
-    uint32_t w[64];
-    uint32_t wv[8];
-    uint32_t t1, t2;
-    unsigned char *sub_block;
-    unsigned int i;
-
-#ifndef UNROLL_LOOPS
-    int j;
-#endif
-
-    for (i = 1; i <= block_nb; i++) {
-        sub_block = message + ((i - 1) << 6);
-
-#ifndef UNROLL_LOOPS
-        for (j = 0; j < 16; j++) {
-            PACK32(&sub_block[j << 2], &w[j]);
-        }
-
-        for (j = 16; j < 64; j++) {
-            SHA256_SCR(j);
-        }
-
-        for (j = 0; j < 8; j++) {
-            wv[j] = ctx->h[j];
-        }
-
-        for (j = 0; j < 64; j++) {
-            t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6])
-                + sha256_k[j] + w[j];
-            t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]);
-            wv[7] = wv[6];
-            wv[6] = wv[5];
-            wv[5] = wv[4];
-            wv[4] = wv[3] + t1;
-            wv[3] = wv[2];
-            wv[2] = wv[1];
-            wv[1] = wv[0];
-            wv[0] = t1 + t2;
-        }
-
-        for (j = 0; j < 8; j++) {
-            ctx->h[j] += wv[j];
-        }
-#else
-        PACK32(&sub_block[ 0], &w[ 0]); PACK32(&sub_block[ 4], &w[ 1]);
-        PACK32(&sub_block[ 8], &w[ 2]); PACK32(&sub_block[12], &w[ 3]);
-        PACK32(&sub_block[16], &w[ 4]); PACK32(&sub_block[20], &w[ 5]);
-        PACK32(&sub_block[24], &w[ 6]); PACK32(&sub_block[28], &w[ 7]);
-        PACK32(&sub_block[32], &w[ 8]); PACK32(&sub_block[36], &w[ 9]);
-        PACK32(&sub_block[40], &w[10]); PACK32(&sub_block[44], &w[11]);
-        PACK32(&sub_block[48], &w[12]); PACK32(&sub_block[52], &w[13]);
-        PACK32(&sub_block[56], &w[14]); PACK32(&sub_block[60], &w[15]);
-
-        SHA256_SCR(16); SHA256_SCR(17); SHA256_SCR(18); SHA256_SCR(19);
-        SHA256_SCR(20); SHA256_SCR(21); SHA256_SCR(22); SHA256_SCR(23);
-        SHA256_SCR(24); SHA256_SCR(25); SHA256_SCR(26); SHA256_SCR(27);
-        SHA256_SCR(28); SHA256_SCR(29); SHA256_SCR(30); SHA256_SCR(31);
-        SHA256_SCR(32); SHA256_SCR(33); SHA256_SCR(34); SHA256_SCR(35);
-        SHA256_SCR(36); SHA256_SCR(37); SHA256_SCR(38); SHA256_SCR(39);
-        SHA256_SCR(40); SHA256_SCR(41); SHA256_SCR(42); SHA256_SCR(43);
-        SHA256_SCR(44); SHA256_SCR(45); SHA256_SCR(46); SHA256_SCR(47);
-        SHA256_SCR(48); SHA256_SCR(49); SHA256_SCR(50); SHA256_SCR(51);
-        SHA256_SCR(52); SHA256_SCR(53); SHA256_SCR(54); SHA256_SCR(55);
-        SHA256_SCR(56); SHA256_SCR(57); SHA256_SCR(58); SHA256_SCR(59);
-        SHA256_SCR(60); SHA256_SCR(61); SHA256_SCR(62); SHA256_SCR(63);
-
-        wv[0] = ctx->h[0]; wv[1] = ctx->h[1];
-        wv[2] = ctx->h[2]; wv[3] = ctx->h[3];
-        wv[4] = ctx->h[4]; wv[5] = ctx->h[5];
-        wv[6] = ctx->h[6]; wv[7] = ctx->h[7];
-
-        SHA256_EXP(0,1,2,3,4,5,6,7, 0); SHA256_EXP(7,0,1,2,3,4,5,6, 1);
-        SHA256_EXP(6,7,0,1,2,3,4,5, 2); SHA256_EXP(5,6,7,0,1,2,3,4, 3);
-        SHA256_EXP(4,5,6,7,0,1,2,3, 4); SHA256_EXP(3,4,5,6,7,0,1,2, 5);
-        SHA256_EXP(2,3,4,5,6,7,0,1, 6); SHA256_EXP(1,2,3,4,5,6,7,0, 7);
-        SHA256_EXP(0,1,2,3,4,5,6,7, 8); SHA256_EXP(7,0,1,2,3,4,5,6, 9);
-        SHA256_EXP(6,7,0,1,2,3,4,5,10); SHA256_EXP(5,6,7,0,1,2,3,4,11);
-        SHA256_EXP(4,5,6,7,0,1,2,3,12); SHA256_EXP(3,4,5,6,7,0,1,2,13);
-        SHA256_EXP(2,3,4,5,6,7,0,1,14); SHA256_EXP(1,2,3,4,5,6,7,0,15);
-        SHA256_EXP(0,1,2,3,4,5,6,7,16); SHA256_EXP(7,0,1,2,3,4,5,6,17);
-        SHA256_EXP(6,7,0,1,2,3,4,5,18); SHA256_EXP(5,6,7,0,1,2,3,4,19);
-        SHA256_EXP(4,5,6,7,0,1,2,3,20); SHA256_EXP(3,4,5,6,7,0,1,2,21);
-        SHA256_EXP(2,3,4,5,6,7,0,1,22); SHA256_EXP(1,2,3,4,5,6,7,0,23);
-        SHA256_EXP(0,1,2,3,4,5,6,7,24); SHA256_EXP(7,0,1,2,3,4,5,6,25);
-        SHA256_EXP(6,7,0,1,2,3,4,5,26); SHA256_EXP(5,6,7,0,1,2,3,4,27);
-        SHA256_EXP(4,5,6,7,0,1,2,3,28); SHA256_EXP(3,4,5,6,7,0,1,2,29);
-        SHA256_EXP(2,3,4,5,6,7,0,1,30); SHA256_EXP(1,2,3,4,5,6,7,0,31);
-        SHA256_EXP(0,1,2,3,4,5,6,7,32); SHA256_EXP(7,0,1,2,3,4,5,6,33);
-        SHA256_EXP(6,7,0,1,2,3,4,5,34); SHA256_EXP(5,6,7,0,1,2,3,4,35);
-        SHA256_EXP(4,5,6,7,0,1,2,3,36); SHA256_EXP(3,4,5,6,7,0,1,2,37);
-        SHA256_EXP(2,3,4,5,6,7,0,1,38); SHA256_EXP(1,2,3,4,5,6,7,0,39);
-        SHA256_EXP(0,1,2,3,4,5,6,7,40); SHA256_EXP(7,0,1,2,3,4,5,6,41);
-        SHA256_EXP(6,7,0,1,2,3,4,5,42); SHA256_EXP(5,6,7,0,1,2,3,4,43);
-        SHA256_EXP(4,5,6,7,0,1,2,3,44); SHA256_EXP(3,4,5,6,7,0,1,2,45);
-        SHA256_EXP(2,3,4,5,6,7,0,1,46); SHA256_EXP(1,2,3,4,5,6,7,0,47);
-        SHA256_EXP(0,1,2,3,4,5,6,7,48); SHA256_EXP(7,0,1,2,3,4,5,6,49);
-        SHA256_EXP(6,7,0,1,2,3,4,5,50); SHA256_EXP(5,6,7,0,1,2,3,4,51);
-        SHA256_EXP(4,5,6,7,0,1,2,3,52); SHA256_EXP(3,4,5,6,7,0,1,2,53);
-        SHA256_EXP(2,3,4,5,6,7,0,1,54); SHA256_EXP(1,2,3,4,5,6,7,0,55);
-        SHA256_EXP(0,1,2,3,4,5,6,7,56); SHA256_EXP(7,0,1,2,3,4,5,6,57);
-        SHA256_EXP(6,7,0,1,2,3,4,5,58); SHA256_EXP(5,6,7,0,1,2,3,4,59);
-        SHA256_EXP(4,5,6,7,0,1,2,3,60); SHA256_EXP(3,4,5,6,7,0,1,2,61);
-        SHA256_EXP(2,3,4,5,6,7,0,1,62); SHA256_EXP(1,2,3,4,5,6,7,0,63);
-
-        ctx->h[0] += wv[0]; ctx->h[1] += wv[1];
-        ctx->h[2] += wv[2]; ctx->h[3] += wv[3];
-        ctx->h[4] += wv[4]; ctx->h[5] += wv[5];
-        ctx->h[6] += wv[6]; ctx->h[7] += wv[7];
-#endif /* !UNROLL_LOOPS */
-    }
-}
-
-void sha256(unsigned char *message, unsigned int len, unsigned char *digest)
-{
-    sha256_ctx ctx;
-
-    sha256_init(&ctx);
-    sha256_update(&ctx, message, len);
-    sha256_final(&ctx, digest);
-}
-
-void sha256_init(sha256_ctx *ctx)
-{
-#ifndef UNROLL_LOOPS
-    int i;
-    for (i = 0; i < 8; i++) {
-        ctx->h[i] = sha256_h0[i];
-    }
-#else
-    ctx->h[0] = sha256_h0[0]; ctx->h[1] = sha256_h0[1];
-    ctx->h[2] = sha256_h0[2]; ctx->h[3] = sha256_h0[3];
-    ctx->h[4] = sha256_h0[4]; ctx->h[5] = sha256_h0[5];
-    ctx->h[6] = sha256_h0[6]; ctx->h[7] = sha256_h0[7];
-#endif /* !UNROLL_LOOPS */
-
-    ctx->len = 0;
-    ctx->tot_len = 0;
-}
-
-void sha256_update(sha256_ctx *ctx, unsigned char *message, unsigned int len)
-{
-    unsigned int block_nb;
-    unsigned int new_len, rem_len;
-    unsigned char *shifted_message;
-
-    rem_len = SHA256_BLOCK_SIZE - ctx->len;
-
-    memcpy(&ctx->block[ctx->len], message, rem_len);
-
-    if (ctx->len + len < SHA256_BLOCK_SIZE) {
-        ctx->len += len;
-        return;
-    }
-
-    new_len = len - rem_len;
-    block_nb = new_len / SHA256_BLOCK_SIZE;
-
-    shifted_message = message + rem_len;
-
-    sha256_transf(ctx, ctx->block, 1);
-    sha256_transf(ctx, shifted_message, block_nb);
-
-    rem_len = new_len % SHA256_BLOCK_SIZE;
-
-    memcpy(ctx->block, &shifted_message[block_nb << 6],
-           rem_len);
-
-    ctx->len = rem_len;
-    ctx->tot_len += (block_nb + 1) << 6;
-}
-
-void sha256_final(sha256_ctx *ctx, unsigned char *digest)
-{
-    unsigned int block_nb;
-    unsigned int pm_len;
-    unsigned int len_b;
-
-#ifndef UNROLL_LOOPS
-    int i;
-#endif
-
-    block_nb = (1 + ((SHA256_BLOCK_SIZE - 9)
-                     < (ctx->len % SHA256_BLOCK_SIZE)));
-
-    len_b = (ctx->tot_len + ctx->len) << 3;
-    pm_len = block_nb << 6;
-
-    memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
-    ctx->block[ctx->len] = 0x80;
-    UNPACK32(len_b, ctx->block + pm_len - 4);
-
-    sha256_transf(ctx, ctx->block, block_nb);
-
-#ifndef UNROLL_LOOPS
-    for (i = 0 ; i < 8; i++) {
-        UNPACK32(ctx->h[i], &digest[i << 2]);
-    }
-#else
-   UNPACK32(ctx->h[0], &digest[ 0]);
-   UNPACK32(ctx->h[1], &digest[ 4]);
-   UNPACK32(ctx->h[2], &digest[ 8]);
-   UNPACK32(ctx->h[3], &digest[12]);
-   UNPACK32(ctx->h[4], &digest[16]);
-   UNPACK32(ctx->h[5], &digest[20]);
-   UNPACK32(ctx->h[6], &digest[24]);
-   UNPACK32(ctx->h[7], &digest[28]);
-#endif /* !UNROLL_LOOPS */
-}
-
-#ifdef TEST_VECTORS
-
-/* FIPS 180-2 Validation tests */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-void test(unsigned char *vector, unsigned char *digest,
-          unsigned int digest_size)
-{
-    unsigned char output[2 * SHA512_DIGEST_SIZE + 1];
-    int i;
-
-    output[2 * digest_size] = '\0';
-
-    for (i = 0; i < digest_size ; i++) {
-       sprintf((char *) output + 2*i, "%02x", digest[i]);
-    }
-
-    printf("H: %s\n", output);
-    if (strcmp((char *) vector, (char *) output)) {
-        fprintf(stderr, "Test failed.\n");
-        exit(1);
-    }
-}
-
-int main()
-{
-    static unsigned char *vectors[] =
-    {
-        /* SHA-256 */
-        (unsigned char*)"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
-        (unsigned char*)"248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
-        (unsigned char*)"cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0",
-        (unsigned char*)"aa1be65302aee963cb2aa2b0f5cc50cf4ab63a31633b95b08cf90ae84f601084",
-    };
-
-    static unsigned char message1[] = "abc";
-    static unsigned char message2[] = "abcdbcdecdefdefgefghfghighijhi"
-                               "jkijkljklmklmnlmnomnopnopq";
-    static unsigned char message2b[] = "abcdefghbcdefghicdefghijdefghijkefghij"
-                                       "klfghijklmghijklmnhijklmnoijklmnopjklm"
-                                       "nopqklmnopqrlmnopqrsmnopqrstnopqrstu";
-    static unsigned char message4[] = "musicpass";
-    
-    unsigned char *message3;
-    unsigned int message3_len  = 1000000;
-    unsigned char digest[SHA512_DIGEST_SIZE];
-
-    message3 = (unsigned char*)malloc(message3_len);
-    if (message3 == NULL) {
-        fprintf(stderr, "Can't allocate memory\n");
-        return -1;
-    }
-    memset(message3, 'a', message3_len);
-
-    printf("SHA-2 FIPS 180-2 Validation tests\n\n");
-
-    printf("SHA-256 Test vectors\n");
-
-    sha256(message1, strlen((char *) message1), digest);
-    test(vectors[0], digest, SHA256_DIGEST_SIZE);
-    sha256(message2, strlen((char *) message2), digest);
-    test(vectors[1], digest, SHA256_DIGEST_SIZE);
-    sha256(message3, message3_len, digest);
-    test(vectors[2], digest, SHA256_DIGEST_SIZE);
-    sha256(message4, strlen((char *) message4), digest);
-    test(vectors[3], digest, SHA256_DIGEST_SIZE);
-    printf("\n");
-    printf("All tests passed.\n");
-
-    return 0;
-}
-
-#endif /* TEST_VECTORS */
-
diff --git a/src/services/ampache/sha256/sha256.h b/src/services/ampache/sha256/sha256.h
deleted file mode 100644
index 9bf7387..0000000
--- a/src/services/ampache/sha256/sha256.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************************
- * Copyright (c) 2005 Olivier Gay <olivier.gay@a3.epfl.ch>                              *
- * Copyright (c) 2009 Leo Franchi <lfranchi@kde.org>                                    *
- *                                                                                      *
- * 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, see <http://www.gnu.org/licenses/>.                           *
- ****************************************************************************************/
-
-#ifndef SHA256_H
-#define SHA256_H
-
-#define SHA256_DIGEST_SIZE (256 / 8)
-#define SHA512_DIGEST_SIZE (512 / 8)
-
-#define SHA256_BLOCK_SIZE  ( 512 / 8)
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-    
-    typedef struct {
-        unsigned int tot_len;
-        unsigned int len;
-        unsigned char block[2 * SHA256_BLOCK_SIZE];
-        uint32_t h[8];
-    } sha256_ctx;
-    
-    void sha256_init(sha256_ctx * ctx);
-    void sha256_update(sha256_ctx *ctx, unsigned char *message, unsigned int len);
-    void sha256_final(sha256_ctx *ctx, unsigned char *digest);
-    void sha256(unsigned char *message, unsigned int len, unsigned char *digest);
-    
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !SHA256_H */
-
-- 
2.2.1