34 #include <QCryptographicHash>    39 ArnSyncLogin::ArnSyncLogin()
    44 void  ArnSyncLogin::addAccess( 
const QString& userName, 
const QString& password, 
Arn::Allow allow)
    46     AccessSlot  accessSlot;
    47     accessSlot.userName = userName;
    48     accessSlot.pwHash   = isPwHash( password) ? password : passwordHash( password);
    49     accessSlot.allow    = allow;
    51     _accessTab.insert( userName, accessSlot);
    55 const ArnSyncLogin::AccessSlot*  ArnSyncLogin::findAccess( 
const QString& userName)
    57     if (!_accessTab.contains( userName))  
return 0;
    59     return &_accessTab[ userName];
    63 QByteArray ArnSyncLogin::pwHashXchg(uint saltA, uint saltB, 
const QString& password)
    65     QByteArray  pwSalted = password.toUtf8()
    66                          + 
"." + QByteArray::number( saltA, 16)
    67                          + 
"." + QByteArray::number( saltB, 16);
    69     QCryptographicHash  hasher( QCryptographicHash::Sha1);
    70     hasher.addData( pwSalted);
    71     return hasher.result().toHex();
    75 QString  ArnSyncLogin::passwordHash( 
const QString& password)
    77     QCryptographicHash  hasher( QCryptographicHash::Sha1);
    78     hasher.addData( password.toUtf8());
    79     QByteArray  pwHashed = hasher.result().toBase64();
    81     pwHashed = 
"{" + pwHashed + 
"}";
    82     return QString::fromLatin1( pwHashed.constData(), pwHashed.size());
    86 bool  ArnSyncLogin::isPwHash( 
const QString& password)
    88     return password.startsWith(
"{") && password.endsWith(
"}");