$VERSION
=
'0.02'
;
sub
new {
die
"must subclass"
; }
sub
init {
die
"must subclass"
; }
sub
kdf_hex
{
my
$self
=
shift
@_
;
my
$ret
;
if
(
$_
[0])
{
$ret
=
$self
->kdf(
$_
[0]);
}
else
{
$ret
=
$self
->kdf();
}
return
unpack
(
'H*'
,
$ret
);
}
sub
kdf {
die
"must subclass"
; }
sub
digest
{
my
$self
=
shift
@_
;
if
(
$_
[0])
{
$self
->{-digest} = (
ref
(
$_
[0]) ?
ref
(
$_
[0]) :
$_
[0]);
}
return
$self
->{-digest};
}
sub
digestparam
{
my
$self
=
shift
@_
;
if
(
$_
[0])
{
$self
->{-digestparam} =
$_
[0];
}
return
$self
->{-digestparam};
}
sub
seed
{
my
$self
=
shift
@_
;
if
(
$_
[0])
{
$self
->{-seed} =
$_
[0];
}
return
$self
->{-seed};
}
sub
counter
{
my
$self
=
shift
@_
;
if
(
$_
[0])
{
$self
->{-counter} =
$_
[0];
}
return
$self
->{-counter};
}
sub
iv
{
my
$self
=
shift
@_
;
if
(
$_
[0])
{
$self
->{-iv} =
$_
[0];
}
return
$self
->{-iv};
}
sub
kdf_iv
{
my
$self
=
shift
@_
;
my
$kLen
= 16;
if
(
$_
[0])
{
$kLen
=
$_
[0];
}
my
$ivLen
= 16;
if
(
$_
[1])
{
$ivLen
=
$_
[1];
}
my
$len
=
$kLen
+
$ivLen
;
my
$out
=
$self
->kdf(
$len
);
return
(
substr
(
$out
,0,
$kLen
),
substr
(
$out
,
$kLen
,
$ivLen
));
}
1;