File Coverage

blib/lib/Crypt/PKCS11/Attribute/Value.pm
Criterion Covered Total %
statement 31 31 100.0
branch 12 12 100.0
condition 15 15 100.0
subroutine 6 6 100.0
pod 2 2 100.0
total 66 66 100.0


line stmt bran cond sub pod time code
1             # Copyright (c) 2015 Jerry Lundström
2             # Copyright (c) 2015 .SE (The Internet Infrastructure Foundation)
3             # All rights reserved.
4             #
5             # Redistribution and use in source and binary forms, with or without
6             # modification, are permitted provided that the following conditions
7             # are met:
8             # 1. Redistributions of source code must retain the above copyright
9             # notice, this list of conditions and the following disclaimer.
10             # 2. Redistributions in binary form must reproduce the above copyright
11             # notice, this list of conditions and the following disclaimer in the
12             # documentation and/or other materials provided with the distribution.
13             #
14             # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15             # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16             # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17             # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
18             # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19             # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
20             # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21             # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22             # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23             # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24             # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25              
26             package Crypt::PKCS11::Attribute::Value;
27              
28 2     2   8 use common::sense;
  2         2  
  2         10  
29 2     2   78 use Carp;
  2         3  
  2         108  
30              
31 2     2   10 use base qw(Crypt::PKCS11::Attribute);
  2         3  
  2         628  
32              
33 2     2   10 use Crypt::PKCS11;
  2         2  
  2         823  
34              
35             sub type () { CKA_VALUE }
36              
37             sub set {
38 7     7 1 839 my ($self) = shift;
39              
40 7 100 100     62 if (scalar @_ == 1 and defined $_[0] and !Crypt::PKCS11::XS::SvUOK($_[0]) and !Crypt::PKCS11::XS::SvIOK($_[0])) {
      100        
      100        
41 1         3 utf8::downgrade($_[0]);
42 1         5 $self->{pValue} = pack('a*', $_[0]);
43             }
44             else {
45 6 100       18 unless (scalar @_) {
46 1         126 confess 'No byte values in arguments';
47             }
48              
49 5         10 foreach (@_) {
50 5 100 100     37 unless (defined $_ and Crypt::PKCS11::XS::SvUOK($_) and $_ <= 255) {
      100        
51 4         405 confess 'Value to set is not a valid byte';
52             }
53             }
54              
55 1         7 $self->{pValue} = pack('C*', @_);
56             }
57              
58 2         6 return $self;
59             }
60              
61             sub get {
62 6     6 1 575 my ($self) = @_;
63              
64 6 100       22 unless (defined $self->{pValue}) {
65 3 100       22 return wantarray ? () : undef;
66             }
67              
68 3 100       8 unless (wantarray) {
69 2         10 my $string = unpack('a*', $self->{pValue});
70 2         4 utf8::upgrade($string);
71              
72 2         7 return $string;
73             }
74              
75 1         6 return unpack('C*', $self->{pValue});
76             }
77              
78             1;
79              
80             __END__