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 )