summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2011-05-17 14:42:25 +0200
committerDaniel Friesel <derf@finalrewind.org>2011-05-17 14:42:25 +0200
commit9f84c2ba374a07fcf12fdf41c0d6f1fc3f315655 (patch)
tree04e499e55236909676318be4ca69286fb6ada9bd /lib
parent391929448038a478f23cfa28db528e1f4a1e60d9 (diff)
Move create_salt to App::Raps2::Password, make $pw->salt() return current salt
Diffstat (limited to 'lib')
-rw-r--r--lib/App/Raps2.pm36
-rw-r--r--lib/App/Raps2/Password.pm19
2 files changed, 31 insertions, 24 deletions
diff --git a/lib/App/Raps2.pm b/lib/App/Raps2.pm
index 9d43364..3b97fa9 100644
--- a/lib/App/Raps2.pm
+++ b/lib/App/Raps2.pm
@@ -75,23 +75,6 @@ sub new {
return bless($ref, $obj);
}
-=item $raps2->create_salt()
-
-Returns a 16-character random salt for App::Raps2::Password(3pm).
-
-=cut
-
-sub create_salt {
- my ($self) = @_;
- my $salt = q{};
-
- for (1 .. 16) {
- $salt .= chr(0x21 + int(rand(90)));
- }
-
- return $salt;
-}
-
=item $raps2->file_to_hash(I<$file>)
Reads $file (lines with key/value separated by whitespace) and returns a hash
@@ -145,7 +128,7 @@ Asks the user for the master passphrase.
sub get_master_password {
my ($self) = @_;
- my $pass = $self->ui()->read_pw('Master Password', 0);
+ my $pass = $self->ui->read_pw('Master Password', 0);
$self->{pass} = App::Raps2::Password->new(
cost => $self->{default}->{cost},
@@ -165,15 +148,14 @@ Creates a default config and asks the user to set a master password.
sub create_config {
my ($self) = @_;
my $cost = 12;
- my $salt = $self->create_salt();
- my $pass = $self->ui()->read_pw('Master Password', 1);
+ my $pass = $self->ui->read_pw('Master Password', 1);
$self->{pass} = App::Raps2::Password->new(
cost => $cost,
- salt => $salt,
passphrase => $pass,
);
- my $hash = $self->{pass}->crypt();
+ my $hash = $self->pw->crypt();
+ my $salt = $self->pw->salt();
write_file(
$self->{xdg_conf} . '/password',
@@ -205,7 +187,13 @@ Returns the App::Raps2::Password(3pm) object.
sub pw {
my ($self) = @_;
- return $self->{pass};
+
+ if (defined $self->{pass}) {
+ return $self->{pass};
+ }
+ else {
+ confess('No App::Raps2::Password object, did you call get_master_password?');
+ }
}
=item $raps2->ui()
@@ -235,7 +223,7 @@ sub cmd_add {
$self->get_master_password();
- my $salt = $self->create_salt();
+ my $salt = $self->pw->create_salt();
my $url = $self->ui->read_line('URL');
my $login = $self->ui->read_line('Login');
my $pass = $self->ui->read_pw('Password', 1);
diff --git a/lib/App/Raps2/Password.pm b/lib/App/Raps2/Password.pm
index 10431ed..b236b7b 100644
--- a/lib/App/Raps2/Password.pm
+++ b/lib/App/Raps2/Password.pm
@@ -17,6 +17,10 @@ sub new {
$conf{cost} //= 12;
+ if (not defined $conf{salt}) {
+ $conf{salt} = create_salt();
+ }
+
if (not (defined $conf{salt} and length($conf{salt}) == 16)) {
confess('incorrect salt length');
}
@@ -30,9 +34,24 @@ sub new {
return bless($ref, $obj);
}
+sub create_salt {
+ my ($self) = @_;
+ my $salt = q{};
+
+ for (1 .. 16) {
+ $salt .= chr(0x21 + int(rand(90)));
+ }
+
+ return $salt;
+}
+
sub salt {
my ($self, $salt) = @_;
+ if (not defined $salt) {
+ return $self->{salt};
+ }
+
if (not (defined $salt and length($salt) == 16)) {
confess('incorrect salt length');
}