34 lines
807 B
Ruby
34 lines
807 B
Ruby
class MultipartSignaturesController < ApplicationController
|
|
skip_after_action :verify_authorized
|
|
|
|
def create
|
|
render plain: hmac_data, status: 200
|
|
end
|
|
|
|
private
|
|
|
|
def hmac_data
|
|
aws_secret = ENV['AWS_SECRET_ACCESS_KEY']
|
|
timestamp = params[:datetime]
|
|
|
|
# TESTING UTF-8 encoding
|
|
aws_secret = aws_secret.encode('UTF-8')
|
|
details = params[:to_sign].encode('UTF-8')
|
|
|
|
date = hmac("AWS4#{aws_secret}", timestamp[0..7])
|
|
region = hmac(date, ENV["AWS_REGION"])
|
|
service = hmac(region, "s3")
|
|
signing = hmac(service, 'aws4_request')
|
|
|
|
hexhmac(signing, details)
|
|
end
|
|
|
|
def hmac(key, value)
|
|
OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, value)
|
|
end
|
|
|
|
def hexhmac(key, value)
|
|
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, value)
|
|
end
|
|
end
|