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));
31 return QCryptographicHash::hash(total, QCryptographicHash::Sha1).toBase64();
39 for(
auto it = headers.constBegin(); it != headers.constEnd(); ++it)
43 value.insert(it.key().toLower(), it.value());
47 value.insert(it.key(), it.value());
55 const QString &content_md5 = headers.value(
"Content-Md5");
56 const QString &content_type = headers.value(
"Content-Type");
57 const QString &date = headers.value(
"Date");
58 const QString &canonicalized_resource = resource;
60 QString canonicalized_headers;
63 if(origin_headers.count() > 0)
65 for(
auto it = origin_headers.constBegin(); it != origin_headers.constEnd(); ++it)
69 canonicalized_headers += it.key() +
":" + it.value() +
"\n";
74 const QString &sign = method +
"\n" + content_md5 +
"\n" + content_type +
"\n" + date +
"\n" + canonicalized_headers + canonicalized_resource;
75 return hmacSha1(key.toUtf8(), sign.toUtf8());
80 return QString(
"OSS ") + access +
":" +
authorizationCode(secret, method, headers, resource);
85 QLocale
local(QLocale::English, QLocale::UnitedStates);
86 return local.toString(QDateTime::currentDateTimeUtc(),
"ddd, dd MMM yyyy hh:mm:ss") +
" GMT";
static const char * self_define_header_prefix
static constexpr wchar_t key[]
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()