File Coverage

blib/lib/Tiny/OpenSSL/Key.pm
Criterion Covered Total %
statement 43 44 97.7
branch 5 6 83.3
condition 2 3 66.6
subroutine 10 10 100.0
pod 1 1 100.0
total 61 64 95.3


line stmt bran cond sub pod time code
1 4     4   60962 use strict;
  4         5  
  4         136  
2 4     4   14 use warnings;
  4         4  
  4         174  
3              
4             package Tiny::OpenSSL::Key;
5              
6             # ABSTRACT: Key object.
7             our $VERSION = '0.1.2'; # VERSION
8              
9 4     4   15 use Carp;
  4         5  
  4         251  
10 4     4   1897 use Moo;
  4         48513  
  4         19  
11 4     4   7378 use Types::Standard qw( Str InstanceOf Int );
  4         221420  
  4         46  
12 4     4   4836 use Path::Tiny;
  4         20657  
  4         227  
13 4     4   1944 use Capture::Tiny qw( :all );
  4         88814  
  4         624  
14 4     4   1698 use Tiny::OpenSSL::Config qw($CONFIG);
  4         9  
  4         1428  
15              
16             with 'Tiny::OpenSSL::Role::Entity';
17              
18             has password => ( is => 'rw', isa => Str );
19              
20             has bits =>
21             ( is => 'rw', isa => Int, default => sub { $CONFIG->{key}{bits} } );
22              
23             sub create {
24 6     6 1 30328 my $self = shift;
25              
26 6         12 my @args = @{ $CONFIG->{key}{opts} };
  6         35  
27              
28 6 100 66     24 if ( -f $self->file && $self->file->lines > 0 ) {
29 1         237 $self->load;
30 1         8 return 1;
31             }
32              
33 5         2804 my $pass_file;
34              
35 5 100       108 if ( $self->password ) {
36 4         1210 $pass_file = Path::Tiny->tempfile;
37              
38 4         2054 $pass_file->spew( $self->password );
39 4         1863 push( @args, sprintf( '-%s', $CONFIG->{key}{block_cipher} ) );
40 4         24 push( @args, '-passout', sprintf( 'file:%s', $pass_file ) );
41             }
42              
43 5         78 push( @args, '-out', $self->file );
44 5         331 push( @args, $self->bits );
45              
46             my ( $stdout, $stderr, $exit ) = capture {
47 5     5   695089 system( $CONFIG->{openssl}, @args );
48 5         2495 };
49              
50 5 50       5342 if ( $exit != 0 ) {
51 0         0 croak( sprintf( 'cannot create key: %s', $stderr ) );
52             }
53              
54 5         64 $self->ascii( $self->file->slurp );
55              
56 5         4396 return 1;
57             }
58              
59             1;
60              
61             __END__