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 )