File Coverage

blib/lib/Crypt/Stream/Salsa20.pm
Criterion Covered Total %
statement 10 10 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 14 100.0


line stmt bran cond sub pod time code
1             package Crypt::Stream::Salsa20;
2              
3 4     4   166661 use strict;
  4         18  
  4         187  
4 4     4   33 use warnings;
  4         10  
  4         319  
5             our $VERSION = '0.089';
6              
7 4     4   651 use CryptX;
  4         11  
  4         309  
8              
9 1     1   3658 sub CLONE_SKIP { 1 } # prevent cloning
10              
11             1;
12              
13             =pod
14              
15             =head1 NAME
16              
17             Crypt::Stream::Salsa20 - Stream cipher Salsa20
18              
19             =head1 SYNOPSIS
20              
21             use Crypt::Stream::Salsa20;
22              
23             # encrypt
24             my $key = "1234567890123456";
25             my $nonce = "12345678";
26             my $enc_stream = Crypt::Stream::Salsa20->new($key, $nonce);
27             my $ct = $enc_stream->crypt("plain message");
28              
29             # decrypt
30             my $dec_stream = Crypt::Stream::Salsa20->new($key, $nonce);
31             my $pt = $dec_stream->crypt($ct);
32              
33             =head1 DESCRIPTION
34              
35             Provides an interface to the Salsa20 stream cipher.
36              
37             =head1 METHODS
38              
39             Unless noted otherwise, assume C<$stream> is an existing stream object created
40             via C, for example:
41              
42             my $stream = Crypt::Stream::Salsa20->new($key, $nonce);
43              
44             =head2 new
45              
46             my $stream = Crypt::Stream::Salsa20->new($key, $nonce);
47             #or
48             my $stream = Crypt::Stream::Salsa20->new($key, $nonce, $counter, $rounds);
49              
50             # $key .. [binary string] 32 or 16 bytes
51             # $nonce .. [binary string] 8 bytes
52             # $counter .. [integer] initial counter value (DEFAULT: 0)
53             # $rounds .. [integer] rounds (DEFAULT: 20)
54              
55             =head2 crypt
56              
57             Encrypts or decrypts data. The output has the same length as the input.
58             Returns a binary string (raw bytes).
59              
60             The input is converted using Perl's usual scalar stringification. Passing
61             C is treated as an empty string with the usual warning, and numeric
62             scalars are stringified before processing.
63              
64             my $ciphertext = $stream->crypt($plaintext);
65             #or
66             my $plaintext = $stream->crypt($ciphertext);
67              
68             =head2 keystream
69              
70             Returns C<$length> bytes of raw keystream as a binary string.
71              
72             The length is taken using Perl's usual numeric coercion. Values that coerce to
73             an oversized unsigned length are rejected as too large.
74              
75             my $random_key = $stream->keystream($length);
76              
77             =head2 clone
78              
79             Returns a copy of the stream cipher object in its current state.
80              
81             my $stream2 = $stream->clone();
82              
83             =head1 SEE ALSO
84              
85             =over
86              
87             =item * L, L, L, L
88              
89             =item * L
90              
91             =back
92              
93             =cut