Authen-NZRealMe
view release on metacpan or search on metacpan
t/36-xml-sig-multi.t view on Meta::CPAN
);
ok($signed_xml, 'added a multi-reference signature');
$verifier = $sig_class->new(pub_cert_text => slurp_file($sp_cert_file));
eval {
$verifier->verify($signed_xml);
};
like($@, qr{signature does not match}, 'verify failed using SP cert');
$verifier = $sig_class->new(pub_cert_text => slurp_file($idp_cert_file));
eval {
$verifier->verify($signed_xml);
};
like($@, qr{signature does not match}, 'verify failed using IdP cert');
$verifier = $sig_class->new(pub_cert_text => slurp_file($sp_cert_file));
eval {
my $selector = '//ds:Signature[not(ancestor::soap12:Body)]';
$verifier->verify($signed_xml, $selector, NS_PAIR('soap12'));
};
is($@, '', 'verify succeeded using SP cert with XPath filter');
$verifier = $sig_class->new(pub_cert_text => slurp_file($idp_cert_file));
eval {
my $selector = '//ds:Signature[ancestor::soap12:Body]';
$verifier->verify($signed_xml, $selector, NS_PAIR('soap12'));
};
is($@, '', 'verify succeeded using IdP cert with XPath filter');
$xc = $sig_class->_xcdom_from_xml($signed_xml);
$xc->registerNs(NS_PAIR('soap12'));
$xc->registerNs(NS_PAIR('wsse'));
my($sig) = $xc->findnodes('//wsse:Security//ds:Signature');
ok($sig, 'found the multi-ref signature block');
my $ref = $verifier->_parse_signature_block($xc, $sig);
ok($ref, 'successfully parsed signature block');
is(
scalar(@{ $ref->{references} }),
6,
'SigInfo block contains multiple references'
);
($sig) = $xc->findnodes('//soap12:Body//ds:Signature');
ok($sig, 'found the single-ref signature block');
$ref = $verifier->_parse_signature_block($xc, $sig);
ok($ref, 'successfully parsed signature block');
is(
scalar(@{ $ref->{references} }),
1,
'SigInfo block contains one reference'
);
done_testing(); exit;
my @frags = eval {
$verifier->_verify_one_signature_block($xc, $ref);
};
is($@, '', 'verification did not throw exception');
eval {
$verifier->verify($xml);
};
like(
$@,
qr{SignedInfo block signature does not match},
'verification threw exception due to wrong key for sig in soap:Body'
);
eval {
my $selector = '//ds:Signature[not(ancestor::soap12:Body)]';
$verifier->verify($xml, $selector, NS_PAIR('soap12'));
};
is(
$@,
'',
'verification succeeded when sig in soapBody filtered out'
);
done_testing();
exit;
( run in 0.616 second using v1.01-cache-2.11-cpan-364913b4093 )