Codebase list libcryptx-perl / 8a8002d
password protected RSA/DSA keys Karel Miko 10 years ago
27 changed file(s) with 407 addition(s) and 17 deletion(s). Raw diff Collapse all Expand all
00 Changes for CryptX
11
22 TODO:
3 - consider: RSA->check_key, RSA password protected keys
4 - consider: PK->encrypt|decrypt ... add 'armour' param and make it compatible with Crypt::RSA
3 - fix crash/memleak/or_what_it_is related to rsa_free/dsa_free
4 - RSA->check_key (basic check + extented primality test)
55 - croak with the "real caller" (Crypt::Mac::*, Crypt::Mode::*, ...)
66 - croak when mode does not call start_(en|de)crypt
77 - "libtom-src/bn_mp_invmod.c", line 37: warning: statement not reached
8
9 0.017 2013/XXXXX
10 - support for import/export of password protected RSA/DSA keys
11 - RSA: added - export_key_pem('public_x509')
812
913 0.016 2013/09/15
1014 - added missing test for key2hash, sign_hash, verify_hash
1414 use MIME::Base64 qw(encode_base64 decode_base64);
1515
1616 sub new {
17 my ($class, $f) = @_;
17 my ($class, $f, $p) = @_;
1818 my $self = _new();
19 $self->import_key($f) if $f;
19 $self->import_key($f, $p) if $f;
2020 return $self;
2121 }
2222
319319 #or
320320 my $public_pem = $pk->export_key_pem('public');
321321
322 Support for password protected PEM keys
323
324 my $private_pem = $pk->export_key_pem('private', $password);
325 #or
326 my $private_pem = $pk->export_key_pem('private', $password, $cipher);
327
328 # supported ciphers: 'DES-CBC'
329 # 'DES-EDE3-CBC'
330 # 'DES-EDE3'
331 # 'SEED-CBC'
332 # 'AES-128-CBC'
333 # 'AES-192-CBC'
334 # 'AES-256-CBC' (DEFAULT)
335
322336 =head2 encrypt
323337
324338 my $pk = Crypt::PK::DSA->new($pub_key_filename);
1414 use MIME::Base64 qw(encode_base64 decode_base64);
1515
1616 sub new {
17 my ($class, $f) = @_;
17 my ($class, $f, $p) = @_;
1818 my $self = _new();
19 $self->import_key($f) if $f;
19 $self->import_key($f, $p) if $f;
2020 return $self;
2121 }
2222
3131 return Crypt::PK::_asn1_to_pem($key, "RSA PRIVATE KEY", $password, $cipher) if $type eq 'private';
3232
3333 # PKCS#1 RSAPublicKey* (PEM header: BEGIN RSA PUBLIC KEY)
34 return Crypt::PK::_asn1_to_pem($key, "RSA PUBLIC KEY") if $type eq 'public';
3435 # X.509 SubjectPublicKeyInfo** (PEM header: BEGIN PUBLIC KEY)
35 return Crypt::PK::_asn1_to_pem($key, "RSA PUBLIC KEY") if $type eq 'public';
36 return Crypt::PK::_asn1_to_pem($key, "PUBLIC KEY") if $type eq 'public_x509';
37
3638 }
3739
3840 sub generate_key {
342344 my $private_pem = $pk->export_key_pem('private');
343345 #or
344346 my $public_pem = $pk->export_key_pem('public');
347 #or
348 my $public_pem = $pk->export_key_pem('public_x509');
349
350 With parameter C<'public'> uses header and footer lines:
351
352 -----BEGIN RSA PUBLIC KEY------
353 -----END RSA PUBLIC KEY------
354
355 With parameter C<'public_x509'> uses header and footer lines:
356
357 -----BEGIN PUBLIC KEY------
358 -----END PUBLIC KEY------
359
360 Support for password protected PEM keys
361
362 my $private_pem = $pk->export_key_pem('private', $password);
363 #or
364 my $private_pem = $pk->export_key_pem('private', $password, $cipher);
365
366 # supported ciphers: 'DES-CBC'
367 # 'DES-EDE3-CBC'
368 # 'DES-EDE3'
369 # 'SEED-CBC'
370 # 'AES-128-CBC'
371 # 'AES-192-CBC'
372 # 'AES-256-CBC' (DEFAULT)
345373
346374 =head2 encrypt
347375
3434 $klen = $klen ? int($klen/8) : Crypt::Cipher::min_keysize($cipher);
3535 my $ilen = Crypt::Cipher::blocksize($cipher);
3636 croak "FATAL: unsupported cipher '$cipher_name'" unless $klen && $ilen;
37
38
37
3938 return (Crypt::Mode::CBC->new($cipher), $klen, $ilen) if $mode eq 'CBC';
4039 return (Crypt::Mode::CFB->new($cipher), $klen, $ilen) if $mode eq 'CFB';
4140 return (Crypt::Mode::ECB->new($cipher), $klen, $ilen) if $mode eq 'ECB';
4443
4544 sub _password2key {
4645 my ($password, $klen, $iv, $hash) = @_;
47 my $salt = substr($iv,0,8);
46 my $salt = substr($iv, 0, 8);
4847 my $key = '';
4948 while (length($key) < $klen) {
5049 $key .= digest_data($hash, $key . $password . $salt);
5453
5554 sub _pem_to_asn1 {
5655 my ($data, $password) = @_;
57
56
5857 my ($begin, $object, $headers, $content, $end) = $data =~ m/(-----BEGIN ([^\n\-]+)-----)\n(.*?\n\n)?(.+)(-----END .*?-----)/s;
5958 return $content unless $content;
6059 $content = decode_base64($content);
61
60
6261 my ($ptype, $cipher_name, $iv_hex);
6362 for my $h (split /\n/, $headers//'') {
6463 my ($k, $v) = split /:\s*/, $h, 2;
6564 $ptype = $v if $k eq 'Proc-Type';
6665 ($cipher_name, $iv_hex) = $v =~ /^\s*(.*?)\s*,\s*([0-9a-fA-F]+)\s*$/ if $k eq 'DEK-Info';
6766 }
68
67
6968 if ($cipher_name && $iv_hex && $ptype && $ptype eq '4,ENCRYPTED') {
7069 croak "FATAL: encrypted PEM but no password provided" unless defined $password;
7170 my $iv = pack("H*", $iv_hex);
7271 my ($mode, $klen) = _name2mode($cipher_name);
73 my $key = _password2key($password, $klen, $iv, 'MD5');
72 my $key = _password2key($password, $klen, $iv, 'MD5');
7473 return $mode->decrypt($content, $key, $iv);
7574 }
7675
8685 $cipher_name ||= 'AES-256-CBC';
8786 my ($mode, $klen, $ilen) = _name2mode($cipher_name);
8887 my $iv = random_bytes($ilen);
89 my $key = _password2key($password, $klen, $iv, 'MD5');
88 my $key = _password2key($password, $klen, $iv, 'MD5');
9089 $content = $mode->encrypt($data, $key, $iv);
9190 push @headers, 'Proc-Type: 4,ENCRYPTED', "DEK-Info: ".uc($cipher_name).",".unpack("H*", $iv);
9291 }
93
92
9493 my $rv = "-----BEGIN $header_name-----\n";
9594 if (@headers) {
9695 $rv .= "$_\n" for @headers;
22 use strict;
33 use warnings ;
44
5 our $VERSION = '0.016';
5 our $VERSION = '0.017';
66
77 require XSLoader;
88 XSLoader::load('CryptX', $VERSION);
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: AES-128-CBC,D5AA4E2FC68B30CC904B43873EF31A38
3
4 +VjbpU/gBzYiOyicUuDXBHuQccCeam1b+J50z/hI2wHVS6IItRlqYxax/fB4fePC
5 SHnlzoV0uDPsCUwGIVdfLXC88gsmof/hsKF0qxKnuKakKG+u1p+fauYbe3QWfAf5
6 6StHmFqEB6vaX2j2RpEoFsXcTf96Dp6+p+RAXXSK14VsD2kNha2jt9wi/7MXrbdQ
7 QWL8LNaZGP7QnN5+qyNNmCscjpoKZRP+g1Gswnz7GCDGmOFeopKfYJBGP+mqJuzG
8 1KklNxJcZ9aoga58Az/hkf/EUjQjI5yvysTVwjqxNkpRAa+43z1t2WXVui4dGBvP
9 +OPcRwqZviQlzTFz4ArOl/jNz/ZEwAmJJSS1SuKfSTGb4/7ErWTBPUS3XoFUtd79
10 79tRYrhomhlv8qThsJtnz3cBrYgzuKbipPdyLH49bg+4+R3UWQuPKa3g9b+KiqlY
11 hftPVHgzzxdb2oVhERx9Tjx3/QTJ1fiSgZdpGpYA5wL7wM8AHBpH3CBdDdwAq2XS
12 JpFq4iMIN93BF3kcxwiPPnC95yOOGt91RmiV+FHPfZGFvh0P6ZF4E3l5fH9LBRTQ
13 ODvimQy7N5/m048YxXyiyb6T0FqMluNfF6EGt+YAiyc=
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: AES-192-CBC,7AF69ABEBB17E476DF28AA325F4219F4
3
4 zMTTppHV4c6wg2II7EjxZ2Sr7fmvX86UQELRue2cr1fGJNupWmJ2/bYdKxz0hIaj
5 7/WLPSms2YJqBHNXr6YH4lWTJ8plitAHMrhd1dUTOPnZvZ0/idMzSy8E2yVh707k
6 hAh8gl9eVttUEFGVA0oRRnpAwt5Lh64+R3MdFoKNLxeg7qL6suLq0bd9AC0YTGzr
7 QiHFBT3xm+Iwhpij7T0KxfkG0QAM5dRGGqOCo9BdEXUYs2Y9kj5ZkkLysK3dp51k
8 /tRkq69eRS3Ox8X885NITpP6DjxA6IAui5AWMZ1ASysbdude9cgIf8FGjxLjjItd
9 ny2NZ5b/zWzEAEAlnHm7BnR2uatG5GrFLO1L1gKSde9UUKZ5GAnTVNPpSGcih37p
10 vzP7l+PKk+mSjS3O82FtTFBX/Wz8aw7DP8B9LP8pQ6NQIL9vzYiP/ZBde8KDuFM9
11 e5ViwXrxIB3QQadGkPNsUitKDtw/fn9cDrH1VDJ+V9Ce/yTx0uKdzfZ/Lko5tcLg
12 dovfjBy93qEiF5dF3cNU8+67uW4MJKtG6/K4AAi0nsl9ZpoAxkviyXUOgX+uWyzR
13 34vr/UhtnqZ+WbobvRsbUw==
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: AES-256-CBC,14ED68BBD5515C2E83ABF597D7AA0ACD
3
4 YOIUB/SU/320rjnJuaiTTb/8b2ND6E6s9zumY2/axEnWwtscFHIefS/oqPKyJAbM
5 W//Kq1J4lWZ5oJEVVTE1Y6DNI0StQ7xubVOQg6KbY5tDMG9JzvBPoEXVVtOeegXV
6 EcPFFuOlKmmWkqF6bWYGsXnBpxSR52cexBsk/G0WP19GkUoIYQM84GeecGdAJvZN
7 iGdgX9ecGtzNeWprfTsrMMBTCFDb7twyj0OLuzUeoTapnx68wmkeWebBMk1DaOkR
8 6HZT6UT6MfjnDDJLt/myCQhNoNymN0y53EAvPQDWOA3cOXCrHdvBICgq5ezdmNBZ
9 O/yD/+Lk/S7lbrPeo/cdJZw7CCQdy3Jn9J6dmPRT/J/I5/uuR14igOL944WGIT/j
10 +FslH2g9YnLA6lkYCBRUf7pM6cbKIDUS/nNvSW914Qug08WxIc0oUZ7DZBuaOAVC
11 crq2k5R3PnQ0OtggvOx8zj9/M/Tk99sjGwhj3DfoIJfZlFbORoZ1e4S93Qy9ekw0
12 vVKXmChFoTnt+QpYOF5U3QOfK0VL9Sf44mE8/FIYPssI+rusX2tVjr8lEElRwoqB
13 ZDupgGBZSu+mZ8E/dVnScA==
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: CAMELLIA-128-CBC,4AAF8AA37E76D1BC8F72F37DC2D865AD
3
4 S+DAz1fM1R1IaCO+F5pOw6JF6sHEQQk1fHDvubOFOH5hrWsYFwrla2o0fJvhBbon
5 4KcXE8QNRy1ss8g1EqLI+ok0wUVGvvn7m2CcvZzcVC9tZE+WtKHKQVNFfJaKm7dA
6 VdY23Ad79vBQ0cpda+aR4EerGdqI8uVkf8eqveOXbBIR/TvqOXuh9XotdTPfds2j
7 DyzmocgPgnQSEXNS6zB2meyo3gUt16/VBA0oW0Fh2TvKYksV5f8XRJqmpRSZXPx8
8 ZBA51+odZ/8By1sZuONvME/xeFZ5PLI5vMiYoBfhEphVAWPvtgDuxTOOxZSrCpT5
9 dZ2tUr9D4dzZcLEvnaXXZNDw69HJJWeAjiM/76tLgzSLN6i4T35bYQiMdjMyYOIB
10 QLIazPfN1llBb7DHjzQPATJ2w59U1bTO28oGmwZJNp4xL6hc0TcHb4N+HIHtyxQB
11 jJPdl8wiWdJC1Cc9dNa3pmDpYoxdP01FcQOWomUOpC1gZNRVBTIph/tL5Jd15P0R
12 nW4Jm6/8pOAUo7GkA5eXa3RRjwroN61EJQlyuBsURM/26WnFGcSFArCL6V7ILcMx
13 TmShOEasVHRDWd509h4cFg==
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: CAMELLIA-192-CBC,473E445A0D5FD8803AA40F48225CD6A3
3
4 w2e2vMYEj7pO33x/Me+9MzrTJYRI9vfPdzYQCsowxdlybFTcwUtqeCgPzeW5C6BZ
5 rx9WTX3OcYFPnAX22BFgDvGqT+3+ybR9NKylxUvoUC7OOofOa1gW+e1XqSRbkr+r
6 Jo26GT4ROBVY/i56qTUlYqg7X182wIp0MQSXJq+HXPhEogO4zYMXbROC9U7LcG4/
7 KO40Nx+C/18xRUAg2ZDjdkjK9L5u+QBpXa8qQuFtYd20NdDf8DQvgO9IwcDzPrMD
8 kYznrMosCMPpEfBik4PwjQDjyKFAe0j6O8ePIA+KVPO/gXF6EqNP/QZoGEwzpXIo
9 7Vu50ztdomni6L/EjpsltlmdJMXNA/JozYiWqp8UnQbdHOt7wvwTlJCpDas+GvHk
10 hHQ6HC4rOgCxCuZIzTlYVxx+ca6FEXnNs1hzmlVc692nkvSwQIt3i65IENH7hC4q
11 0yU2hF2+JANPiYVAfd2ERWDbpkTM8ug6XT9lcAKVUw3AI1aWA6xMLdZSU8atdIT9
12 6/KVFN/tXrNbm/U0C0EDcojNsSLE+vb4A6SBkuYZka/b5nXea1qOcwt/CNmn3bzf
13 bK68/s9EKkZQOekHrklfAw==
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: CAMELLIA-256-CBC,5D6BC3C2DCE61EC62D34FF9379050AFE
3
4 OQd/C+mhpHyFgjg8qR3esn54ENjfIg/+JjF996zi/fzA4vFeO6uJ257dFui3m84b
5 O6Q71wOpXWTpx8TKRCGUnoTE4Few4c+HJwwqu1I2NrKiiBi7DfuJF7T+PMX6z66E
6 R7gzUo+Zy7QdNKHAG75gDE9dgQBwbMHcuJ0iM0RWE59SleCtyQos+bFhR/ny7Amg
7 hPKq909XnmVbvWP5y84b8nK394PKqoK51lP0HoKY1NSPkuwj/RM61SiMRX1t5hpC
8 FdGQE9INaNCi8MJsq1oGPVAM1f72C5qb+JmCcGcaMyHxZf1YJYLYkraeSijrbwm9
9 Tz4n1vZOdgHckf31na78g79zlTWjDkON/QVFP3Ln4lT1sU9c7Gg/DducPnNQ9d00
10 2Czc8NofsR9DkafhUT9+Hr9QsNB6eukROlfpyiHSZeaN0Y1hkbwGIXvU85fW8zfb
11 ZYntNY+bTFDRCZyI04I87Z+DWxRAo8XJEskzGpJLuQYJzBZnHKnracPCYQtnSqFz
12 k5Kd3ZzoqksjVHVcI9m3reSFFY+NHcKQ15OQp+SMTQQnu1+nAhZQIV/tMhDslRMr
13 dDS9tkq8CiLdtRac3vcZCQ==
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: DES-CBC,227ADC3AA0299491
3
4 UISxBYAxPQMl2eK9LMAeHsssF6IxO+4G2ta2Jn8VE+boJrrH3iSTKeMXGjGaXl0z
5 DwcLGV+KMR70y+cxtTb34rFy+uSpBy10dOQJhxALDbe1XfCDQIUfaXRfMNA3um2I
6 JdZixUD/zcxBOUzao+MCr0V9XlJDgqBhJ5EEr53XHH07Eo5fhiBfbbR9NzdUPFrQ
7 p2ASyZtFh7RXoIBUCQgg21oeLddcNWV7gd/Y46kghO9s0JbJ8C+IsuWEPRSq502h
8 tSoDN6B0sxbVvOUICLLbQaxt7yduTAhRxVIJZ1PWATTVD7CZBVz9uIDZ7LOv+er2
9 1q3vkwb8E9spPsA240+BnfD571XEop4jrawxC0VKQZ+3cPVLc6jhIsxvzzFQUt67
10 g66v8GUgt7KF3KhVV7qEtntybQWDWb+K/uTIH9Ra8nP820d3Rnl61pPXDPlluteT
11 WSLOvEMN2zRmkaxQNv/tLdT0SYpQtdjw74G3A6T7+KnvinKrjtp1a/AXkCF9hNEx
12 DGbxOYo1UOmk8qdxWCrab34nO+Q8oQc9wjXHG+ZtRYIMoGMKREK8DeL4H1RPNkMf
13 rwXWk8scd8QFmJAb8De1VQ==
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: DES-EDE3-CBC,C4193B6D1BF3F2BF
3
4 A6o3o6+4F8iri8HFnDZuvYJmT3nNZQht14ysR2KZcjHs/J/vuOk4vKlk4C76Qdg4
5 uwpK1kep5Noi59odAwdmVPLOoVvmQDBRt2Jfvg61+lBXTywnBYNse8XhrBZLX08W
6 T/zb/edyf8ct/kSkKqGsQXtpmNR2RdXDW+5zkCRHHkd6QFnlFD5E5GCFt6vsXVrK
7 LlDzS7+iiPAaclEpW7HzsuR62PCyc7tPycxkWhqiM1b68/sShwurz1R7FPpzkpIc
8 EnL+B4kNwtxhwdITqe4DEuHM5+7DhfovHImvDsBD1KyPd3Y5unMHj/Aw94se/P4l
9 TTV3SYQnFzStcRpAKcgRysWr7dR+uZ86QEAVeoY6sL1r2gdNgV2AxjEhMoTeu++n
10 j2nf59WJHbQfLs3yFAmK+xtSv0VAffvbchbnI05vZOaMNTtVY83e68ftoRCK3PWC
11 VbgAec0zcce0qvuxbicUFhg/oLQbdWTV5w56a23QsPSkG+DFIp8BKrLL75SpcBKi
12 nnbApxb0nFcJkYn9747mPXjOp6RYHE/7DkyqkGkK5q0eO2R6xf4GaOFq6MfDM6aH
13 iQCsZt5wMjirfSSNALfuI4X4NlrqBN+2
14 -----END DSA PRIVATE KEY-----
0 -----BEGIN DSA PARAMETERS-----
1 MIIBHgKBgQCkSN9kp68di6qn62zD56W13LM8zWB9H3oa7jRGFsH2kXIn4iKSf4pU
2 HI43XLtHAnu5QVhwC+tf+Y5lcnbCzv27mxd+/tMV5vT3kcnmgeB+KnhONZhktcAt
3 ktZ+ph3G7RA9N5CwxagXpATH7i+6QImZNG0DVh7uu6PLHSk9K64hUwIVAP+7jv0v
4 Fn1Lurrjmh3GHkNJ3pc/AoGAQ31/Z3w1ymitWAr5B9Tv7zIWTe5BLuMRrJ673j2d
5 /qbV8rDpDv14GykOlflgLxd/xSaL7D2NJw/7bRXWOaa2t9ht4ENsJ3Qf2jJMzj5Z
6 QO3qpkLH58UKX/j9LQfbxLBlIdqxI4k2UlCEd54vIjgrDlvwUR58fzmSSB1USfpH
7 SAE=
8 -----END DSA PARAMETERS-----
0 -----BEGIN DSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: SEED-CBC,B4BD523CD59DA8DF3E8F397BBC025D8F
3
4 Twepa9tc/xebHwoZq9HidpglTPYPsxFY2LtidA9oHgLRLrbnhxNnf4LXmcqT69RG
5 QziI9YK0wlH31FRqaGbaQ6bP8E18EsSs2yGbHMciSHYr5Sz7KLxF7tE3urUCISZ1
6 NKuPe48PxLn4izKKgynKELzrtPjqQhCxBOmltSSNQ6HqW6qJQ5iyIKZHBWz3r9Lg
7 0/P3J2tjmViteStyeAdKjJI8HqipdghB12jNjAFE0M8LhUK2VYJYJd45Yur/z3NB
8 6nA6UgEeNCL4BT7hVsoQ7Fil4j641hSdo4rVVkLEobb+PFwvEqIM8KaQR8Xyn0Hx
9 imzGYxONqbr0JzWIZOwD2ty8X2CMS4q7k2GS8OkWwiupK8ksMhxWTDkrT5aysvDE
10 ZYNwXKrR5aaIKnJG0bwZvxpLNn1Nuy1EoGwLcMyCwCqfndg2AqTXgDx5+fUWx7UZ
11 EN22lEbWdGcbPh8gMVdyWG452xDc271SgEOhNF6fEAKvA00/C3FqgrmU4jDfv1H0
12 t9nCQLOM3CN/PbcCf0umMn1ZuSWRMB8laVqgsRs+Io0AJx/73/Aix8U4jCWSJQwD
13 ogz8cKEeceuywzqADWGcxg==
14 -----END DSA PRIVATE KEY-----
0 openssl genrsa -passout pass:secret -des3 -out rsa-des3.pem 1024
1 openssl genrsa -passout pass:secret -des -out rsa-des.pem 1024
2 openssl genrsa -passout pass:secret -seed -out rsa-seed.pem 1024
3 openssl genrsa -passout pass:secret -aes128 -out rsa-aes128.pem 1024
4 openssl genrsa -passout pass:secret -aes192 -out rsa-aes192.pem 1024
5 openssl genrsa -passout pass:secret -aes256 -out rsa-aes256.pem 1024
6 openssl genrsa -passout pass:secret -camellia128 -out rsa-camellia128.pem 1024
7 openssl genrsa -passout pass:secret -camellia192 -out rsa-camellia192.pem 1024
8 openssl genrsa -passout pass:secret -camellia256 -out rsa-camellia256.pem 1024
9
10 openssl dsaparam -out dsa-param.pem -outform pem 1024
11 openssl gendsa -passout pass:secret -des3 -out dsa-des3.pem dsa-param.pem
12 openssl gendsa -passout pass:secret -des -out dsa-des.pem dsa-param.pem
13 openssl gendsa -passout pass:secret -seed -out dsa-seed.pem dsa-param.pem
14 openssl gendsa -passout pass:secret -aes128 -out dsa-aes128.pem dsa-param.pem
15 openssl gendsa -passout pass:secret -aes192 -out dsa-aes192.pem dsa-param.pem
16 openssl gendsa -passout pass:secret -aes256 -out dsa-aes256.pem dsa-param.pem
17 openssl gendsa -passout pass:secret -camellia128 -out dsa-camellia128.pem dsa-param.pem
18 openssl gendsa -passout pass:secret -camellia192 -out dsa-camellia192.pem dsa-param.pem
19 openssl gendsa -passout pass:secret -camellia256 -out dsa-camellia256.pem dsa-param.pem
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: AES-128-CBC,2823DCBA91F7DBA2ED920CAEE40F0BB4
3
4 KAADjca5SzbAbdz2cF567ZO9WjZz+lA1C40gsOBvHB6LjWU32YGW6Hz9a7pwUjOh
5 E/gGSFkKv6pTJgXfLs/l+pIDGSohhzChw7hkmN1IgVXqDQZw3koW5Yn7bg6xeJoI
6 JFwIIQhnft6BHG2o/5MzUTRwHpIxRuIaz2FnZtBNbVtQInHtP8LJIAVoyoO4c0ET
7 IQBDj7dwOAPdxOsrKCRkjI8IBMwWtKBq7XunkE15dZFFZrZOfIaXUqNYF9DlCHBk
8 eGV2lZoL99pOtJzHTBzv3rtyPYqCNotTNnui2Z0Jzcq8K97XAlzKhL7BFMw5TSUF
9 Tf9ECgumaRELXDdlUtEiZ7uACBXAW+qTUxOCrp+EeyfUBYPLuiy9KQvJd4C+8QIs
10 OIYekzfqZfhbhOdb0U7ZRN3KXfuNS70vKfoMyuW4UVx75QZt3CnJL8M6dn+eijjw
11 mEVCT/a8SLgTgMKtl2AzFiJK4WqvnUs9iOswlaAWCIpvrMQmxltoL34aim55EZKd
12 gDlEW5zCcjYe8A5d5abd4cX8vVrN57j2O3Dk9Dgyr4ZHPjBMF8b6LnWqBGrgFrbQ
13 LpjDZRNm4W7JuROL5VtSBEwP5VAMdl56UPlgGmM6K2MgAvkZ99ycffu0vsKOxd1T
14 5wpY2y5SBOyoex0XPa9woz0GOLjf9ydpVlVikPHk4XX2ts0+L5VttkQ7wO9GLUj0
15 OltsrOxscHq3xPYsJgxmmHGmhrlTKIv1YHjzZsteqZLokH3kr1sCEX+vS3lqaQP8
16 rmIjf2vAWi3inteZifZ2v48V8XPTOUky/YQvTEGDstHWVd74hhrCVfx+Jk7vjipr
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: AES-192-CBC,BEA13A8B02546A15B7F23ADA71266129
3
4 7Qv9E1ZLVnTUu7sG+EdRWqDpOo9vr8ro6Mqg1wHqXozx3JuOTbW9QvcVra9vcdfQ
5 Zk2HC9sDKc44Jjw04zXQ8jUpFbjCtSGYqCp8Vjq/hsDsMwDMwqskq8BAN8G4s7K6
6 vkb/RBqbix+Dm3h9AWsh7+x1BNPX6aC8qyH2YZN/IlPfn52Oq8sTIk6w834NifzH
7 Y87zI+cJ4e8o8XIVIAoRQFiVbLT5DsV8eMKh1jgwS3b5rdAK/GzDgEWwgonb3R2y
8 8KGrCIAQbkY1j5jNdurhAwJVEPUr9mwv4tPLoj0vFOez87TNh7iyTQwJ7NsDCilQ
9 +S7xXxaLewKOvVqo9Qf1k8/xTWUtwSbtwA8V/E+8t7Qv1JkcBNGGDCRw8DWKmr3c
10 q1qjA2yTILFqi+F+5bmpucPA+tm+iJjgo5uPqw0A/CzSI2Y1haXdxf5thf5eHzJW
11 nGL5e+2muuirsViNRi4bcqaQ6nngWFLpeeySLL2gbgnEe2z7nDfBoN0821j3G8Qt
12 mb/lW8KBjQVYoPlboW3u/QAy73Md4IGxvowqRQezOuhr6LHXP9UpzH3RfrHykUzx
13 FhExT3Ke4volyejYZCBMqIL6AEHNjefJsPGRD8Z2Hfvso6EXhOeMV/hcMd+rgy1f
14 EMV6hBIIkLWWSKU6yu19nd6xdLp6ZJ3pHbuDT/6EHJs7klF/OdvhGRl1icf3Bvmt
15 Jnsu9OvVPvNfdPb5agjmcXF962xk5ceypfwJguBQVIqw/XHsu7cjU9EKdTIlg5oo
16 oxDxyLYAdFUMhFiYtvYd4uCOIjIdFlRZYU9Hj+aI/5jGfrHglTRZWukJTtv6Yjpj
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: AES-256-CBC,E4FF35065678C2D4BF54C5F3070797EB
3
4 0u2a9fhgca81gTue3i5W7uT6BDXpNR1SwVR0RyXs3eTKgFrdy0NPxfACIpekTZiD
5 ZKTpXwM6tbVC5gzsMK1SBeoiiXvDW3lN+nmiWzY9+sVssv0ys+fjq6WwlEbF3tI/
6 OflPOb17M50LLFxOlH7bqwzt5fMBHs2XA+ehMdg24ah1f7pSWjuZdjPOEMuV+XZf
7 wGJTcdJKMZHdGn0hBxItuEQrYrxJloOJgYS5fjKoAGLmS6dKKVQa+nAJKVE24VIj
8 spngBoB8zD4OW4Q6qFyPqiFjY/A4JgzBnwcKnkRVCbO629zbdvsgZDiHA4OIm3GH
9 MWfdkDU48hmTriHXQs0dVEmZieRMVIKK0Y4gXXGElQy3w7XTUhvad9o093Ddr1UR
10 ZktzPumpnnNVnhPdAmVQtENvqdrFvD/FhNpYnP8HeT0CYQf/aQSZs2Te3doWH6Mz
11 quE6BXCBqJv8C+YKk8ugFmpzX7An9Lc46KA7hAc6eCQNvPPGEvH75IKWULqZYyBG
12 xpLWow1jNId8zmgTIW+9eOpEroQ9/Lc5/9E/kSyylVfNxXAGmfdG4kzdF2vLyR4r
13 cnMJfJtHKOx1QJ6nJfa/giuEwTcrJBleDRFslE1zVoNi03PZ9l5LS0YKhGSmLPoj
14 T6IvAmKDGYuhp1hnO8spN2awqXaUYwrIzsIWKgwUTSvGc4TepWK72qP+h6/TpSq3
15 Sp0OhzNWM6YgLi4gchx54CYbsYwf7vhi7qK6ko2sehMJ3UC8rFQzl+OoddbdQ7dI
16 +ZKzilZ/ppvh4yKdtYWEB/M17GzJHbU9SPCNKv0S+bo1gG5dsQO2Zlh0CvQUwzaG
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: CAMELLIA-128-CBC,E1719CB01F51547E271937E2B3D150F3
3
4 zzVZcRFkUA1zdt5Cp63erlq8IoL/t4HDDfAVJqQxuU78XB5VFe8BPN6XFedIBYhe
5 q9s5fG4ULjf8NJtKPZ4Di7T8HZvAn50BJLa0u9HBHZDQiFQNzrt7Tb7MA2ENuqzG
6 kmzza8wK15Hzri64Dmfq+Tl19fznAHTnawsrHQiahg9ylEPA2ZulDqnGP6ru71mB
7 ohEIwg1cxJvaEkQUMiPXUirg/o9qeVhXRBT2cNWPa+qn7E/ufNhmvJM219TqzlQg
8 4+4zTEi8PkZZHeDASZ1Z/XiZHM7Rlm6PT36QqXORhoVAXeK00ErCpv979ljQ6cEP
9 4xIjRacmbCNrMPdpvggJP/QJdHvvWzZZHiv8BveET9R2RjquFwhRLKIJZ+IR5D/K
10 Ppb5wQFCyL0cJ3Tv43e7AWO4oH2QZO7qc2lfnriuolbLHBRcYUUe9qbLHuu5rqdj
11 BG/ZV0eiHVwCj8g0a0TK0fz0jCiKEe52AlEernnIj6/accQsUDuZfkDLmYoK6me0
12 SbGAEfrY1jMPuWwSJvCl9UGozJx4lPXB/3qtkEr5656MYHvf0OWpXqWIkcfDwZ5z
13 QXruOzzF+ynSB8a/RMcrgKMW9l/3Uvgylcwngkgln85lxpSf1U1vRD2jfcmanPxq
14 WyIgUGFB8yrLYsiWVv3Xtt9UGfa1s+EW5jTA9uYPAXoadD+HWKqCgQCBGLOpPNZl
15 U6fTHzM42gxd+5kTcy9IZGSn6lB04K1tRNiJyds1OC7Hb/wq+VvZYy6kAx7WaAmz
16 CSgH1AIz60AKS3ZknZRnz1IZhDT99BB4dc2RYndY7M778D5bQAP5VZ6DIuTL5mGJ
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: CAMELLIA-192-CBC,BA47F350F95736DBA1AFD47D0998C35B
3
4 hTtFvf+yjUz4lhhNLe2voESxZ6ae65dvl3eWtNZmVmnVhArHqDmcak8GleLD1a2a
5 FfwJGzdhvAQcLtfn1jpdObjwPS8XUQ9PVk3Dbjc5f4nP5f1ThkcewRtpStpc2MHH
6 KJvXUOrDhcawO5MJ/EjvRCLs5N2Ykzqn/ptuk2xHGu116MFIZDH079iTYv3j/qQD
7 OgengmO4uBAuQ5x6VMnIRRwF8zKYZH8wvWTD3FKInN/Fy7x8MOW+b6+eq63uD5vO
8 oPXKaXJKtK1n1JiET5fdb9NJHZ5T4MERou0hFcHxT79TGtXwY2gsZ807sXIHZwIq
9 +0c/tLEfNIuaGz4pA0s6c1fYbN4cx5dj+oqrsAaP7QazpEtuE1nlnQYCqlOAwEyN
10 +x4T2fM7P2Vw7DOaLlyDIBXWtSfMhVfF0BXBsMya8BREownyvIt/lsbTv516waNp
11 pM6Tojekf2E6U4IQlselIHS5N76KJullosymypyFh2y8S+OjUi4ZsstOgI+84aju
12 F+/QMyW3I8gaFo3hL6y7Xzc5L3woKfHTXul0IyAofmLeUXWAABTY5FIxM5suaGkw
13 ko7XTq8xVaQufHFxJZyG96epOe7YWgZ9d/t5gUSnK/6S0J7O0fMMn6vKQOCaaNV4
14 Xb3QNJb+2zxPtV3p1ZmQy10i61f+X1WfXx53jG2HLIqBdGc0WxApTaVgppYSxaeT
15 LF8Lc+8lJRgOTidOr/wdWSuYjbbnGlxx+MHSJboljxzB3XAJ5LDQ0taU0IKkdpfD
16 QV1BDul0tXsAQs7uEp7rqiLmE1kALzU8EE0+d6/VrVmuvLhDAE1arcyPXPIQAKLa
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: CAMELLIA-256-CBC,A3CE93CC318DCA6C8537B9554149F96F
3
4 uJ1S7ZSrL959vXzFKkzI1vFBHw9n7kH62Zf+iH8gLtLVmMDeIoioX8UGYTvK+jWz
5 SbZv2e4bIoxufFIPY+lZ+seLTdU4lWpZ6Shc6xHGc7qRjZ+pT5+c0Dm+W7XQLBoQ
6 Lwrtb3c6mdhVmJBkk0At9XtzWu2WNE8rQtkWl1NvJLpIbmrQ75DTn2WMQXTgE7fo
7 8jMngWoIyZFwXnWavJLPUq7WkaXfp8AfRiei7riPT35Y98juGc8MMISR9yWhg6Pz
8 cCMEvHMns/v0aurhmkTHTIbHI8BjbEGJ5hMhJx6CijANvWbh/UCOBx50GZINs0+q
9 ZZ8Mn5lHPVV1Q6bMEBQvLAbvUrOebxNg7Fljs6KBFoKm9bN6cLX24jNQ+b4c7I7P
10 FU3fSnvU9taAxrOev2a913Ek28jdwJQE8sZut128VBMvLj9HIb1Lf5jnMkoapH3f
11 HA57VrPhzNFIR7/tx3jT4clzW3AyyKt1E/7UQkfZjANnKwsL9Ru8Z0X/BLxSQlMp
12 HsEHVVLGlVZCrNFp0L7ex39JT6WYoRt2YT0HySrDTu8R4Yh8hgBOKTLLtk/2Ubwb
13 HrEoQc7e71JDHpnwetxZhUWuIg0IJjz8QZSZzxRgY6qoA1FZV4JEExlyqDCeP7EC
14 MS7Jur3pMhXMga7rmsXxJOs0bf/vyxFmXZCeSWyF2laKBJ7MHnGd1Xc6k70jQdJ0
15 wHy4Dwf/6+mgU9zb10NhduXfEEWRvSjc95nwOAdzgvVlTOs0PzECI1BSnFskWG9f
16 DxjFHpNAvbLq6kY4v/UEf6mCdgKesfsScH6XL5YJbkgT7JA7KUFO13j16d8B5rrW
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: DES-CBC,5CA5B2DF978A847C
3
4 fEuYTfFWcMY5GYXLY7+LbmTeKRNyE/NnvHD+Nr0pJdM0Su7o/9emaQ5xMLgpnBEd
5 P3p4hnU3irTe5OIE6SxEY9P5M3DH6CnX4jdZ27DvBlUGj64lowRi3QoY9V4+FvkC
6 tqdy9Y5BkK+eyxr7eIgHpebNTLEdd/7SUgJhPpkP1IZGBcY2HfCqrid4ZGPHaENj
7 1jlVUy2/Uv8qsQzVEB0JchLouZC+B6oRVKOzaEIspQirR+VKC8dE/3k7ss/EaqnV
8 hss19GOaOLzzmAFJa5aWc0bhLI4NMvzsZKELpnKSkcYT+urT/F+BjKGTNhEW/ky/
9 Zy/HcWE3Ql0Jid1kSZqXJm9eesw/SSNn2hTO0hvznRzIFFnI+2GU1EN3PDg6SKQv
10 QhzqUuKZ79Gb5tBxKgjEUd+vH/piJ87SumgIHce3gWX5nPblvOoa+VvYs+nWkJDU
11 8GiftUxrc1RTkJRO10L/WDHV8rq9D4/hmBUcSeZRHG1N9AAddx39HUm90T8vxUBI
12 2y5HdS1ypP30eWy5srk+by1QBcH/s8OHj0uGd8pAcnZS4sMeWyxA1pso3xPG982l
13 SOEc6BVVACKPp3qqSGZ96sP4g2oa1uY7mon5GbF3GUFu70LfWjshBU2LT1Wuqcm/
14 UatR/Wv6PH6JK69Nt9iclGTBSXwC72IscJG1a09fa4fNRN76FOFojB5ZM9RqFccH
15 cxwIa4W9qbyvTP2uGFRmxB4PnCvgUn5f/BHFsB6QinjRhuLweP31e0CGUM83xE7H
16 7Ds5QbMVonnFIuURDZKLXisUNArhsGNxj4NLFh654aI=
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: DES-EDE3-CBC,C183E11FE570A434
3
4 8CEARke2e/AzkOk4eB+Kll0Kt2vrxcr1Q5/VN+y0tRRV9fgqYb24PtwRVSA2bOpi
5 ksC08XsoOq/qRwdE2EWSqsoZ7xM1eRDTl0oYmW5Tzp2qisqw2QMe9urYG7Qo6R41
6 rr+DSzBVPJf9EhygeiWaNuqADZWAr5mF+zzHPjkShf/+g3cZ+uUDA0AWHGdlbp3N
7 08oUnGBKK2jyNX+DVcQrrMTICNzU1YJwznpeY2YgZpaYwWvNTRh7asi6Be2UFxWx
8 LNALom6LTpL+F611RS9/qOtlfUpWSE7XK5bIQE5j59VR93VxEP58ilU/qNXI6DXO
9 +LfEiXB98iRux8fQ68Ooqlere7//HxOPLp3KNcxXgHxuRsfWBuAO5qVGQOWhUanB
10 RiG6/Wq3ONe/PRRkMAme3lxGNpPR8VHw/F6jLhA/cFGV6e3IdwEI7esAnYnJEI0x
11 5wB9EoG3DhJMdPhULBp3md7oxFip1lxfZmhh1hh84FR3etin7bHHfaz+nWain+RQ
12 s6uf3yTYnpPjiC/d5WSS2d1sQ5T6DOaXBt9E5O5E9q0vehFHoY+jfwPy7/VOX/LV
13 l3s3WjaBd4o6M69TNBXSlAlFD0fvfpkaUMSvzVXevMwEl6qWhWkkc9YWt/mmBNRU
14 2DcIdPOwNtKERcNqxxw5EYoEKGktHfDZtjki1rB7icN/HWU92QujnhoC4PgjAV1p
15 MU9zOs9xwK05fC4Aowxujoa+hs/BO4Ss7G0oATrdteymOjiVGh9zBfWBlb3szlQG
16 bQo9UGYcCIpHMJQz4yah5tca+n4II2ICJFRNx5siTqu7iUSOyZ945w==
17 -----END RSA PRIVATE KEY-----
0 -----BEGIN RSA PRIVATE KEY-----
1 Proc-Type: 4,ENCRYPTED
2 DEK-Info: SEED-CBC,DEDB927E484244917048F7B10B131414
3
4 uvGL1hXZrBta0ctGaQraLnjRAdCmn/Lxunk/MEGRqqAlF7R3I44YLF/GEhwqrRuW
5 7qXfOzDqLJQohA/dUq9+6brukMb2E7b+af2BSKYK6fpKF2y84Sq3E/6/mZbEGQje
6 4fPeG+nt4L8LDza76IRDU1Z5qNXAMfvYj/GopgeIzWTbFwwM8H2rm9U/LwBalPQA
7 lRvdOLgO0gGnHTA2b3I3APPzWdLwX7vGgczIZCJUSXuGCMQVtNfpM1kAdqttpiyr
8 Iow2DNnZ7+eA5qlgS2NcgvGb5FIDj43sgzJLRBAXN46Dc5zWI0Wk2i4pBYbJd73i
9 5qNPRgS2EaSPsPMLBH/3pvRzPI/Bptqz5NzkbJrV5ojppK4pdTJdyOswp73Jr6e+
10 Y768RzHcGaNm6TYjHjWg5E3/6wfqlYw1x2BDmcR7ny9VV/GF2pHzJOsU+sb0fTM+
11 0OuDARunbDMFl+xjzwvcErSR1cWwxY9M6DMxZmWVFGJD7ovVaKZ1lgwBuEdZh5yo
12 Rg0RrMFhwB/gZHkMm8xtSHGdCcsjqmixqbm4jxoYwZ8RLoFkMWshFmM+hjvb0SKi
13 Jxo4qOnS3smWduICjhEedLkwpVmbMzGXnZjVcJpBacV6KrQOa6O2vBSbo4w2ZQM7
14 ZeU+CU3p1718GNInt5+H17HeupROk87HnHiDLKuLZw8GLcqSDAHpgSzTHusvM04q
15 uQt0SrU8KH5oILcj9I6embONOpZR7zY9+eFPGemTrwNFQVSt1L9nuLCUr+ZqmWNl
16 AqVtOGq9kWSvWUo9URx/Ze7Y0Zs/6DBmn/dMQnWMR75nV/kgE29P35A8vzXPXcaE
17 -----END RSA PRIVATE KEY-----
0 use strict;
1 use warnings;
2 use Test::More;
3
4 use Crypt::PK::RSA;
5 use Crypt::PK::DSA;
6
7 for my $f (qw/rsa-aes128.pem rsa-aes192.pem rsa-aes256.pem rsa-des.pem rsa-des3.pem rsa-seed.pem/) {
8 my $pk = Crypt::PK::RSA->new("t/data/$f", 'secret');
9 is($pk->is_private, 1, $f);
10 }
11
12 for my $f (qw/dsa-aes128.pem dsa-aes192.pem dsa-aes256.pem dsa-des.pem dsa-des3.pem dsa-seed.pem/) {
13 my $pk = Crypt::PK::DSA->new("t/data/$f", 'secret');
14 is($pk->is_private, 1, $f);
15 }
16
17 done_testing;
8585 ok($k->is_private, 'is_private');
8686 ok($k->export_key_pem('private'), 'export_key_pem pri');
8787 ok($k->export_key_pem('public'), 'export_key_pem pub');
88 ok($k->export_key_pem('public_x509'), 'export_key_pem pub_x509');
8889 ok($k->export_key_der('private'), 'export_key_der pri');
8990 ok($k->export_key_der('public'), 'export_key_der pub');
9091 }