ATLAS Offline Software
Loading...
Searching...
No Matches
VP1MD5Sum.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class VP1MD5Sum //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: May 2008 //
12// //
14
15#include "VP1Gui/VP1MD5Sum.h"
16#include <QFileInfo>
17#include <QCryptographicHash>
18#include <QRegExp>
19
20//____________________________________________________________________
22public:
23 static bool fileok(const QString& filename);
24 static QByteArray actualMd5Sum( const QString& filename, bool&ok );
25};
26
27//____________________________________________________________________
28QByteArray VP1MD5Sum::sum(const QString& filename)
29{
30 if (!Imp::fileok(filename))
31 return QByteArray();
32 bool ok;
33 QByteArray arr = Imp::actualMd5Sum(filename,ok);
34 return ok ? arr : QByteArray();
35}
36
37//____________________________________________________________________
38bool VP1MD5Sum::sumMatches( const QString& filename, const QByteArray& targetmd5sum )
39{
40 if (targetmd5sum.isEmpty()||!Imp::fileok(filename))
41 return false;
42 bool ok;
43 return targetmd5sum==Imp::actualMd5Sum(filename,ok) && ok;
44}
45
46//____________________________________________________________________
47bool VP1MD5Sum::sumMatches( const QString& filename, const QString& md5sum )
48{
49 return sumMatches( filename, sumToByteArray(md5sum) );
50}
51
52//____________________________________________________________________
53bool VP1MD5Sum::Imp::fileok(const QString& filename)
54{
55 QFileInfo fi(filename);
56 return fi.exists() && fi.isReadable();
57}
58
59//____________________________________________________________________
60QByteArray VP1MD5Sum::Imp::actualMd5Sum( const QString& filename, bool&ok )
61{
62 ok = false;
63 QFile file(filename);
64 QCryptographicHash md5Hash(QCryptographicHash::Md5);
65
66 if (file.open(QIODevice::ReadOnly | QIODevice::Unbuffered)) {
67 ok = true;
68 while (!file.atEnd())
69 md5Hash.addData(file.read(10485760));
70 }
71 file.close();
72 return md5Hash.result();
73}
74
75//____________________________________________________________________
76QString VP1MD5Sum::sumToString(const QByteArray& ba )
77{
78 return ba.toHex();
79}
80
81//____________________________________________________________________
82QByteArray VP1MD5Sum::sumToByteArray(const QString& str )
83{
84 return QByteArray::fromHex(str.toUtf8());
85}
86
87//____________________________________________________________________
88bool VP1MD5Sum::validMD5Sum(const QString& sum)
89{
90 if (sum.count()!=32)
91 return false;
92 return QRegExp("[0-9a-z]*").exactMatch(sum.toLower());
93}
94
95//____________________________________________________________________
96QString VP1MD5Sum::sumToStandardFormat(const QString& sum)
97{
98 return sum.simplified().toLower();
99}
static bool fileok(const QString &filename)
Definition VP1MD5Sum.cxx:53
static QByteArray actualMd5Sum(const QString &filename, bool &ok)
Definition VP1MD5Sum.cxx:60
static bool validMD5Sum(const QString &)
Definition VP1MD5Sum.cxx:88
static QByteArray sumToByteArray(const QString &)
Definition VP1MD5Sum.cxx:82
static QByteArray sum(const QString &filename)
Definition VP1MD5Sum.cxx:28
static QString sumToString(const QByteArray &)
Definition VP1MD5Sum.cxx:76
static QString sumToStandardFormat(const QString &)
Definition VP1MD5Sum.cxx:96
static bool sumMatches(const QString &filename, const QByteArray &md5sum)
Definition VP1MD5Sum.cxx:38
TFile * file