6 #include <QCryptographicHash>
8 static QString
hmacSha1(QByteArray
key,
const QByteArray &baseString)
11 if(key.length() > blockSize)
13 key = QCryptographicHash::hash(key, QCryptographicHash::Sha1);
16 QByteArray innerPadding(blockSize,
char(0x36));
17 QByteArray outerPadding(blockSize,
char(0x5c));
21 for(
int i = 0; i < key.length(); ++i)
23 innerPadding[i] = innerPadding[i] ^ key.at(i);
24 outerPadding[i] = outerPadding[i] ^ key.at(i);
27 QByteArray total = outerPadding;
28 QByteArray part = innerPadding;
29 part.append(baseString);
30 total.append(QCryptographicHash::hash(part, QCryptographicHash::Sha1));
32 return QCryptographicHash::hash(total, QCryptographicHash::Sha1).toBase64();
40 for(
auto it = headers.constBegin(); it != headers.constEnd(); ++it)
44 value.insert(it.key().toLower(), it.value());
48 value.insert(it.key(), it.value());
56 const QString &content_md5 = headers.value(
"Content-Md5");
57 const QString &content_type = headers.value(
"Content-Type");
58 const QString &date = headers.value(
"Date");
59 const QString &canonicalized_resource = resource;
61 QString canonicalized_headers;
64 if(origin_headers.count() > 0)
66 for(
auto it = origin_headers.constBegin(); it != origin_headers.constEnd(); ++it)
70 canonicalized_headers += it.key() +
":" + it.value() +
"\n";
75 const QString &sign = method +
"\n" + content_md5 +
"\n" + content_type +
"\n" + date +
"\n" + canonicalized_headers + canonicalized_resource;
76 return hmacSha1(key.toUtf8(), sign.toUtf8());
81 return QString(
"OSS ") + access +
":" +
authorizationCode(secret, method, headers, resource);
86 QLocale
local(QLocale::English, QLocale::UnitedStates);
87 return local.toString(QDateTime::currentDateTimeUtc(),
"ddd, dd MMM yyyy hh:mm:ss") +
" GMT";
static constexpr wchar_t key[]
static const char * self_define_header_prefix
static TTKStringMap formatHeader(const TTKStringMap &headers)
static QString createSignForNormalAuth(const QString &method, const QString &access, const QString &secret, const TTKStringMap &headers, const QString &resource)
static QString authorizationCode(const QString &key, const QString &method, const TTKStringMap &headers, const QString &resource)
static QString hmacSha1(QByteArray key, const QByteArray &baseString)
QMap< QString, QString > TTKStringMap
static QString makeDataBucketUrl()