Codebase list libcryptx-perl / 71ece5f
DSA/DH tuning Karel Miko 10 years ago
3 changed file(s) with 34 addition(s) and 20 deletion(s). Raw diff Collapse all Expand all
156156 ### OO interface
157157
158158 #Encryption: Alice
159 my $pub = Crypt::PK::DH->new('Bob_pub_dh1.der');
159 my $pub = Crypt::PK::DH->new('Bob_pub_dh1.key');
160160 my $ct = $pub->encrypt("secret message");
161161 #
162162 #Encryption: Bob (received ciphertext $ct)
163 my $priv = Crypt::PK::DH->new('Bob_priv_dh1.der');
163 my $priv = Crypt::PK::DH->new('Bob_priv_dh1.key');
164164 my $pt = $priv->decrypt($ct);
165165
166166 #Signature: Alice
167 my $priv = Crypt::PK::DH->new('Alice_priv_dh1.der');
167 my $priv = Crypt::PK::DH->new('Alice_priv_dh1.key');
168168 my $sig = $priv->sign_message($message);
169169 #
170170 #Signature: Bob (received $message + $sig)
171 my $pub = Crypt::PK::DH->new('Alice_pub_dh1.der');
171 my $pub = Crypt::PK::DH->new('Alice_pub_dh1.key');
172172 $pub->verify_message($sig, $message) or die "ERROR";
173173
174174 #Shared secret
175 my $priv = Crypt::PK::DH->new('Alice_priv_dh1.der');
176 my $pub = Crypt::PK::DH->new('Bob_pub_dh1.der');
175 my $priv = Crypt::PK::DH->new('Alice_priv_dh1.key');
176 my $pub = Crypt::PK::DH->new('Bob_pub_dh1.key');
177177 my $shared_secret = $priv->shared_secret($pub);
178178
179179 #Key generation
185185 ### Functional interface
186186
187187 #Encryption: Alice
188 my $ct = dh_encrypt('Bob_pub_dh1.der', "secret message");
188 my $ct = dh_encrypt('Bob_pub_dh1.key', "secret message");
189189 #Encryption: Bob (received ciphertext $ct)
190 my $pt = dh_decrypt('Bob_priv_dh1.der', $ct);
190 my $pt = dh_decrypt('Bob_priv_dh1.key', $ct);
191191
192192 #Signature: Alice
193 my $sig = dh_sign_message('Alice_priv_dh1.der', $message);
193 my $sig = dh_sign_message('Alice_priv_dh1.key', $message);
194194 #Signature: Bob (received $message + $sig)
195 dh_verify_message('Alice_pub_dh1.der', $sig, $message) or die "ERROR";
195 dh_verify_message('Alice_pub_dh1.key', $sig, $message) or die "ERROR";
196196
197197 #Shared secret
198 my $shared_secret = dh_shared_secret('Alice_priv_dh1.der', 'Bob_pub_dh1.der');
198 my $shared_secret = dh_shared_secret('Alice_priv_dh1.key', 'Bob_pub_dh1.key');
199199
200200 =head1 FUNCTIONS
201201
202202 =head2 dh_encrypt
203203
204 DH based encryption. See method L</encrypt> below.
204 DH based encryption as implemented by libtomcrypt. See method L</encrypt> below.
205205
206206 my $ct = dh_encrypt($pub_key_filename, $message);
207207 #or
208208 my $ct = dh_encrypt(\$buffer_containing_pub_key, $message);
209 #or
210 my $ct = dh_encrypt($pub_key_filename, $message, $hash_name);
209211
210212 =head2 dh_decrypt
211213
212 DH based decryption. See method L</decrypt> below.
214 DH based decryption as implemented by libtomcrypt. See method L</decrypt> below.
213215
214216 my $pt = dh_decrypt($priv_key_filename, $ciphertext);
215217 #or
217219
218220 =head2 dh_sign_message
219221
220 Generate DH signature. See method L</sign_message> below.
222 Generate DH signature as implemented by libtomcrypt. See method L</sign_message> below.
221223
222224 my $sig = dh_sign_message($priv_key_filename, $message);
223225 #or
227229
228230 =head2 dh_verify_message
229231
230 Verify DH signature. See method L</verify_message> below.
232 Verify DH signature as implemented by libtomcrypt. See method L</verify_message> below.
231233
232234 dh_verify_message($pub_key_filename, $signature, $message) or die "ERROR";
233235 #or
237239
238240 =head2 dh_sign_hash
239241
240 Generate DH signature. See method L</sign_hash> below.
242 Generate DH signature as implemented by libtomcrypt. See method L</sign_hash> below.
241243
242244 my $sig = dh_sign_hash($priv_key_filename, $message_hash);
243245 #or
245247
246248 =head2 dh_verify_hash
247249
248 Verify DH signature. See method L</verify_hash> below.
250 Verify DH signature as implemented by libtomcrypt. See method L</verify_hash> below.
249251
250252 dh_verify_hash($pub_key_filename, $signature, $message_hash) or die "ERROR";
251253 #or
255257
256258 DH based shared secret generation. See method L</shared_secret> below.
257259
258 my $shared_secret = dh_shared_secret('Alice_priv_dh1.der', 'Bob_pub_dh1.der');
260 #on Alice side
261 my $shared_secret = dh_shared_secret('Alice_priv_dh1.key', 'Bob_pub_dh1.key');
262
263 #on Bob side
264 my $shared_secret = dh_shared_secret('Bob_priv_dh1.key', 'Alice_pub_dh1.key');
259265
260266 =head1 METHODS
261267
273279 random data taken from C</dev/random> (UNIX) or C<CryptGenRandom> (Win32).
274280
275281 $pk->generate_key($keysize);
276 # $keysize:
282 ### $keysize (in bytes) corresponds to DH params (p, g) predefined by libtomcrypt
277283 # 96 => DH-768
278284 # 128 => DH-1024
279285 # 160 => DH-1280
300306
301307 my $pk = Crypt::PK::DH->new($pub_key_filename);
302308 my $ct = $pk->encrypt($message);
309 #or
310 my $ct = $pk->encrypt($message, $hash_name);
311
312 #NOTE: $hash_name can be 'SHA1' (DEFAULT), 'SHA256' or any other hash supported by L<Crypt::Digest>
303313
304314 =head2 decrypt
305315
267267
268268 Elliptic curve Diffie-Hellman (ECDH) - construct a Diffie-Hellman shared secret with a private and public ECC key. See method L</shared_secret> below.
269269
270 #on Alice side
270271 my $shared_secret = ecc_shared_secret('Alice_priv_ecc1.der', 'Bob_pub_ecc1.der');
272
273 #on Bob side
274 my $shared_secret = ecc_shared_secret('Bob_priv_ecc1.der', 'Alice_pub_ecc1.der');
271275
272276 =head1 METHODS
273277
6464 size_q(Crypt::PK::DSA self)
6565 CODE:
6666 if (self->key.type == -1 || self->key.qord <= 0) XSRETURN_UNDEF;
67 RETVAL = ltc_mp.unsigned_size(self->key.q);
67 RETVAL = self->key.qord;
6868 OUTPUT:
6969 RETVAL
7070