@@ -74,15 +74,6 @@ module Sigv4
7474 # and `#session_token`.
7575 #
7676 class Signer
77-
78- @@use_crt =
79- begin
80- require 'aws-crt'
81- true
82- rescue LoadError
83- false
84- end
85-
8677 # @overload initialize(service:, region:, access_key_id:, secret_access_key:, session_token:nil, **options)
8778 # @param [String] :service The service signing name, e.g. 's3'.
8879 # @param [String] :region The region name, e.g. 'us-east-1'. When signing
@@ -154,13 +145,6 @@ def initialize(options = {})
154145 @signing_algorithm = options . fetch ( :signing_algorithm , :sigv4 )
155146 @normalize_path = options . fetch ( :normalize_path , true )
156147 @omit_session_token = options . fetch ( :omit_session_token , false )
157-
158- if @signing_algorithm == 'sigv4-s3express' . to_sym &&
159- Signer . use_crt? && Aws ::Crt ::GEM_VERSION <= '0.1.9'
160- raise ArgumentError ,
161- 'This version of aws-crt does not support S3 Express. Please
162- update this gem to at least version 0.2.0.'
163- end
164148 end
165149
166150 # @return [String]
@@ -236,9 +220,6 @@ def initialize(options = {})
236220 # a `#headers` method. The headers must be applied to your request.
237221 #
238222 def sign_request ( request )
239-
240- return crt_sign_request ( request ) if Signer . use_crt?
241-
242223 creds , _ = fetch_credentials
243224
244225 http_method = extract_http_method ( request )
@@ -344,7 +325,6 @@ def sign_request(request)
344325 # signature value (a binary string) used at ':chunk-signature' needs to converted to
345326 # hex-encoded string using #unpack
346327 def sign_event ( prior_signature , payload , encoder )
347- # Note: CRT does not currently provide event stream signing, so we always use the ruby implementation.
348328 creds , _ = fetch_credentials
349329 time = Time . now
350330 headers = { }
@@ -431,9 +411,6 @@ def sign_event(prior_signature, payload, encoder)
431411 # @return [HTTPS::URI, HTTP::URI]
432412 #
433413 def presign_url ( options )
434-
435- return crt_presign_url ( options ) if Signer . use_crt?
436-
437414 creds , expiration = fetch_credentials
438415
439416 http_method = extract_http_method ( options )
@@ -801,131 +778,7 @@ def presigned_url_expiration(options, expiration, datetime)
801778 end
802779 end
803780
804- ### CRT Code
805-
806- # the credentials used by CRT must be a
807- # CRT StaticCredentialsProvider object
808- def crt_fetch_credentials
809- creds , expiration = fetch_credentials
810- crt_creds = Aws ::Crt ::Auth ::StaticCredentialsProvider . new (
811- creds . access_key_id ,
812- creds . secret_access_key ,
813- creds . session_token
814- )
815- [ crt_creds , expiration ]
816- end
817-
818- def crt_sign_request ( request )
819- creds , _ = crt_fetch_credentials
820- http_method = extract_http_method ( request )
821- url = extract_url ( request )
822- headers = downcase_headers ( request [ :headers ] )
823-
824- datetime =
825- if headers . include? 'x-amz-date'
826- Time . parse ( headers . delete ( 'x-amz-date' ) )
827- end
828-
829- content_sha256 = headers . delete ( 'x-amz-content-sha256' )
830- content_sha256 ||= sha256_hexdigest ( request [ :body ] || '' )
831-
832- sigv4_headers = { }
833- sigv4_headers [ 'host' ] = headers [ 'host' ] || host ( url )
834-
835- # Modify the user-agent to add usage of crt-signer
836- # This should be temporary during developer preview only
837- if headers . include? 'user-agent'
838- headers [ 'user-agent' ] = "#{ headers [ 'user-agent' ] } crt-signer/#{ @signing_algorithm } /#{ Aws ::Sigv4 ::VERSION } "
839- sigv4_headers [ 'user-agent' ] = headers [ 'user-agent' ]
840- end
841-
842- headers = headers . merge ( sigv4_headers ) # merge so we do not modify given headers hash
843-
844- config = Aws ::Crt ::Auth ::SigningConfig . new (
845- algorithm : @signing_algorithm ,
846- signature_type : :http_request_headers ,
847- region : @region ,
848- service : @service ,
849- date : datetime ,
850- signed_body_value : content_sha256 ,
851- signed_body_header_type : @apply_checksum_header ?
852- :sbht_content_sha256 : :sbht_none ,
853- credentials : creds ,
854- unsigned_headers : @unsigned_headers ,
855- use_double_uri_encode : @uri_escape_path ,
856- should_normalize_uri_path : @normalize_path ,
857- omit_session_token : @omit_session_token
858- )
859- http_request = Aws ::Crt ::Http ::Message . new (
860- http_method , url . to_s , headers
861- )
862- signable = Aws ::Crt ::Auth ::Signable . new ( http_request )
863-
864- signing_result = Aws ::Crt ::Auth ::Signer . sign_request ( config , signable )
865-
866- Signature . new (
867- headers : sigv4_headers . merge (
868- downcase_headers ( signing_result [ :headers ] )
869- ) ,
870- string_to_sign : 'CRT_INTERNAL' ,
871- canonical_request : 'CRT_INTERNAL' ,
872- content_sha256 : content_sha256 ,
873- extra : { config : config , signable : signable }
874- )
875- end
876-
877- def crt_presign_url ( options )
878- creds , expiration = crt_fetch_credentials
879-
880- http_method = extract_http_method ( options )
881- url = extract_url ( options )
882- headers = downcase_headers ( options [ :headers ] )
883- headers [ 'host' ] ||= host ( url )
884-
885- datetime = Time . strptime ( headers . delete ( 'x-amz-date' ) , "%Y%m%dT%H%M%S%Z" ) if headers [ 'x-amz-date' ]
886- datetime ||= ( options [ :time ] || Time . now )
887-
888- content_sha256 = headers . delete ( 'x-amz-content-sha256' )
889- content_sha256 ||= options [ :body_digest ]
890- content_sha256 ||= sha256_hexdigest ( options [ :body ] || '' )
891-
892- config = Aws ::Crt ::Auth ::SigningConfig . new (
893- algorithm : @signing_algorithm ,
894- signature_type : :http_request_query_params ,
895- region : @region ,
896- service : @service ,
897- date : datetime ,
898- signed_body_value : content_sha256 ,
899- signed_body_header_type : @apply_checksum_header ?
900- :sbht_content_sha256 : :sbht_none ,
901- credentials : creds ,
902- unsigned_headers : @unsigned_headers ,
903- use_double_uri_encode : @uri_escape_path ,
904- should_normalize_uri_path : @normalize_path ,
905- omit_session_token : @omit_session_token ,
906- expiration_in_seconds : presigned_url_expiration ( options , expiration , datetime )
907- )
908- http_request = Aws ::Crt ::Http ::Message . new (
909- http_method , url . to_s , headers
910- )
911- signable = Aws ::Crt ::Auth ::Signable . new ( http_request )
912-
913- signing_result = Aws ::Crt ::Auth ::Signer . sign_request ( config , signable , http_method , url . to_s )
914- url = URI . parse ( signing_result [ :path ] )
915-
916- if options [ :extra ] && options [ :extra ] . is_a? ( Hash )
917- options [ :extra ] [ :config ] = config
918- options [ :extra ] [ :signable ] = signable
919- end
920- url
921- end
922-
923781 class << self
924-
925- def use_crt?
926- @@use_crt
927- end
928-
929782 # @api private
930783 def uri_escape_path ( path )
931784 path . gsub ( /[^\/ ]+/ ) { |part | uri_escape ( part ) }
0 commit comments