@@ -262,14 +262,21 @@ def validate_signature(base64_cert, soft = true)
262262 '//ds:CanonicalizationMethod' ,
263263 'ds' => DSIG
264264 )
265+
266+ noko_signed_info_reference_element_uri_attr = noko_signed_info_element . at_xpath ( './ds:Reference' , 'ds' => DSIG ) . attributes [ "URI" ]
267+ if ( noko_signed_info_reference_element_uri_attr . value . empty? )
268+ noko_signed_info_reference_element_uri_attr . value = "##{ document . root . attribute ( 'ID' ) } "
269+ end
270+
265271 canon_string = noko_signed_info_element . canonicalize ( canon_algorithm )
266272 noko_sig_element . remove
267273
268274 # check digests
269275 REXML ::XPath . each ( @sig_element , "//ds:Reference" , { "ds" => DSIG } ) do |ref |
270276 uri = ref . attributes . get_attribute ( "URI" ) . value
271277
272- hashed_element = document . at_xpath ( "//*[@ID=$uri]" , nil , { 'uri' => uri [ 1 ..-1 ] } )
278+ hashed_element = uri . empty? ? document : document . at_xpath ( "//*[@ID=$uri]" , nil , { 'uri' => uri [ 1 ..-1 ] } )
279+ # hashed_element = document.at_xpath("//*[@ID=$uri]", nil, { 'uri' => uri[1..-1] })
273280 canon_algorithm = canon_algorithm REXML ::XPath . first (
274281 ref ,
275282 '//ds:CanonicalizationMethod' ,
@@ -336,7 +343,11 @@ def extract_signed_element_id
336343 "//ds:Signature/ds:SignedInfo/ds:Reference" ,
337344 { "ds" => DSIG }
338345 )
339- self . signed_element_id = reference_element . attribute ( "URI" ) . value [ 1 ..-1 ] unless reference_element . nil?
346+
347+ return nil if reference_element . nil?
348+
349+ sei = reference_element . attribute ( "URI" ) . value [ 1 ..-1 ]
350+ self . signed_element_id = sei . nil? ? self . root . attribute ( "ID" ) : sei
340351 end
341352
342353 def extract_inclusive_namespaces
0 commit comments