@@ -74,15 +74,6 @@ module Sigv4
74
74
# and `#session_token`.
75
75
#
76
76
class Signer
77
-
78
- @@use_crt =
79
- begin
80
- require 'aws-crt'
81
- true
82
- rescue LoadError
83
- false
84
- end
85
-
86
77
# @overload initialize(service:, region:, access_key_id:, secret_access_key:, session_token:nil, **options)
87
78
# @param [String] :service The service signing name, e.g. 's3'.
88
79
# @param [String] :region The region name, e.g. 'us-east-1'. When signing
@@ -154,13 +145,6 @@ def initialize(options = {})
154
145
@signing_algorithm = options . fetch ( :signing_algorithm , :sigv4 )
155
146
@normalize_path = options . fetch ( :normalize_path , true )
156
147
@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
164
148
end
165
149
166
150
# @return [String]
@@ -236,9 +220,6 @@ def initialize(options = {})
236
220
# a `#headers` method. The headers must be applied to your request.
237
221
#
238
222
def sign_request ( request )
239
-
240
- return crt_sign_request ( request ) if Signer . use_crt?
241
-
242
223
creds , _ = fetch_credentials
243
224
244
225
http_method = extract_http_method ( request )
@@ -344,7 +325,6 @@ def sign_request(request)
344
325
# signature value (a binary string) used at ':chunk-signature' needs to converted to
345
326
# hex-encoded string using #unpack
346
327
def sign_event ( prior_signature , payload , encoder )
347
- # Note: CRT does not currently provide event stream signing, so we always use the ruby implementation.
348
328
creds , _ = fetch_credentials
349
329
time = Time . now
350
330
headers = { }
@@ -431,9 +411,6 @@ def sign_event(prior_signature, payload, encoder)
431
411
# @return [HTTPS::URI, HTTP::URI]
432
412
#
433
413
def presign_url ( options )
434
-
435
- return crt_presign_url ( options ) if Signer . use_crt?
436
-
437
414
creds , expiration = fetch_credentials
438
415
439
416
http_method = extract_http_method ( options )
@@ -801,131 +778,7 @@ def presigned_url_expiration(options, expiration, datetime)
801
778
end
802
779
end
803
780
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
-
923
781
class << self
924
-
925
- def use_crt?
926
- @@use_crt
927
- end
928
-
929
782
# @api private
930
783
def uri_escape_path ( path )
931
784
path . gsub ( /[^\/ ]+/ ) { |part | uri_escape ( part ) }
0 commit comments