@@ -262,14 +262,21 @@ def validate_signature(base64_cert, soft = true)
262
262
'//ds:CanonicalizationMethod' ,
263
263
'ds' => DSIG
264
264
)
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
+
265
271
canon_string = noko_signed_info_element . canonicalize ( canon_algorithm )
266
272
noko_sig_element . remove
267
273
268
274
# check digests
269
275
REXML ::XPath . each ( @sig_element , "//ds:Reference" , { "ds" => DSIG } ) do |ref |
270
276
uri = ref . attributes . get_attribute ( "URI" ) . value
271
277
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] })
273
280
canon_algorithm = canon_algorithm REXML ::XPath . first (
274
281
ref ,
275
282
'//ds:CanonicalizationMethod' ,
@@ -336,7 +343,11 @@ def extract_signed_element_id
336
343
"//ds:Signature/ds:SignedInfo/ds:Reference" ,
337
344
{ "ds" => DSIG }
338
345
)
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
340
351
end
341
352
342
353
def extract_inclusive_namespaces
0 commit comments