Authen-NZRealMe
view release on metacpan or search on metacpan
t/35-xml-sig-units.t view on Meta::CPAN
$sig_alg = $signer->_find_sig_alg('rsa_sha256');
$b64_sig = $signer->_create_signature($sig_alg, $plaintext);
$b64_sig =~ s/\s+//g;
is(
$b64_sig,
'YeR7ga5hEXBD7BL3NTUjReKG09hSp0sWFNs5WpOD3td0nFARedv5Bn6uy1zf2zuW'
. 'qZos6cyenUERRypZN0QnD5O7M1OmlV/Kpv40UkcMdFqPT/wQP2OHe+YaKXO3b1'
. 'V9gq1eGhk5wqW51y3Uu6GawKqJj9VZNPD20cDGvTeegtoNjiY3wrFu4G/v6Ro2'
. 'OaWXOkyQrXN0Ql2TheK4qMV2fklknKsv87H+BCK75+IWHn63LBvavY5kUyvM/2'
. 'i2n9aoPLkrlVv32dOGFPdN5PE12B8ujcRiywXAHNffYo7s24rbMk/hKAXCG4Ot'
. '/sh7T+WbBs2Ny8VPq0lgmfnN6o3x0A==',
'created RSA-SHA256 hash signature'
);
ok(
$verifier->_verify_signature($sig_alg, $plaintext, $b64_sig),
'verified RSA-SHA256 hash signature'
);
ok(
!$verifier->_verify_signature($sig_alg, $mismatched_text, $b64_sig),
'failed to verify mismatched RSA-SHA256 hash signature'
);
##############################################################################
# Parse out an 'enveloped signature' from a document
ok('1', '===== Parsing of <Signature> blocks =====');
$verifier = $sig_class->new(
pub_cert_text => slurp_file($idp_cert_file),
);
$xml = q{<Container><Assertion ID="Idd02c7c2232759874e1c205587017bed"><dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
<dsig:SignedInfo>
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<dsig:Reference URI="#Idd02c7c2232759874e1c205587017bed">
<dsig:Transforms>
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<dsig:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<dsig:DigestValue>Wgb21Ak30ZPTzFKw5uPlRzVd7zo=</dsig:DigestValue>
</dsig:Reference>
</dsig:SignedInfo>
<dsig:SignatureValue>
oO8JbDW0l0b3KmqAu2LryU2gHTQTGaUrwOyURv/r5YHLa3mtqlF4Gkq3qy7kEgCb
Pqwq1JHuvoG1XZ6j0StSkt+mK12AOubIuLXT/SKBU4X7MBv0HwfL5U1XXEMV8mG8
t67f2kdOBJMeVIKU3Unw9fIWhKSjSeTArqNAdk1yCWS2NmpfG7Peu59mwqve7QTh
8KaD9Ro+PYHpYnB2Ah8OPofo7ym0hK85eM753W/SlWBf4aj5yuZGUCPv3k3sXMbe
VJfZ6GIwOJeGPRuGAZe8zDVsuXwnTeB6pW8huqGJduUP/JPi1LaUjpMRG3+R7yAh
IkDsvPCXLAeAjQ7jeucNpg==
</dsig:SignatureValue>
</dsig:Signature>
<Identity>
<Name>Bob</Name><!-- no surname -->
<DateOfBirth>1954-03-21</DateOfBirth>
</Identity>
</Assertion>
<Unsafe>
<Assertion>Elvis is alive</Assertion>
</Unsafe>
</Container>
};
$xc = parse_xml_to_xc($xml, @ns_ds);
($node) = $xc->findnodes('//ds:Signature');
my($sig) = $verifier->_parse_signature_block($xc, $node);
is(ref($sig) => 'HASH', 'found a sig block');
isa_ok($sig->{sig_info_node} => 'XML::LibXML::Element', '<SignedInfo> element');
my $c14n = $sig->{c14n};
is(ref($c14n) => 'HASH', 'canonicalisation is defined');
is($c14n->{name} => 'ec14n', ' name');
is($c14n->{uri} => 'http://www.w3.org/2001/10/xml-exc-c14n#', ' uri');
is($c14n->{method} => '_apply_transform_ec14n', ' method');
my $xc_inp = [ $xc, $sig->{sig_info_node} ];
my $sig_info_plaintext = $verifier->_apply_transform($c14n, $xc_inp);
$sig_alg = $sig->{signature_algorithm};
is(ref($sig_alg) => 'HASH', 'signature method is defined');
is($sig_alg->{name} => 'rsa_sha1', ' name');
is($sig_alg->{uri} => 'http://www.w3.org/2000/09/xmldsig#rsa-sha1', ' uri');
is($sig_alg->{sign_method} => '_create_signature_rsa_sha1', ' sign_method');
is($sig_alg->{verify_method} => '_verify_signature_rsa_sha1', ' verify_method');
is($sig->{signature_value} =>
'oO8JbDW0l0b3KmqAu2LryU2gHTQTGaUrwOyURv/r5YHLa3mtqlF4Gkq3qy7kEgCb'
. 'Pqwq1JHuvoG1XZ6j0StSkt+mK12AOubIuLXT/SKBU4X7MBv0HwfL5U1XXEMV8mG8'
. 't67f2kdOBJMeVIKU3Unw9fIWhKSjSeTArqNAdk1yCWS2NmpfG7Peu59mwqve7QTh'
. '8KaD9Ro+PYHpYnB2Ah8OPofo7ym0hK85eM753W/SlWBf4aj5yuZGUCPv3k3sXMbe'
. 'VJfZ6GIwOJeGPRuGAZe8zDVsuXwnTeB6pW8huqGJduUP/JPi1LaUjpMRG3+R7yAh'
. 'IkDsvPCXLAeAjQ7jeucNpg==',
'signature_value'
);
my $v_method = $sig_alg->{verify_method};
my $result = $verifier->_verify_signature(
$sig_alg, $sig_info_plaintext, $sig->{signature_value}
);
ok($result, 'signature was verified successfully');
# Check the contents of the <SignedInfo> block
my $refs = $sig->{references};
is(ref($refs) => 'ARRAY', 'references defined');
is(scalar(@$refs) => 1, ' exactly one in list');
my($ref1) = @$refs;
is(ref($ref1) => 'HASH', 'first (and only) reference');
is($ref1->{ref_id} => 'Idd02c7c2232759874e1c205587017bed', ' ref_id');
my $trans = $ref1->{transforms};
is(ref($trans) => 'ARRAY', ' transforms defined');
is(scalar(@$trans) => 2, ' exactly two in list');
my $t1 = $trans->[0];
is($t1->{name} => 'env_sig', ' t1 name');
is($t1->{uri} => 'http://www.w3.org/2000/09/xmldsig#enveloped-signature', ' t1 uri');
is($t1->{method} => '_apply_transform_env_sig', ' t1 method');
( run in 1.419 second using v1.01-cache-2.11-cpan-14f38c9f855 )