This repository has been archived on 2026-03-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files

38 lines
1.5 KiB
Lua
Raw Permalink Normal View History

2019-06-28 16:07:04 +02:00
local sign = {}
local hmac = require("hmac")
local sha2 = require("sha2")
2019-06-28 16:07:04 +02:00
function sign.sign(key, secret, time, path, headers, region)
2019-06-28 16:07:04 +02:00
local day = os.date("%Y%m%d", time)
local timestamp = os.date("%Y%m%dT%H%M%SZ", time)
local dateKey = hmac.hmac("AWS4" .. secret, day, 'buffer')
local dateRegionKey = hmac.hmac(dateKey, region, 'buffer')
local dateRegionSvcKey = hmac.hmac(dateRegionKey, 's3', 'buffer')
local signingKey = hmac.hmac(dateRegionSvcKey, 'aws4_request', 'buffer')
2019-06-28 16:07:04 +02:00
local keys = {}
for k, v in pairs(headers) do
2019-06-28 16:07:04 +02:00
table.insert(keys, k)
end
table.sort(keys)
local signedHeaders = ""
local request = "PUT\n" .. path .. "\n"
for _, k in ipairs(keys) do
request = request .. "\n" .. k .. ":" .. headers[k]
signedHeaders = signedHeaders .. ";" .. k
end
signedHeaders = string.sub(signedHeaders, 2)
request = request .. "\n\n" .. signedHeaders .. "\n" .. (headers["x-amz-content-sha256"])
local stringToSign = "AWS4-HMAC-SHA256\n" .. timestamp .. "\n" .. day .. "/" .. region .. "/s3/aws4_request\n" .. sha2.hash256(request)
local signature = hmac.hmac(signingKey, stringToSign, 'hex')
2019-06-28 16:07:04 +02:00
local result = "AWS4-HMAC-SHA256 Credential=" .. key .. "/" .. day .. "/" .. region .. "/s3/aws4_request,SignedHeaders=" .. signedHeaders
result = result .. ",Signature=" .. signature
return result
end
return sign