CryptX-0.016
Karel Miko
10 years ago
5 | 5 | - croak with the "real caller" (Crypt::Mac::*, Crypt::Mode::*, ...) |
6 | 6 | - croak when mode does not call start_(en|de)crypt |
7 | 7 | - "libtom-src/bn_mp_invmod.c", line 37: warning: statement not reached |
8 | ||
9 | 0.016 2013/09/15 | |
10 | - added missing test for key2hash, sign_has, verify_hash | |
11 | - fixed build failures on VC6 | |
8 | 12 | |
9 | 13 | 0.015 2013/09/12 |
10 | 14 | - only documentation fixes |
2 | 2 | use strict; |
3 | 3 | use warnings ; |
4 | 4 | |
5 | our $VERSION = '0.015'; | |
5 | our $VERSION = '0.016'; | |
6 | 6 | |
7 | 7 | require XSLoader; |
8 | 8 | XSLoader::load('CryptX', $VERSION); |
62 | 62 | |
63 | 63 | SV* |
64 | 64 | key2hash(Crypt::PK::DH self) |
65 | INIT: | |
65 | PREINIT: | |
66 | 66 | HV *rv_hash; |
67 | 67 | long siz; |
68 | 68 | unsigned char buf[20001]; |
70 | 70 | |
71 | 71 | SV* |
72 | 72 | key2hash(Crypt::PK::DSA self) |
73 | INIT: | |
73 | PREINIT: | |
74 | 74 | HV *rv_hash; |
75 | 75 | long siz; |
76 | 76 | unsigned char buf[20001]; |
79 | 79 | |
80 | 80 | SV* |
81 | 81 | key2hash(Crypt::PK::ECC self) |
82 | INIT: | |
82 | PREINIT: | |
83 | 83 | HV *rv_hash; |
84 | 84 | long siz; |
85 | 85 | unsigned char buf[20001]; |
63 | 63 | |
64 | 64 | SV* |
65 | 65 | key2hash(Crypt::PK::RSA self) |
66 | INIT: | |
66 | PREINIT: | |
67 | 67 | HV *rv_hash; |
68 | 68 | long siz; |
69 | 69 | unsigned char buf[20001]; |
3 | 3 | unsigned char *out, unsigned long *outlen); |
4 | 4 | |
5 | 5 | int base64_decode(const unsigned char *in, unsigned long len, |
6 | unsigned char *out, unsigned long *outlen); | |
7 | ||
8 | int base64url_encode(const unsigned char *in, unsigned long len, | |
9 | unsigned char *out, unsigned long *outlen); | |
10 | ||
11 | int base64url_decode(const unsigned char *in, unsigned long len, | |
6 | 12 | unsigned char *out, unsigned long *outlen); |
7 | 13 | #endif |
8 | 14 |
1 | 1 | use warnings; |
2 | 2 | use Test::More; |
3 | 3 | |
4 | use Crypt::PK::DH qw(dh_encrypt dh_decrypt dh_sign_message dh_verify_message dh_shared_secret); | |
4 | use Crypt::PK::DH qw(dh_encrypt dh_decrypt dh_sign_message dh_verify_message dh_sign_hash dh_verify_hash dh_shared_secret); | |
5 | 5 | |
6 | 6 | { |
7 | 7 | my $k; |
10 | 10 | ok($k, 'load cryptx_priv_dh1.bin'); |
11 | 11 | ok($k->is_private, 'is_private cryptx_priv_dh1.bin'); |
12 | 12 | is($k->size, 256, 'size'); |
13 | ||
13 | is(uc($k->key2hash->{x}), 'FBC1062F73B9A17BB8473A2F5A074911FA7F20D28FBF5D7F4DAF58016CE03A391BA57CB80067EB2D59AD1AA66869F5F37A1B57D440428F67881085F7C1484FADC3A54E39703CE679068417269651DD3438EDBF7827A09419F88A326B76EF04D81145D87D7D2DCF1B24902202B971BBF2EEF956A1EA1A88770097B94C859AE4F06DDDEB9ED31084004815F97D4F6F74C791CF1EC1836013DF835B653E8704981D52FF2323F7AFE22915B82CBA7EBF0558ACA6A182A6F3D631B843B72137D4E5B07603A7517F6768B375FC6C38F7B767C63E5A3DD99CD9EA0992C236EB827EAD4E877430F260020E64CBA26DAA8DEEF5D216C11941C48F76FE2B097BB5D504FBCF', 'key2hash'); | |
14 | ||
14 | 15 | $k = Crypt::PK::DH->new('t/data/cryptx_priv_dh2.bin'); |
15 | 16 | ok($k, 'load cryptx_priv_dh2.bin'); |
16 | 17 | ok($k->is_private, 'is_private cryptx_priv_dh2.bin'); |
36 | 37 | is($pt, "secret message", 'decrypt'); |
37 | 38 | |
38 | 39 | my $sig = $pr1->sign_message("message"); |
39 | ok(length $sig > 60, 'sign ' . length($sig)); | |
40 | ok($pu1->verify_message($sig, "message"), 'verify'); | |
40 | ok(length $sig > 60, 'sign_message ' . length($sig)); | |
41 | ok($pu1->verify_message($sig, "message"), 'verify_message'); | |
42 | ||
43 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
44 | $sig = $pr1->sign_hash($hash, 'SHA1'); | |
45 | ok(length $sig > 60, 'sign_hash ' . length($sig)); | |
46 | ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash'); | |
41 | 47 | |
42 | 48 | my $pr2 = Crypt::PK::DH->new; |
43 | 49 | $pr2->import_key('t/data/cryptx_priv_dh2.bin'); |
66 | 72 | my $sig = dh_sign_message('t/data/cryptx_priv_dh1.bin', 'test string'); |
67 | 73 | ok($sig, 'dh_sign_message'); |
68 | 74 | ok(dh_verify_message('t/data/cryptx_pub_dh1.bin', $sig, 'test string'), 'dh_verify_message'); |
69 | ||
75 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
76 | $sig = dh_sign_hash('t/data/cryptx_priv_dh1.bin', $hash, 'SHA1'); | |
77 | ok($sig, 'dh_sign_hash'); | |
78 | ok(dh_verify_hash('t/data/cryptx_pub_dh1.bin', $sig, $hash, 'SHA1'), 'dh_verify_hash'); | |
79 | ||
70 | 80 | my $ss1 = dh_shared_secret('t/data/cryptx_priv_dh1.bin', 't/data/cryptx_pub_dh2.bin'); |
71 | 81 | my $ss2 = dh_shared_secret('t/data/cryptx_priv_dh2.bin', 't/data/cryptx_pub_dh1.bin'); |
72 | 82 | is(unpack("H*",$ss1), unpack("H*",$ss2), 'shared_secret'); |
1 | 1 | use warnings; |
2 | 2 | use Test::More; |
3 | 3 | |
4 | use Crypt::PK::DSA qw(dsa_encrypt dsa_decrypt dsa_sign_message dsa_verify_message); | |
4 | use Crypt::PK::DSA qw(dsa_encrypt dsa_decrypt dsa_sign_message dsa_verify_message dsa_sign_hash dsa_verify_hash); | |
5 | 5 | |
6 | 6 | { |
7 | 7 | my $k; |
10 | 10 | ok($k, 'load cryptx_priv_dsa1.der'); |
11 | 11 | ok($k->is_private, 'is_private cryptx_priv_dsa1.der'); |
12 | 12 | is($k->size, 256, 'size'); |
13 | is(uc($k->key2hash->{x}), '6C801901AC74E2DC714D75A9F6969483CF0239D142AB7E3F329ED8D49E07', 'key2hash'); | |
13 | 14 | |
14 | 15 | $k = Crypt::PK::DSA->new('t/data/cryptx_priv_dsa2.der'); |
15 | 16 | ok($k, 'load cryptx_priv_dsa2.der'); |
68 | 69 | is($pt, "secret message", 'decrypt'); |
69 | 70 | |
70 | 71 | my $sig = $pr1->sign_message("message"); |
71 | ok(length $sig > 60, 'sign ' . length($sig)); | |
72 | ok($pu1->verify_message($sig, "message"), 'verify'); | |
72 | ok(length $sig > 60, 'sign_message ' . length($sig)); | |
73 | ok($pu1->verify_message($sig, "message"), 'verify_message'); | |
74 | ||
75 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
76 | $sig = $pr1->sign_hash($hash, 'SHA1'); | |
77 | ok(length $sig > 60, 'sign_hash ' . length($sig)); | |
78 | ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash'); | |
73 | 79 | |
74 | 80 | my $pr2 = Crypt::PK::DSA->new; |
75 | 81 | $pr2->import_key('t/data/cryptx_priv_dsa2.der'); |
100 | 106 | my $sig = dsa_sign_message('t/data/cryptx_priv_dsa1.der', 'test string'); |
101 | 107 | ok($sig, 'dsa_sign_message'); |
102 | 108 | ok(dsa_verify_message('t/data/cryptx_pub_dsa1.der', $sig, 'test string'), 'dsa_verify_message'); |
109 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
110 | $sig = dsa_sign_hash('t/data/cryptx_priv_dsa1.der', $hash, 'SHA1'); | |
111 | ok($sig, 'dsa_sign_hash'); | |
112 | ok(dsa_verify_hash('t/data/cryptx_pub_dsa1.der', $sig, $hash, 'SHA1'), 'dsa_verify_hash'); | |
103 | 113 | } |
104 | 114 | |
105 | 115 | done_testing;⏎ |
1 | 1 | use warnings; |
2 | 2 | use Test::More; |
3 | 3 | |
4 | use Crypt::PK::ECC qw(ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_shared_secret); | |
4 | use Crypt::PK::ECC qw(ecc_encrypt ecc_decrypt ecc_sign_message ecc_verify_message ecc_sign_hash ecc_verify_hash ecc_shared_secret); | |
5 | 5 | |
6 | 6 | { |
7 | 7 | my $k; |
10 | 10 | ok($k, 'load cryptx_priv_ecc1.der'); |
11 | 11 | ok($k->is_private, 'is_private cryptx_priv_ecc1.der'); |
12 | 12 | is($k->size, 32, 'size'); |
13 | is(uc($k->key2hash->{pub_x}), 'AB53ED5D16CE550BAAF16BA4F161332AAD56D63790629C27871ED515D4FC229C', 'key2hash'); | |
13 | 14 | |
14 | 15 | $k = Crypt::PK::ECC->new('t/data/cryptx_priv_ecc2.der'); |
15 | 16 | ok($k, 'load cryptx_priv_ecc2.der'); |
52 | 53 | is($pt, "secret message", 'decrypt'); |
53 | 54 | |
54 | 55 | my $sig = $pr1->sign_message("message"); |
55 | ok(length $sig > 60, 'sign ' . length($sig)); | |
56 | ok($pu1->verify_message($sig, "message"), 'verify'); | |
56 | ok(length $sig > 60, 'sign_message ' . length($sig)); | |
57 | ok($pu1->verify_message($sig, "message"), 'verify_message'); | |
58 | ||
59 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
60 | $sig = $pr1->sign_hash($hash, 'SHA1'); | |
61 | ok(length $sig > 60, 'sign_hash ' . length($sig)); | |
62 | ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash'); | |
57 | 63 | |
58 | 64 | my $pr2 = Crypt::PK::ECC->new; |
59 | 65 | $pr2->import_key('t/data/cryptx_priv_ecc2.der'); |
84 | 90 | my $sig = ecc_sign_message('t/data/cryptx_priv_ecc1.der', 'test string'); |
85 | 91 | ok($sig, 'ecc_sign_message'); |
86 | 92 | ok(ecc_verify_message('t/data/cryptx_pub_ecc1.der', $sig, 'test string'), 'ecc_verify_message'); |
93 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
94 | $sig = ecc_sign_hash('t/data/cryptx_priv_ecc1.der', $hash, 'SHA1'); | |
95 | ok($sig, 'ecc_sign_hash'); | |
96 | ok(ecc_verify_hash('t/data/cryptx_pub_ecc1.der', $sig, $hash, 'SHA1'), 'ecc_verify_hash'); | |
87 | 97 | |
88 | 98 | my $ss1 = ecc_shared_secret('t/data/cryptx_priv_ecc1.der', 't/data/cryptx_pub_ecc2.der'); |
89 | 99 | my $ss2 = ecc_shared_secret('t/data/cryptx_priv_ecc2.der', 't/data/cryptx_pub_ecc1.der'); |
10 | 10 | ok($k, 'load cryptx_priv_rsa1.der'); |
11 | 11 | ok($k->is_private, 'is_private cryptx_priv_rsa1.der'); |
12 | 12 | is($k->size, 256, 'size'); |
13 | is(uc($k->key2hash->{q}), 'FC07E46B163CAB6A83B8E467D169534B2077DCDEECAE8FCFC0C3AD2EBA2C4B02D2372369990C62A923D22E10719CED191E231C4832FB4896ECDC2E1F39688D226C7B46E35F93CBD83B1F56A30B6660E0BEE43E719C9F533EFB8A0618EC2D164CC0AE64F20AFB888C14EAFF8C8E889FF1227A31152B3E23432B40A11C6541BBE3', 'key2hash'); | |
13 | 14 | |
14 | 15 | $k = Crypt::PK::RSA->new('t/data/cryptx_priv_rsa2.der'); |
15 | 16 | ok($k, 'load cryptx_priv_rsa2.der'); |
68 | 69 | is($pt, "secret message", 'decrypt'); |
69 | 70 | |
70 | 71 | my $sig = $pr1->sign_message("message"); |
71 | ok(length $sig > 60, 'sign ' . length($sig)); | |
72 | ok($pu1->verify_message($sig, "message"), 'verify'); | |
72 | ok(length $sig > 60, 'sign_message ' . length($sig)); | |
73 | ok($pu1->verify_message($sig, "message"), 'verify_message'); | |
74 | ||
75 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
76 | $sig = $pr1->sign_hash($hash, 'SHA1'); | |
77 | ok(length $sig > 60, 'sign_hash ' . length($sig)); | |
78 | ok($pu1->verify_hash($sig, $hash, 'SHA1'), 'verify_hash'); | |
73 | 79 | } |
74 | 80 | |
75 | 81 | { |
91 | 97 | my $sig = rsa_sign_message('t/data/cryptx_priv_rsa1.der', 'test string'); |
92 | 98 | ok($sig, 'rsa_sign_message'); |
93 | 99 | ok(rsa_verify_message('t/data/cryptx_pub_rsa1.der', $sig, 'test string'), 'rsa_verify_message'); |
100 | my $hash = pack("H*","04624fae618e9ad0c5e479f62e1420c71fff34dd"); | |
101 | $sig = rsa_sign_hash('t/data/cryptx_priv_rsa1.der', $hash, 'SHA1'); | |
102 | ok($sig, 'rsa_sign_hash'); | |
103 | ok(rsa_verify_hash('t/data/cryptx_pub_rsa1.der', $sig, $hash, 'SHA1'), 'rsa_verify_hash'); | |
94 | 104 | } |
95 | 105 | |
96 | 106 | done_testing;⏎ |