# Copyrights 2012 by [Mark Overmeer].
# For other contributors see ChangeLog.
# See the manual pages for details on the licensing terms.
# Pod stripped from pm file by OODoc 2.00.
use warnings;
use strict;
package XML::Compile::WSS::Sign;
use vars '$VERSION';
$VERSION = '0.91';
use Log::Report 'xml-compile-wss-sig';
use XML::Compile::WSS::Util qw/:wss11 :dsig/;
use Scalar::Util qw/blessed/;
my ($signs, $sigmns) = (DSIG_NS, DSIG_MORE_NS);
my $sign_algorithm = qr/^(?:$signs|$sigmns)([a-z0-9]+)\-([a-z0-9]+)$/;
sub new(@)
{ my $class = shift;
my $args = @_==1 ? shift : {@_};
my $type = delete $args->{type} || DSIG_RSA_SHA1;
if($class eq __PACKAGE__)
{ $type =~ $sign_algorithm
or error __x"unsupported sign algorithm `{algo}'", algo => $type;
my $algo = uc $1;;
$args->{hashing} ||= uc $2;
$class .= '::'.$algo;
eval "require $class"; panic $@ if $@;
}
(bless {XCWS_type => $type}, $class)->init($args);
}
sub init($)
{ my ($self, $args) = @_;
$self;
}
sub fromConfig($;$)
{ my ($class, $config, $priv) = @_;
defined $config
or return undef;
if(ref $config eq 'HASH')
{ $config->{private_key} ||= $priv;
return $class->new($config);
}
return $class->new({type => $config, private_key => $priv})
if !ref $config && $config =~ $sign_algorithm;
blessed $config
or panic "signer configuration requires HASH, OBJECT or TYPE.";
if($config->isa(__PACKAGE__))
{ $config->privateKey($priv) if $priv;
return $config
}
panic "signer configuration `$config' not recognized";
}
#-----------------
sub type() {shift->{XCWS_type}}
#-----------------
sub check() {panic "not extended"}
#-----------------
1;