Codebase list libcryptx-perl / b51e454
fix: GCM: Missing aad_add #36 Karel Miko 6 years ago
6 changed file(s) with 42 addition(s) and 41 deletion(s). Raw diff Collapse all Expand all
139139 }
140140
141141 int
142 aad_add(Crypt::AuthEnc::EAX self, SV * adata)
142 adata_add(Crypt::AuthEnc::EAX self, SV * adata)
143143 CODE:
144144 {
145145 STRLEN h_len;
4242 RETVAL
4343
4444 void
45 aad_add(Crypt::AuthEnc::OCB self, SV * data)
45 adata_add(Crypt::AuthEnc::OCB self, SV * data)
4646 CODE:
4747 {
4848 int rv;
5353
5454 # encrypt and authenticate
5555 my $ae = Crypt::AuthEnc::ChaCha20Poly1305->new($key, $iv);
56 $ae->aad_add('additional_authenticated_data1');
57 $ae->aad_add('additional_authenticated_data2');
56 $ae->adata_add('additional_authenticated_data1');
57 $ae->adata_add('additional_authenticated_data2');
5858 $ct = $ae->encrypt_add('data1');
5959 $ct = $ae->encrypt_add('data2');
6060 $ct = $ae->encrypt_add('data3');
6262
6363 # decrypt and verify
6464 my $ae = Crypt::AuthEnc::ChaCha20Poly1305->new($key, $iv);
65 $ae->aad_add('additional_authenticated_data1');
66 $ae->aad_add('additional_authenticated_data2');
65 $ae->adata_add('additional_authenticated_data1');
66 $ae->adata_add('additional_authenticated_data2');
6767 $pt = $ae->decrypt_add('ciphertext1');
6868 $pt = $ae->decrypt_add('ciphertext2');
6969 $pt = $ae->decrypt_add('ciphertext3');
116116 # $key ..... encryption key of proper length (128 or 256 bits / 16 or 32 bytes)
117117 # $iv ...... initialization vector (64 or 96 bits / 8 or 12 bytes)
118118
119 =head2 aad_add
119 =head2 adata_add
120120
121 Add B<additional authenticated data>.
121122 Can be called before the first C<encrypt_add> or C<decrypt_add>;
122123
123 $ae->aad_add($aad_data); #can be called multiple times
124 $ae->adata_add($aad_data); #can be called multiple times
124125
125126 =head2 encrypt_add
126127
1919 # - encrypt_done
2020 # - decrypt_add
2121 # - decrypt_done
22 # - aad_add
22 # - adata_add
2323
2424 sub new { my $class = shift; _new(Crypt::Cipher::_trans_cipher_name(shift), @_) }
2525
3131 my $plaintext = shift;
3232
3333 my $m = Crypt::AuthEnc::EAX->new($cipher_name, $key, $iv);
34 $m->aad_add($adata) if defined $adata;
34 $m->adata_add($adata) if defined $adata;
3535 my $ct = $m->encrypt_add($plaintext);
3636 my $tag = $m->encrypt_done;
3737 return ($ct, $tag);
4646 my $tag = shift;
4747
4848 my $m = Crypt::AuthEnc::EAX->new($cipher_name, $key, $iv);
49 $m->aad_add($adata) if defined $adata;
49 $m->adata_add($adata) if defined $adata;
5050 my $ct = $m->decrypt_add($ciphertext);
5151 return $m->decrypt_done($tag) ? $ct : undef;
5252 }
5353
54 sub header_add {
55 # obsolete, only for backwards compatibility
56 shift->aad_add(@_);
57 }
54 # obsolete, only for backwards compatibility
55 sub header_add { goto &adata_add }
56 sub aad_add { goto &adata_add }
5857
5958 1;
6059
7170
7271 # encrypt and authenticate
7372 my $ae = Crypt::AuthEnc::EAX->new("AES", $key, $iv);
74 $ae->aad_add('additional_authenticated_data1');
75 $ae->aad_add('additional_authenticated_data2');
73 $ae->adata_add('additional_authenticated_data1');
74 $ae->adata_add('additional_authenticated_data2');
7675 $ct = $ae->encrypt_add('data1');
7776 $ct = $ae->encrypt_add('data2');
7877 $ct = $ae->encrypt_add('data3');
8079
8180 # decrypt and verify
8281 my $ae = Crypt::AuthEnc::EAX->new("AES", $key, $iv);
83 $ae->aad_add('additional_authenticated_data1');
84 $ae->aad_add('additional_authenticated_data2');
82 $ae->adata_add('additional_authenticated_data1');
83 $ae->adata_add('additional_authenticated_data2');
8584 $pt = $ae->decrypt_add('ciphertext1');
8685 $pt = $ae->decrypt_add('ciphertext2');
8786 $pt = $ae->decrypt_add('ciphertext3');
141140 # $iv ...... unique initialization vector (no need to keep it secret)
142141 # $adata ... additional authenticated data (optional)
143142
144 =head2 aad_add
143 =head2 adata_add
145144
146 $ae->aad_add($adata); #can be called multiple times
145 $ae->adata_add($adata); #can be called multiple times
147146
148147 =head2 encrypt_add
149148
6464
6565 # encrypt and authenticate
6666 my $ae = Crypt::AuthEnc::GCM->new("AES", $key, $iv);
67 $ae->aad_add('additional_authenticated_data1');
68 $ae->aad_add('additional_authenticated_data2');
67 $ae->adata_add('additional_authenticated_data1');
68 $ae->adata_add('additional_authenticated_data2');
6969 $ct = $ae->encrypt_add('data1');
7070 $ct = $ae->encrypt_add('data2');
7171 $ct = $ae->encrypt_add('data3');
7373
7474 # decrypt and verify
7575 my $ae = Crypt::AuthEnc::GCM->new("AES", $key, $iv);
76 $ae->aad_add('additional_authenticated_data1');
77 $ae->aad_add('additional_authenticated_data2');
76 $ae->adata_add('additional_authenticated_data1');
77 $ae->adata_add('additional_authenticated_data2');
7878 $pt = $ae->decrypt_add('ciphertext1');
7979 $pt = $ae->decrypt_add('ciphertext2');
8080 $pt = $ae->decrypt_add('ciphertext3');
133133
134134 =head2 iv_add
135135
136 $ae->iv_add($iv_data); #can be called multiple times
136 Set initialization vector (IV).
137137
138 =head2 aad_add
138 $ae->iv_add($iv_data); #can be called multiple times
139139
140 Can be called B<after> all C<iv_add> calls but before the first C<encrypt_add> or C<decrypt_add>;
140 =head2 adata_add
141141
142 $ae->aad_add($aad_data); #can be called multiple times
142 Add B<additional authenticated data>.
143 Can be called B<after> all C<iv_add> calls but before the first C<encrypt_add> or C<decrypt_add>.
144
145 $ae->adata_add($aad_data); #can be called multiple times
143146
144147 =head2 encrypt_add
145148
2121 my $plaintext = shift;
2222
2323 my $m = Crypt::AuthEnc::OCB->new($cipher_name, $key, $nonce);
24 $m->aad_add($adata) if defined $adata;
24 $m->adata_add($adata) if defined $adata;
2525 my $ct = $m->encrypt_last($plaintext);
2626 my $tag = $m->encrypt_done;
2727 return ($ct, $tag);
3636 my $tag = shift;
3737
3838 my $m = Crypt::AuthEnc::OCB->new($cipher_name, $key, $nonce);
39 $m->aad_add($adata) if defined $adata;
39 $m->adata_add($adata) if defined $adata;
4040 my $ct = $m->decrypt_last($ciphertext);
4141 return $m->decrypt_done($tag) ? $ct : undef;
4242 }
4343
44 sub adata_add {
45 # obsolete, only for backwards compatibility
46 shift->aad_add(@_);
47 }
44 # obsolete, only for backwards compatibility
45 sub aad_add { goto &adata_add }
4846
4947 1;
5048
6159
6260 # encrypt and authenticate
6361 my $ae = Crypt::AuthEnc::OCB->new("AES", $key, $nonce);
64 $ae->aad_add('additional_authenticated_data1');
65 $ae->aad_add('additional_authenticated_data2');
62 $ae->adata_add('additional_authenticated_data1');
63 $ae->adata_add('additional_authenticated_data2');
6664 $ct = $ae->encrypt_add('data1');
6765 $ct = $ae->encrypt_add('data2');
6866 $ct = $ae->encrypt_add('data3');
7169
7270 # decrypt and verify
7371 my $ae = Crypt::AuthEnc::OCB->new("AES", $key, $nonce);
74 $ae->aad_add('additional_authenticated_data1');
75 $ae->aad_add('additional_authenticated_data2');
72 $ae->adata_add('additional_authenticated_data1');
73 $ae->adata_add('additional_authenticated_data2');
7674 $pt = $ae->decrypt_add('ciphertext1');
7775 $pt = $ae->decrypt_add('ciphertext2');
7876 $pt = $ae->decrypt_add('ciphertext3');
124122 # $key ..... AES key of proper length (128/192/256bits)
125123 # $nonce ... unique nonce/salt (no need to keep it secret)
126124
127 =head2 aad_add
125 =head2 adata_add
128126
129 $ae->aad_add($adata); #can be called multiple times
127 $ae->adata_add($adata); #can be called multiple times
130128
131129 =head2 encrypt_add
132130