Compare commits
3282 Commits
OpenSSL-fi
...
OpenSSL_1_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
902f3f50d0 | ||
|
|
45e53cf881 | ||
|
|
08d0ff54d0 | ||
|
|
248808c840 | ||
|
|
515f3be47a | ||
|
|
25d14c6c29 | ||
|
|
08ea966c01 | ||
|
|
ef98503eee | ||
|
|
708dc2f129 | ||
|
|
bc38a7d2d3 | ||
|
|
1b1d8ae49a | ||
|
|
021fb42dd0 | ||
|
|
9dfd2be8a1 | ||
|
|
c175308407 | ||
|
|
29305f4edc | ||
|
|
7bcdf4ef78 | ||
|
|
e9cf5f0366 | ||
|
|
a3762a92d6 | ||
|
|
5361af815d | ||
|
|
578b956fe7 | ||
|
|
259b664f95 | ||
|
|
64333004a4 | ||
|
|
04f2a0b50d | ||
|
|
c436c990f6 | ||
|
|
f78baa9d71 | ||
|
|
5c57fbb8ca | ||
|
|
6c88c71b4e | ||
|
|
c575ceffdb | ||
|
|
b393a4ad38 | ||
|
|
43be582e9b | ||
|
|
866b282d1b | ||
|
|
24e6a0dba4 | ||
|
|
6533a0b8d1 | ||
|
|
b4b23d05d3 | ||
|
|
10c639a8a5 | ||
|
|
0fffd52242 | ||
|
|
52464477be | ||
|
|
64193c8218 | ||
|
|
402fb1896b | ||
|
|
a3baa17105 | ||
|
|
093d20a8cb | ||
|
|
5df0bde60e | ||
|
|
a2bab12a33 | ||
|
|
106dbca36c | ||
|
|
a38a159bfc | ||
|
|
e0fde613ac | ||
|
|
2454accb6e | ||
|
|
1e9446bf5c | ||
|
|
e94f52e0c7 | ||
|
|
83ab6e55a1 | ||
|
|
7107798ae6 | ||
|
|
2b0c11a620 | ||
|
|
da7947e8c6 | ||
|
|
22d192f106 | ||
|
|
95605f3ae1 | ||
|
|
f26a179abc | ||
|
|
75374adf8a | ||
|
|
c5b831f21d | ||
|
|
878e2c5b13 | ||
|
|
d81a160058 | ||
|
|
3665fa2543 | ||
|
|
2b80d00e3a | ||
|
|
78a140ecb3 | ||
|
|
f73c737c7a | ||
|
|
930d87c1e1 | ||
|
|
607e77300e | ||
|
|
0555901cb4 | ||
|
|
7934ce27cd | ||
|
|
4d6fe78f65 | ||
|
|
15debc128a | ||
|
|
e254d12c43 | ||
|
|
8788fb97a8 | ||
|
|
6fa6a66285 | ||
|
|
a2a29f702a | ||
|
|
8259ccb44d | ||
|
|
ad81ca9061 | ||
|
|
d65a8d0b7e | ||
|
|
75fdee0482 | ||
|
|
a4530ce039 | ||
|
|
cb19c0d15f | ||
|
|
a3d74afcae | ||
|
|
4d9c6fa01b | ||
|
|
c52c3b5e11 | ||
|
|
0ac6239955 | ||
|
|
905943af3b | ||
|
|
155a1623d0 | ||
|
|
1c7de36f62 | ||
|
|
6656ba7152 | ||
|
|
17592f323a | ||
|
|
6d97060ee0 | ||
|
|
7eb5125125 | ||
|
|
2a60fccdd9 | ||
|
|
f6cadeeeed | ||
|
|
dd045d17e7 | ||
|
|
93a17f79b9 | ||
|
|
ecadde4d4d | ||
|
|
44e4f5b04b | ||
|
|
474a53b3a3 | ||
|
|
e780ed0336 | ||
|
|
3cd33c42e3 | ||
|
|
50053969e3 | ||
|
|
01b5c1239b | ||
|
|
f4d1926f95 | ||
|
|
9501418ea2 | ||
|
|
50b255a260 | ||
|
|
5ff0cfa517 | ||
|
|
02d013e621 | ||
|
|
89cd4fb5e9 | ||
|
|
c44844d928 | ||
|
|
4e295148c3 | ||
|
|
8e18babd1b | ||
|
|
b12fd50626 | ||
|
|
e40d6bf00a | ||
|
|
8a27243c7b | ||
|
|
bfe07df40c | ||
|
|
33223e733a | ||
|
|
9330fbd07f | ||
|
|
00456fded4 | ||
|
|
c394a48894 | ||
|
|
d73cc256c8 | ||
|
|
cc598f321f | ||
|
|
fb4f46763f | ||
|
|
babe434c99 | ||
|
|
87bc193bc1 | ||
|
|
15c62b0dfd | ||
|
|
94f98a9019 | ||
|
|
301a6dcd45 | ||
|
|
ed02493567 | ||
|
|
296f7bd1ac | ||
|
|
a5b63f8073 | ||
|
|
3a9328e3f7 | ||
|
|
943c4ca62b | ||
|
|
d88ef40a1e | ||
|
|
9252d71557 | ||
|
|
fb92839c93 | ||
|
|
6d31885d4a | ||
|
|
03bf712780 | ||
|
|
56d9134675 | ||
|
|
cb70eede8b | ||
|
|
01d625e2c3 | ||
|
|
bc2ab6ed2f | ||
|
|
bef7693860 | ||
|
|
c6a5fddf6c | ||
|
|
817ddb9fb0 | ||
|
|
f236ef27bd | ||
|
|
48008008af | ||
|
|
d40ec4ab8e | ||
|
|
15a7164eb7 | ||
|
|
822d265ced | ||
|
|
903738ac63 | ||
|
|
a89dda8cd0 | ||
|
|
fdbe4a3fa6 | ||
|
|
0c0f1361b2 | ||
|
|
ca3658e000 | ||
|
|
8f486d793b | ||
|
|
706c85da79 | ||
|
|
dfb23a5ac8 | ||
|
|
b62a2f8a37 | ||
|
|
a8bd9f90ed | ||
|
|
43679fc35e | ||
|
|
ec3a7c9b37 | ||
|
|
72895f5112 | ||
|
|
e90f1d9b74 | ||
|
|
5a1e6b1342 | ||
|
|
51a1cc4ffc | ||
|
|
8d43c0053b | ||
|
|
e272f8ef8f | ||
|
|
c97c7f8d53 | ||
|
|
a20d9422cf | ||
|
|
bf9d61d1ab | ||
|
|
6868346585 | ||
|
|
985abd1fd8 | ||
|
|
b00424792f | ||
|
|
bb7b893d7c | ||
|
|
cc1cdc5df5 | ||
|
|
738b8e6bc2 | ||
|
|
6481be7346 | ||
|
|
cba8745395 | ||
|
|
61dfe3a720 | ||
|
|
184718baab | ||
|
|
6b247c1817 | ||
|
|
d62c64b947 | ||
|
|
6f997dc365 | ||
|
|
21b538d616 | ||
|
|
92ea6fe597 | ||
|
|
920f7cf897 | ||
|
|
605a54ef1c | ||
|
|
51ff683c12 | ||
|
|
be250ee2d3 | ||
|
|
f5afe9ce3f | ||
|
|
f61216ba9d | ||
|
|
c038e6b504 | ||
|
|
0ea050e743 | ||
|
|
d601b9b50c | ||
|
|
b21b330bf1 | ||
|
|
325bb1ac25 | ||
|
|
2e3a21e152 | ||
|
|
8748519f64 | ||
|
|
6be18a2219 | ||
|
|
197db2143c | ||
|
|
cb71f17dc7 | ||
|
|
37faf11796 | ||
|
|
0711826ae9 | ||
|
|
929f6d6f55 | ||
|
|
beb841c5d1 | ||
|
|
3be39dc1e3 | ||
|
|
728bcd59d3 | ||
|
|
5116aeeacb | ||
|
|
2aa5a2c766 | ||
|
|
eac2b837d6 | ||
|
|
ce5ae63ab2 | ||
|
|
4dcdde120b | ||
|
|
7b8a999202 | ||
|
|
2df619b06c | ||
|
|
cef9dcbb45 | ||
|
|
40d5689458 | ||
|
|
39c76ceb2d | ||
|
|
0a1682d8b5 | ||
|
|
31472acf61 | ||
|
|
28643a1615 | ||
|
|
dc0c888811 | ||
|
|
9a931208d7 | ||
|
|
41fe7d2380 | ||
|
|
cc42e4af2c | ||
|
|
59793f5c1e | ||
|
|
5f623eb616 | ||
|
|
5425917406 | ||
|
|
cae70cfd46 | ||
|
|
df1565ed9c | ||
|
|
cf633fa002 | ||
|
|
732a6b5522 | ||
|
|
43613c0a02 | ||
|
|
254b259ef0 | ||
|
|
9c989aaa74 | ||
|
|
f21fb858d3 | ||
|
|
c8491de393 | ||
|
|
1d7df236dc | ||
|
|
a7cb67f4f2 | ||
|
|
6cc31d4212 | ||
|
|
06f6c55107 | ||
|
|
2d07f60a02 | ||
|
|
2f2295a596 | ||
|
|
8e0b56b996 | ||
|
|
d72c446213 | ||
|
|
b012b497ea | ||
|
|
6786c70ec1 | ||
|
|
40356e4914 | ||
|
|
3d23b2c255 | ||
|
|
8d2e7c0dec | ||
|
|
56353962e7 | ||
|
|
25efcb44ac | ||
|
|
5859bc62f3 | ||
|
|
056df45ed1 | ||
|
|
e9da86627a | ||
|
|
0b12fa75c9 | ||
|
|
b3a62dc032 | ||
|
|
512368c9ed | ||
|
|
ada57746b6 | ||
|
|
5d786e9e2d | ||
|
|
9ea70e5b40 | ||
|
|
5438e17de0 | ||
|
|
49cc3f4038 | ||
|
|
a5e26349f7 | ||
|
|
b68fa4d19e | ||
|
|
602af7d01d | ||
|
|
d0c9a90640 | ||
|
|
9e43fe9a2b | ||
|
|
374fd385c2 | ||
|
|
6b7d872e81 | ||
|
|
f0348c842e | ||
|
|
09368c044b | ||
|
|
4102d1a503 | ||
|
|
fd9631bbbd | ||
|
|
405f43bc2a | ||
|
|
033b558181 | ||
|
|
9e56a32e39 | ||
|
|
9f0b86c68b | ||
|
|
5a3ce86e21 | ||
|
|
8a1dbda755 | ||
|
|
0ed08a7a98 | ||
|
|
efb1a50f37 | ||
|
|
ded7eee8c2 | ||
|
|
fdd6d00952 | ||
|
|
2a7059c56f | ||
|
|
a7ef1e9072 | ||
|
|
33dd083206 | ||
|
|
5627e0f77d | ||
|
|
9dee5244e1 | ||
|
|
692f07c3e0 | ||
|
|
f404943bca | ||
|
|
21376d8ae3 | ||
|
|
c0b674b7cb | ||
|
|
a229c2b805 | ||
|
|
3c66a669df | ||
|
|
f8f75a7e4a | ||
|
|
7c1dae55d4 | ||
|
|
edbc9050be | ||
|
|
c00206c326 | ||
|
|
4ce5ed5f39 | ||
|
|
295c629ab1 | ||
|
|
c61bb1abaf | ||
|
|
f59186e436 | ||
|
|
0abf610447 | ||
|
|
57bd71b45b | ||
|
|
4475451164 | ||
|
|
220b9519eb | ||
|
|
710e28ef93 | ||
|
|
05d20833e3 | ||
|
|
90ee3c1646 | ||
|
|
7ef465050e | ||
|
|
8ca211707a | ||
|
|
9007dfa203 | ||
|
|
603bebc0e7 | ||
|
|
56f0733145 | ||
|
|
8e6bb99979 | ||
|
|
8615d8b4ec | ||
|
|
4f0812cc28 | ||
|
|
3bf9adaa2b | ||
|
|
54ae378c9e | ||
|
|
0ee5fcde06 | ||
|
|
d4c1763858 | ||
|
|
fe64245aa1 | ||
|
|
1030f89f5e | ||
|
|
b6ed991731 | ||
|
|
7b560c174d | ||
|
|
c26bfada81 | ||
|
|
40b8eb792d | ||
|
|
ab17f6b746 | ||
|
|
7bc2aee4f1 | ||
|
|
9bc3665ac9 | ||
|
|
aa5ab40860 | ||
|
|
8aa556e1c3 | ||
|
|
5ef5b9ffa9 | ||
|
|
d44f89c990 | ||
|
|
c35e138a58 | ||
|
|
57e477b9ec | ||
|
|
39a298a1c0 | ||
|
|
1fdf36f511 | ||
|
|
9dcab127e1 | ||
|
|
3e8f9dc1a0 | ||
|
|
7cb79c7afb | ||
|
|
d272599277 | ||
|
|
b3c02473f7 | ||
|
|
23cd01ef61 | ||
|
|
dcad51bc13 | ||
|
|
80d586d97f | ||
|
|
cbfec68a79 | ||
|
|
31909e7968 | ||
|
|
34cdff92e9 | ||
|
|
05627d57e5 | ||
|
|
ac32a77cd6 | ||
|
|
f877da9ced | ||
|
|
ba9d44b28d | ||
|
|
da5fab7325 | ||
|
|
efd89aa9cc | ||
|
|
4e3dbe37ca | ||
|
|
3610719931 | ||
|
|
af3aa2b5ef | ||
|
|
adba3b3bf1 | ||
|
|
ad0fb7f498 | ||
|
|
b1d5b8a4a4 | ||
|
|
fb22f74064 | ||
|
|
858de8718f | ||
|
|
bd5b5b4c4b | ||
|
|
188f3f9767 | ||
|
|
27c76b9b80 | ||
|
|
8744ba5e42 | ||
|
|
4d9dc0c269 | ||
|
|
7e365298ea | ||
|
|
b6f33dce3b | ||
|
|
cdc47dcf19 | ||
|
|
9cab86ee0a | ||
|
|
e40d7c1f3a | ||
|
|
3ae6186564 | ||
|
|
aa1e42215b | ||
|
|
bec1093cce | ||
|
|
78ac7fa18d | ||
|
|
11414f17d9 | ||
|
|
0a59e2dc30 | ||
|
|
0945bfcb22 | ||
|
|
f5d840a079 | ||
|
|
886ef2b650 | ||
|
|
8b89cb3307 | ||
|
|
bf42354620 | ||
|
|
e4731f76e2 | ||
|
|
595487ea19 | ||
|
|
c6eb1cbd1e | ||
|
|
1a9499cf23 | ||
|
|
254c01ed54 | ||
|
|
2d8e705b2a | ||
|
|
f4d1fb7769 | ||
|
|
10a70da729 | ||
|
|
dcbc03ede7 | ||
|
|
b32aa8e63e | ||
|
|
82697bc2b9 | ||
|
|
17b753f23a | ||
|
|
cdcb94eea7 | ||
|
|
051b41df41 | ||
|
|
c59bd61b2e | ||
|
|
f34b095fab | ||
|
|
d3bb25e30a | ||
|
|
eba8bf485a | ||
|
|
464774d75f | ||
|
|
833518cf0e | ||
|
|
8a73e3a0e8 | ||
|
|
edc2a76ade | ||
|
|
8dfe1e4dd2 | ||
|
|
feb96e914a | ||
|
|
67fb63e9b7 | ||
|
|
eecc697b65 | ||
|
|
e4f77bf183 | ||
|
|
cd5f206c2f | ||
|
|
3cf40601b7 | ||
|
|
82e586a90b | ||
|
|
a659386639 | ||
|
|
5b38d54753 | ||
|
|
6b3a315003 | ||
|
|
f296e411ef | ||
|
|
5bea7975a6 | ||
|
|
9c5efc9c65 | ||
|
|
75862f7741 | ||
|
|
99ceb2d40c | ||
|
|
abc7a266a3 | ||
|
|
33c99f2c81 | ||
|
|
1a3701f4fe | ||
|
|
4ce06271aa | ||
|
|
c5f8cd7bc6 | ||
|
|
937a766982 | ||
|
|
07977739f0 | ||
|
|
c7e78b6bed | ||
|
|
df6c736fbd | ||
|
|
c30a1b3b33 | ||
|
|
9ed55313a7 | ||
|
|
7238a82c8a | ||
|
|
6e5d130765 | ||
|
|
8f0f9ffda3 | ||
|
|
5c4fd8b515 | ||
|
|
496c79f60c | ||
|
|
186578be45 | ||
|
|
f4c5cd3085 | ||
|
|
0ddf91c5f3 | ||
|
|
73824ba8fe | ||
|
|
e95e22af50 | ||
|
|
47daa155a3 | ||
|
|
be856c0391 | ||
|
|
017a06c7d1 | ||
|
|
dfd3322d72 | ||
|
|
6281abc796 | ||
|
|
3661bb4e79 | ||
|
|
e697a4c3d7 | ||
|
|
5613feaacc | ||
|
|
3b38646d13 | ||
|
|
bf5b8ff17d | ||
|
|
a696708ae6 | ||
|
|
5101c35c91 | ||
|
|
35bac91676 | ||
|
|
ea9de25f2f | ||
|
|
f6cddcccc8 | ||
|
|
6df777ed50 | ||
|
|
07395b7a6d | ||
|
|
784f155e0d | ||
|
|
42802a94be | ||
|
|
9e63eeaf76 | ||
|
|
700c0eb8d9 | ||
|
|
a4ba716333 | ||
|
|
d21cbd7d5e | ||
|
|
ae50d82700 | ||
|
|
ff864ffef3 | ||
|
|
0a1f31f7ba | ||
|
|
5a27a20be3 | ||
|
|
3d5bb773ec | ||
|
|
c8ece537e3 | ||
|
|
8338cf0bdb | ||
|
|
ddbf312fb4 | ||
|
|
e7c2ad508d | ||
|
|
929b0d70c1 | ||
|
|
b7279ed55c | ||
|
|
8f8e4e4f52 | ||
|
|
a20718fa2c | ||
|
|
4285b85163 | ||
|
|
fe82be2b33 | ||
|
|
8509128179 | ||
|
|
d3a9eaccc1 | ||
|
|
4ba9a4265b | ||
|
|
bc0eb82b85 | ||
|
|
bd891f098b | ||
|
|
c45dfdc68a | ||
|
|
b5dc90121c | ||
|
|
b0b7232877 | ||
|
|
ece8574ae6 | ||
|
|
3edf1b98e0 | ||
|
|
0d6d10d97d | ||
|
|
3df69d3aef | ||
|
|
921095d4d3 | ||
|
|
5cc6509dae | ||
|
|
18029a3d07 | ||
|
|
7b22e8d01f | ||
|
|
da947c9758 | ||
|
|
128b271c8d | ||
|
|
a8b1e52ff4 | ||
|
|
d6e903d188 | ||
|
|
86f8fb0e34 | ||
|
|
c0334c2c92 | ||
|
|
c3c7fb07dc | ||
|
|
b19d814321 | ||
|
|
76343947ad | ||
|
|
4b22cce381 | ||
|
|
b717b08307 | ||
|
|
819418110b | ||
|
|
77c77f0a1b | ||
|
|
8b84495380 | ||
|
|
c1559f5046 | ||
|
|
d8d2e50359 | ||
|
|
6c4ce00753 | ||
|
|
fcb61b6c92 | ||
|
|
b2b8163964 | ||
|
|
56490fc26f | ||
|
|
f2e95a02b1 | ||
|
|
912c8c92b5 | ||
|
|
94be83127b | ||
|
|
be109b9eec | ||
|
|
c0d69ddb33 | ||
|
|
8cd6714084 | ||
|
|
327de270d5 | ||
|
|
8e91b3d991 | ||
|
|
20223855e4 | ||
|
|
563fc239d2 | ||
|
|
15919ecadc | ||
|
|
289c06823e | ||
|
|
ff2459b918 | ||
|
|
8944d10e2d | ||
|
|
df57e42baa | ||
|
|
9c5c18500b | ||
|
|
35fafc4dbc | ||
|
|
0c14565c5b | ||
|
|
5a9e9669d8 | ||
|
|
2b31fcc0b5 | ||
|
|
b65b4c3481 | ||
|
|
ef116b0003 | ||
|
|
0d691e0e27 | ||
|
|
ae3fcdf1e5 | ||
|
|
d6ca1cee8b | ||
|
|
bfa34f551c | ||
|
|
f9aa27dc78 | ||
|
|
f417997a32 | ||
|
|
6ee3997134 | ||
|
|
f9a21ed069 | ||
|
|
d6b4a41d10 | ||
|
|
9fdbaf3a32 | ||
|
|
6fff54b0ce | ||
|
|
6e20f55646 | ||
|
|
87cd297d14 | ||
|
|
195f6302bb | ||
|
|
8f51c206b3 | ||
|
|
f2aff60f6f | ||
|
|
fbabc6c06e | ||
|
|
bfb14d724b | ||
|
|
4d2207f097 | ||
|
|
b42e4a9f6b | ||
|
|
78a6b77976 | ||
|
|
ba5d0113e8 | ||
|
|
f747572547 | ||
|
|
36b619a06e | ||
|
|
13c1807041 | ||
|
|
f243def213 | ||
|
|
1f956f9cda | ||
|
|
98e6f07901 | ||
|
|
f95519538a | ||
|
|
79e2e927e6 | ||
|
|
7f3563b576 | ||
|
|
458a55af16 | ||
|
|
681da86ebb | ||
|
|
872f91c403 | ||
|
|
ee1ccd0a41 | ||
|
|
62bfff2d99 | ||
|
|
95929797a0 | ||
|
|
bcfaa4eeee | ||
|
|
cb43fd0467 | ||
|
|
ba25221226 | ||
|
|
506805e708 | ||
|
|
04222b630e | ||
|
|
16064539ad | ||
|
|
75c77a71fa | ||
|
|
3b740cebd5 | ||
|
|
f17a4ad7d7 | ||
|
|
79e0285755 | ||
|
|
8d5d455988 | ||
|
|
1d5668c258 | ||
|
|
bc1544d8c5 | ||
|
|
6ca1dc9737 | ||
|
|
0ed9ca21ae | ||
|
|
11b32d6e29 | ||
|
|
63ac16ccac | ||
|
|
db7cb7ab9a | ||
|
|
6d09851694 | ||
|
|
63c1d16bb8 | ||
|
|
6fa805f516 | ||
|
|
06aab26874 | ||
|
|
4ac0329582 | ||
|
|
51e647f6e5 | ||
|
|
ba7e998d5b | ||
|
|
25fc5ac48a | ||
|
|
d3b7cac41b | ||
|
|
fdc3ced983 | ||
|
|
65d6fdaa21 | ||
|
|
f11818c88d | ||
|
|
3577e01438 | ||
|
|
2fc2649173 | ||
|
|
2ad75afc3e | ||
|
|
83975c80bb | ||
|
|
323d39e87f | ||
|
|
ae5c8664e5 | ||
|
|
aae3233e1e | ||
|
|
04f7cbea11 | ||
|
|
45bd3616bb | ||
|
|
335d4d06a7 | ||
|
|
f3b6ee30f4 | ||
|
|
a1b20ff654 | ||
|
|
628afe685e | ||
|
|
defc825e9e | ||
|
|
319d5c7a58 | ||
|
|
3807db9d91 | ||
|
|
0f344da8f7 | ||
|
|
23690f94d9 | ||
|
|
9a11440ec0 | ||
|
|
ea09c04e7e | ||
|
|
e1e7dc5085 | ||
|
|
cc4cd8213e | ||
|
|
d18d367d90 | ||
|
|
065e6718bb | ||
|
|
3bca047362 | ||
|
|
78e74b59c1 | ||
|
|
c0edd77487 | ||
|
|
e4e5457c29 | ||
|
|
9b214383c1 | ||
|
|
cc6e2a5936 | ||
|
|
85b120f361 | ||
|
|
65a6a1ff45 | ||
|
|
fbdbb28ac6 | ||
|
|
80e1750976 | ||
|
|
11552ddc13 | ||
|
|
4ce632fb45 | ||
|
|
7b1ac23412 | ||
|
|
bdc21a1571 | ||
|
|
39108d595e | ||
|
|
d565023ae8 | ||
|
|
96a66a973b | ||
|
|
20c554ce8f | ||
|
|
d72781b4c9 | ||
|
|
ff397a8ff0 | ||
|
|
abef2b4c53 | ||
|
|
d2f8517ad0 | ||
|
|
27df27d4b9 | ||
|
|
4a81e0f0d6 | ||
|
|
24e6a032bf | ||
|
|
9d63b5e375 | ||
|
|
a45030fc9b | ||
|
|
45b575a031 | ||
|
|
bc2d623c0e | ||
|
|
c695ebe2a0 | ||
|
|
e19d4a99b8 | ||
|
|
6977c7e2ba | ||
|
|
43257b9f51 | ||
|
|
10771e3421 | ||
|
|
36f694e09a | ||
|
|
635ca4446f | ||
|
|
bd00b8dc65 | ||
|
|
2194b36979 | ||
|
|
e81a83657c | ||
|
|
cbbb952f3a | ||
|
|
04f670cf3d | ||
|
|
5cee72382c | ||
|
|
7c6a3cf237 | ||
|
|
be3fb8d15d | ||
|
|
fb73f12a9c | ||
|
|
25d738c3a4 | ||
|
|
49446ea62f | ||
|
|
f33ab61b5f | ||
|
|
2d63d0c84a | ||
|
|
cfb5d6c10a | ||
|
|
a936ba1148 | ||
|
|
ed736ddd74 | ||
|
|
c7c2a56a1b | ||
|
|
129344a8fb | ||
|
|
be6e766953 | ||
|
|
8dc461eccf | ||
|
|
4b4c1fcc88 | ||
|
|
1cfd7cf3cc | ||
|
|
2996157127 | ||
|
|
caeed719fe | ||
|
|
f4868c9921 | ||
|
|
4aaf1e493c | ||
|
|
d96c24926d | ||
|
|
d9b277e085 | ||
|
|
aace6dbcb3 | ||
|
|
85cfc188c0 | ||
|
|
6ee7de1eb3 | ||
|
|
7b0194db42 | ||
|
|
bfaf796241 | ||
|
|
c02e2d6a71 | ||
|
|
9f49067c9e | ||
|
|
5396c1190f | ||
|
|
cf95b2d66a | ||
|
|
47606dda67 | ||
|
|
c30c876176 | ||
|
|
73bda31b4c | ||
|
|
dc00fb9d51 | ||
|
|
06c3e65deb | ||
|
|
5984c7e3d5 | ||
|
|
beef278bd7 | ||
|
|
58191465ef | ||
|
|
5760c8b82f | ||
|
|
b651407268 | ||
|
|
a760dde681 | ||
|
|
f5e4b6b5b5 | ||
|
|
9ca2cc78a9 | ||
|
|
0cf552230e | ||
|
|
0e1c318ece | ||
|
|
8bc8450a26 | ||
|
|
bf68456f53 | ||
|
|
53332a75d1 | ||
|
|
cd387d21da | ||
|
|
0c403e80a9 | ||
|
|
553affbef7 | ||
|
|
1ecfb67335 | ||
|
|
bb565cd29e | ||
|
|
a43bcd9e96 | ||
|
|
c8667a2e46 | ||
|
|
5ee441162e | ||
|
|
63ef0db60f | ||
|
|
f74f5c8586 | ||
|
|
a38ae11c48 | ||
|
|
4ca0e95b92 | ||
|
|
f9398b92de | ||
|
|
6af16ec5ee | ||
|
|
d04a1e0b5b | ||
|
|
bb1ddd3d9a | ||
|
|
6806b69084 | ||
|
|
9809ab965b | ||
|
|
bd34823e55 | ||
|
|
533814c6b5 | ||
|
|
b32474a40b | ||
|
|
f6e725e868 | ||
|
|
7005eda3b6 | ||
|
|
9a6e994240 | ||
|
|
0b3c13092c | ||
|
|
dfa2762bba | ||
|
|
c0b90b3237 | ||
|
|
788a5bad17 | ||
|
|
1872083ca1 | ||
|
|
05e769f269 | ||
|
|
ccecdb130c | ||
|
|
80d09058af | ||
|
|
3cc0c0d21c | ||
|
|
5e47008b61 | ||
|
|
e9f47de1f0 | ||
|
|
6a7a4a4e19 | ||
|
|
67a0ea702b | ||
|
|
89e1e5c84d | ||
|
|
7cae6eeed0 | ||
|
|
4b12a17fe3 | ||
|
|
2e524475cd | ||
|
|
ac3dc3ee87 | ||
|
|
63039a177a | ||
|
|
ca88bd4112 | ||
|
|
1e7b4891cb | ||
|
|
3623e24b45 | ||
|
|
e164582690 | ||
|
|
4d3df37bc7 | ||
|
|
261e64b85e | ||
|
|
23cf88440c | ||
|
|
bd8192604a | ||
|
|
8f8e7cec83 | ||
|
|
14332e4331 | ||
|
|
60de554e4f | ||
|
|
c57400e86c | ||
|
|
f90fd2b017 | ||
|
|
8d325d1d36 | ||
|
|
03d14f5887 | ||
|
|
6f71d7da64 | ||
|
|
0b9e82763f | ||
|
|
e5f261df73 | ||
|
|
9baee0216f | ||
|
|
5d23e1303c | ||
|
|
f7c7aa69f7 | ||
|
|
ce5f32cfa7 | ||
|
|
5891c226d8 | ||
|
|
017a15cbd2 | ||
|
|
786370b1b0 | ||
|
|
56e8dc542b | ||
|
|
9ef1d283fe | ||
|
|
5a4a949904 | ||
|
|
ffa69c1ced | ||
|
|
305e2b4111 | ||
|
|
ba7aaa5622 | ||
|
|
2ad842b86a | ||
|
|
297a8fd4ac | ||
|
|
5b3a5e3e90 | ||
|
|
40e214a23b | ||
|
|
39679d858a | ||
|
|
0ec6898c67 | ||
|
|
1e10aee2a7 | ||
|
|
34a136d90f | ||
|
|
42af669ff2 | ||
|
|
4c75f4e5ca | ||
|
|
1380317483 | ||
|
|
a35f7adf5c | ||
|
|
1ce95f1960 | ||
|
|
51695b98f1 | ||
|
|
82182413a4 | ||
|
|
0ce2dbfb5b | ||
|
|
981545e1e7 | ||
|
|
d60de314f4 | ||
|
|
b6ece4c1fc | ||
|
|
bb086221dd | ||
|
|
b4b8969df8 | ||
|
|
010d37621d | ||
|
|
84d4f99d31 | ||
|
|
82180dcc0a | ||
|
|
c2b90b398d | ||
|
|
c2a2ff3f0a | ||
|
|
d64b6c980c | ||
|
|
05df9b9ae5 | ||
|
|
3e3cc471c2 | ||
|
|
80fb4820cb | ||
|
|
2229fe5b94 | ||
|
|
a46c705214 | ||
|
|
dc7bca8bcc | ||
|
|
f58cfe0422 | ||
|
|
20d1c8111f | ||
|
|
c578fe37d9 | ||
|
|
a4ee5bbc77 | ||
|
|
8ad9050318 | ||
|
|
5df07a7210 | ||
|
|
0853b2c5e4 | ||
|
|
2c5db8dac3 | ||
|
|
bffd5a7f35 | ||
|
|
5e60396fe7 | ||
|
|
0d6a11a91f | ||
|
|
f9fac6163e | ||
|
|
ef8055cbb7 | ||
|
|
3b7ab6f4b8 | ||
|
|
3b4a761853 | ||
|
|
255401756d | ||
|
|
ec65b83d65 | ||
|
|
d169bf9cab | ||
|
|
738911cde6 | ||
|
|
e1080ea3c7 | ||
|
|
941af48fec | ||
|
|
9bed73adaa | ||
|
|
e9128d9401 | ||
|
|
972868b23d | ||
|
|
e774a3055b | ||
|
|
d9f99d4ef3 | ||
|
|
6ce2a64191 | ||
|
|
d2a1226b81 | ||
|
|
9fa9370b6f | ||
|
|
12f14b1d8f | ||
|
|
27918b7c25 | ||
|
|
2e31c47adb | ||
|
|
3842a64d36 | ||
|
|
8aed2a7548 | ||
|
|
f7835e1c20 | ||
|
|
11d8abb331 | ||
|
|
320d949781 | ||
|
|
dfb5de6fc0 | ||
|
|
5015a93ded | ||
|
|
478b3470ff | ||
|
|
3258429883 | ||
|
|
a9d928a8b6 | ||
|
|
3aa2d2d08f | ||
|
|
f33ce36aff | ||
|
|
e61c648fd6 | ||
|
|
8c0d19d857 | ||
|
|
283a8fd1aa | ||
|
|
b8d687bb56 | ||
|
|
57c932dafd | ||
|
|
ef720a67ab | ||
|
|
f28c48d07e | ||
|
|
ff89be854e | ||
|
|
61a44b76a0 | ||
|
|
45236ed6a4 | ||
|
|
240635c0b2 | ||
|
|
610ac0525d | ||
|
|
9c096d0bbf | ||
|
|
1915744a64 | ||
|
|
c387f7d0ea | ||
|
|
eee95fc64f | ||
|
|
dd3c21b2d2 | ||
|
|
dd13aadf9e | ||
|
|
2a49fef28e | ||
|
|
c56be26d9f | ||
|
|
2102c53caa | ||
|
|
e12e875759 | ||
|
|
0600a5cd49 | ||
|
|
a91b73fd29 | ||
|
|
02c38e37a6 | ||
|
|
fa2ae04c40 | ||
|
|
27739e9265 | ||
|
|
157c345175 | ||
|
|
770b98d02e | ||
|
|
8475416fe7 | ||
|
|
30b7d5e1d8 | ||
|
|
9dd6240201 | ||
|
|
63eacabb61 | ||
|
|
0996ccc077 | ||
|
|
6aa9dbab0f | ||
|
|
c1071ab4f1 | ||
|
|
5decce4db0 | ||
|
|
12dabfc560 | ||
|
|
39d64e9351 | ||
|
|
f9784baf0e | ||
|
|
8fb57b29d6 | ||
|
|
cf8d6c1000 | ||
|
|
4164d631bb | ||
|
|
46a1b9ef4f | ||
|
|
6db2239c60 | ||
|
|
423ceb8319 | ||
|
|
cd2e17020e | ||
|
|
9346c75cb8 | ||
|
|
0a4fe37fc6 | ||
|
|
da67a0ae34 | ||
|
|
9a9b0c0401 | ||
|
|
b85d461cdf | ||
|
|
089f10e69e | ||
|
|
7f7c05ca63 | ||
|
|
2083f7c465 | ||
|
|
1f2b943254 | ||
|
|
dc5c3d7370 | ||
|
|
383f0e349f | ||
|
|
0a64a864b4 | ||
|
|
dec128313b | ||
|
|
1d4f214eaf | ||
|
|
3aac17a82f | ||
|
|
e19c93811f | ||
|
|
108e907645 | ||
|
|
8958be3946 | ||
|
|
ebf221ee25 | ||
|
|
ef90877721 | ||
|
|
a89adc148e | ||
|
|
b698c427de | ||
|
|
e99ac8b868 | ||
|
|
43312c624d | ||
|
|
beeb0fa7be | ||
|
|
267e6f3cc0 | ||
|
|
5ed0b6ac0c | ||
|
|
90a549ddfb | ||
|
|
bc792813f0 | ||
|
|
bb4c9ffd02 | ||
|
|
53348780e9 | ||
|
|
f338c2e0c2 | ||
|
|
92aa73bcbf | ||
|
|
c01618dd82 | ||
|
|
1d7d0ed9c2 | ||
|
|
40a2200d89 | ||
|
|
d345a24569 | ||
|
|
3d5dceac43 | ||
|
|
aad61c0a57 | ||
|
|
8ca4c4b25e | ||
|
|
0598468fc0 | ||
|
|
ea7cb53974 | ||
|
|
4985007555 | ||
|
|
89d2f8f1a9 | ||
|
|
2c3673cd3f | ||
|
|
ba5f75d53e | ||
|
|
be804523cf | ||
|
|
d5213519c0 | ||
|
|
a3efe1b6e9 | ||
|
|
789b12599d | ||
|
|
371d9a627b | ||
|
|
2f63ad1c6d | ||
|
|
0e32035292 | ||
|
|
f5ce8d6a61 | ||
|
|
0ae6ba18ab | ||
|
|
4ccc2c19e2 | ||
|
|
b5e611a973 | ||
|
|
a2f34441ab | ||
|
|
2be9425514 | ||
|
|
f284fc7cc3 | ||
|
|
c991d8ae8b | ||
|
|
be12cb3e24 | ||
|
|
4c05b1f8d6 | ||
|
|
6e1e5996df | ||
|
|
6ccd120f5f | ||
|
|
ca818b322d | ||
|
|
b11c24110c | ||
|
|
beac6cb5aa | ||
|
|
666a597ffb | ||
|
|
d4dbabb814 | ||
|
|
c71e37aa6c | ||
|
|
cdae9a58e6 | ||
|
|
fa2b54c83a | ||
|
|
14b5d0d029 | ||
|
|
2fbd94252a | ||
|
|
5b9188454b | ||
|
|
5e189b4b8d | ||
|
|
23bd628735 | ||
|
|
371feee876 | ||
|
|
f50f0c6aa3 | ||
|
|
2064e2db08 | ||
|
|
de222838fe | ||
|
|
0ad2a0a303 | ||
|
|
2cb761c1f4 | ||
|
|
3ebcecf5c4 | ||
|
|
e83c913723 | ||
|
|
55fe56837a | ||
|
|
1eb57ae2b7 | ||
|
|
41e3ebd5ab | ||
|
|
9624b50d51 | ||
|
|
449d864515 | ||
|
|
7f7e11ee5c | ||
|
|
43f534b986 | ||
|
|
fbe8ea3abe | ||
|
|
affc941ea6 | ||
|
|
012f7474f7 | ||
|
|
5c1b373be6 | ||
|
|
648a9f7c2f | ||
|
|
623acb90cc | ||
|
|
6ce295a301 | ||
|
|
0359ccfd8b | ||
|
|
9c1cf94f34 | ||
|
|
ff5b11f547 | ||
|
|
8358302d47 | ||
|
|
534656a997 | ||
|
|
2cfbec1cae | ||
|
|
22db480daf | ||
|
|
d107382214 | ||
|
|
03ae3ca621 | ||
|
|
61df34e924 | ||
|
|
47b9e06cfd | ||
|
|
88822622a1 | ||
|
|
8f243ab6c1 | ||
|
|
9223a31eb7 | ||
|
|
654ae3d6ad | ||
|
|
70c739b8db | ||
|
|
daa96141d3 | ||
|
|
802fdcda1e | ||
|
|
6006e352ad | ||
|
|
2af68ef774 | ||
|
|
df401f4796 | ||
|
|
3875ee59ba | ||
|
|
14183e50e7 | ||
|
|
15de0f609c | ||
|
|
4824e7d6e9 | ||
|
|
a3b8cd242a | ||
|
|
d1cc95f781 | ||
|
|
6d02baf6ab | ||
|
|
377551b9c4 | ||
|
|
361fd136e9 | ||
|
|
4950a528ce | ||
|
|
00ab230a3f | ||
|
|
e99980e8fd | ||
|
|
ec77f276e1 | ||
|
|
d0ba994483 | ||
|
|
52f856526c | ||
|
|
912f08dd5e | ||
|
|
1067663d85 | ||
|
|
22228d2d40 | ||
|
|
c57745596c | ||
|
|
65e4dca40c | ||
|
|
ff4cfc4c58 | ||
|
|
f4623ab996 | ||
|
|
6ef350952c | ||
|
|
e42c208235 | ||
|
|
e86951ca2a | ||
|
|
b7a4f98b15 | ||
|
|
82a9dafe32 | ||
|
|
1536bcfd56 | ||
|
|
3fc0b1edad | ||
|
|
3d15d58e55 | ||
|
|
d93edc0aab | ||
|
|
609daababb | ||
|
|
a073ceeff4 | ||
|
|
5cd8ce42ec | ||
|
|
d15f2d98ef | ||
|
|
00f5ee445b | ||
|
|
e7911530a9 | ||
|
|
6ff73426c3 | ||
|
|
a61e509e9b | ||
|
|
1b823494de | ||
|
|
6657e68bf2 | ||
|
|
23351c607b | ||
|
|
9a6112d16a | ||
|
|
b9c0dae28e | ||
|
|
d940b3b9c7 | ||
|
|
cfbc10fb32 | ||
|
|
90d94ce39e | ||
|
|
79b960c046 | ||
|
|
66a6e2b2b6 | ||
|
|
1be1d05184 | ||
|
|
9f8c183283 | ||
|
|
8301245a5e | ||
|
|
1f6d207625 | ||
|
|
561ba12463 | ||
|
|
7f133c357b | ||
|
|
3cc8a3f234 | ||
|
|
3d86077427 | ||
|
|
56ba280ccd | ||
|
|
955bfbc268 | ||
|
|
2eab488c02 | ||
|
|
fa7a0efbac | ||
|
|
3fe8f005b0 | ||
|
|
5af09776ce | ||
|
|
995d08d104 | ||
|
|
ca422f3563 | ||
|
|
68a1e0bc35 | ||
|
|
ed6c278f60 | ||
|
|
d85a772ec3 | ||
|
|
fb2f9f266c | ||
|
|
66aeaec067 | ||
|
|
70fddbe32a | ||
|
|
5fc3d333c7 | ||
|
|
728bd41a15 | ||
|
|
77fb5a303b | ||
|
|
7344089dc3 | ||
|
|
7e03acf2be | ||
|
|
9af4cb3d3b | ||
|
|
a00caa0257 | ||
|
|
4672acfa7d | ||
|
|
ea61b32719 | ||
|
|
dabfbea7d9 | ||
|
|
56d973709c | ||
|
|
3a97ebb16b | ||
|
|
16f4d2e32f | ||
|
|
1f72a76f98 | ||
|
|
f5247cea39 | ||
|
|
3da2c3df78 | ||
|
|
4ceddeea6c | ||
|
|
2fddc5fc09 | ||
|
|
e3beef1e1b | ||
|
|
cea5a1d5f2 | ||
|
|
f472ada006 | ||
|
|
05b2210476 | ||
|
|
33e1a1d652 | ||
|
|
38956b071a | ||
|
|
a21f350a76 | ||
|
|
74360af359 | ||
|
|
5400882ca3 | ||
|
|
eb6508d50c | ||
|
|
77719aefb8 | ||
|
|
9d2c9dd1e1 | ||
|
|
8942b92c7c | ||
|
|
e5f706590c | ||
|
|
a5d03c54ab | ||
|
|
56b94a38b9 | ||
|
|
d52eb82781 | ||
|
|
4967a832ab | ||
|
|
6468866823 | ||
|
|
de8a5b523f | ||
|
|
8de85b0048 | ||
|
|
8d71574142 | ||
|
|
623a01df49 | ||
|
|
08b172b975 | ||
|
|
856a4585d6 | ||
|
|
3329765bba | ||
|
|
87a0cbdf2e | ||
|
|
b5bdde9e0e | ||
|
|
1788072b9e | ||
|
|
5f2b5e3823 | ||
|
|
42d73874ed | ||
|
|
88d3d6c9ae | ||
|
|
3435ef467f | ||
|
|
c90c694bc4 | ||
|
|
8db2ba4b84 | ||
|
|
d77501d8fd | ||
|
|
15e4565984 | ||
|
|
5757766550 | ||
|
|
4f7236edc7 | ||
|
|
ed693e4332 | ||
|
|
a2219f6be3 | ||
|
|
03b5b78c09 | ||
|
|
cd302feb5d | ||
|
|
5cd1a6fc3e | ||
|
|
4ceb430a46 | ||
|
|
81ce94f8dc | ||
|
|
feaa3b380b | ||
|
|
5d8e9f2ae0 | ||
|
|
6c1d36a649 | ||
|
|
2312a84ca1 | ||
|
|
a99d2a22e1 | ||
|
|
2fa65aa7d8 | ||
|
|
4907cf0845 | ||
|
|
28b4820f70 | ||
|
|
72967d5be9 | ||
|
|
4aebb2c8b8 | ||
|
|
1f5bce2dce | ||
|
|
b953b02849 | ||
|
|
d6e55b4001 | ||
|
|
f710c3f198 | ||
|
|
99a3d167d9 | ||
|
|
c622649513 | ||
|
|
8571902e23 | ||
|
|
711bb9bc88 | ||
|
|
f2ebe2a60e | ||
|
|
011ee91105 | ||
|
|
2c4144638a | ||
|
|
2fc04cb872 | ||
|
|
62cc5ff623 | ||
|
|
afe343c3a7 | ||
|
|
e0d2139045 | ||
|
|
d60f019321 | ||
|
|
65402586c0 | ||
|
|
bf43446835 | ||
|
|
7169e56d6b | ||
|
|
1047b8c84d | ||
|
|
9740a03695 | ||
|
|
e34af3ec2b | ||
|
|
d576146ebf | ||
|
|
7441e7dbe9 | ||
|
|
1d3f432b53 | ||
|
|
15a4add72d | ||
|
|
3cc546a3bb | ||
|
|
c434f7f80f | ||
|
|
e6a01b47e4 | ||
|
|
3f1b3d9675 | ||
|
|
3e124d66c8 | ||
|
|
0fb3d5b4fd | ||
|
|
ffdff9f12f | ||
|
|
a0fe2e72c4 | ||
|
|
3b21abfd6c | ||
|
|
5aeb43393b | ||
|
|
6e85eba11b | ||
|
|
5cd5e0219d | ||
|
|
9c1d63540f | ||
|
|
db34be4224 | ||
|
|
b9ce05acc4 | ||
|
|
6ef9d9bacf | ||
|
|
40a44a7c3d | ||
|
|
13738d5fa1 | ||
|
|
363dede7a5 | ||
|
|
43866bd6fc | ||
|
|
cd29ced6de | ||
|
|
7e840163c0 | ||
|
|
a4896327e3 | ||
|
|
f396e9f4fc | ||
|
|
dacb698ada | ||
|
|
6411b83e52 | ||
|
|
bb98beade9 | ||
|
|
b8d208c549 | ||
|
|
04f35a8909 | ||
|
|
68bd06eb6e | ||
|
|
686b616ea9 | ||
|
|
0bb37c5e23 | ||
|
|
e9b4b8afbd | ||
|
|
bc5ec653ba | ||
|
|
1f44dac24d | ||
|
|
2dd6976f6d | ||
|
|
662239183d | ||
|
|
66243398bb | ||
|
|
aa10982c49 | ||
|
|
8b0336c810 | ||
|
|
0a9f7780e5 | ||
|
|
44f7e399d3 | ||
|
|
8419df95e1 | ||
|
|
59314f304e | ||
|
|
cc6dc9b229 | ||
|
|
fe69e6be6e | ||
|
|
430c5ca02e | ||
|
|
25ebd9e3ce | ||
|
|
bdfc0e284c | ||
|
|
12c56e4888 | ||
|
|
1bd4ee1da1 | ||
|
|
3956bfce60 | ||
|
|
8394109c89 | ||
|
|
813cfd9c0a | ||
|
|
976c58302b | ||
|
|
b60272b01f | ||
|
|
124d218889 | ||
|
|
cd077dab08 | ||
|
|
d1201e3195 | ||
|
|
5f2329b82a | ||
|
|
01fb5e133f | ||
|
|
fd2c85f6ae | ||
|
|
41977c2e04 | ||
|
|
ca88a1d439 | ||
|
|
5615196f7b | ||
|
|
1f59eb5f11 | ||
|
|
4bf6d66e67 | ||
|
|
2f34088e5e | ||
|
|
559e69f9b4 | ||
|
|
f3b7e522d8 | ||
|
|
73be56a21d | ||
|
|
d00ae7cf70 | ||
|
|
f92926e331 | ||
|
|
241c8004ce | ||
|
|
8d08627c94 | ||
|
|
aa1bb606f3 | ||
|
|
dabd4f1986 | ||
|
|
251c47001b | ||
|
|
3678161d71 | ||
|
|
6634416732 | ||
|
|
7101fd705c | ||
|
|
0f9bcf3319 | ||
|
|
a948732e1c | ||
|
|
c3006e0f5a | ||
|
|
efe835eb5a | ||
|
|
ab03ead035 | ||
|
|
6a6e08960e | ||
|
|
aedabeee3a | ||
|
|
83fe7b9c83 | ||
|
|
97654d7e28 | ||
|
|
94f4166017 | ||
|
|
a74c9c9e10 | ||
|
|
d2a3c4497f | ||
|
|
a129850922 | ||
|
|
c3f5d3d93a | ||
|
|
c5ea65b157 | ||
|
|
58b86e4235 | ||
|
|
a466be6243 | ||
|
|
60327ce41a | ||
|
|
2d4d9623da | ||
|
|
6b3b6beaa1 | ||
|
|
7743be3aac | ||
|
|
b709f8ef54 | ||
|
|
c74ce24cd2 | ||
|
|
612566e752 | ||
|
|
3ecce3dbeb | ||
|
|
71eca86c30 | ||
|
|
dd1e3bd8d4 | ||
|
|
c55fef76f7 | ||
|
|
eb70d4407f | ||
|
|
b335b5440a | ||
|
|
a8eeedb603 | ||
|
|
b3d8de7903 | ||
|
|
0413ea5801 | ||
|
|
2f6fba6772 | ||
|
|
d69acceca9 | ||
|
|
aff78bb39a | ||
|
|
104c032b7b | ||
|
|
b347341c75 | ||
|
|
c00f8d697a | ||
|
|
b07e4f2f46 | ||
|
|
ced6dc5cef | ||
|
|
bf2d129194 | ||
|
|
d59d0b7c21 | ||
|
|
dbd512e1b7 | ||
|
|
fcc6f699e3 | ||
|
|
7078d93307 | ||
|
|
a2317c3ffd | ||
|
|
75917fac8e | ||
|
|
295fd057ce | ||
|
|
8c4e09f74f | ||
|
|
e32cbae224 | ||
|
|
f6fd8db2a4 | ||
|
|
d65db21976 | ||
|
|
8acf1ff4b4 | ||
|
|
8b41df41c2 | ||
|
|
c32ebefaa8 | ||
|
|
ed0dc93d89 | ||
|
|
5a32dd8930 | ||
|
|
130ebe34c8 | ||
|
|
7612511b3b | ||
|
|
19a28a8aa3 | ||
|
|
fc213217e8 | ||
|
|
7198c5af1f | ||
|
|
40632f6b77 | ||
|
|
038bec784e | ||
|
|
f407eec799 | ||
|
|
bd618bebbe | ||
|
|
e2884b3e9a | ||
|
|
c41e242e5c | ||
|
|
9578319394 | ||
|
|
16eaca2c79 | ||
|
|
3bff195dca | ||
|
|
41cf2d2518 | ||
|
|
e0d4272a58 | ||
|
|
41c373fa3e | ||
|
|
7f6e09b531 | ||
|
|
e2f06800bc | ||
|
|
1180833643 | ||
|
|
130eed01cc | ||
|
|
2ded87355f | ||
|
|
b1ae02e2ff | ||
|
|
381417089a | ||
|
|
984a30423d | ||
|
|
2ad673c611 | ||
|
|
0693dd954e | ||
|
|
9071b36d9a | ||
|
|
eb6af20d2e | ||
|
|
8087969c5b | ||
|
|
cb437c66d1 | ||
|
|
40b0d0765e | ||
|
|
41235f30fb | ||
|
|
130c15ef5a | ||
|
|
2cc5142fb1 | ||
|
|
d451ece4e7 | ||
|
|
1121ba1b74 | ||
|
|
1fb039fde2 | ||
|
|
3073927e42 | ||
|
|
b6c2029931 | ||
|
|
45d010255f | ||
|
|
7e569022c5 | ||
|
|
50f1b47c7f | ||
|
|
5572bc4e2f | ||
|
|
729d334106 | ||
|
|
cacdfcb247 | ||
|
|
519ad9b384 | ||
|
|
7b2d785d20 | ||
|
|
f2d678e6e8 | ||
|
|
448e9b7cf1 | ||
|
|
2c4c9867e7 | ||
|
|
a99540a6de | ||
|
|
9614ed695d | ||
|
|
aabfee601e | ||
|
|
cee1d9e02f | ||
|
|
285f7fb0f9 | ||
|
|
ede90b1121 | ||
|
|
5e7329d156 | ||
|
|
9f1979b94a | ||
|
|
3fcf327e26 | ||
|
|
3f4742b48c | ||
|
|
c4f01c533b | ||
|
|
b7a8550988 | ||
|
|
e775891708 | ||
|
|
ae6fbb5df0 | ||
|
|
f9c1f03754 | ||
|
|
50701af9d5 | ||
|
|
1d6af3d430 | ||
|
|
392fd8f89c | ||
|
|
802db0fab2 | ||
|
|
2f972419a3 | ||
|
|
a05a2c67ef | ||
|
|
e34140620e | ||
|
|
acd9121085 | ||
|
|
b17d6b8d1d | ||
|
|
b9fa413a08 | ||
|
|
4abe148444 | ||
|
|
04d6940436 | ||
|
|
8511b5f594 | ||
|
|
546d6760b9 | ||
|
|
ccbb8d5e95 | ||
|
|
d7d7e7b038 | ||
|
|
80b6d97585 | ||
|
|
ff64ab32ae | ||
|
|
fc9c9e47f7 | ||
|
|
68e6ac4379 | ||
|
|
e34b7e99fd | ||
|
|
a32ba49352 | ||
|
|
3a0c71541b | ||
|
|
adc6bd73e3 | ||
|
|
8c6d8c2a49 | ||
|
|
53a8f8c26d | ||
|
|
bf4863b3f5 | ||
|
|
8f68678989 | ||
|
|
57c4e42d75 | ||
|
|
ff672cf8dd | ||
|
|
d43b040773 | ||
|
|
422c8c36e5 | ||
|
|
b76310ba74 | ||
|
|
c012f6e576 | ||
|
|
cf6d55961c | ||
|
|
3aa1b1ccbb | ||
|
|
3dcae82fa9 | ||
|
|
86b81ecb73 | ||
|
|
c43dc3dd77 | ||
|
|
e5eab8a199 | ||
|
|
7bab6eb6f0 | ||
|
|
87d9526d0c | ||
|
|
36982f056a | ||
|
|
c97ec5631b | ||
|
|
fdb0d5dd8f | ||
|
|
81b6dfe40d | ||
|
|
bc35b8e435 | ||
|
|
6859f3fc12 | ||
|
|
8b2d5cc4a7 | ||
|
|
74184b6f21 | ||
|
|
6416aed586 | ||
|
|
2a1b7bd380 | ||
|
|
4bba0bda61 | ||
|
|
27baa8317a | ||
|
|
1abfa78a8b | ||
|
|
edc687ba0f | ||
|
|
ff0bdbed85 | ||
|
|
dc4bdf592f | ||
|
|
b03d0513d0 | ||
|
|
0de70011ad | ||
|
|
220d1e5353 | ||
|
|
ca44f72938 | ||
|
|
18f49508a5 | ||
|
|
5c50462e1e | ||
|
|
a257865303 | ||
|
|
60adefa610 | ||
|
|
b5dde6bcc6 | ||
|
|
024dbfd44c | ||
|
|
233069f8db | ||
|
|
c76d6922b1 | ||
|
|
3241496144 | ||
|
|
63fe69c12e | ||
|
|
a4947e4e06 | ||
|
|
262f1c524e | ||
|
|
bd80d0229c | ||
|
|
163d794845 | ||
|
|
0b33466b3f | ||
|
|
bed27f4db3 | ||
|
|
738a224bd0 | ||
|
|
044f8ca87d | ||
|
|
45ee08d99b | ||
|
|
5ff68e8f6d | ||
|
|
f14a4a861d | ||
|
|
f596e3c491 | ||
|
|
9fb523adce | ||
|
|
cecf4d98d0 | ||
|
|
070e40e2f5 | ||
|
|
d757097bbc | ||
|
|
7b112c2766 | ||
|
|
03ee8c2ed7 | ||
|
|
3495842bb0 | ||
|
|
face65dab8 | ||
|
|
e41a49c625 | ||
|
|
3a55a42bff | ||
|
|
72550c52ed | ||
|
|
a9d0c56de1 | ||
|
|
469bcb0c24 | ||
|
|
43ce9cdde9 | ||
|
|
011f89893c | ||
|
|
958608ca1c | ||
|
|
1aecb23f5b | ||
|
|
9ed6fba2b4 | ||
|
|
df5c435c0b | ||
|
|
1ebaf97c44 | ||
|
|
c8c6914aac | ||
|
|
c99028f252 | ||
|
|
90d8c5862b | ||
|
|
2d5dd00f9e | ||
|
|
cb52183836 | ||
|
|
ab3b624b0c | ||
|
|
7c81de9a91 | ||
|
|
4dfac659ff | ||
|
|
66e0f9db08 | ||
|
|
a2eef41993 | ||
|
|
9a8646510b | ||
|
|
fa03d0117a | ||
|
|
03614034e9 | ||
|
|
444b1d416b | ||
|
|
4055ca1f9e | ||
|
|
7a216dfee5 | ||
|
|
a78b21fc67 | ||
|
|
a808002bc3 | ||
|
|
2fc368c111 | ||
|
|
6ed3af7d50 | ||
|
|
d037e0d30c | ||
|
|
51cb950904 | ||
|
|
4bfa88bb4c | ||
|
|
9d1e475db6 | ||
|
|
3e792793f6 | ||
|
|
ac5cb33356 | ||
|
|
aaf74259ec | ||
|
|
ecf9ceb90d | ||
|
|
5c4ff8ad37 | ||
|
|
dc427fc8e2 | ||
|
|
e1e6c4dae7 | ||
|
|
1747fd1cc6 | ||
|
|
a119822b90 | ||
|
|
8c798690ce | ||
|
|
ea6bf26657 | ||
|
|
4a26fd6e3b | ||
|
|
dddb38834e | ||
|
|
af7d6b936b | ||
|
|
a64b8786b5 | ||
|
|
25f93585a7 | ||
|
|
0d5a49e150 | ||
|
|
5c49a98c5e | ||
|
|
869772ff08 | ||
|
|
f2edf3181e | ||
|
|
d6dc5c506a | ||
|
|
eebd5e5dd7 | ||
|
|
868b266451 | ||
|
|
3fa23ff0f1 | ||
|
|
c275fb091e | ||
|
|
90c341c601 | ||
|
|
52d0e1ca4e | ||
|
|
c6f3386577 | ||
|
|
cf65a07256 | ||
|
|
051dc9db2b | ||
|
|
93a886b45a | ||
|
|
ec19082ecc | ||
|
|
0eff7c7c88 | ||
|
|
6c4b3514d7 | ||
|
|
d84cca7447 | ||
|
|
3a8b23bfd9 | ||
|
|
63fe322160 | ||
|
|
c808798013 | ||
|
|
379f21ce5c | ||
|
|
4f3b1b3eb9 | ||
|
|
b49df9502e | ||
|
|
4f8a706dc7 | ||
|
|
7560f63909 | ||
|
|
1dfb1b103c | ||
|
|
6e1987ca1d | ||
|
|
d307176931 | ||
|
|
c391a74266 | ||
|
|
65a87d3cc3 | ||
|
|
b60b9e7afe | ||
|
|
919834dc84 | ||
|
|
efc17286f8 | ||
|
|
acec5a6244 | ||
|
|
68039af3e7 | ||
|
|
da1247d653 | ||
|
|
052d0358f2 | ||
|
|
1b6ab411d3 | ||
|
|
d88d98edd3 | ||
|
|
741c9959f6 | ||
|
|
7c23127fde | ||
|
|
8b9722a3c0 | ||
|
|
8c149cfd83 | ||
|
|
6da498991c | ||
|
|
86a66deb7e | ||
|
|
9409e18179 | ||
|
|
6a0b803fc0 | ||
|
|
5fa3b54788 | ||
|
|
07df5018be | ||
|
|
1b9a59c36a | ||
|
|
8f89c33451 | ||
|
|
485d7d5904 | ||
|
|
e3720888c7 | ||
|
|
d75e384ff8 | ||
|
|
c340c7a88c | ||
|
|
9ecf6e93af | ||
|
|
a41735288c | ||
|
|
8ae78c6bd9 | ||
|
|
cb3cec4adf | ||
|
|
b0d6f3c58f | ||
|
|
0338648426 | ||
|
|
c7dc404188 | ||
|
|
08853158b6 | ||
|
|
74e0187663 | ||
|
|
bb4aa95c81 | ||
|
|
5117d50b7e | ||
|
|
593605d3ec | ||
|
|
c9ea4df8f9 | ||
|
|
89ff56faf1 | ||
|
|
9855026c43 | ||
|
|
904348a492 | ||
|
|
aaaa18392d | ||
|
|
8c33e40d2e | ||
|
|
0d04af1e72 | ||
|
|
8f17495800 | ||
|
|
95c1a24853 | ||
|
|
08374de10f | ||
|
|
506e70a216 | ||
|
|
0cca92cdd3 | ||
|
|
5b430cfc44 | ||
|
|
171c4da568 | ||
|
|
04611fb0f1 | ||
|
|
df430489cf | ||
|
|
5085e57fb5 | ||
|
|
75b81247a0 | ||
|
|
2c1a5c1039 | ||
|
|
71c34b7f2d | ||
|
|
b0cfaf58ad | ||
|
|
9dc07f04c3 | ||
|
|
f15c16200b | ||
|
|
4e09add6f8 | ||
|
|
355a6236be | ||
|
|
6d7fa9c25c | ||
|
|
82ae22ef4d | ||
|
|
b56bae5126 | ||
|
|
2d3f31e0a1 | ||
|
|
ae74191e38 | ||
|
|
ab8233ab81 | ||
|
|
d5572bdc64 | ||
|
|
e3990db59c | ||
|
|
87d90528ac | ||
|
|
e27711cfdd | ||
|
|
28c08222c0 | ||
|
|
8508a80998 | ||
|
|
7850a8bc04 | ||
|
|
fccec89084 | ||
|
|
6c7fa27404 | ||
|
|
e7f9c08ab8 | ||
|
|
03c8441b14 | ||
|
|
e887c4187e | ||
|
|
933aee6199 | ||
|
|
90e7f983b5 | ||
|
|
f00962aaf3 | ||
|
|
3eccd2e53a | ||
|
|
fcd0e61c24 | ||
|
|
e7a02b24c1 | ||
|
|
cbe6bb54e6 | ||
|
|
23966faca4 | ||
|
|
514f1a7835 | ||
|
|
af908bc48b | ||
|
|
233ebcb543 | ||
|
|
da0c007254 | ||
|
|
01bc7dcafc | ||
|
|
83e2ff8c51 | ||
|
|
e3120586fb | ||
|
|
3941aa12f1 | ||
|
|
0c10cf0ad6 | ||
|
|
62874a5a69 | ||
|
|
8c1f9c56fd | ||
|
|
75063c1527 | ||
|
|
5de583aa91 | ||
|
|
a0675d8149 | ||
|
|
a7e9ed95ec | ||
|
|
615d0edf1f | ||
|
|
e775755dec | ||
|
|
a1bf7de5a7 | ||
|
|
047c02e8db | ||
|
|
c92989d2b7 | ||
|
|
039e7875ff | ||
|
|
48b7b96bd0 | ||
|
|
747b7a636a | ||
|
|
635f56fabd | ||
|
|
c617bc0054 | ||
|
|
d215724753 | ||
|
|
9c1ee1bed5 | ||
|
|
14ef63c15e | ||
|
|
5a456140c1 | ||
|
|
1ff546737b | ||
|
|
56f0b25754 | ||
|
|
b0f78dc018 | ||
|
|
1f2d194acf | ||
|
|
aacfb2a2c6 | ||
|
|
0ba304dd31 | ||
|
|
8eb2da5fbb | ||
|
|
d1896e8ccd | ||
|
|
0edcb7a556 | ||
|
|
ecc2c5d81a | ||
|
|
441dec8e9f | ||
|
|
4f566c360b | ||
|
|
e10cd58090 | ||
|
|
5c8ae6d93e | ||
|
|
e72f7677bf | ||
|
|
e815d72b1f | ||
|
|
ddf918673d | ||
|
|
8517d0c00d | ||
|
|
8659dc73f4 | ||
|
|
07464787a8 | ||
|
|
e9a3aa9721 | ||
|
|
a8cc9f1873 | ||
|
|
f25c3c0542 | ||
|
|
4e5b9645e8 | ||
|
|
04347839ea | ||
|
|
e14b8410ca | ||
|
|
2a1ab7b438 | ||
|
|
dd1e4fbcc0 | ||
|
|
3f84d34c37 | ||
|
|
d7e429b91d | ||
|
|
155ef13c67 | ||
|
|
c3466040ec | ||
|
|
2d9be79407 | ||
|
|
2e4b7eede3 | ||
|
|
e1dee801b9 | ||
|
|
3c53fd892c | ||
|
|
c46990b13b | ||
|
|
1510b1f4c2 | ||
|
|
f8a69166ed | ||
|
|
b9eef98883 | ||
|
|
ae5c1ca377 | ||
|
|
188ab7df98 | ||
|
|
2e3d02fe1a | ||
|
|
3a3a1af1da | ||
|
|
0ced72c608 | ||
|
|
5584a95490 | ||
|
|
a3e66779d3 | ||
|
|
919eab8a8b | ||
|
|
e9baceab5a | ||
|
|
b05561c4b7 | ||
|
|
b7355af421 | ||
|
|
0462eedf5e | ||
|
|
82425f2c28 | ||
|
|
af010edd55 | ||
|
|
5966f4d973 | ||
|
|
eeb486a5f4 | ||
|
|
d7f55e76f2 | ||
|
|
7d9e781a1d | ||
|
|
e0c21a0b6b | ||
|
|
1dfb4b9400 | ||
|
|
e5cb774323 | ||
|
|
73390e6ba5 | ||
|
|
d91d9acc58 | ||
|
|
820988a0c0 | ||
|
|
1326a64a33 | ||
|
|
e0da2c2ed2 | ||
|
|
fb0a59cc58 | ||
|
|
f5cd3561ba | ||
|
|
115f7fa562 | ||
|
|
c867d87180 | ||
|
|
2a713eadc3 | ||
|
|
2e7900b624 | ||
|
|
f8435919a1 | ||
|
|
1db4354b53 | ||
|
|
3f233a1e77 | ||
|
|
25917e972d | ||
|
|
8812a81bdd | ||
|
|
b17ffba915 | ||
|
|
3619e34f50 | ||
|
|
6924686b78 | ||
|
|
92745f8116 | ||
|
|
17cf9864e0 | ||
|
|
5cfefd3ce3 | ||
|
|
9ccc6f4382 | ||
|
|
3c92471723 | ||
|
|
1a932ae094 | ||
|
|
57912ed329 | ||
|
|
e998f8aeb8 | ||
|
|
e318431e54 | ||
|
|
6a10f38daa | ||
|
|
c095078890 | ||
|
|
c644b83227 | ||
|
|
75f535315a | ||
|
|
7c283d9e97 | ||
|
|
2aa3ef78b6 | ||
|
|
1c0964e87f | ||
|
|
5c8d41be85 | ||
|
|
b286640360 | ||
|
|
75a8ff9263 | ||
|
|
50b5966e57 | ||
|
|
8eb4456f93 | ||
|
|
24c45faba0 | ||
|
|
010ac38a98 | ||
|
|
1c25ed5dbb | ||
|
|
bf1d32e52a | ||
|
|
6c86b69729 | ||
|
|
72dfff2d5e | ||
|
|
3341b820cc | ||
|
|
ede5f6cf74 | ||
|
|
321a9fea75 | ||
|
|
2e00f46b51 | ||
|
|
8c3f868983 | ||
|
|
d03cc94f47 | ||
|
|
5477ff9ba2 | ||
|
|
46b11600b0 | ||
|
|
15387e4ce0 | ||
|
|
49ef33fa34 | ||
|
|
1166323530 | ||
|
|
29113688a1 | ||
|
|
44c970746f | ||
|
|
bc200e691c | ||
|
|
a08f8d73cc | ||
|
|
b52f12b3ba | ||
|
|
78b5d89ddf | ||
|
|
b79df62eff | ||
|
|
e3c76874ad | ||
|
|
4347394a27 | ||
|
|
53bb723834 | ||
|
|
684a2264c5 | ||
|
|
fde8dc1798 | ||
|
|
3c87a2bdfa | ||
|
|
1520e6c084 | ||
|
|
2001129f09 | ||
|
|
a50ecaee56 | ||
|
|
67d9dcf003 | ||
|
|
79dcae32ef | ||
|
|
ccf6a19e2d | ||
|
|
28fbbe3b1b | ||
|
|
8d2dbe6ac0 | ||
|
|
ba8bdea771 | ||
|
|
3d9916298a | ||
|
|
87054c4f0e | ||
|
|
6660baee66 | ||
|
|
25d4c9254c | ||
|
|
44adfeb6c0 | ||
|
|
5ff2ef79e6 | ||
|
|
b762acadeb | ||
|
|
7d779eefb4 | ||
|
|
35b7757f9b | ||
|
|
23195e4dcc | ||
|
|
b28fbdfa7d | ||
|
|
a897502cd9 | ||
|
|
8546add692 | ||
|
|
aa5c5eb4c1 | ||
|
|
731abd3bd7 | ||
|
|
7531dd18dc | ||
|
|
04c32cddaa | ||
|
|
623a5e24cb | ||
|
|
bd9fc1d667 | ||
|
|
c550f2e37b | ||
|
|
484f876235 | ||
|
|
c70a1fee71 | ||
|
|
0b362de5f5 | ||
|
|
d312f7be37 | ||
|
|
2b5e5c3d08 | ||
|
|
708454f010 | ||
|
|
f1aec4dec3 | ||
|
|
1c53a72f17 | ||
|
|
9b157602e0 | ||
|
|
67e217c84c | ||
|
|
e6b650df0a | ||
|
|
7b7b667ddc | ||
|
|
70cd3c6b95 | ||
|
|
db05bc512d | ||
|
|
45da1efcdb | ||
|
|
54a0076e94 | ||
|
|
f8cab37bc1 | ||
|
|
2e65277695 | ||
|
|
9a1f59cd31 | ||
|
|
4e72220fd6 | ||
|
|
d65b8b2162 | ||
|
|
5dca1e338c | ||
|
|
5f4cf08864 | ||
|
|
2a2e537983 | ||
|
|
d79fc8da02 | ||
|
|
e04ccbc5cc | ||
|
|
bc946bfb97 | ||
|
|
38680fa466 | ||
|
|
a902b6bd98 | ||
|
|
c5e91a9ae9 | ||
|
|
b5f57f455a | ||
|
|
ad00a52f2d | ||
|
|
e08c7f15b4 | ||
|
|
7469af4484 | ||
|
|
ec76d850af | ||
|
|
cedf19f356 | ||
|
|
1d5f3f4640 | ||
|
|
a060fc3b8e | ||
|
|
bda5153703 | ||
|
|
6f539399ef | ||
|
|
d90bf2ab21 | ||
|
|
02620cfcd5 | ||
|
|
74daafaa94 | ||
|
|
aa963813ed | ||
|
|
9a6aff50ff | ||
|
|
c7d16ac8da | ||
|
|
b626f0396c | ||
|
|
9d2006d8ed | ||
|
|
abf1e32f2f | ||
|
|
fc1e09bf81 | ||
|
|
451cec33df | ||
|
|
16c92916c7 | ||
|
|
988037fe18 | ||
|
|
9a7f80c869 | ||
|
|
507e5c3a61 | ||
|
|
f8b90b5a5d | ||
|
|
dc14441757 | ||
|
|
da8512aaff | ||
|
|
d46a1a6178 | ||
|
|
957c7c0e88 | ||
|
|
3ebe87473c | ||
|
|
0e05b51fe5 | ||
|
|
c759e453bc | ||
|
|
40ce8fca73 | ||
|
|
8e1c33e160 | ||
|
|
13b0cae256 | ||
|
|
6d78a93b5b | ||
|
|
ae92994645 | ||
|
|
c4aa6b041b | ||
|
|
80158304f0 | ||
|
|
f0a069c1a2 | ||
|
|
5b4b9ce976 | ||
|
|
7fbcc2f24a | ||
|
|
e4be79a383 | ||
|
|
658604473f | ||
|
|
86bea6455c | ||
|
|
1e4a6e7b7f | ||
|
|
fd6a72fa1c | ||
|
|
ccffdb3fdc | ||
|
|
74d89b0d93 | ||
|
|
f142a71c3d | ||
|
|
5b7af6de43 | ||
|
|
ae414a0e42 | ||
|
|
a240ea8ab8 | ||
|
|
8b654459be | ||
|
|
93cf058334 | ||
|
|
3e8b4b5055 | ||
|
|
3c56d65a41 | ||
|
|
e51ec51af9 | ||
|
|
ff1c55e983 | ||
|
|
835d104f46 | ||
|
|
aeba1ef352 | ||
|
|
49e9f751a4 | ||
|
|
ff46820da6 | ||
|
|
6fba65e20d | ||
|
|
68d2cf51bc | ||
|
|
19eedffcaf | ||
|
|
4e14996e8a | ||
|
|
8a02a46a5c | ||
|
|
0de5a0feee | ||
|
|
4d321e0767 | ||
|
|
67fda0c12e | ||
|
|
1dded7f7e8 | ||
|
|
482f238069 | ||
|
|
5e145e54cc | ||
|
|
df73e68a43 | ||
|
|
e7c8483891 | ||
|
|
712d523484 | ||
|
|
24547c23ca | ||
|
|
8baf604a39 | ||
|
|
95416ce5b3 | ||
|
|
a56f9a612b | ||
|
|
0ae89cf32e | ||
|
|
7e0c9630a3 | ||
|
|
a6df6702c6 | ||
|
|
f69abd5321 | ||
|
|
fe9ce2b7d6 | ||
|
|
8e7ccf6ff7 | ||
|
|
51b77c0337 | ||
|
|
85d179d4eb | ||
|
|
890f5ada82 | ||
|
|
1cc8410e36 | ||
|
|
6ca7af9ec0 | ||
|
|
bc2c8efc80 | ||
|
|
00bb875240 | ||
|
|
c3cb563d87 | ||
|
|
d6ef8165bb | ||
|
|
564a503b1b | ||
|
|
56eeb1b28c | ||
|
|
068fc255ac | ||
|
|
cc8f2fb917 | ||
|
|
b583ebb7dd | ||
|
|
f897fe4146 | ||
|
|
bb3add20f3 | ||
|
|
48e0f6667b | ||
|
|
32213fb25a | ||
|
|
f6a1939f0f | ||
|
|
94c666479d | ||
|
|
09f17419a6 | ||
|
|
eb8a65db16 | ||
|
|
e6255a7d1e | ||
|
|
65a0f68484 | ||
|
|
e1a7db8fdd | ||
|
|
65331f225a | ||
|
|
64e8dc7981 | ||
|
|
737fe7ea29 | ||
|
|
b344a826ad | ||
|
|
bc0f56d6d7 | ||
|
|
3a89e9f106 | ||
|
|
79e75e04ea | ||
|
|
c3cb069108 | ||
|
|
cdb41713a4 | ||
|
|
491734eb21 | ||
|
|
4e891a191d | ||
|
|
b73a69a9c2 | ||
|
|
e811eff5a9 | ||
|
|
1d0c47fd55 | ||
|
|
e46c807e4f | ||
|
|
c132ca95c0 | ||
|
|
6b870763ac | ||
|
|
5505818199 | ||
|
|
7493bcc659 | ||
|
|
a068a1d0e3 | ||
|
|
37b16c84bb | ||
|
|
0ac89e8f54 | ||
|
|
7e65b21a24 | ||
|
|
736d69750d | ||
|
|
0cb9dbed4e | ||
|
|
6cfccfec33 | ||
|
|
c523eb98d1 | ||
|
|
0ffa49970b | ||
|
|
8cd2ea552e | ||
|
|
3f0becbf75 | ||
|
|
1b0ae81f4a | ||
|
|
54543b954c | ||
|
|
5e2187f7ee | ||
|
|
7b087bf4a9 | ||
|
|
9df9c9d102 | ||
|
|
7e8b5493a4 | ||
|
|
265863c6a4 | ||
|
|
2fee1e0666 | ||
|
|
b4ff166cbc | ||
|
|
861a0722c2 | ||
|
|
b1cef8d984 | ||
|
|
b911523977 | ||
|
|
247c3f6049 | ||
|
|
78c5d2a9bb | ||
|
|
3bf4e14cc3 | ||
|
|
d68d160cb7 | ||
|
|
202cb42fbb | ||
|
|
49f6cb968f | ||
|
|
07e120b7da | ||
|
|
f3dcae15ac | ||
|
|
25ec498dc7 | ||
|
|
9cc42cb091 | ||
|
|
bcf9cf89e7 | ||
|
|
f0729fc3e0 | ||
|
|
8186c00ef3 | ||
|
|
c0b31ccb87 | ||
|
|
267c950c5f | ||
|
|
ce1605b508 | ||
|
|
66fdb1c0d4 | ||
|
|
25bfdca16a | ||
|
|
9c284f9651 | ||
|
|
6d78c381f6 | ||
|
|
784e2080df | ||
|
|
70505bc334 | ||
|
|
8e8b247341 | ||
|
|
a8595879ec | ||
|
|
33a688e806 | ||
|
|
5c2bfad9b4 | ||
|
|
250f979237 | ||
|
|
b527b6e8ff | ||
|
|
a54ce007e6 | ||
|
|
4ed1f3490e | ||
|
|
0a082e9b37 | ||
|
|
236a99a409 | ||
|
|
04b4363ec8 | ||
|
|
37ebc20093 | ||
|
|
cef781cc87 | ||
|
|
08e4c7a967 | ||
|
|
697e4edcad | ||
|
|
b26297ca51 | ||
|
|
6ca7dba0cf | ||
|
|
f1fa05b407 | ||
|
|
02e22c35fe | ||
|
|
b935714237 | ||
|
|
a8314df902 | ||
|
|
0cd7a0325f | ||
|
|
16b7c81d55 | ||
|
|
424ba8b588 | ||
|
|
bf493e8d62 | ||
|
|
c714e43c8d | ||
|
|
cdf9d6f6ed | ||
|
|
cc4b48c27c | ||
|
|
cac9c92cc0 | ||
|
|
d40abf1689 | ||
|
|
69e9c69e70 | ||
|
|
c489ea7d01 | ||
|
|
26c6857a59 | ||
|
|
508bd3d1aa | ||
|
|
8705846710 | ||
|
|
c944a9696e | ||
|
|
943cc09d8a | ||
|
|
fc6800d19f | ||
|
|
d06f047b04 | ||
|
|
ddc899bada | ||
|
|
bd479e25c7 | ||
|
|
eaf5bd168e | ||
|
|
d7ecc206ba | ||
|
|
11ea212e8c | ||
|
|
cb29d8c11f | ||
|
|
adcea5a043 | ||
|
|
f02f7c2c4a | ||
|
|
a1e44cc14f | ||
|
|
d2d09bf68c | ||
|
|
e2dfb655f7 | ||
|
|
463e76b63c | ||
|
|
2dc4b0dbe8 | ||
|
|
7b23c126e6 | ||
|
|
25e3d2225a | ||
|
|
c8e0b5d7b6 | ||
|
|
4fb7e2b445 | ||
|
|
9138e3c061 | ||
|
|
9b2a29660b | ||
|
|
b7b4a9fa57 | ||
|
|
1fb07a7de8 | ||
|
|
b9cbcaad58 | ||
|
|
c6706a6f6c | ||
|
|
958e6a75a1 | ||
|
|
397977726c | ||
|
|
285d9189c7 | ||
|
|
767d3e0054 | ||
|
|
409d2a1b71 | ||
|
|
e0b9678d7f | ||
|
|
166dea6ac8 | ||
|
|
52bef4d677 | ||
|
|
801e5ef840 | ||
|
|
0044739ae5 | ||
|
|
4e44bd3650 | ||
|
|
0cffb0cd3e | ||
|
|
aaa3850ccd | ||
|
|
a17b5d5a4f | ||
|
|
2f97765bc3 | ||
|
|
3205ca8deb | ||
|
|
1cb4d65b87 | ||
|
|
7b2dd292bc | ||
|
|
ab585551c0 | ||
|
|
6cf0d7b999 | ||
|
|
9d972207f0 | ||
|
|
d9834ff24b | ||
|
|
d9c3ba05e7 | ||
|
|
03467ce6bd | ||
|
|
6e750fcb1e | ||
|
|
bd6941cfaa | ||
|
|
578519edd0 | ||
|
|
5c05f69450 | ||
|
|
f529dca488 | ||
|
|
296aca9dcf | ||
|
|
b170703128 | ||
|
|
b300fb7734 | ||
|
|
f89af47438 | ||
|
|
7bb4f8ff12 | ||
|
|
7dd6407a4c | ||
|
|
53de315b78 | ||
|
|
e065e6cda2 | ||
|
|
60553cc209 | ||
|
|
2d4c9ab518 | ||
|
|
50771f7ce3 | ||
|
|
242f8d644c | ||
|
|
f5575cd167 | ||
|
|
dd0ddc3e78 | ||
|
|
62308f3f4a | ||
|
|
cecafcce94 | ||
|
|
ca0efb7594 | ||
|
|
1d05ff2779 | ||
|
|
941811ccb9 | ||
|
|
700384be8e | ||
|
|
b8a22c40e0 | ||
|
|
3918de9ad1 | ||
|
|
96fe35e7d4 | ||
|
|
e87afb1518 | ||
|
|
7b467c6b81 | ||
|
|
eb8ebafe87 | ||
|
|
e559febaf1 | ||
|
|
6bcc6d38c7 | ||
|
|
8173960305 | ||
|
|
f2e590942e | ||
|
|
6a4b87eb9d | ||
|
|
edcba19c23 | ||
|
|
b140ae9137 | ||
|
|
8ee0591f28 | ||
|
|
97d0c596a1 | ||
|
|
7454cba4fa | ||
|
|
5713411893 | ||
|
|
a0cf79e841 | ||
|
|
825e1a7c56 | ||
|
|
9f2b453338 | ||
|
|
a0dce9be76 | ||
|
|
cf2b938529 | ||
|
|
62f685a9cd | ||
|
|
2c7d978c2d | ||
|
|
8cd897a42c | ||
|
|
1dc44d3130 | ||
|
|
2a6e3ef37e | ||
|
|
115d528c23 | ||
|
|
a310428527 | ||
|
|
7e0fd45ce3 | ||
|
|
b138ea54ee | ||
|
|
d7125d8d85 | ||
|
|
9c115a4acc | ||
|
|
43716567f5 | ||
|
|
0a8f00af34 | ||
|
|
b1d7429186 | ||
|
|
060a38a2c0 | ||
|
|
58402976b4 | ||
|
|
cd7b854bbb | ||
|
|
aecc0756e8 | ||
|
|
e6ccc6ed70 | ||
|
|
e959a01fac | ||
|
|
17674bfdf7 | ||
|
|
d807d4c21f | ||
|
|
b4690d2eab | ||
|
|
886657a641 | ||
|
|
db896db5a7 | ||
|
|
2357ae17e7 | ||
|
|
9f1c5491d2 | ||
|
|
70b52222f5 | ||
|
|
88cb59727c | ||
|
|
781bfdc314 | ||
|
|
b66723b23e | ||
|
|
cf96d71c22 | ||
|
|
1a111921da | ||
|
|
5d9bb428bb | ||
|
|
9833757b5d | ||
|
|
4195343c0d | ||
|
|
042bee4e5c | ||
|
|
4afba1f3d9 | ||
|
|
5999d45a5d | ||
|
|
f69e5d6a19 | ||
|
|
3517637702 | ||
|
|
e2809bfb42 | ||
|
|
68b33cc5c7 | ||
|
|
4c02cf8ecc | ||
|
|
271daaf768 | ||
|
|
efbb7ee432 | ||
|
|
6471ec71aa | ||
|
|
cb45708061 | ||
|
|
02597f2885 | ||
|
|
8c6a514edf | ||
|
|
7f3fdab793 | ||
|
|
5372f5f989 | ||
|
|
6d24c09a69 | ||
|
|
a8d72c79db | ||
|
|
1f713e0106 | ||
|
|
03f84c8260 | ||
|
|
6d5eb464c9 | ||
|
|
67f8de9ab8 | ||
|
|
2d95ceedc5 | ||
|
|
6526d765fc | ||
|
|
3d520f7c2d | ||
|
|
9c37519b55 | ||
|
|
7e9cfcd0dc | ||
|
|
a99ce1f5b1 | ||
|
|
42660b3cf1 | ||
|
|
f30258c439 | ||
|
|
93ff4c69f7 | ||
|
|
79571bb1ca | ||
|
|
f72c1a58cb | ||
|
|
2461396f69 | ||
|
|
81a071df2f | ||
|
|
6841abe842 | ||
|
|
cb70355d87 | ||
|
|
b17442bb04 | ||
|
|
4874e235fb | ||
|
|
06afa6eb94 | ||
|
|
58e4205d6c | ||
|
|
733394d6dd | ||
|
|
2de9558dea | ||
|
|
6bd173fced | ||
|
|
6b00cd746a | ||
|
|
9309ea6617 | ||
|
|
05c9e3aea5 | ||
|
|
88bac3e664 | ||
|
|
5473b6bc2f | ||
|
|
38e408076e | ||
|
|
dc100d87b5 | ||
|
|
6f6b31dadc | ||
|
|
b08b158b44 | ||
|
|
177f27d71e | ||
|
|
928bd9a149 | ||
|
|
e53113b8ac | ||
|
|
1fe83b4afe | ||
|
|
e8f31f80d1 | ||
|
|
56f5ab43c2 | ||
|
|
370385571c | ||
|
|
e34a303ce1 | ||
|
|
36f120cd20 | ||
|
|
0ae7c43fa5 | ||
|
|
c0d2943952 | ||
|
|
7d453a3b49 | ||
|
|
cd447875e6 | ||
|
|
692a94293c | ||
|
|
efebb10829 | ||
|
|
3c3f025923 | ||
|
|
5ff6e2dfbb | ||
|
|
61ac68f9f6 | ||
|
|
7f1022a8b1 | ||
|
|
edf6b025b1 | ||
|
|
d799df36b3 | ||
|
|
9e96812934 | ||
|
|
91e97cbe4c | ||
|
|
63ee3b32fe | ||
|
|
4ff1a2da10 | ||
|
|
4c3c975066 | ||
|
|
ec5d74f868 | ||
|
|
be0853358c | ||
|
|
fea15b553d | ||
|
|
88ef78745e | ||
|
|
be79342515 | ||
|
|
064a6176ac | ||
|
|
84e7485bfb | ||
|
|
f56f72f219 | ||
|
|
2bfb23f102 | ||
|
|
cf199fec52 | ||
|
|
165c20c2c4 | ||
|
|
625c6ba4c7 | ||
|
|
a32bede701 | ||
|
|
8ff5c8874f | ||
|
|
c5d38fc262 | ||
|
|
6b71970520 | ||
|
|
0209e111f6 | ||
|
|
dc01af7723 | ||
|
|
5435d0412f | ||
|
|
922ac25f64 | ||
|
|
aed53d6c5a | ||
|
|
61cdb9f36a | ||
|
|
1acd042c85 | ||
|
|
572712d82a | ||
|
|
d1697a7556 | ||
|
|
c8c6e9ecd9 | ||
|
|
90f3e4cf05 | ||
|
|
7bd8bf58bb | ||
|
|
1190d3f442 | ||
|
|
0e4f5cfbab | ||
|
|
f1c8db9f8c | ||
|
|
2c9abbd554 | ||
|
|
2305ae5d8c | ||
|
|
dec54bd0ba | ||
|
|
aade369737 | ||
|
|
2a5e042c70 | ||
|
|
1dc4c8c727 | ||
|
|
7ca035db88 | ||
|
|
a460c42f94 | ||
|
|
d16743e728 | ||
|
|
4a29fa8caf | ||
|
|
250bb54dba | ||
|
|
847d05d0b4 | ||
|
|
8315aa03fc | ||
|
|
b7a4c480d6 | ||
|
|
9a35faaa29 | ||
|
|
fbe2e28911 | ||
|
|
84968e25f3 | ||
|
|
10fd0b7b55 | ||
|
|
4a46dc6e5c | ||
|
|
0ec55604c0 | ||
|
|
500007c9ed | ||
|
|
f75abba013 | ||
|
|
dea113b428 | ||
|
|
6abc406a69 | ||
|
|
dcbe723bc5 | ||
|
|
33c98a28ac | ||
|
|
b2ddddfb20 | ||
|
|
c24367ebb9 | ||
|
|
7397b35379 | ||
|
|
baee44c3de | ||
|
|
1f2e4ecc30 | ||
|
|
955e28006d | ||
|
|
bf0736eb1f | ||
|
|
3a5b97b7f1 | ||
|
|
45bf825066 | ||
|
|
4a18d5c89b | ||
|
|
174b26c497 | ||
|
|
5cacc82f61 | ||
|
|
29a90816ff | ||
|
|
4bea454021 | ||
|
|
8bfd0ae4c4 | ||
|
|
378943ce67 | ||
|
|
c65d409afd | ||
|
|
ed1bbe2cad | ||
|
|
b0b3d09063 | ||
|
|
0ede2af7a0 | ||
|
|
e8d23f7811 | ||
|
|
907cd7217e | ||
|
|
7c402e5af3 | ||
|
|
b8d78a5520 | ||
|
|
dfa5862960 | ||
|
|
4276908f51 | ||
|
|
be23b71e87 | ||
|
|
f851acbfff | ||
|
|
78ef9b0205 | ||
|
|
ed9b0e5cba | ||
|
|
752c1a0ce9 | ||
|
|
cc30415d0c | ||
|
|
03e16611a3 | ||
|
|
8e2f3c1c83 | ||
|
|
b6d63b2516 | ||
|
|
e6b88d02bd | ||
|
|
125060ca63 | ||
|
|
b4baca9261 | ||
|
|
6342b6e332 | ||
|
|
a6dc77822b | ||
|
|
59bc67052b | ||
|
|
c090562828 | ||
|
|
69e2ec63c5 | ||
|
|
f610a516a0 | ||
|
|
2e51a4caa3 | ||
|
|
c6fa97a6d6 | ||
|
|
24d7159abd | ||
|
|
7978dc989d | ||
|
|
d99e6b5014 | ||
|
|
2cf40fc2b8 | ||
|
|
260d08b814 | ||
|
|
53dd05d8f6 | ||
|
|
fbe7055370 | ||
|
|
a5b386205f | ||
|
|
916bcab28e | ||
|
|
c7373c3dee | ||
|
|
9f2c8eb2a1 | ||
|
|
65300dcfb0 | ||
|
|
9ddc574f9a | ||
|
|
2dd9e67874 | ||
|
|
f93b03a5e6 | ||
|
|
55a47cd30f | ||
|
|
5792219d1d | ||
|
|
293c58c1e7 | ||
|
|
9f375a752e | ||
|
|
04dc5a9ca6 | ||
|
|
ae6cb5483e | ||
|
|
a168ec1d27 | ||
|
|
2a35144327 | ||
|
|
7207eca1ee | ||
|
|
9c34782478 | ||
|
|
20e6d22709 | ||
|
|
24dd0c61ef | ||
|
|
565c15363c | ||
|
|
ed67f7b7a7 | ||
|
|
6ea8d138d3 | ||
|
|
4159ac43aa | ||
|
|
419b09b053 | ||
|
|
88530f6b76 | ||
|
|
a8cb8177f6 | ||
|
|
277f8a34f4 | ||
|
|
4dde470865 | ||
|
|
ab08405984 | ||
|
|
b81fde02aa | ||
|
|
57dd2ea808 | ||
|
|
7043fa702f | ||
|
|
f98d2e5cc1 | ||
|
|
1a5538251f | ||
|
|
f4ddbb5ad1 | ||
|
|
74bf705ea8 | ||
|
|
676cd3a283 | ||
|
|
c6ead3cdd3 | ||
|
|
2d53648ce7 | ||
|
|
64ca6ac26b | ||
|
|
4fe4c00eca | ||
|
|
376838a606 | ||
|
|
d768a816aa | ||
|
|
766e0cb7d1 | ||
|
|
6a6b0c8b51 | ||
|
|
e24b01cc6f | ||
|
|
7f9ef5621a | ||
|
|
d7fc9ffc51 | ||
|
|
39348038df | ||
|
|
9472baae0d | ||
|
|
ae17b9ecd5 | ||
|
|
74096890ba | ||
|
|
889c2282a5 | ||
|
|
dca30c44f5 | ||
|
|
f2c358c6ce | ||
|
|
2ab42de1ec | ||
|
|
ac2024ccbf | ||
|
|
93164a7d64 | ||
|
|
ecff2e5ce1 | ||
|
|
c9d630dab6 | ||
|
|
d135906dbc | ||
|
|
9f427a52cb | ||
|
|
5a39d3a838 | ||
|
|
013f3d999f | ||
|
|
64d30d7adc | ||
|
|
7062cb56a9 | ||
|
|
9d57828d66 | ||
|
|
9ed8dee71b | ||
|
|
4692b3345d | ||
|
|
e59fb00735 | ||
|
|
9275853084 | ||
|
|
0c81aa29f9 | ||
|
|
01d2e27a2b | ||
|
|
dd7aadf7b2 | ||
|
|
b2fdf501c5 | ||
|
|
345e515735 | ||
|
|
945982b0b2 | ||
|
|
18ad9cbd10 | ||
|
|
f433a75569 | ||
|
|
b05389c825 | ||
|
|
68875fdf32 | ||
|
|
3393e0c02c | ||
|
|
a149b2466e | ||
|
|
13e230d505 | ||
|
|
80b3d7a3c9 | ||
|
|
4bd48de60c | ||
|
|
2eab92f8e3 | ||
|
|
2bbd82cf24 | ||
|
|
1bfd3d7f58 | ||
|
|
cd77b3e88b | ||
|
|
8c93c4dd42 | ||
|
|
45d63a5408 | ||
|
|
decef971f4 | ||
|
|
a288aaefc4 | ||
|
|
eed56c77b4 | ||
|
|
346601bc32 | ||
|
|
5080fbbef0 | ||
|
|
b5b724348d | ||
|
|
c3ee90d8ca | ||
|
|
e1435034ae | ||
|
|
bf35c5dc7f | ||
|
|
c42d223ac2 | ||
|
|
d5654d2b20 | ||
|
|
a7508fec1a | ||
|
|
c31945e682 | ||
|
|
d3203b931e | ||
|
|
947f4e90c3 | ||
|
|
d184c7b271 | ||
|
|
913488c066 | ||
|
|
7fa27d9ac6 | ||
|
|
c341b9cce5 | ||
|
|
bbbf0d45ba | ||
|
|
114c402d9e | ||
|
|
d51519eba4 | ||
|
|
e650f9988b | ||
|
|
8ed8454115 | ||
|
|
6e101bebb1 | ||
|
|
4577b38d22 | ||
|
|
a8515e2d28 | ||
|
|
964e91052e | ||
|
|
4e55e69bff | ||
|
|
e501dbb658 | ||
|
|
20e505e4b7 | ||
|
|
291a26e6e3 | ||
|
|
0383911887 | ||
|
|
a5c5eb77b5 | ||
|
|
90d02be7c5 | ||
|
|
04221983ac | ||
|
|
dfda027ae8 | ||
|
|
21b5a79121 | ||
|
|
411a388c62 | ||
|
|
61c10d42f6 | ||
|
|
68ecfb69a5 | ||
|
|
e62fee8eb3 | ||
|
|
5566d49103 | ||
|
|
48337a4a35 | ||
|
|
2c5c4fca14 | ||
|
|
4fab95ed20 | ||
|
|
6c36ca4628 | ||
|
|
9c61c57896 | ||
|
|
a618011ca1 | ||
|
|
95eef4df79 | ||
|
|
ec1e714ac1 | ||
|
|
736d658080 | ||
|
|
aa2920584e | ||
|
|
9d13bfc258 | ||
|
|
e43633011c | ||
|
|
97027f7fb3 | ||
|
|
bf5adc9be4 | ||
|
|
7665b436f0 | ||
|
|
ffca7b85c2 | ||
|
|
eef2fa00d9 | ||
|
|
c55551ad7c | ||
|
|
c91b521111 | ||
|
|
deb35e3e2c | ||
|
|
5e2d3c9ec1 | ||
|
|
dda454434b | ||
|
|
b97d371ce0 | ||
|
|
a25c98ac73 | ||
|
|
fd47013111 | ||
|
|
b3aa469c21 | ||
|
|
981c0de27a | ||
|
|
1bfe9acbbf | ||
|
|
2d1e9ce753 | ||
|
|
19043426b9 | ||
|
|
6e21ce592e | ||
|
|
975c6efbe4 | ||
|
|
972491aece | ||
|
|
1a8ecda3ee | ||
|
|
d36c7b618d | ||
|
|
251431ff4f | ||
|
|
1a3052793e | ||
|
|
84fbc56fd0 | ||
|
|
4444ff7632 | ||
|
|
7770da4b41 | ||
|
|
7202a4d42b | ||
|
|
3fa29765fd | ||
|
|
b9e468c163 | ||
|
|
0172ad2902 | ||
|
|
d9aa352ff0 | ||
|
|
945ba0300d | ||
|
|
9e15cc606e | ||
|
|
e011160f3c | ||
|
|
9447da5065 | ||
|
|
387ed39f6d | ||
|
|
e50e5f9336 | ||
|
|
6f0d9950f3 | ||
|
|
4705ff7d6d | ||
|
|
36778eb231 | ||
|
|
c6dd154b3e | ||
|
|
74b5feea7b | ||
|
|
35cae95032 | ||
|
|
11a36aa96f | ||
|
|
9b0e97ae10 | ||
|
|
02ba02604c | ||
|
|
42ecf418f5 | ||
|
|
48ce525d16 | ||
|
|
3081e2ca73 | ||
|
|
48ae85b6ff | ||
|
|
82281ce47d | ||
|
|
4ecd2bafbb | ||
|
|
308b9ad8f0 | ||
|
|
73b408c242 | ||
|
|
51c9eb321a | ||
|
|
1657fca2f4 | ||
|
|
0d25aad90d | ||
|
|
b8c1cb1c2c | ||
|
|
6e1d44fd56 | ||
|
|
528ff4b451 | ||
|
|
f6c29ba3dc | ||
|
|
160f9b5bf6 | ||
|
|
53e7985c8d | ||
|
|
9102342795 | ||
|
|
c4488936b2 | ||
|
|
4e2b990734 | ||
|
|
6ca1418587 | ||
|
|
30dd06812e | ||
|
|
b29b89ef21 | ||
|
|
81ae27d56a | ||
|
|
f90bf72280 | ||
|
|
abcf7aa591 | ||
|
|
40b6d49387 | ||
|
|
497b4f92d2 | ||
|
|
28566b4966 | ||
|
|
b4b15f68c0 | ||
|
|
1eb1cf452b | ||
|
|
c549810def | ||
|
|
0d0ed9187a | ||
|
|
dfa81d9efb | ||
|
|
1dba06e7b0 | ||
|
|
daac87be95 | ||
|
|
e97359435e | ||
|
|
afce9bcca1 | ||
|
|
9c7baca820 | ||
|
|
618265e645 | ||
|
|
9728978b75 | ||
|
|
938c0bbae1 | ||
|
|
a0cd818831 | ||
|
|
31c4ab5401 | ||
|
|
1f65529824 | ||
|
|
5b3a6eedd1 | ||
|
|
6938440d68 | ||
|
|
57ec6c9bad | ||
|
|
7a09bc4068 | ||
|
|
deb15645a8 | ||
|
|
f0b358e8b9 | ||
|
|
dce2b5a8fc | ||
|
|
59d100d959 | ||
|
|
d497b5362b | ||
|
|
369b0abdc2 | ||
|
|
72240ab31a | ||
|
|
dc4e1ddc9f | ||
|
|
ff656346fa | ||
|
|
ca91057d50 | ||
|
|
8c1e7de6cb | ||
|
|
207886cd3a | ||
|
|
336d1ee733 | ||
|
|
bed2b769f5 | ||
|
|
26029d9c4c | ||
|
|
c64c888929 | ||
|
|
8d9db41880 | ||
|
|
4fae54a8e0 | ||
|
|
9f35928719 | ||
|
|
c5af032df5 | ||
|
|
8a898a6fcc | ||
|
|
9f827ded1c | ||
|
|
5daa9411a0 | ||
|
|
094d4019b8 | ||
|
|
1507f3abba | ||
|
|
30e8defe52 | ||
|
|
9f4dd3e3e3 | ||
|
|
8c00014d7e | ||
|
|
1cf12a6350 | ||
|
|
dc9461e23f | ||
|
|
72d57050df | ||
|
|
49d1f665a4 | ||
|
|
2c25edc4c1 | ||
|
|
d2f098b33d | ||
|
|
6f4f7f35f3 | ||
|
|
0a4fe6c8db | ||
|
|
7bba401d5d | ||
|
|
c73cff12f1 | ||
|
|
b32d93840e | ||
|
|
cb457849fd | ||
|
|
cb3c30059a | ||
|
|
20dc93e49e | ||
|
|
b620447dcc | ||
|
|
4ffd2ad1d3 | ||
|
|
acc9938ba5 | ||
|
|
f6d13ac8cf | ||
|
|
24cb653c6b | ||
|
|
6dfd3cf68e | ||
|
|
073775cbbb | ||
|
|
e995d5044e | ||
|
|
5b0a79a27a | ||
|
|
6747de655e | ||
|
|
91bad2b09e | ||
|
|
1244d5b713 | ||
|
|
c0ed5cd47b | ||
|
|
c8281fd38e | ||
|
|
fe8e6bff9b | ||
|
|
9caf25d144 | ||
|
|
348620c7ac | ||
|
|
30fc2ab92b | ||
|
|
5b5464d525 | ||
|
|
cd15a0528f | ||
|
|
7b52778eff | ||
|
|
162de2f2b5 | ||
|
|
f6e4af6fd7 | ||
|
|
32b76dcdac | ||
|
|
bcfd252052 | ||
|
|
32c452779e | ||
|
|
118b90c59e | ||
|
|
f6a61b140e | ||
|
|
75ece4b5cf | ||
|
|
724cca4178 | ||
|
|
5b3fdb0181 | ||
|
|
fcc3d0265d | ||
|
|
5356ea7cde | ||
|
|
06226df1a9 | ||
|
|
bf638ef026 | ||
|
|
07973d5db8 | ||
|
|
3b3f71121b | ||
|
|
47333a34d5 | ||
|
|
d92138f703 | ||
|
|
b2bf335327 | ||
|
|
33bec62a20 | ||
|
|
2e630b1847 | ||
|
|
002d3fe863 | ||
|
|
fb24311e7c | ||
|
|
90278430d9 | ||
|
|
bcd9d12a8d | ||
|
|
79363339b7 | ||
|
|
fbe2c6b33e | ||
|
|
fc11f47229 | ||
|
|
2b23d89d14 | ||
|
|
9cfa3cff54 | ||
|
|
6507653e72 | ||
|
|
7fe747d1eb | ||
|
|
32567c9f3b | ||
|
|
4f3d52fedc | ||
|
|
8321bab39c | ||
|
|
989238802a | ||
|
|
9051fc538f | ||
|
|
03fd7f27db | ||
|
|
45d6a15ae9 | ||
|
|
6c6ca18664 | ||
|
|
97fe2b40c1 | ||
|
|
f689ab5017 | ||
|
|
edb7cac271 | ||
|
|
81d87a2a28 | ||
|
|
7366f0b304 | ||
|
|
1d8fa09c80 | ||
|
|
e085e6c84c | ||
|
|
008fa4584d | ||
|
|
c8c49133d9 | ||
|
|
961f1dea06 | ||
|
|
1700426256 | ||
|
|
aa7f5baad2 | ||
|
|
45acdd6f6d | ||
|
|
8b354e776b | ||
|
|
868f5e44ca | ||
|
|
4e5fdd11ea | ||
|
|
d552a3391a | ||
|
|
d023b4e2dd | ||
|
|
fa79cc9c23 | ||
|
|
06daa75fb9 | ||
|
|
ffa304c838 | ||
|
|
df21765a3e | ||
|
|
5a6ae115f8 | ||
|
|
5e5df40b9b | ||
|
|
6d4943e81f | ||
|
|
57cffe901f | ||
|
|
a758f61793 | ||
|
|
b3b35df2a2 | ||
|
|
5ad50246fc | ||
|
|
d89b895cfd | ||
|
|
d793c292cb | ||
|
|
57749b1b9f | ||
|
|
1cdb7854a5 | ||
|
|
704d33b347 | ||
|
|
b2a7515ee8 | ||
|
|
f4f2b52995 | ||
|
|
c7d5edbf5e | ||
|
|
d8f07f1674 | ||
|
|
78bfb45b07 | ||
|
|
6ad4d60555 | ||
|
|
2fad8aa209 | ||
|
|
74397d45b2 | ||
|
|
c8ca769d3b | ||
|
|
25d42c17e3 | ||
|
|
a377811f15 | ||
|
|
ef1b6b2cf2 | ||
|
|
1699389a46 | ||
|
|
ad8ee3d7d1 | ||
|
|
39f0a4d8e9 | ||
|
|
15a9821cc2 | ||
|
|
53e97e7433 | ||
|
|
bc0ecd202a | ||
|
|
b307daa23f | ||
|
|
4c95b1bfda | ||
|
|
9359fc5ff2 | ||
|
|
a238d7d1eb | ||
|
|
0e92313331 | ||
|
|
3e719c99f5 | ||
|
|
2a4d0dcb89 | ||
|
|
2e155fde39 | ||
|
|
9a8c8cb22e | ||
|
|
04aa7441ab | ||
|
|
28dc54f6d9 | ||
|
|
a1e1165200 | ||
|
|
ddba003d5e | ||
|
|
e59d9a34c9 | ||
|
|
9e198c4bd0 | ||
|
|
7eceffbfef | ||
|
|
8043f01b13 | ||
|
|
41c0f68630 | ||
|
|
2c627637c5 | ||
|
|
58f4b3511e | ||
|
|
93fac08ec3 | ||
|
|
23c3bee970 | ||
|
|
73ff97ad76 | ||
|
|
0d8ffc2007 | ||
|
|
a32f7fb832 | ||
|
|
496cf69e40 | ||
|
|
eb17330837 | ||
|
|
2708603bb4 | ||
|
|
e4f1cda7de | ||
|
|
4359b88bbe | ||
|
|
c079fde3f7 | ||
|
|
6e94156199 | ||
|
|
1f67a3a985 | ||
|
|
4cba294d79 | ||
|
|
e642fd7a1c | ||
|
|
5448e6739c | ||
|
|
f0389d8d37 | ||
|
|
a5313cf360 | ||
|
|
b26c45b033 | ||
|
|
986093affa | ||
|
|
f88e0acb0e | ||
|
|
aed461b431 | ||
|
|
8bbd0e826c | ||
|
|
40c45f86d4 | ||
|
|
a0b7277724 | ||
|
|
54bc369ad7 | ||
|
|
2d3855fc6e | ||
|
|
1cd47f5f6e | ||
|
|
675564835c | ||
|
|
2456cd58c4 | ||
|
|
43a107026d | ||
|
|
ef0498a00b | ||
|
|
f1784f2fd2 | ||
|
|
730f5752ff | ||
|
|
a88c73b43a | ||
|
|
a6d204e241 | ||
|
|
941baf6641 | ||
|
|
b41a614686 | ||
|
|
aac751832a | ||
|
|
52a08e90d1 | ||
|
|
6b5f0458fe | ||
|
|
b52a2738d4 | ||
|
|
10f99d7b77 | ||
|
|
593222afe1 | ||
|
|
7b1856e5a1 | ||
|
|
3d5d81bf39 | ||
|
|
50f06b46f4 | ||
|
|
be6076c0ad | ||
|
|
6125e07d79 | ||
|
|
d5b8c46499 | ||
|
|
7805e23588 | ||
|
|
9117b9d17a | ||
|
|
e274c8fb72 | ||
|
|
e8dbd66e2b | ||
|
|
8b9b23603f | ||
|
|
aefb9dc5e5 | ||
|
|
a8c1b19a31 | ||
|
|
29c8d2a54a | ||
|
|
87827be0c2 | ||
|
|
e4572e5210 | ||
|
|
3e8e12a6b6 | ||
|
|
5ddbb8f41a | ||
|
|
3c44e92bcb | ||
|
|
5e8d95f590 | ||
|
|
2156704924 | ||
|
|
4e49aa0ca3 | ||
|
|
d5d1c53735 | ||
|
|
1aac5c0ee8 | ||
|
|
4434328b0a | ||
|
|
9b2cfb890c | ||
|
|
b2f364ec62 | ||
|
|
b7aeb4c9b5 | ||
|
|
370f48da2a | ||
|
|
32def77ace | ||
|
|
531c81ece8 | ||
|
|
73582b8117 | ||
|
|
5c33091cfa | ||
|
|
56327ebe6a | ||
|
|
e0031b1c78 | ||
|
|
b2ac5cb2d0 | ||
|
|
6757ef89b3 | ||
|
|
bf6eea6536 | ||
|
|
ec4346f6f9 | ||
|
|
e42ff486a8 | ||
|
|
bc9058d041 | ||
|
|
4a276f3039 | ||
|
|
acf47d8f24 | ||
|
|
f62d1ea3d5 | ||
|
|
f923bba73c | ||
|
|
e3738c49b8 | ||
|
|
41746da8c2 | ||
|
|
23b97c6bb5 | ||
|
|
4a7f7171f5 | ||
|
|
961092281f | ||
|
|
036b3f331b | ||
|
|
9ac5c355a2 | ||
|
|
3d0b604c14 | ||
|
|
257b2bfb6c | ||
|
|
90528846e8 | ||
|
|
32509c9731 | ||
|
|
d3f940833d | ||
|
|
b335e351d4 | ||
|
|
67bcde9ba8 | ||
|
|
169bfde4d4 | ||
|
|
0a7f291268 | ||
|
|
0c2c2e71a6 | ||
|
|
d1d746afb4 | ||
|
|
db6e41f0ed | ||
|
|
5b2b60ae98 | ||
|
|
c90a1ae0c9 | ||
|
|
c679fb298e | ||
|
|
17c7cad545 | ||
|
|
164c263b5c | ||
|
|
a9bb9d0eb4 | ||
|
|
cc6688d796 | ||
|
|
9b1f24df3d | ||
|
|
595e804ae3 | ||
|
|
b381e9b952 | ||
|
|
28418076b2 | ||
|
|
abdfdb029e | ||
|
|
8465b81d50 | ||
|
|
ed65b6e512 | ||
|
|
d793544518 | ||
|
|
53480a673b | ||
|
|
ad187f8905 | ||
|
|
2280f82fc6 | ||
|
|
e6714faffb | ||
|
|
af8f2bb174 | ||
|
|
d7501c16bf | ||
|
|
804196a418 | ||
|
|
50d70c01d6 | ||
|
|
9fc601cfbb | ||
|
|
fed5333248 | ||
|
|
3d1dab4404 | ||
|
|
29c2fd46d2 | ||
|
|
a3d5cdb07c | ||
|
|
d99c0f6b4a | ||
|
|
43f21e62aa | ||
|
|
50425bc137 | ||
|
|
0c690586e0 | ||
|
|
bc8c5fe58d | ||
|
|
0cc0db32e3 | ||
|
|
d68f7641a3 | ||
|
|
4fcbaa3dd9 | ||
|
|
5e56584285 | ||
|
|
ca26ccb083 | ||
|
|
3e8b713b06 | ||
|
|
13eca7d782 | ||
|
|
af3d4e1b02 | ||
|
|
80afb40ae3 | ||
|
|
3333428b44 | ||
|
|
a131de9bb2 | ||
|
|
0ddd002f60 | ||
|
|
e7209103e6 | ||
|
|
53f062d050 | ||
|
|
b5b65403a4 | ||
|
|
1a3914fe0c | ||
|
|
b7e3cb31a5 | ||
|
|
9769137a43 | ||
|
|
c0688f1aef | ||
|
|
6c29853bf2 | ||
|
|
2e9802b7a7 | ||
|
|
7483896e15 | ||
|
|
4b4f249e0d | ||
|
|
196dcf93bc | ||
|
|
2c11ec308b | ||
|
|
e5eb96c83a | ||
|
|
54ed003ace | ||
|
|
f18e10253d | ||
|
|
c9add317a9 | ||
|
|
6d1741030b | ||
|
|
b8dc932c05 | ||
|
|
17f8d8db61 | ||
|
|
38437fa135 | ||
|
|
82f35daaaf | ||
|
|
b529bba4bf | ||
|
|
dde33ea9c3 | ||
|
|
cb0d89705b | ||
|
|
f49353b42f | ||
|
|
573c61dcde | ||
|
|
51f38e6c2d | ||
|
|
2de213732a | ||
|
|
3798c36686 | ||
|
|
209abea1db | ||
|
|
250705e7b5 | ||
|
|
5a96822f2c | ||
|
|
23b34259e0 | ||
|
|
11b6cb8aae | ||
|
|
a4bade7aac | ||
|
|
e322b5d167 | ||
|
|
01af4edcfe | ||
|
|
ff0945cbdc | ||
|
|
d5ec7d66a8 | ||
|
|
dc0aebabe6 | ||
|
|
52828ca214 | ||
|
|
757e9886a0 | ||
|
|
f45e8c7bdd | ||
|
|
ea904b4074 | ||
|
|
ec6158d029 | ||
|
|
4386445c18 | ||
|
|
a585aa6750 | ||
|
|
2475a52061 | ||
|
|
001dfac061 | ||
|
|
1b37c55e26 | ||
|
|
3442781798 | ||
|
|
c9d3f123a6 | ||
|
|
d069a4d15d | ||
|
|
f1ad8fb627 | ||
|
|
d7406b1528 | ||
|
|
02ce897e80 | ||
|
|
0bd9d3a60e | ||
|
|
b4c81fb6db | ||
|
|
0f566bda2b | ||
|
|
f97a8149cd | ||
|
|
f4b6a3e9c0 | ||
|
|
7dfae89768 | ||
|
|
d41ca3f0e2 | ||
|
|
65fc4c55be | ||
|
|
5135d6b985 | ||
|
|
2202edeff0 | ||
|
|
c8f759ec74 | ||
|
|
5fda10c6f1 | ||
|
|
11ba084e1b | ||
|
|
cddd00166c | ||
|
|
0190aa7353 | ||
|
|
1546de87f0 | ||
|
|
affffaed3d | ||
|
|
0c644f1462 | ||
|
|
a2da5c7daa | ||
|
|
c155d83f5b | ||
|
|
5a03e3ac3f | ||
|
|
08b2097967 | ||
|
|
15401859b5 | ||
|
|
6f24165170 | ||
|
|
a8afd9382c | ||
|
|
caddf00d78 | ||
|
|
e105098b3f | ||
|
|
9852e7e4d7 | ||
|
|
b855560192 | ||
|
|
f2f50efea3 | ||
|
|
2b3cd246e5 | ||
|
|
7171ade2c2 | ||
|
|
76ec9151d1 | ||
|
|
6c24dd9005 | ||
|
|
e323afb0ce | ||
|
|
1fd43fd86e | ||
|
|
3e70c81ed9 | ||
|
|
6e07229564 | ||
|
|
859d5eb2d7 | ||
|
|
29b0c4a01c | ||
|
|
b824f0f458 | ||
|
|
43ea53a04a | ||
|
|
fa07f00aaf | ||
|
|
dbb834ffeb | ||
|
|
8549a8a5dc | ||
|
|
887c250852 | ||
|
|
710c1c34d1 | ||
|
|
e16818108f | ||
|
|
0cb76e79df | ||
|
|
6cb419673e | ||
|
|
72d668c332 | ||
|
|
5ce4799a38 | ||
|
|
6178da0142 | ||
|
|
27713e3fc2 | ||
|
|
3492c47b18 | ||
|
|
43dc001b62 | ||
|
|
8280b43a62 | ||
|
|
85d9b02d16 | ||
|
|
bfd502f027 | ||
|
|
f1ed5fa827 | ||
|
|
5bb9e1b4d4 | ||
|
|
7de819237d | ||
|
|
6cfab29b71 | ||
|
|
55708796af | ||
|
|
7074f1df07 | ||
|
|
67d8ab07e6 | ||
|
|
4e63da0669 | ||
|
|
15b0a5651c | ||
|
|
4e66723517 | ||
|
|
3e53c86001 | ||
|
|
524e5b844b | ||
|
|
e1f09dfd84 | ||
|
|
f16411ccfd | ||
|
|
2bbcd45b05 | ||
|
|
fdc6c6ef08 | ||
|
|
6e87cc8da6 | ||
|
|
2d0b6c72b8 | ||
|
|
3e84046f90 | ||
|
|
cc1cb996f1 | ||
|
|
32fbeacdfb | ||
|
|
431aad3c15 | ||
|
|
0454f2c490 | ||
|
|
5f911774bf | ||
|
|
66b7e42790 | ||
|
|
6a419388fc | ||
|
|
abda7c1147 | ||
|
|
88b48dc680 | ||
|
|
661d35dfb2 | ||
|
|
f99c9daa39 | ||
|
|
019b3f3e5a | ||
|
|
d6584eba8c | ||
|
|
a379c433a3 | ||
|
|
006c7c6bb1 | ||
|
|
bd4a902a15 | ||
|
|
17ae5e9f13 | ||
|
|
baa5f52422 | ||
|
|
b3620451b2 | ||
|
|
d2f17d9615 | ||
|
|
561cbe5678 | ||
|
|
756d2074b8 | ||
|
|
c65db618bb | ||
|
|
8355647403 | ||
|
|
b839d73411 | ||
|
|
4563c1e043 | ||
|
|
11f35a036d | ||
|
|
d8646dab14 | ||
|
|
47b3cd98f2 | ||
|
|
27c7e53882 | ||
|
|
b2b28803fb | ||
|
|
8e92b1b9ce | ||
|
|
0f41ccf370 | ||
|
|
c44544a1d7 | ||
|
|
4e50f02638 | ||
|
|
174ea15647 | ||
|
|
18f8258a87 | ||
|
|
376bbb5887 | ||
|
|
2c8275409e | ||
|
|
892582b541 | ||
|
|
57b53c1b0a | ||
|
|
004c3ca521 | ||
|
|
f0f00f9272 | ||
|
|
a243c68736 | ||
|
|
467d9f2a34 | ||
|
|
226a94963a | ||
|
|
d7f0d147b1 | ||
|
|
26902b9aad | ||
|
|
3c69d6bec4 | ||
|
|
4f44677a41 | ||
|
|
88d9f669c5 | ||
|
|
22e1421672 | ||
|
|
5409414eff | ||
|
|
7134507de0 | ||
|
|
fe41d9853c | ||
|
|
d07692cd96 | ||
|
|
82ae57136b | ||
|
|
30baeaaeab | ||
|
|
87a0f4b92e | ||
|
|
1b08bcbfe3 | ||
|
|
346b1001eb | ||
|
|
b61a84c8e6 | ||
|
|
a543ea44bc | ||
|
|
b0dd3d1b94 | ||
|
|
461be68b75 | ||
|
|
21fb688d26 | ||
|
|
d8faad27b7 | ||
|
|
dab7075946 | ||
|
|
dfc8e96daa | ||
|
|
71d3eaf358 | ||
|
|
ef6b25be63 | ||
|
|
b452f43322 | ||
|
|
52891f832f | ||
|
|
9990cb75c1 | ||
|
|
a5cc69c7ae | ||
|
|
0b4b8ba64e | ||
|
|
268e78c305 | ||
|
|
c900a78c99 | ||
|
|
46ffb2dc97 | ||
|
|
10acacb3bf | ||
|
|
aab790a656 | ||
|
|
1319aad994 | ||
|
|
3c0ce01cea | ||
|
|
9fcbefebdb | ||
|
|
017d2a887f | ||
|
|
0416482605 | ||
|
|
0f17424918 | ||
|
|
55ed10db21 | ||
|
|
3877b6bfe9 | ||
|
|
a0f32454b6 | ||
|
|
6fda4d7e5d | ||
|
|
36a252ea46 | ||
|
|
a31a195246 | ||
|
|
5f590d2218 | ||
|
|
791b7bc715 | ||
|
|
19ae090787 | ||
|
|
db3076621b | ||
|
|
9ae5743515 | ||
|
|
c184b140df | ||
|
|
9d80aa7e3f | ||
|
|
15671a90a9 | ||
|
|
0048464449 | ||
|
|
b422166ce0 | ||
|
|
81be661ae2 | ||
|
|
8681c66eec | ||
|
|
69a0034e50 | ||
|
|
c9a1778134 | ||
|
|
326794e9c6 | ||
|
|
2dd5ca1fbc | ||
|
|
3042945ac8 | ||
|
|
da29b0d335 | ||
|
|
6abbc68188 | ||
|
|
25f6c7fd8b | ||
|
|
1cf3571ea4 | ||
|
|
d769e7a58c | ||
|
|
fa3619f233 | ||
|
|
a414cbcad3 | ||
|
|
c6196da587 | ||
|
|
5d48762647 | ||
|
|
77e749405d | ||
|
|
9ccd4e224f | ||
|
|
1dad4f3672 | ||
|
|
59745556b4 | ||
|
|
fab4447179 | ||
|
|
417b8d4705 | ||
|
|
e614ec4769 | ||
|
|
a6b03f4138 | ||
|
|
809fa4cc59 | ||
|
|
463f448595 | ||
|
|
5cd0cf8cce | ||
|
|
49cb959494 | ||
|
|
783a73c47f | ||
|
|
99bf516908 | ||
|
|
a26c372cfc | ||
|
|
ed5ac22e5b | ||
|
|
3d11b8f896 | ||
|
|
2840dcd2a6 | ||
|
|
bd5770c6b1 | ||
|
|
a9c5de8654 | ||
|
|
837685c522 |
20
.cvsignore
20
.cvsignore
@@ -1,20 +0,0 @@
|
|||||||
openssl.pc
|
|
||||||
libcrypto.pc
|
|
||||||
libssl.pc
|
|
||||||
MINFO
|
|
||||||
makefile.one
|
|
||||||
outinc
|
|
||||||
rehash.time
|
|
||||||
testlog
|
|
||||||
make.log
|
|
||||||
maketest.log
|
|
||||||
cctest
|
|
||||||
cctest.c
|
|
||||||
cctest.a
|
|
||||||
*.flc
|
|
||||||
semantic.cache
|
|
||||||
Makefile
|
|
||||||
*.dll*
|
|
||||||
*.so*
|
|
||||||
*.sl*
|
|
||||||
*.dylib*
|
|
||||||
119
.gitignore
vendored
Normal file
119
.gitignore
vendored
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# editor artefacts
|
||||||
|
*.swp
|
||||||
|
.#*
|
||||||
|
#*#
|
||||||
|
*~
|
||||||
|
/.dir-locals.el
|
||||||
|
|
||||||
|
# Top level excludes
|
||||||
|
/Makefile.bak
|
||||||
|
/Makefile
|
||||||
|
/MINFO
|
||||||
|
/*.a
|
||||||
|
/include
|
||||||
|
/*.pc
|
||||||
|
/rehash.time
|
||||||
|
/inc.*
|
||||||
|
/makefile.*
|
||||||
|
/out.*
|
||||||
|
/tmp.*
|
||||||
|
|
||||||
|
# Most *.c files under test/ are symlinks
|
||||||
|
/test/*.c
|
||||||
|
# Apart from these
|
||||||
|
!/test/asn1test.c
|
||||||
|
!/test/methtest.c
|
||||||
|
!/test/dummytest.c
|
||||||
|
!/test/igetest.c
|
||||||
|
!/test/r160test.c
|
||||||
|
!/test/fips_algvs.c
|
||||||
|
|
||||||
|
/test/*.ss
|
||||||
|
/test/*.srl
|
||||||
|
/test/.rnd
|
||||||
|
/test/test*.pem
|
||||||
|
/test/newkey.pem
|
||||||
|
|
||||||
|
# Certificate symbolic links
|
||||||
|
*.0
|
||||||
|
|
||||||
|
# Links under apps
|
||||||
|
/apps/CA.pl
|
||||||
|
/apps/md4.c
|
||||||
|
|
||||||
|
|
||||||
|
# Auto generated headers
|
||||||
|
/crypto/buildinf.h
|
||||||
|
/crypto/opensslconf.h
|
||||||
|
|
||||||
|
# Auto generated assembly language source files
|
||||||
|
*.s
|
||||||
|
!/crypto/bn/asm/pa-risc2.s
|
||||||
|
!/crypto/bn/asm/pa-risc2W.s
|
||||||
|
crypto/aes/asm/a_win32.asm
|
||||||
|
crypto/bf/asm/b_win32.asm
|
||||||
|
crypto/bn/asm/bn_win32.asm
|
||||||
|
crypto/bn/asm/co_win32.asm
|
||||||
|
crypto/bn/asm/mt_win32.asm
|
||||||
|
crypto/cast/asm/c_win32.asm
|
||||||
|
crypto/cpu_win32.asm
|
||||||
|
crypto/des/asm/d_win32.asm
|
||||||
|
crypto/des/asm/y_win32.asm
|
||||||
|
crypto/md5/asm/m5_win32.asm
|
||||||
|
crypto/rc4/asm/r4_win32.asm
|
||||||
|
crypto/rc5/asm/r5_win32.asm
|
||||||
|
crypto/ripemd/asm/rm_win32.asm
|
||||||
|
crypto/sha/asm/s1_win32.asm
|
||||||
|
crypto/sha/asm/sha512-sse2.asm
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
/apps/openssl
|
||||||
|
/test/sha256t
|
||||||
|
/test/sha512t
|
||||||
|
/test/*test
|
||||||
|
/test/fips_aesavs
|
||||||
|
/test/fips_desmovs
|
||||||
|
/test/fips_dhvs
|
||||||
|
/test/fips_drbgvs
|
||||||
|
/test/fips_dssvs
|
||||||
|
/test/fips_ecdhvs
|
||||||
|
/test/fips_ecdsavs
|
||||||
|
/test/fips_rngvs
|
||||||
|
/test/fips_test_suite
|
||||||
|
*.so*
|
||||||
|
*.dylib*
|
||||||
|
*.dll*
|
||||||
|
# Exceptions
|
||||||
|
!/test/bctest
|
||||||
|
!/crypto/des/times/486-50.sol
|
||||||
|
|
||||||
|
# Misc auto generated files
|
||||||
|
/tools/c_rehash
|
||||||
|
/test/evptests.txt
|
||||||
|
lib
|
||||||
|
Makefile.save
|
||||||
|
*.bak
|
||||||
|
tags
|
||||||
|
TAGS
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
/tmp32
|
||||||
|
/tmp32.dbg
|
||||||
|
/tmp32dll
|
||||||
|
/tmp32dll.dbg
|
||||||
|
/out32
|
||||||
|
/out32.dbg
|
||||||
|
/out32dll
|
||||||
|
/out32dll.dbg
|
||||||
|
/inc32
|
||||||
|
/MINFO
|
||||||
|
ms/bcb.mak
|
||||||
|
ms/libeay32.def
|
||||||
|
ms/nt.mak
|
||||||
|
ms/ntdll.mak
|
||||||
|
ms/ssleay32.def
|
||||||
|
ms/version32.rc
|
||||||
10
.travis-create-release.sh
Normal file
10
.travis-create-release.sh
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# $1 is expected to be $TRAVIS_OS_NAME
|
||||||
|
|
||||||
|
if [ "$1" == osx ]; then
|
||||||
|
make -f Makefile.org \
|
||||||
|
DISTTARVARS="NAME=_srcdist TAR_COMMAND='\$\$(TAR) \$\$(TARFLAGS) -s \"|^|\$\$(NAME)/|\" -T \$\$(TARFILE).list -cvf -' TARFLAGS='-n' TARFILE=_srcdist.tar" SHELL='sh -vx' dist
|
||||||
|
else
|
||||||
|
make -f Makefile.org DISTTARVARS='TARFILE=_srcdist.tar NAME=_srcdist' SHELL='sh -v' dist
|
||||||
|
fi
|
||||||
60
.travis.yml
Normal file
60
.travis.yml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
language: c
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt_packages:
|
||||||
|
- binutils-mingw-w64
|
||||||
|
- gcc-mingw-w64
|
||||||
|
|
||||||
|
os:
|
||||||
|
- linux
|
||||||
|
- osx
|
||||||
|
|
||||||
|
compiler:
|
||||||
|
- clang
|
||||||
|
- gcc
|
||||||
|
- i686-w64-mingw32-gcc
|
||||||
|
- x86_64-w64-mingw32-gcc
|
||||||
|
|
||||||
|
env:
|
||||||
|
- CONFIG_OPTS=""
|
||||||
|
- CONFIG_OPTS="shared"
|
||||||
|
- CONFIG_OPTS="-d --strict-warnings"
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
exclude:
|
||||||
|
- os: osx
|
||||||
|
compiler: i686-w64-mingw32-gcc
|
||||||
|
- os: osx
|
||||||
|
compiler: x86_64-w64-mingw32-gcc
|
||||||
|
- compiler: i686-w64-mingw32-gcc
|
||||||
|
env: CONFIG_OPTS="-d --strict-warnings"
|
||||||
|
- compiler: x86_64-w64-mingw32-gcc
|
||||||
|
env: CONFIG_OPTS="-d --strict-warnings"
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- sh .travis-create-release.sh $TRAVIS_OS_NAME
|
||||||
|
- tar -xvzf _srcdist.tar.gz
|
||||||
|
- cd _srcdist
|
||||||
|
- if [ "$CC" == i686-w64-mingw32-gcc ]; then
|
||||||
|
export CROSS_COMPILE=${CC%%gcc}; unset CC;
|
||||||
|
./Configure mingw $CONFIG_OPTS;
|
||||||
|
elif [ "$CC" == x86_64-w64-mingw32-gcc ]; then
|
||||||
|
export CROSS_COMPILE=${CC%%gcc}; unset CC;
|
||||||
|
./Configure mingw64 $CONFIG_OPTS;
|
||||||
|
else
|
||||||
|
if [ "$CC" == gcc ]; then
|
||||||
|
export CONFIG_OPTS="$CONFIG_OPTS -Wno-error=shadow";
|
||||||
|
fi;
|
||||||
|
./config $CONFIG_OPTS;
|
||||||
|
fi
|
||||||
|
- cd ..
|
||||||
|
|
||||||
|
script:
|
||||||
|
- cd _srcdist
|
||||||
|
- make
|
||||||
|
- if [ -z "$CROSS_COMPILE" ]; then make test; fi
|
||||||
|
- cd ..
|
||||||
|
|
||||||
|
notifications:
|
||||||
|
email:
|
||||||
|
- openssl-commits@openssl.org
|
||||||
@@ -1,25 +1,2 @@
|
|||||||
The OpenSSL project depends on volunteer efforts and financial support from
|
Please https://www.openssl.org/community/thanks.html for the current
|
||||||
the end user community. That support comes in the form of donations and paid
|
acknowledgements.
|
||||||
sponsorships, software support contracts, paid consulting services
|
|
||||||
and commissioned software development.
|
|
||||||
|
|
||||||
Since all these activities support the continued development and improvement
|
|
||||||
of OpenSSL we consider all these clients and customers as sponsors of the
|
|
||||||
OpenSSL project.
|
|
||||||
|
|
||||||
We would like to identify and thank the following such sponsors for their past
|
|
||||||
or current significant support of the OpenSSL project:
|
|
||||||
|
|
||||||
Very significant support:
|
|
||||||
|
|
||||||
OpenGear: www.opengear.com
|
|
||||||
|
|
||||||
Significant support:
|
|
||||||
|
|
||||||
PSW Group: www.psw.net
|
|
||||||
|
|
||||||
Please note that we ask permission to identify sponsors and that some sponsors
|
|
||||||
we consider eligible for inclusion here have requested to remain anonymous.
|
|
||||||
|
|
||||||
Additional sponsorship or financial support is always welcome: for more
|
|
||||||
information please contact the OpenSSL Software Foundation.
|
|
||||||
|
|||||||
38
CONTRIBUTING
Normal file
38
CONTRIBUTING
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
HOW TO CONTRIBUTE TO OpenSSL
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Development is coordinated on the openssl-dev mailing list (see
|
||||||
|
http://www.openssl.org for information on subscribing). If you
|
||||||
|
would like to submit a patch, send it to rt@openssl.org with
|
||||||
|
the string "[PATCH]" in the subject. Please be sure to include a
|
||||||
|
textual explanation of what your patch does.
|
||||||
|
|
||||||
|
You can also make GitHub pull requests. If you do this, please also send
|
||||||
|
mail to rt@openssl.org with a brief description and a link to the PR so
|
||||||
|
that we can more easily keep track of it.
|
||||||
|
|
||||||
|
If you are unsure as to whether a feature will be useful for the general
|
||||||
|
OpenSSL community please discuss it on the openssl-dev mailing list first.
|
||||||
|
Someone may be already working on the same thing or there may be a good
|
||||||
|
reason as to why that feature isn't implemented.
|
||||||
|
|
||||||
|
Patches should be as up to date as possible, preferably relative to the
|
||||||
|
current Git or the last snapshot. They should follow our coding style
|
||||||
|
(see https://www.openssl.org/policies/codingstyle.html) and compile without
|
||||||
|
warnings using the --strict-warnings flag. OpenSSL compiles on many varied
|
||||||
|
platforms: try to ensure you only use portable features.
|
||||||
|
|
||||||
|
Our preferred format for patch files is "git format-patch" output. For example
|
||||||
|
to provide a patch file containing the last commit in your local git repository
|
||||||
|
use the following command:
|
||||||
|
|
||||||
|
# git format-patch --stdout HEAD^ >mydiffs.patch
|
||||||
|
|
||||||
|
Another method of creating an acceptable patch file without using git is as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
# cd openssl-work
|
||||||
|
# [your changes]
|
||||||
|
# ./Configure dist; make clean
|
||||||
|
# cd ..
|
||||||
|
# diff -ur openssl-orig openssl-work > mydiffs.patch
|
||||||
8
GitConfigure
Executable file
8
GitConfigure
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
BRANCH=`git rev-parse --abbrev-ref HEAD`
|
||||||
|
|
||||||
|
./Configure $@ no-symlinks
|
||||||
|
make files
|
||||||
|
util/mk1mf.pl OUT=out.$BRANCH TMP=tmp.$BRANCH INC=inc.$BRANCH copy > makefile.$BRANCH
|
||||||
|
make -f makefile.$BRANCH init
|
||||||
5
GitMake
Executable file
5
GitMake
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
BRANCH=`git rev-parse --abbrev-ref HEAD`
|
||||||
|
|
||||||
|
make -f makefile.$BRANCH $@
|
||||||
14
INSTALL
14
INSTALL
@@ -103,6 +103,12 @@
|
|||||||
define preprocessor symbols, specify additional libraries,
|
define preprocessor symbols, specify additional libraries,
|
||||||
library directories or other compiler options.
|
library directories or other compiler options.
|
||||||
|
|
||||||
|
-DHAVE_CRYPTODEV Enable the BSD cryptodev engine even if we are not using
|
||||||
|
BSD. Useful if you are running ocf-linux or something
|
||||||
|
similar. Once enabled you can also enable the use of
|
||||||
|
cryptodev digests, which is usually slower unless you have
|
||||||
|
large amounts data. Use -DUSE_CRYPTODEV_DIGESTS to force
|
||||||
|
it.
|
||||||
|
|
||||||
Installation in Detail
|
Installation in Detail
|
||||||
----------------------
|
----------------------
|
||||||
@@ -158,10 +164,10 @@
|
|||||||
standard headers). If it is a problem with OpenSSL itself, please
|
standard headers). If it is a problem with OpenSSL itself, please
|
||||||
report the problem to <openssl-bugs@openssl.org> (note that your
|
report the problem to <openssl-bugs@openssl.org> (note that your
|
||||||
message will be recorded in the request tracker publicly readable
|
message will be recorded in the request tracker publicly readable
|
||||||
via http://www.openssl.org/support/rt.html and will be forwarded to a
|
at https://www.openssl.org/community/index.html#bugs and will be
|
||||||
public mailing list). Include the output of "make report" in your message.
|
forwarded to a public mailing list). Include the output of "make
|
||||||
Please check out the request tracker. Maybe the bug was already
|
report" in your message. Please check out the request tracker. Maybe
|
||||||
reported or has already been fixed.
|
the bug was already reported or has already been fixed.
|
||||||
|
|
||||||
[If you encounter assembler error messages, try the "no-asm"
|
[If you encounter assembler error messages, try the "no-asm"
|
||||||
configuration option as an immediate fix.]
|
configuration option as an immediate fix.]
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
is required if you intend to utilize assembler modules. Note that NASM
|
is required if you intend to utilize assembler modules. Note that NASM
|
||||||
is now the only supported assembler.
|
is now the only supported assembler.
|
||||||
|
|
||||||
If you are compiling from a tarball or a CVS snapshot then the Win32 files
|
If you are compiling from a tarball or a Git snapshot then the Win32 files
|
||||||
may well be not up to date. This may mean that some "tweaking" is required to
|
may well be not up to date. This may mean that some "tweaking" is required to
|
||||||
get it all to work. See the trouble shooting section later on for if (when?)
|
get it all to work. See the trouble shooting section later on for if (when?)
|
||||||
it goes wrong.
|
it goes wrong.
|
||||||
@@ -257,7 +257,7 @@
|
|||||||
|
|
||||||
then ms\do_XXX should not give a warning any more. However the numbers that
|
then ms\do_XXX should not give a warning any more. However the numbers that
|
||||||
get assigned by this technique may not match those that eventually get
|
get assigned by this technique may not match those that eventually get
|
||||||
assigned in the CVS tree: so anything linked against this version of the
|
assigned in the Git tree: so anything linked against this version of the
|
||||||
library may need to be recompiled.
|
library may need to be recompiled.
|
||||||
|
|
||||||
If you get errors about unresolved symbols there are several possible
|
If you get errors about unresolved symbols there are several possible
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -12,7 +12,7 @@
|
|||||||
---------------
|
---------------
|
||||||
|
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1998-2016 The OpenSSL Project. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
|
|||||||
62
MacOS/GUSI_Init.cpp
Normal file
62
MacOS/GUSI_Init.cpp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/**************** BEGIN GUSI CONFIGURATION ****************************
|
||||||
|
*
|
||||||
|
* GUSI Configuration section generated by GUSI Configurator
|
||||||
|
* last modified: Wed Jan 5 20:33:51 2000
|
||||||
|
*
|
||||||
|
* This section will be overwritten by the next run of Configurator.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GUSI_SOURCE
|
||||||
|
#include <GUSIConfig.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
/* Declarations of Socket Factories */
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
void GUSIwithInetSockets();
|
||||||
|
void GUSIwithLocalSockets();
|
||||||
|
void GUSIwithMTInetSockets();
|
||||||
|
void GUSIwithMTTcpSockets();
|
||||||
|
void GUSIwithMTUdpSockets();
|
||||||
|
void GUSIwithOTInetSockets();
|
||||||
|
void GUSIwithOTTcpSockets();
|
||||||
|
void GUSIwithOTUdpSockets();
|
||||||
|
void GUSIwithPPCSockets();
|
||||||
|
void GUSISetupFactories();
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
/* Configure Socket Factories */
|
||||||
|
|
||||||
|
void GUSISetupFactories()
|
||||||
|
{
|
||||||
|
#ifdef GUSISetupFactories_BeginHook
|
||||||
|
GUSISetupFactories_BeginHook
|
||||||
|
#endif
|
||||||
|
GUSIwithInetSockets();
|
||||||
|
#ifdef GUSISetupFactories_EndHook
|
||||||
|
GUSISetupFactories_EndHook
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Declarations of File Devices */
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
void GUSIwithDConSockets();
|
||||||
|
void GUSIwithNullSockets();
|
||||||
|
void GUSISetupDevices();
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
/* Configure File Devices */
|
||||||
|
|
||||||
|
void GUSISetupDevices()
|
||||||
|
{
|
||||||
|
#ifdef GUSISetupDevices_BeginHook
|
||||||
|
GUSISetupDevices_BeginHook
|
||||||
|
#endif
|
||||||
|
GUSIwithNullSockets();
|
||||||
|
#ifdef GUSISetupDevices_EndHook
|
||||||
|
GUSISetupDevices_EndHook
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************** END GUSI CONFIGURATION *************************/
|
||||||
2753
MacOS/GetHTTPS.src/CPStringUtils.cpp
Normal file
2753
MacOS/GetHTTPS.src/CPStringUtils.cpp
Normal file
File diff suppressed because it is too large
Load Diff
104
MacOS/GetHTTPS.src/CPStringUtils.hpp
Normal file
104
MacOS/GetHTTPS.src/CPStringUtils.hpp
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void CopyPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
|
||||||
|
void CopyPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
|
||||||
|
void CopyCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
void CopyCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
|
||||||
|
void ConcatPStrToCStr(const unsigned char *thePStr,char *theCStr,const int maxCStrLength);
|
||||||
|
void ConcatPStrToPStr(const unsigned char *theSrcPStr,unsigned char *theDstPStr,const int maxDstStrLength);
|
||||||
|
void ConcatCStrToPStr(const char *theSrcCStr,unsigned char *theDstPStr,const int maxDstStrLength);
|
||||||
|
void ConcatCStrToCStr(const char *theSrcCStr,char *theDstCStr,const int maxCStrLength);
|
||||||
|
|
||||||
|
void ConcatCharToCStr(const char theChar,char *theDstCStr,const int maxCStrLength);
|
||||||
|
void ConcatCharToPStr(const char theChar,unsigned char *theDstPStr,const int maxPStrLength);
|
||||||
|
|
||||||
|
int ComparePStrs(const unsigned char *theFirstPStr,const unsigned char *theSecondPStr,const Boolean ignoreCase = true);
|
||||||
|
int CompareCStrs(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
|
||||||
|
int CompareCStrToPStr(const char *theCStr,const unsigned char *thePStr,const Boolean ignoreCase = true);
|
||||||
|
|
||||||
|
Boolean CStrsAreEqual(const char *theFirstCStr,const char *theSecondCStr,const Boolean ignoreCase = true);
|
||||||
|
Boolean PStrsAreEqual(const unsigned char *theFirstCStr,const unsigned char *theSecondCStr,const Boolean ignoreCase = true);
|
||||||
|
|
||||||
|
void CopyLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
|
||||||
|
void CopyUnsignedLongIntToCStr(const unsigned long theNum,char *theCStr,const int maxCStrLength);
|
||||||
|
void ConcatLongIntToCStr(const long theNum,char *theCStr,const int maxCStrLength,const int numDigits = -1);
|
||||||
|
void CopyCStrAndConcatLongIntToCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
|
||||||
|
void CopyLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
|
||||||
|
void ConcatLongIntToPStr(const long theNum,unsigned char *thePStr,const int maxPStrLength,const int numDigits = -1);
|
||||||
|
|
||||||
|
long CStrLength(const char *theCString);
|
||||||
|
long PStrLength(const unsigned char *thePString);
|
||||||
|
|
||||||
|
OSErr CopyCStrToExistingHandle(const char *theCString,Handle theHandle);
|
||||||
|
OSErr CopyLongIntToExistingHandle(const long inTheLongInt,Handle theHandle);
|
||||||
|
|
||||||
|
OSErr CopyCStrToNewHandle(const char *theCString,Handle *theHandle);
|
||||||
|
OSErr CopyPStrToNewHandle(const unsigned char *thePString,Handle *theHandle);
|
||||||
|
OSErr CopyLongIntToNewHandle(const long inTheLongInt,Handle *theHandle);
|
||||||
|
|
||||||
|
OSErr AppendCStrToHandle(const char *theCString,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
|
||||||
|
OSErr AppendCharsToHandle(const char *theChars,const int numChars,Handle theHandle,long *currentLength = nil,long *maxLength = nil);
|
||||||
|
OSErr AppendPStrToHandle(const unsigned char *thePString,Handle theHandle,long *currentLength = nil);
|
||||||
|
OSErr AppendLongIntToHandle(const long inTheLongInt,Handle theHandle,long *currentLength = nil);
|
||||||
|
|
||||||
|
void ZeroMem(void *theMemPtr,const unsigned long numBytes);
|
||||||
|
|
||||||
|
char *FindCharInCStr(const char theChar,const char *theCString);
|
||||||
|
long FindCharOffsetInCStr(const char theChar,const char *theCString,const Boolean inIgnoreCase = false);
|
||||||
|
long FindCStrOffsetInCStr(const char *theCSubstring,const char *theCString,const Boolean inIgnoreCase = false);
|
||||||
|
|
||||||
|
void CopyCSubstrToCStr(const char *theSrcCStr,const int maxCharsToCopy,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
void CopyCSubstrToPStr(const char *theSrcCStr,const int maxCharsToCopy,unsigned char *theDstPStr,const int maxDstStrLength);
|
||||||
|
|
||||||
|
void InsertCStrIntoCStr(const char *theSrcCStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
void InsertPStrIntoCStr(const unsigned char *theSrcPStr,const int theInsertionOffset,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
OSErr InsertCStrIntoHandle(const char *theCString,Handle theHandle,const long inInsertOffset);
|
||||||
|
|
||||||
|
void CopyCStrAndInsertCStrIntoCStr(const char *theSrcCStr,const char *theInsertCStr,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
|
||||||
|
void CopyCStrAndInsertCStrsLongIntsIntoCStr(const char *theSrcCStr,const char **theInsertCStrs,const long *theLongInts,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
|
||||||
|
void CopyCStrAndInsert1LongIntIntoCStr(const char *theSrcCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
void CopyCStrAndInsert2LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
void CopyCStrAndInsert3LongIntsIntoCStr(const char *theSrcCStr,const long long1,const long long2,const long long3,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
|
||||||
|
void CopyCStrAndInsertCStrLongIntIntoCStr(const char *theSrcCStr,const char *theInsertCStr,const long theNum,char *theDstCStr,const int maxDstStrLength);
|
||||||
|
OSErr CopyCStrAndInsertCStrLongIntIntoHandle(const char *theSrcCStr,const char *theInsertCStr,const long theNum,Handle *theHandle);
|
||||||
|
|
||||||
|
|
||||||
|
OSErr CopyIndexedWordToCStr(char *theSrcCStr,int whichWord,char *theDstCStr,int maxDstCStrLength);
|
||||||
|
OSErr CopyIndexedWordToNewHandle(char *theSrcCStr,int whichWord,Handle *outTheHandle);
|
||||||
|
|
||||||
|
OSErr CopyIndexedLineToCStr(const char *theSrcCStr,int inWhichLine,int *lineEndIndex,Boolean *gotLastLine,char *theDstCStr,const int maxDstCStrLength);
|
||||||
|
OSErr CopyIndexedLineToNewHandle(const char *theSrcCStr,int inWhichLine,Handle *outNewHandle);
|
||||||
|
|
||||||
|
OSErr ExtractIntFromCStr(const char *theSrcCStr,int *outInt,Boolean skipLeadingSpaces = true);
|
||||||
|
OSErr ExtractIntFromPStr(const unsigned char *theSrcPStr,int *outInt,Boolean skipLeadingSpaces = true);
|
||||||
|
|
||||||
|
|
||||||
|
void ConvertCStrToUpperCase(char *theSrcCStr);
|
||||||
|
|
||||||
|
|
||||||
|
int CountOccurencesOfCharInCStr(const char inChar,const char *inSrcCStr);
|
||||||
|
int CountWordsInCStr(const char *inSrcCStr);
|
||||||
|
|
||||||
|
OSErr CountDigits(const char *inCStr,int *outNumIntegerDigits,int *outNumFractDigits);
|
||||||
|
|
||||||
|
void ExtractCStrItemFromCStr(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,char *outDstCharPtr,const int inDstCharPtrMaxLength,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
|
||||||
|
OSErr ExtractCStrItemFromCStrIntoNewHandle(const char *inSrcCStr,const char inItemDelimiter,const int inItemNumber,Boolean *foundItem,Handle *outNewHandle,const Boolean inTreatMultipleDelimsAsSingleDelim = false);
|
||||||
|
|
||||||
|
|
||||||
|
OSErr ExtractFloatFromCStr(const char *inCString,extended80 *outFloat);
|
||||||
|
OSErr CopyFloatToCStr(const extended80 *theFloat,char *theCStr,const int maxCStrLength,const int inMaxNumIntDigits = -1,const int inMaxNumFractDigits = -1);
|
||||||
|
|
||||||
|
void SkipWhiteSpace(char **ioSrcCharPtr,const Boolean inStopAtEOL = false);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -1,9 +1,5 @@
|
|||||||
/* fips_dsa_sign.c */
|
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
|
||||||
* project 2007.
|
|
||||||
*/
|
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2011 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1998-1999 The OpenSSL Project. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@@ -20,12 +16,12 @@
|
|||||||
* 3. All advertising materials mentioning features or use of this
|
* 3. All advertising materials mentioning features or use of this
|
||||||
* software must display the following acknowledgment:
|
* software must display the following acknowledgment:
|
||||||
* "This product includes software developed by the OpenSSL Project
|
* "This product includes software developed by the OpenSSL Project
|
||||||
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||||
*
|
*
|
||||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||||
* endorse or promote products derived from this software without
|
* endorse or promote products derived from this software without
|
||||||
* prior written permission. For written permission, please contact
|
* prior written permission. For written permission, please contact
|
||||||
* licensing@OpenSSL.org.
|
* openssl-core@openssl.org.
|
||||||
*
|
*
|
||||||
* 5. Products derived from this software may not be called "OpenSSL"
|
* 5. Products derived from this software may not be called "OpenSSL"
|
||||||
* nor may "OpenSSL" appear in their names without prior written
|
* nor may "OpenSSL" appear in their names without prior written
|
||||||
@@ -34,7 +30,7 @@
|
|||||||
* 6. Redistributions of any form whatsoever must retain the following
|
* 6. Redistributions of any form whatsoever must retain the following
|
||||||
* acknowledgment:
|
* acknowledgment:
|
||||||
* "This product includes software developed by the OpenSSL Project
|
* "This product includes software developed by the OpenSSL Project
|
||||||
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
@@ -55,87 +51,120 @@
|
|||||||
* Hudson (tjh@cryptsoft.com).
|
* Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "ErrorHandling.hpp"
|
||||||
|
#include "CPStringUtils.hpp"
|
||||||
|
|
||||||
#define OPENSSL_FIPSAPI
|
#ifdef __EXCEPTIONS_ENABLED__
|
||||||
|
#include "CMyException.hpp"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <openssl/evp.h>
|
|
||||||
#include <openssl/dsa.h>
|
|
||||||
#include <openssl/err.h>
|
|
||||||
#include <openssl/sha.h>
|
|
||||||
#include <openssl/bn.h>
|
|
||||||
|
|
||||||
#ifdef OPENSSL_FIPS
|
static char gErrorMessageBuffer[512];
|
||||||
|
|
||||||
/* FIPS versions of DSA_sign() and DSA_verify().
|
char *gErrorMessage = gErrorMessageBuffer;
|
||||||
* Handle DSA_SIG structures to avoid need to handle ASN1.
|
int gErrorMessageMaxLength = sizeof(gErrorMessageBuffer);
|
||||||
*/
|
|
||||||
|
|
||||||
DSA_SIG * FIPS_dsa_sign_ctx(DSA *dsa, EVP_MD_CTX *ctx)
|
|
||||||
|
|
||||||
|
void SetErrorMessage(const char *theErrorMessage)
|
||||||
|
{
|
||||||
|
if (theErrorMessage != nil)
|
||||||
{
|
{
|
||||||
DSA_SIG *s;
|
CopyCStrToCStr(theErrorMessage,gErrorMessage,gErrorMessageMaxLength);
|
||||||
unsigned char dig[EVP_MAX_MD_SIZE];
|
}
|
||||||
unsigned int dlen;
|
}
|
||||||
FIPS_digestfinal(ctx, dig, &dlen);
|
|
||||||
s = dsa->meth->dsa_do_sign(dig,dlen,dsa);
|
|
||||||
OPENSSL_cleanse(dig, dlen);
|
void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt)
|
||||||
return s;
|
{
|
||||||
|
if (theErrorMessage != nil)
|
||||||
|
{
|
||||||
|
CopyCStrAndConcatLongIntToCStr(theErrorMessage,theLongInt,gErrorMessage,gErrorMessageMaxLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt)
|
||||||
|
{
|
||||||
|
if (theErrorMessage != nil)
|
||||||
|
{
|
||||||
|
CopyCStrAndInsertCStrLongIntIntoCStr(theErrorMessage,theCStr,theLongInt,gErrorMessage,gErrorMessageMaxLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
DSA_SIG * FIPS_dsa_sign_digest(DSA *dsa, const unsigned char *dig, int dlen)
|
}
|
||||||
{
|
|
||||||
if (FIPS_selftest_failed())
|
|
||||||
{
|
|
||||||
FIPSerr(FIPS_F_FIPS_DSA_SIGN_DIGEST, FIPS_R_SELFTEST_FAILED);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return dsa->meth->dsa_do_sign(dig, dlen, dsa);
|
|
||||||
}
|
|
||||||
|
|
||||||
int FIPS_dsa_verify_ctx(DSA *dsa, EVP_MD_CTX *ctx, DSA_SIG *s)
|
void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr)
|
||||||
|
{
|
||||||
|
if (theErrorMessage != nil)
|
||||||
{
|
{
|
||||||
int ret=-1;
|
CopyCStrAndInsertCStrLongIntIntoCStr(theErrorMessage,theCStr,-1,gErrorMessage,gErrorMessageMaxLength);
|
||||||
unsigned char dig[EVP_MAX_MD_SIZE];
|
|
||||||
unsigned int dlen;
|
|
||||||
FIPS_digestfinal(ctx, dig, &dlen);
|
|
||||||
ret=dsa->meth->dsa_do_verify(dig,dlen,s,dsa);
|
|
||||||
OPENSSL_cleanse(dig, dlen);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int FIPS_dsa_verify_digest(DSA *dsa,
|
|
||||||
const unsigned char *dig, int dlen, DSA_SIG *s)
|
|
||||||
{
|
|
||||||
if (FIPS_selftest_failed())
|
|
||||||
{
|
|
||||||
FIPSerr(FIPS_F_FIPS_DSA_VERIFY_DIGEST, FIPS_R_SELFTEST_FAILED);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return dsa->meth->dsa_do_verify(dig,dlen,s,dsa);
|
|
||||||
}
|
|
||||||
|
|
||||||
int FIPS_dsa_verify(DSA *dsa, const unsigned char *msg, size_t msglen,
|
void AppendCStrToErrorMessage(const char *theErrorMessage)
|
||||||
const EVP_MD *mhash, DSA_SIG *s)
|
{
|
||||||
|
if (theErrorMessage != nil)
|
||||||
{
|
{
|
||||||
int ret=-1;
|
ConcatCStrToCStr(theErrorMessage,gErrorMessage,gErrorMessageMaxLength);
|
||||||
unsigned char dig[EVP_MAX_MD_SIZE];
|
|
||||||
unsigned int dlen;
|
|
||||||
FIPS_digest(msg, msglen, dig, &dlen, mhash);
|
|
||||||
ret=FIPS_dsa_verify_digest(dsa, dig, dlen, s);
|
|
||||||
OPENSSL_cleanse(dig, dlen);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DSA_SIG * FIPS_dsa_sign(DSA *dsa, const unsigned char *msg, size_t msglen,
|
|
||||||
const EVP_MD *mhash)
|
void AppendLongIntToErrorMessage(const long theLongInt)
|
||||||
{
|
{
|
||||||
DSA_SIG *s;
|
ConcatLongIntToCStr(theLongInt,gErrorMessage,gErrorMessageMaxLength);
|
||||||
unsigned char dig[EVP_MAX_MD_SIZE];
|
}
|
||||||
unsigned int dlen;
|
|
||||||
FIPS_digest(msg, msglen, dig, &dlen, mhash);
|
|
||||||
s = FIPS_dsa_sign_digest(dsa, dig, dlen);
|
|
||||||
OPENSSL_cleanse(dig, dlen);
|
char *GetErrorMessage(void)
|
||||||
return s;
|
{
|
||||||
}
|
return gErrorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OSErr GetErrorMessageInNewHandle(Handle *inoutHandle)
|
||||||
|
{
|
||||||
|
OSErr errCode;
|
||||||
|
|
||||||
|
|
||||||
|
errCode = CopyCStrToNewHandle(gErrorMessage,inoutHandle);
|
||||||
|
|
||||||
|
return(errCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OSErr GetErrorMessageInExistingHandle(Handle inoutHandle)
|
||||||
|
{
|
||||||
|
OSErr errCode;
|
||||||
|
|
||||||
|
|
||||||
|
errCode = CopyCStrToExistingHandle(gErrorMessage,inoutHandle);
|
||||||
|
|
||||||
|
return(errCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OSErr AppendErrorMessageToHandle(Handle inoutHandle)
|
||||||
|
{
|
||||||
|
OSErr errCode;
|
||||||
|
|
||||||
|
|
||||||
|
errCode = AppendCStrToHandle(gErrorMessage,inoutHandle,nil);
|
||||||
|
|
||||||
|
return(errCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __EXCEPTIONS_ENABLED__
|
||||||
|
|
||||||
|
void ThrowErrorMessageException(void)
|
||||||
|
{
|
||||||
|
ThrowDescriptiveException(gErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
147
MacOS/GetHTTPS.src/ErrorHandling.hpp
Normal file
147
MacOS/GetHTTPS.src/ErrorHandling.hpp
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef kGenericError
|
||||||
|
#define kGenericError -1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern char *gErrorMessage;
|
||||||
|
|
||||||
|
|
||||||
|
void SetErrorMessage(const char *theErrorMessage);
|
||||||
|
void SetErrorMessageAndAppendLongInt(const char *theErrorMessage,const long theLongInt);
|
||||||
|
void SetErrorMessageAndCStrAndLongInt(const char *theErrorMessage,const char * theCStr,const long theLongInt);
|
||||||
|
void SetErrorMessageAndCStr(const char *theErrorMessage,const char * theCStr);
|
||||||
|
void AppendCStrToErrorMessage(const char *theErrorMessage);
|
||||||
|
void AppendLongIntToErrorMessage(const long theLongInt);
|
||||||
|
|
||||||
|
|
||||||
|
char *GetErrorMessage(void);
|
||||||
|
OSErr GetErrorMessageInNewHandle(Handle *inoutHandle);
|
||||||
|
OSErr GetErrorMessageInExistingHandle(Handle inoutHandle);
|
||||||
|
OSErr AppendErrorMessageToHandle(Handle inoutHandle);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __EXCEPTIONS_ENABLED__
|
||||||
|
void ThrowErrorMessageException(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// A bunch of evil macros that would be unnecessary if I were always using C++ !
|
||||||
|
|
||||||
|
#define SetErrorMessageAndBailIfNil(theArg,theMessage) \
|
||||||
|
{ \
|
||||||
|
if (theArg == nil) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessage(theMessage); \
|
||||||
|
errCode = kGenericError; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageAndBail(theMessage) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessage(theMessage); \
|
||||||
|
errCode = kGenericError; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageAndLongIntAndBail(theMessage,theLongInt) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
|
||||||
|
errCode = kGenericError; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageAndLongIntAndBailIfError(theErrCode,theMessage,theLongInt) \
|
||||||
|
{ \
|
||||||
|
if (theErrCode != noErr) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
|
||||||
|
errCode = theErrCode; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageCStrLongIntAndBailIfError(theErrCode,theMessage,theCStr,theLongInt) \
|
||||||
|
{ \
|
||||||
|
if (theErrCode != noErr) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessageAndCStrAndLongInt(theMessage,theCStr,theLongInt); \
|
||||||
|
errCode = theErrCode; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageAndCStrAndBail(theMessage,theCStr) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessageAndCStr(theMessage,theCStr); \
|
||||||
|
errCode = kGenericError; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageAndBailIfError(theErrCode,theMessage) \
|
||||||
|
{ \
|
||||||
|
if (theErrCode != noErr) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessage(theMessage); \
|
||||||
|
errCode = theErrCode; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorMessageAndLongIntAndBailIfNil(theArg,theMessage,theLongInt) \
|
||||||
|
{ \
|
||||||
|
if (theArg == nil) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessageAndAppendLongInt(theMessage,theLongInt); \
|
||||||
|
errCode = kGenericError; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define BailIfError(theErrCode) \
|
||||||
|
{ \
|
||||||
|
if ((theErrCode) != noErr) \
|
||||||
|
{ \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrCodeAndBail(theErrCode) \
|
||||||
|
{ \
|
||||||
|
errCode = theErrCode; \
|
||||||
|
\
|
||||||
|
goto EXITPOINT; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define SetErrorCodeAndMessageAndBail(theErrCode,theMessage) \
|
||||||
|
{ \
|
||||||
|
SetErrorMessage(theMessage); \
|
||||||
|
errCode = theErrCode; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define BailNow() \
|
||||||
|
{ \
|
||||||
|
errCode = kGenericError; \
|
||||||
|
goto EXITPOINT; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
209
MacOS/GetHTTPS.src/GetHTTPS.cpp
Normal file
209
MacOS/GetHTTPS.src/GetHTTPS.cpp
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
/*
|
||||||
|
* An demo illustrating how to retrieve a URI from a secure HTTP server.
|
||||||
|
*
|
||||||
|
* Author: Roy Wood
|
||||||
|
* Date: September 7, 1999
|
||||||
|
* Comments: This relies heavily on my MacSockets library.
|
||||||
|
* This project is also set up so that it expects the OpenSSL source folder (0.9.4 as I write this)
|
||||||
|
* to live in a folder called "OpenSSL-0.9.4" in this project's parent folder. For example:
|
||||||
|
*
|
||||||
|
* Macintosh HD:
|
||||||
|
* Development:
|
||||||
|
* OpenSSL-0.9.4:
|
||||||
|
* (OpenSSL sources here)
|
||||||
|
* OpenSSL Example:
|
||||||
|
* (OpenSSL example junk here)
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Also-- before attempting to compile this, make sure the aliases in "OpenSSL-0.9.4:include:openssl"
|
||||||
|
* are installed! Use the AppleScript applet in the "openssl-0.9.4" folder to do this!
|
||||||
|
*/
|
||||||
|
/* modified to seed the PRNG */
|
||||||
|
/* modified to use CRandomizer for seeding */
|
||||||
|
|
||||||
|
|
||||||
|
// Include some funky libs I've developed over time
|
||||||
|
|
||||||
|
#include "CPStringUtils.hpp"
|
||||||
|
#include "ErrorHandling.hpp"
|
||||||
|
#include "MacSocket.h"
|
||||||
|
#include "Randomizer.h"
|
||||||
|
|
||||||
|
// We use the OpenSSL implementation of SSL....
|
||||||
|
// This was a lot of work to finally get going, though you wouldn't know it by the results!
|
||||||
|
|
||||||
|
#include <openssl/ssl.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
|
||||||
|
#include <timer.h>
|
||||||
|
|
||||||
|
// Let's try grabbing some data from here:
|
||||||
|
|
||||||
|
#define kHTTPS_DNS "www.apache-ssl.org"
|
||||||
|
#define kHTTPS_Port 443
|
||||||
|
#define kHTTPS_URI "/"
|
||||||
|
|
||||||
|
|
||||||
|
// Forward-declare this
|
||||||
|
|
||||||
|
OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr);
|
||||||
|
|
||||||
|
// My idle-wait callback. Doesn't do much, does it? Silly cooperative multitasking.
|
||||||
|
|
||||||
|
OSErr MyMacSocket_IdleWaitCallback(void *inUserRefPtr)
|
||||||
|
{
|
||||||
|
#pragma unused(inUserRefPtr)
|
||||||
|
|
||||||
|
EventRecord theEvent;
|
||||||
|
::EventAvail(everyEvent,&theEvent);
|
||||||
|
|
||||||
|
CRandomizer *randomizer = (CRandomizer*)inUserRefPtr;
|
||||||
|
if (randomizer)
|
||||||
|
randomizer->PeriodicAction();
|
||||||
|
|
||||||
|
return(noErr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Finally!
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
OSErr errCode;
|
||||||
|
int theSocket = -1;
|
||||||
|
int theTimeout = 30;
|
||||||
|
|
||||||
|
SSL_CTX *ssl_ctx = nil;
|
||||||
|
SSL *ssl = nil;
|
||||||
|
|
||||||
|
char tempString[256];
|
||||||
|
UnsignedWide microTickCount;
|
||||||
|
|
||||||
|
|
||||||
|
CRandomizer randomizer;
|
||||||
|
|
||||||
|
printf("OpenSSL Demo by Roy Wood, roy@centricsystems.ca\n\n");
|
||||||
|
|
||||||
|
BailIfError(errCode = MacSocket_Startup());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Create a socket-like object
|
||||||
|
|
||||||
|
BailIfError(errCode = MacSocket_socket(&theSocket,false,theTimeout * 60,MyMacSocket_IdleWaitCallback,&randomizer));
|
||||||
|
|
||||||
|
|
||||||
|
// Set up the connect string and try to connect
|
||||||
|
|
||||||
|
CopyCStrAndInsertCStrLongIntIntoCStr("%s:%ld",kHTTPS_DNS,kHTTPS_Port,tempString,sizeof(tempString));
|
||||||
|
|
||||||
|
printf("Connecting to %s....\n",tempString);
|
||||||
|
|
||||||
|
BailIfError(errCode = MacSocket_connect(theSocket,tempString));
|
||||||
|
|
||||||
|
|
||||||
|
// Init SSL stuff
|
||||||
|
|
||||||
|
SSL_load_error_strings();
|
||||||
|
|
||||||
|
SSLeay_add_ssl_algorithms();
|
||||||
|
|
||||||
|
|
||||||
|
// Pick the SSL method
|
||||||
|
|
||||||
|
// ssl_ctx = SSL_CTX_new(SSLv2_client_method());
|
||||||
|
ssl_ctx = SSL_CTX_new(SSLv23_client_method());
|
||||||
|
// ssl_ctx = SSL_CTX_new(SSLv3_client_method());
|
||||||
|
|
||||||
|
|
||||||
|
// Create an SSL thingey and try to negotiate the connection
|
||||||
|
|
||||||
|
ssl = SSL_new(ssl_ctx);
|
||||||
|
|
||||||
|
SSL_set_fd(ssl,theSocket);
|
||||||
|
|
||||||
|
errCode = SSL_connect(ssl);
|
||||||
|
|
||||||
|
if (errCode < 0)
|
||||||
|
{
|
||||||
|
SetErrorMessageAndLongIntAndBail("OpenSSL: Can't initiate SSL connection, SSL_connect() = ",errCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Request the URI from the host
|
||||||
|
|
||||||
|
CopyCStrToCStr("GET ",tempString,sizeof(tempString));
|
||||||
|
ConcatCStrToCStr(kHTTPS_URI,tempString,sizeof(tempString));
|
||||||
|
ConcatCStrToCStr(" HTTP/1.0\r\n\r\n",tempString,sizeof(tempString));
|
||||||
|
|
||||||
|
|
||||||
|
errCode = SSL_write(ssl,tempString,CStrLength(tempString));
|
||||||
|
|
||||||
|
if (errCode < 0)
|
||||||
|
{
|
||||||
|
SetErrorMessageAndLongIntAndBail("OpenSSL: Error writing data via ssl, SSL_write() = ",errCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
char tempString[256];
|
||||||
|
int bytesRead;
|
||||||
|
|
||||||
|
|
||||||
|
// Read some bytes and dump them to the console
|
||||||
|
|
||||||
|
bytesRead = SSL_read(ssl,tempString,sizeof(tempString) - 1);
|
||||||
|
|
||||||
|
if (bytesRead == 0 && MacSocket_RemoteEndIsClosing(theSocket))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (bytesRead < 0)
|
||||||
|
{
|
||||||
|
SetErrorMessageAndLongIntAndBail("OpenSSL: Error reading data via ssl, SSL_read() = ",bytesRead);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tempString[bytesRead] = '\0';
|
||||||
|
|
||||||
|
printf("%s", tempString);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n\n\n");
|
||||||
|
|
||||||
|
// All done!
|
||||||
|
|
||||||
|
errCode = noErr;
|
||||||
|
|
||||||
|
|
||||||
|
EXITPOINT:
|
||||||
|
|
||||||
|
// Clean up and go home
|
||||||
|
|
||||||
|
if (theSocket >= 0)
|
||||||
|
{
|
||||||
|
MacSocket_close(theSocket);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssl != nil)
|
||||||
|
{
|
||||||
|
SSL_free(ssl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssl_ctx != nil)
|
||||||
|
{
|
||||||
|
SSL_CTX_free(ssl_ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (errCode != noErr)
|
||||||
|
{
|
||||||
|
printf("An error occurred:\n");
|
||||||
|
|
||||||
|
printf("%s",GetErrorMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MacSocket_Shutdown();
|
||||||
|
}
|
||||||
1607
MacOS/GetHTTPS.src/MacSocket.cpp
Normal file
1607
MacOS/GetHTTPS.src/MacSocket.cpp
Normal file
File diff suppressed because it is too large
Load Diff
104
MacOS/GetHTTPS.src/MacSocket.h
Normal file
104
MacOS/GetHTTPS.src/MacSocket.h
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum {
|
||||||
|
kMacSocket_TimeoutErr = -2
|
||||||
|
};
|
||||||
|
|
||||||
|
// Since MacSocket does busy waiting, I do a callback while waiting
|
||||||
|
|
||||||
|
typedef OSErr(*MacSocket_IdleWaitCallback) (void *);
|
||||||
|
|
||||||
|
// Call this before anything else!
|
||||||
|
|
||||||
|
OSErr MacSocket_Startup(void);
|
||||||
|
|
||||||
|
// Call this to cleanup before quitting
|
||||||
|
|
||||||
|
OSErr MacSocket_Shutdown(void);
|
||||||
|
|
||||||
|
// Call this to allocate a "socket" (reference number is returned in
|
||||||
|
// outSocketNum)
|
||||||
|
// Note that inDoThreadSwitching is pretty much irrelevant right now, since I
|
||||||
|
// ignore it
|
||||||
|
// The inTimeoutTicks parameter is applied during reads/writes of data
|
||||||
|
// The inIdleWaitCallback parameter specifies a callback which is called
|
||||||
|
// during busy-waiting periods
|
||||||
|
// The inUserRefPtr parameter is passed back to the idle-wait callback
|
||||||
|
|
||||||
|
OSErr MacSocket_socket(int *outSocketNum, const Boolean inDoThreadSwitching,
|
||||||
|
const long inTimeoutTicks,
|
||||||
|
MacSocket_IdleWaitCallback inIdleWaitCallback,
|
||||||
|
void *inUserRefPtr);
|
||||||
|
|
||||||
|
// Call this to connect to an IP/DNS address
|
||||||
|
// Note that inTargetAddressAndPort is in "IP:port" format-- e.g.
|
||||||
|
// 10.1.1.1:123
|
||||||
|
|
||||||
|
OSErr MacSocket_connect(const int inSocketNum, char *inTargetAddressAndPort);
|
||||||
|
|
||||||
|
// Call this to listen on a port
|
||||||
|
// Since this a low-performance implementation, I allow a maximum of 1 (one!)
|
||||||
|
// incoming request when I listen
|
||||||
|
|
||||||
|
OSErr MacSocket_listen(const int inSocketNum, const int inPortNum);
|
||||||
|
|
||||||
|
// Call this to close a socket
|
||||||
|
|
||||||
|
OSErr MacSocket_close(const int inSocketNum);
|
||||||
|
|
||||||
|
// Call this to receive data on a socket
|
||||||
|
// Most parameters' purpose are obvious-- except maybe "inBlock" which
|
||||||
|
// controls whether I wait for data or return immediately
|
||||||
|
|
||||||
|
int MacSocket_recv(const int inSocketNum, void *outBuff, int outBuffLength,
|
||||||
|
const Boolean inBlock);
|
||||||
|
|
||||||
|
// Call this to send data on a socket
|
||||||
|
|
||||||
|
int MacSocket_send(const int inSocketNum, const void *inBuff,
|
||||||
|
int inBuffLength);
|
||||||
|
|
||||||
|
// If zero bytes were read in a call to MacSocket_recv(), it may be that the
|
||||||
|
// remote end has done a half-close
|
||||||
|
// This function will let you check whether that's true or not
|
||||||
|
|
||||||
|
Boolean MacSocket_RemoteEndIsClosing(const int inSocketNum);
|
||||||
|
|
||||||
|
// Call this to see if the listen has completed after a call to
|
||||||
|
// MacSocket_listen()
|
||||||
|
|
||||||
|
Boolean MacSocket_ListenCompleted(const int inSocketNum);
|
||||||
|
|
||||||
|
// These really aren't very useful anymore
|
||||||
|
|
||||||
|
Boolean MacSocket_LocalEndIsOpen(const int inSocketNum);
|
||||||
|
Boolean MacSocket_RemoteEndIsOpen(const int inSocketNum);
|
||||||
|
|
||||||
|
// You may wish to change the userRefPtr for a socket callback-- use this to
|
||||||
|
// do it
|
||||||
|
|
||||||
|
void MacSocket_SetUserRefPtr(const int inSocketNum, void *inNewRefPtr);
|
||||||
|
|
||||||
|
// Call these to get the socket's IP:port descriptor
|
||||||
|
|
||||||
|
void MacSocket_GetLocalIPAndPort(const int inSocketNum, char *outIPAndPort,
|
||||||
|
const int inIPAndPortLength);
|
||||||
|
void MacSocket_GetRemoteIPAndPort(const int inSocketNum, char *outIPAndPort,
|
||||||
|
const int inIPAndPortLength);
|
||||||
|
|
||||||
|
// Call this to get error info from a socket
|
||||||
|
|
||||||
|
void MacSocket_GetSocketErrorInfo(const int inSocketNum,
|
||||||
|
int *outSocketErrCode,
|
||||||
|
char *outSocketErrString,
|
||||||
|
const int inSocketErrStringMaxLength);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
4940
MacOS/OpenSSL.mcp.hqx
Normal file
4940
MacOS/OpenSSL.mcp.hqx
Normal file
File diff suppressed because it is too large
Load Diff
476
MacOS/Randomizer.cpp
Normal file
476
MacOS/Randomizer.cpp
Normal file
@@ -0,0 +1,476 @@
|
|||||||
|
/*
|
||||||
|
------- Strong random data generation on a Macintosh (pre - OS X) ------
|
||||||
|
|
||||||
|
-- GENERAL: We aim to generate unpredictable bits without explicit
|
||||||
|
user interaction. A general review of the problem may be found
|
||||||
|
in RFC 1750, "Randomness Recommendations for Security", and some
|
||||||
|
more discussion, of general and Mac-specific issues has appeared
|
||||||
|
in "Using and Creating Cryptographic- Quality Random Numbers" by
|
||||||
|
Jon Callas (www.merrymeet.com/jon/usingrandom.html).
|
||||||
|
|
||||||
|
The data and entropy estimates provided below are based on my
|
||||||
|
limited experimentation and estimates, rather than by any
|
||||||
|
rigorous study, and the entropy estimates tend to be optimistic.
|
||||||
|
They should not be considered absolute.
|
||||||
|
|
||||||
|
Some of the information being collected may be correlated in
|
||||||
|
subtle ways. That includes mouse positions, timings, and disk
|
||||||
|
size measurements. Some obvious correlations will be eliminated
|
||||||
|
by the programmer, but other, weaker ones may remain. The
|
||||||
|
reliability of the code depends on such correlations being
|
||||||
|
poorly understood, both by us and by potential interceptors.
|
||||||
|
|
||||||
|
This package has been planned to be used with OpenSSL, v. 0.9.5.
|
||||||
|
It requires the OpenSSL function RAND_add.
|
||||||
|
|
||||||
|
-- OTHER WORK: Some source code and other details have been
|
||||||
|
published elsewhere, but I haven't found any to be satisfactory
|
||||||
|
for the Mac per se:
|
||||||
|
|
||||||
|
* The Linux random number generator (by Theodore Ts'o, in
|
||||||
|
drivers/char/random.c), is a carefully designed open-source
|
||||||
|
crypto random number package. It collects data from a variety
|
||||||
|
of sources, including mouse, keyboard and other interrupts.
|
||||||
|
One nice feature is that it explicitly estimates the entropy
|
||||||
|
of the data it collects. Some of its features (e.g. interrupt
|
||||||
|
timing) cannot be reliably exported to the Mac without using
|
||||||
|
undocumented APIs.
|
||||||
|
|
||||||
|
* Truerand by Don P. Mitchell and Matt Blaze uses variations
|
||||||
|
between different timing mechanisms on the same system. This
|
||||||
|
has not been tested on the Mac, but requires preemptive
|
||||||
|
multitasking, and is hardware-dependent, and can't be relied
|
||||||
|
on to work well if only one oscillator is present.
|
||||||
|
|
||||||
|
* Cryptlib's RNG for the Mac (RNDMAC.C by Peter Gutmann),
|
||||||
|
gathers a lot of information about the machine and system
|
||||||
|
environment. Unfortunately, much of it is constant from one
|
||||||
|
startup to the next. In other words, the random seed could be
|
||||||
|
the same from one day to the next. Some of the APIs are
|
||||||
|
hardware-dependent, and not all are compatible with Carbon (OS
|
||||||
|
X). Incidentally, the EGD library is based on the UNIX entropy
|
||||||
|
gathering methods in cryptlib, and isn't suitable for MacOS
|
||||||
|
either.
|
||||||
|
|
||||||
|
* Mozilla (and perhaps earlier versions of Netscape) uses the
|
||||||
|
time of day (in seconds) and an uninitialized local variable
|
||||||
|
to seed the random number generator. The time of day is known
|
||||||
|
to an outside interceptor (to within the accuracy of the
|
||||||
|
system clock). The uninitialized variable could easily be
|
||||||
|
identical between subsequent launches of an application, if it
|
||||||
|
is reached through the same path.
|
||||||
|
|
||||||
|
* OpenSSL provides the function RAND_screen(), by G. van
|
||||||
|
Oosten, which hashes the contents of the screen to generate a
|
||||||
|
seed. This is not useful for an extension or for an
|
||||||
|
application which launches at startup time, since the screen
|
||||||
|
is likely to look identical from one launch to the next. This
|
||||||
|
method is also rather slow.
|
||||||
|
|
||||||
|
* Using variations in disk drive seek times has been proposed
|
||||||
|
(Davis, Ihaka and Fenstermacher, world.std.com/~dtd/;
|
||||||
|
Jakobsson, Shriver, Hillyer and Juels,
|
||||||
|
www.bell-labs.com/user/shriver/random.html). These variations
|
||||||
|
appear to be due to air turbulence inside the disk drive
|
||||||
|
mechanism, and are very strongly unpredictable. Unfortunately
|
||||||
|
this technique is slow, and some implementations of it may be
|
||||||
|
patented (see Shriver's page above.) It of course cannot be
|
||||||
|
used with a RAM disk.
|
||||||
|
|
||||||
|
-- TIMING: On the 601 PowerPC the time base register is guaranteed
|
||||||
|
to change at least once every 10 addi instructions, i.e. 10
|
||||||
|
cycles. On a 60 MHz machine (slowest PowerPC) this translates to
|
||||||
|
a resolution of 1/6 usec. Newer machines seem to be using a 10
|
||||||
|
cycle resolution as well.
|
||||||
|
|
||||||
|
For 68K Macs, the Microseconds() call may be used. See Develop
|
||||||
|
issue 29 on the Apple developer site
|
||||||
|
(developer.apple.com/dev/techsupport/develop/issue29/minow.html)
|
||||||
|
for information on its accuracy and resolution. The code below
|
||||||
|
has been tested only on PowerPC based machines.
|
||||||
|
|
||||||
|
The time from machine startup to the launch of an application in
|
||||||
|
the startup folder has a variance of about 1.6 msec on a new G4
|
||||||
|
machine with a defragmented and optimized disk, most extensions
|
||||||
|
off and no icons on the desktop. This can be reasonably taken as
|
||||||
|
a lower bound on the variance. Most of this variation is likely
|
||||||
|
due to disk seek time variability. The distribution of startup
|
||||||
|
times is probably not entirely even or uncorrelated. This needs
|
||||||
|
to be investigated, but I am guessing that it not a majpor
|
||||||
|
problem. Entropy = log2 (1600/0.166) ~= 13 bits on a 60 MHz
|
||||||
|
machine, ~16 bits for a 450 MHz machine.
|
||||||
|
|
||||||
|
User-launched application startup times will have a variance of
|
||||||
|
a second or more relative to machine startup time. Entropy >~22
|
||||||
|
bits.
|
||||||
|
|
||||||
|
Machine startup time is available with a 1-second resolution. It
|
||||||
|
is predictable to no better a minute or two, in the case of
|
||||||
|
people who show up punctually to work at the same time and
|
||||||
|
immediately start their computer. Using the scheduled startup
|
||||||
|
feature (when available) will cause the machine to start up at
|
||||||
|
the same time every day, making the value predictable. Entropy
|
||||||
|
>~7 bits, or 0 bits with scheduled startup.
|
||||||
|
|
||||||
|
The time of day is of course known to an outsider and thus has 0
|
||||||
|
entropy if the system clock is regularly calibrated.
|
||||||
|
|
||||||
|
-- KEY TIMING: A very fast typist (120 wpm) will have a typical
|
||||||
|
inter-key timing interval of 100 msec. We can assume a variance
|
||||||
|
of no less than 2 msec -- maybe. Do good typists have a constant
|
||||||
|
rhythm, like drummers? Since what we measure is not the
|
||||||
|
key-generated interrupt but the time at which the key event was
|
||||||
|
taken off the event queue, our resolution is roughly the time
|
||||||
|
between process switches, at best 1 tick (17 msec). I therefore
|
||||||
|
consider this technique questionable and not very useful for
|
||||||
|
obtaining high entropy data on the Mac.
|
||||||
|
|
||||||
|
-- MOUSE POSITION AND TIMING: The high bits of the mouse position
|
||||||
|
are far from arbitrary, since the mouse tends to stay in a few
|
||||||
|
limited areas of the screen. I am guessing that the position of
|
||||||
|
the mouse is arbitrary within a 6 pixel square. Since the mouse
|
||||||
|
stays still for long periods of time, it should be sampled only
|
||||||
|
after it was moved, to avoid correlated data. This gives an
|
||||||
|
entropy of log2(6*6) ~= 5 bits per measurement.
|
||||||
|
|
||||||
|
The time during which the mouse stays still can vary from zero
|
||||||
|
to, say, 5 seconds (occasionally longer). If the still time is
|
||||||
|
measured by sampling the mouse during null events, and null
|
||||||
|
events are received once per tick, its resolution is 1/60th of a
|
||||||
|
second, giving an entropy of log2 (60*5) ~= 8 bits per
|
||||||
|
measurement. Since the distribution of still times is uneven,
|
||||||
|
this estimate is on the high side.
|
||||||
|
|
||||||
|
For simplicity and compatibility across system versions, the
|
||||||
|
mouse is to be sampled explicitly (e.g. in the event loop),
|
||||||
|
rather than in a time manager task.
|
||||||
|
|
||||||
|
-- STARTUP DISK TOTAL FILE SIZE: Varies typically by at least 20k
|
||||||
|
from one startup to the next, with 'minimal' computer use. Won't
|
||||||
|
vary at all if machine is started again immediately after
|
||||||
|
startup (unless virtual memory is on), but any application which
|
||||||
|
uses the web and caches information to disk is likely to cause
|
||||||
|
this much variation or more. The variation is probably not
|
||||||
|
random, but I don't know in what way. File sizes tend to be
|
||||||
|
divisible by 4 bytes since file format fields are often
|
||||||
|
long-aligned. Entropy > log2 (20000/4) ~= 12 bits.
|
||||||
|
|
||||||
|
-- STARTUP DISK FIRST AVAILABLE ALLOCATION BLOCK: As the volume
|
||||||
|
gets fragmented this could be anywhere in principle. In a
|
||||||
|
perfectly unfragmented volume this will be strongly correlated
|
||||||
|
with the total file size on the disk. With more fragmentation
|
||||||
|
comes less certainty. I took the variation in this value to be
|
||||||
|
1/8 of the total file size on the volume.
|
||||||
|
|
||||||
|
-- SYSTEM REQUIREMENTS: The code here requires System 7.0 and above
|
||||||
|
(for Gestalt and Microseconds calls). All the calls used are
|
||||||
|
Carbon-compatible.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*------------------------------ Includes ----------------------------*/
|
||||||
|
|
||||||
|
#include "Randomizer.h"
|
||||||
|
|
||||||
|
// Mac OS API
|
||||||
|
#include <Files.h>
|
||||||
|
#include <Folders.h>
|
||||||
|
#include <Events.h>
|
||||||
|
#include <Processes.h>
|
||||||
|
#include <Gestalt.h>
|
||||||
|
#include <Resources.h>
|
||||||
|
#include <LowMem.h>
|
||||||
|
|
||||||
|
// Standard C library
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
/*---------------------- Function declarations -----------------------*/
|
||||||
|
|
||||||
|
// declared in OpenSSL/crypto/rand/rand.h
|
||||||
|
extern "C" void RAND_add (const void *buf, int num, double entropy);
|
||||||
|
|
||||||
|
unsigned long GetPPCTimer (bool is601); // Make it global if needed
|
||||||
|
// elsewhere
|
||||||
|
|
||||||
|
/*---------------------------- Constants -----------------------------*/
|
||||||
|
|
||||||
|
#define kMouseResolution 6 // Mouse position has to differ
|
||||||
|
// from the last one by this
|
||||||
|
// much to be entered
|
||||||
|
#define kMousePositionEntropy 5.16 // log2 (kMouseResolution**2)
|
||||||
|
#define kTypicalMouseIdleTicks 300.0 // I am guessing that a typical
|
||||||
|
// amount of time between mouse
|
||||||
|
// moves is 5 seconds
|
||||||
|
#define kVolumeBytesEntropy 12.0 // about log2 (20000/4),
|
||||||
|
// assuming a variation of 20K
|
||||||
|
// in total file size and
|
||||||
|
// long-aligned file formats.
|
||||||
|
#define kApplicationUpTimeEntropy 6.0 // Variance > 1 second, uptime
|
||||||
|
// in ticks
|
||||||
|
#define kSysStartupEntropy 7.0 // Entropy for machine startup
|
||||||
|
// time
|
||||||
|
|
||||||
|
|
||||||
|
/*------------------------ Function definitions ----------------------*/
|
||||||
|
|
||||||
|
CRandomizer::CRandomizer (void)
|
||||||
|
{
|
||||||
|
long result;
|
||||||
|
|
||||||
|
mSupportsLargeVolumes =
|
||||||
|
(Gestalt(gestaltFSAttr, &result) == noErr) &&
|
||||||
|
((result & (1L << gestaltFSSupports2TBVols)) != 0);
|
||||||
|
|
||||||
|
if (Gestalt (gestaltNativeCPUtype, &result) != noErr)
|
||||||
|
{
|
||||||
|
mIsPowerPC = false;
|
||||||
|
mIs601 = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mIs601 = (result == gestaltCPU601);
|
||||||
|
mIsPowerPC = (result >= gestaltCPU601);
|
||||||
|
}
|
||||||
|
mLastMouse.h = mLastMouse.v = -10; // First mouse will
|
||||||
|
// always be recorded
|
||||||
|
mLastPeriodicTicks = TickCount();
|
||||||
|
GetTimeBaseResolution ();
|
||||||
|
|
||||||
|
// Add initial entropy
|
||||||
|
AddTimeSinceMachineStartup ();
|
||||||
|
AddAbsoluteSystemStartupTime ();
|
||||||
|
AddStartupVolumeInfo ();
|
||||||
|
AddFiller ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandomizer::PeriodicAction (void)
|
||||||
|
{
|
||||||
|
AddCurrentMouse ();
|
||||||
|
AddNow (0.0); // Should have a better entropy estimate here
|
||||||
|
mLastPeriodicTicks = TickCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------- Private Methods --------------------------*/
|
||||||
|
|
||||||
|
void CRandomizer::AddCurrentMouse (void)
|
||||||
|
{
|
||||||
|
Point mouseLoc;
|
||||||
|
unsigned long lastCheck; // Ticks since mouse was last
|
||||||
|
// sampled
|
||||||
|
|
||||||
|
#if TARGET_API_MAC_CARBON
|
||||||
|
GetGlobalMouse (&mouseLoc);
|
||||||
|
#else
|
||||||
|
mouseLoc = LMGetMouseLocation();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (labs (mLastMouse.h - mouseLoc.h) > kMouseResolution/2 &&
|
||||||
|
labs (mLastMouse.v - mouseLoc.v) > kMouseResolution/2)
|
||||||
|
AddBytes (&mouseLoc, sizeof (mouseLoc),
|
||||||
|
kMousePositionEntropy);
|
||||||
|
|
||||||
|
if (mLastMouse.h == mouseLoc.h && mLastMouse.v == mouseLoc.v)
|
||||||
|
mMouseStill ++;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
double entropy;
|
||||||
|
|
||||||
|
// Mouse has moved. Add the number of measurements for
|
||||||
|
// which it's been still. If the resolution is too
|
||||||
|
// coarse, assume the entropy is 0.
|
||||||
|
|
||||||
|
lastCheck = TickCount() - mLastPeriodicTicks;
|
||||||
|
if (lastCheck <= 0)
|
||||||
|
lastCheck = 1;
|
||||||
|
entropy = log2l
|
||||||
|
(kTypicalMouseIdleTicks/(double)lastCheck);
|
||||||
|
if (entropy < 0.0)
|
||||||
|
entropy = 0.0;
|
||||||
|
AddBytes (&mMouseStill, sizeof (mMouseStill), entropy);
|
||||||
|
mMouseStill = 0;
|
||||||
|
}
|
||||||
|
mLastMouse = mouseLoc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandomizer::AddAbsoluteSystemStartupTime (void)
|
||||||
|
{
|
||||||
|
unsigned long now; // Time in seconds since
|
||||||
|
// 1/1/1904
|
||||||
|
GetDateTime (&now);
|
||||||
|
now -= TickCount() / 60; // Time in ticks since machine
|
||||||
|
// startup
|
||||||
|
AddBytes (&now, sizeof (now), kSysStartupEntropy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandomizer::AddTimeSinceMachineStartup (void)
|
||||||
|
{
|
||||||
|
AddNow (1.5); // Uncertainty in app startup
|
||||||
|
// time is > 1.5 msec (for
|
||||||
|
// automated app startup).
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandomizer::AddAppRunningTime (void)
|
||||||
|
{
|
||||||
|
ProcessSerialNumber PSN;
|
||||||
|
ProcessInfoRec ProcessInfo;
|
||||||
|
|
||||||
|
ProcessInfo.processInfoLength = sizeof (ProcessInfoRec);
|
||||||
|
ProcessInfo.processName = nil;
|
||||||
|
ProcessInfo.processAppSpec = nil;
|
||||||
|
|
||||||
|
GetCurrentProcess (&PSN);
|
||||||
|
GetProcessInformation (&PSN, &ProcessInfo);
|
||||||
|
|
||||||
|
// Now add the amount of time in ticks that the current process
|
||||||
|
// has been active
|
||||||
|
|
||||||
|
AddBytes (&ProcessInfo, sizeof (ProcessInfoRec),
|
||||||
|
kApplicationUpTimeEntropy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandomizer::AddStartupVolumeInfo (void)
|
||||||
|
{
|
||||||
|
short vRefNum;
|
||||||
|
long dirID;
|
||||||
|
XVolumeParam pb;
|
||||||
|
OSErr err;
|
||||||
|
|
||||||
|
if (!mSupportsLargeVolumes)
|
||||||
|
return;
|
||||||
|
|
||||||
|
FindFolder (kOnSystemDisk, kSystemFolderType, kDontCreateFolder,
|
||||||
|
&vRefNum, &dirID);
|
||||||
|
pb.ioVRefNum = vRefNum;
|
||||||
|
pb.ioCompletion = 0;
|
||||||
|
pb.ioNamePtr = 0;
|
||||||
|
pb.ioVolIndex = 0;
|
||||||
|
err = PBXGetVolInfoSync (&pb);
|
||||||
|
if (err != noErr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Base the entropy on the amount of space used on the disk and
|
||||||
|
// on the next available allocation block. A lot else might be
|
||||||
|
// unpredictable, so might as well toss the whole block in. See
|
||||||
|
// comments for entropy estimate justifications.
|
||||||
|
|
||||||
|
AddBytes (&pb, sizeof (pb),
|
||||||
|
kVolumeBytesEntropy +
|
||||||
|
log2l (((pb.ioVTotalBytes.hi - pb.ioVFreeBytes.hi)
|
||||||
|
* 4294967296.0D +
|
||||||
|
(pb.ioVTotalBytes.lo - pb.ioVFreeBytes.lo))
|
||||||
|
/ pb.ioVAlBlkSiz - 3.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
On a typical startup CRandomizer will come up with about 60
|
||||||
|
bits of good, unpredictable data. Assuming no more input will
|
||||||
|
be available, we'll need some more lower-quality data to give
|
||||||
|
OpenSSL the 128 bits of entropy it desires. AddFiller adds some
|
||||||
|
relatively predictable data into the soup.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void CRandomizer::AddFiller (void)
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
ProcessSerialNumber psn; // Front process serial
|
||||||
|
// number
|
||||||
|
RGBColor hiliteRGBValue; // User-selected
|
||||||
|
// highlight color
|
||||||
|
long processCount; // Number of active
|
||||||
|
// processes
|
||||||
|
long cpuSpeed; // Processor speed
|
||||||
|
long totalMemory; // Total logical memory
|
||||||
|
// (incl. virtual one)
|
||||||
|
long systemVersion; // OS version
|
||||||
|
short resFile; // Current resource file
|
||||||
|
} data;
|
||||||
|
|
||||||
|
GetNextProcess ((ProcessSerialNumber*) kNoProcess);
|
||||||
|
while (GetNextProcess (&data.psn) == noErr)
|
||||||
|
data.processCount++;
|
||||||
|
GetFrontProcess (&data.psn);
|
||||||
|
LMGetHiliteRGB (&data.hiliteRGBValue);
|
||||||
|
Gestalt (gestaltProcClkSpeed, &data.cpuSpeed);
|
||||||
|
Gestalt (gestaltLogicalRAMSize, &data.totalMemory);
|
||||||
|
Gestalt (gestaltSystemVersion, &data.systemVersion);
|
||||||
|
data.resFile = CurResFile ();
|
||||||
|
|
||||||
|
// Here we pretend to feed the PRNG completely random data. This
|
||||||
|
// is of course false, as much of the above data is predictable
|
||||||
|
// by an outsider. At this point we don't have any more
|
||||||
|
// randomness to add, but with OpenSSL we must have a 128 bit
|
||||||
|
// seed before we can start. We just add what we can, without a
|
||||||
|
// real entropy estimate, and hope for the best.
|
||||||
|
|
||||||
|
AddBytes (&data, sizeof(data), 8.0 * sizeof(data));
|
||||||
|
AddCurrentMouse ();
|
||||||
|
AddNow (1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------- LOW LEVEL ---------------------
|
||||||
|
|
||||||
|
void CRandomizer::AddBytes (void *data, long size, double entropy)
|
||||||
|
{
|
||||||
|
RAND_add (data, size, entropy * 0.125); // Convert entropy bits
|
||||||
|
// to bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
void CRandomizer::AddNow (double millisecondUncertainty)
|
||||||
|
{
|
||||||
|
long time = SysTimer();
|
||||||
|
AddBytes (&time, sizeof (time), log2l (millisecondUncertainty *
|
||||||
|
mTimebaseTicksPerMillisec));
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------- TIMING SUPPORT ------------------
|
||||||
|
|
||||||
|
void CRandomizer::GetTimeBaseResolution (void)
|
||||||
|
{
|
||||||
|
#ifdef __powerc
|
||||||
|
long speed;
|
||||||
|
|
||||||
|
// gestaltProcClkSpeed available on System 7.5.2 and above
|
||||||
|
if (Gestalt (gestaltProcClkSpeed, &speed) != noErr)
|
||||||
|
// Only PowerPCs running pre-7.5.2 are 60-80 MHz
|
||||||
|
// machines.
|
||||||
|
mTimebaseTicksPerMillisec = 6000.0D;
|
||||||
|
// Assume 10 cycles per clock update, as in 601 spec. Seems true
|
||||||
|
// for later chips as well.
|
||||||
|
mTimebaseTicksPerMillisec = speed / 1.0e4D;
|
||||||
|
#else
|
||||||
|
// 68K VIA-based machines (see Develop Magazine no. 29)
|
||||||
|
mTimebaseTicksPerMillisec = 783.360D;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long CRandomizer::SysTimer (void) // returns the lower 32
|
||||||
|
// bit of the chip timer
|
||||||
|
{
|
||||||
|
#ifdef __powerc
|
||||||
|
return GetPPCTimer (mIs601);
|
||||||
|
#else
|
||||||
|
UnsignedWide usec;
|
||||||
|
Microseconds (&usec);
|
||||||
|
return usec.lo;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __powerc
|
||||||
|
// The timebase is available through mfspr on 601, mftb on later chips.
|
||||||
|
// Motorola recommends that an 601 implementation map mftb to mfspr
|
||||||
|
// through an exception, but I haven't tested to see if MacOS actually
|
||||||
|
// does this. We only sample the lower 32 bits of the timer (i.e. a
|
||||||
|
// few minutes of resolution)
|
||||||
|
|
||||||
|
asm unsigned long GetPPCTimer (register bool is601)
|
||||||
|
{
|
||||||
|
cmplwi is601, 0 // Check if 601
|
||||||
|
bne _601 // if non-zero goto _601
|
||||||
|
mftb r3 // Available on 603 and later.
|
||||||
|
blr // return with result in r3
|
||||||
|
_601:
|
||||||
|
mfspr r3, spr5 // Available on 601 only.
|
||||||
|
// blr inserted automatically
|
||||||
|
}
|
||||||
|
#endif
|
||||||
42
MacOS/Randomizer.h
Normal file
42
MacOS/Randomizer.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
// Gathers unpredictable system data to be used for generating
|
||||||
|
// random bits
|
||||||
|
|
||||||
|
#include <MacTypes.h>
|
||||||
|
|
||||||
|
class CRandomizer {
|
||||||
|
public:
|
||||||
|
CRandomizer(void);
|
||||||
|
void PeriodicAction(void);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private calls
|
||||||
|
|
||||||
|
void AddTimeSinceMachineStartup(void);
|
||||||
|
void AddAbsoluteSystemStartupTime(void);
|
||||||
|
void AddAppRunningTime(void);
|
||||||
|
void AddStartupVolumeInfo(void);
|
||||||
|
void AddFiller(void);
|
||||||
|
|
||||||
|
void AddCurrentMouse(void);
|
||||||
|
void AddNow(double millisecondUncertainty);
|
||||||
|
void AddBytes(void *data, long size, double entropy);
|
||||||
|
|
||||||
|
void GetTimeBaseResolution(void);
|
||||||
|
unsigned long SysTimer(void);
|
||||||
|
|
||||||
|
// System Info
|
||||||
|
bool mSupportsLargeVolumes;
|
||||||
|
bool mIsPowerPC;
|
||||||
|
bool mIs601;
|
||||||
|
|
||||||
|
// Time info
|
||||||
|
double mTimebaseTicksPerMillisec;
|
||||||
|
unsigned long mLastPeriodicTicks;
|
||||||
|
|
||||||
|
// Mouse info
|
||||||
|
long mSamplePeriod;
|
||||||
|
Point mLastMouse;
|
||||||
|
long mMouseStill;
|
||||||
|
};
|
||||||
18
MacOS/TODO
Normal file
18
MacOS/TODO
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Verify server certificate
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Currently omitted from the project:
|
||||||
|
|
||||||
|
crypto/tmdiff.c
|
||||||
|
crypto/bio/bss_conn.c
|
||||||
|
crypto/bio/b_sock.c
|
||||||
|
crypto/bio/bss_acpt.c
|
||||||
|
crypto/bio/bss_log.h
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Build libraries to link with...
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Port openssl application.
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
BN optimizations (currently PPC version is compiled with BN_LLONG)
|
||||||
|
-------------------------------------------------------------------
|
||||||
9
MacOS/_MWERKS_GUSI_prefix.h
Normal file
9
MacOS/_MWERKS_GUSI_prefix.h
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#include <MacHeaders.h>
|
||||||
|
#define B_ENDIAN
|
||||||
|
#ifdef __POWERPC__
|
||||||
|
# pragma longlong on
|
||||||
|
#endif
|
||||||
|
#if 1
|
||||||
|
# define MAC_OS_GUSI_SOURCE
|
||||||
|
#endif
|
||||||
|
#define MONOLITH
|
||||||
9
MacOS/_MWERKS_prefix.h
Normal file
9
MacOS/_MWERKS_prefix.h
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#include <MacHeaders.h>
|
||||||
|
#define B_ENDIAN
|
||||||
|
#ifdef __POWERPC__
|
||||||
|
# pragma longlong on
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
# define MAC_OS_GUSI_SOURCE
|
||||||
|
#endif
|
||||||
|
#define MONOLITH
|
||||||
5
MacOS/buildinf.h
Normal file
5
MacOS/buildinf.h
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#ifndef MK1MF_BUILD
|
||||||
|
# define CFLAGS "-DB_ENDIAN"
|
||||||
|
# define PLATFORM "macos"
|
||||||
|
# define DATE "Sun Feb 27 19:44:16 MET 2000"
|
||||||
|
#endif
|
||||||
820
MacOS/mklinks.as.hqx
Normal file
820
MacOS/mklinks.as.hqx
Normal file
@@ -0,0 +1,820 @@
|
|||||||
|
(This file must be converted with BinHex 4.0)
|
||||||
|
|
||||||
|
:#QeVE'PZDh-ZBA-!39"36'&`E(3J!!!!!!!!!*LiI6m!!!!!!3!!!*G#!!#@3J!
|
||||||
|
!!AChFQPd!!!!K3)"!3m(Fh9`F'pbG!!!!)B#!3%$"(0eFQ8!!!#(!J-%"!3("3C
|
||||||
|
cGfPdBfJ!!!#)!J%"#39cH@jMD!!!!)N#"J%$!`-&"3-'FhPcG'9Y!!!!LJ)&"3)
|
||||||
|
%!J8("!-#!`4dB@*X!!!!L`))!3-$!`-$!`-$"(4PE'`!!!#-!J)"#38$G'KP!!!
|
||||||
|
!M3))(J)@!Ki#!J))!K)#!`)B!Kd%G'KPE3!!!)i#!J%&#`4dD'9j!!!!M`)#!J)
|
||||||
|
#$3TdD(*[G@GSEh9d!!!!N!!#!3%&"(4TCQB!!!#4!J%"!`4dD@eP!!!!NJ)"!JS
|
||||||
|
#!h4T!!!!'N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!H!!!!!!!#!!!!!!
|
||||||
|
!!!!!!!!!!!!!rrrrr`!!!$3!!!!N!!!!!#"[!!5JAb"[!!5K++!M6R9$9'mJFR9
|
||||||
|
Z)(4SDA-JFf0bDA"d)'&`F'aTBf&dD@pZ,#"jEh8JEA9cG#"QDA*cG#"TER0dB@a
|
||||||
|
X)%&`F'aP8f0bDA"d,J!!!)C8D'Pc)(0MFQP`G#"MFQ9KG'9c)#iZ,fPZBfaeC'8
|
||||||
|
[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@aTBA0PFbi0$8P
|
||||||
|
d)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9KFf8JBQ8JF'&
|
||||||
|
dD@9ZG$SY+3!!!#S!!J!!!!!!$3!+!"!!!!!-!!!!!!!!!!!!63!0!!S!%!%!!!`
|
||||||
|
!!!!!!!!!!!!B!!!!+!!!!!!!!!!)!!!!)!#N2c`!!DR`!!!!l!!!!!&19[ri,`0
|
||||||
|
f!#m$-$bKVDG'*KmY52ri,`-`2+LITdBQ(b!ZrrLa`'FJ,`-J2'0`ER4"l[rm)NL
|
||||||
|
KV5+)*Kp+3'B)5Ulrr'F#GJ%3!bBZrr41ANje6PB!!#m-@Bm[2%j29%Nr2!#!U"m
|
||||||
|
SAb!-CJK`!cm!UFKJ+#m-UC)J9#!)d+J!'#&!!"JJ9#!)d+J!(#&!!"a9Mbm8)&q
|
||||||
|
JAMk!9%mSE[rm6Pj1G8j@!!![$%kkre4+!'FU@Bm[2'&`E(3[2(0MF(4`)DJU+&m
|
||||||
|
J$'F5@Bm[$#mm!!!!!A!!U#UTp&K26VVrG#KZrra1ANje!!!!('&`E(3!!!!"4P*
|
||||||
|
&4J!!!!!!J%P$6L-!!!!!!*B!!!!"!!!!!!G"8&"-!!!!!!!"!!!"!!!!!S!!!!4
|
||||||
|
!!!"i)!!!K"!!!3))!!)#"!!%"!)!#!J"!"!8!)!J)J"!3%%!)2#!J"#*!%!)KJ!
|
||||||
|
J")3!)!*!!"!")!!3!K!!%!3)!"!)"!!J%!)!3#!"!)"!!S%!J!5#!3!)4!)!#%J
|
||||||
|
%!!KB#!!%C"!!!m)J!!!"3!!!!)!!!!%!!!!$J!!!"m!!!(rJ!!$rm!!"rrJ!!rr
|
||||||
|
m!!IrrJ!2rrm!(rrrJ$rrrm"rrrrJrrrrm2rrrrMrrrrmrrrrrRrrrrmrrrrq(rr
|
||||||
|
rr!rrrrJ(rrr`!rrri!(rrm!$rrq!"rrr!!rrrJ!2rr`!$rri!!IRm!!$`q!!!!(
|
||||||
|
!!!!!J!!!!!)!!!!!!!!!!!m!!!!!!!!!!!!!!!!!!!$`m!!!!!!!!!!!!!!!!!!
|
||||||
|
2!!m!!!!!!!!!!!!!!!rrm!!!m!!!!!!!!!!!!!$`c0m!!!m!!!!!!!!!!!!2!!c
|
||||||
|
-m!!!m!!!!!!!!!!!m!$-cI!!!!m!!!!!!!!!$`!-c0m!!!!!m!!!!!!!!2!!c-h
|
||||||
|
`!!!!!!m!!!!!!!m!$-cIh`!!!!!!m!!!!!$`!-c0rGh`!!!!!!m!!!!2!!c-hph
|
||||||
|
-h`!!!!!!m!!!rrr-cIhF`-h`!!!!!!m!!2lFr0rGc!`-h`!!!!!!m!$pc-rph-$
|
||||||
|
!`-h`!!!!!!m!r-`2cF`-$!!-r3!!!!!!m!m!`-c!`-!!$0m!!!!!$-m!m!`-$!`
|
||||||
|
!!-cI!!!!!-c`!!m!`-$!!!`-h`!!!!c2!!!!m!`-!!$!c0m!!!$-m!!!!!m!`!!
|
||||||
|
-$-hm!!!-c`!!!!!!m!!!`-cIc!!!c2!!!!!!!!m!$!c0r-`!$-m!!!!!!!$pm-$
|
||||||
|
-hmc!!-c`!!!!!!!2hI`-cIc-!!c2!!!!!!!!rGc2c0r-`!$-m!!!!!!!!2h-cmh
|
||||||
|
mc!!-c`!!!!!!!!$mc!rIr-!!c2!!!!!!!!!!$m$2m!r-$-m!!!!!!!!!!!$rr`!
|
||||||
|
!r-c`!!!!!!!!!!!!!!!!!!r2!!!!!!!!!!!!!!!!!!!!m!!!!!!!!!!!!!"!!B!
|
||||||
|
13"%J)4"##18%Q)+3!%&!)5!L%%3BL#83*L!G3!#!!B!2`"rJ2r"rq2rmrrlrrhr
|
||||||
|
r2riIr"ri2r!ri"h!!)!!!!#!!!!!$r!!!!!!!2r`$`!!!!!2$!m!m!!!!2$!c`!
|
||||||
|
2!!!2$!c`!!$`!2r`cpm!!!m!rGrpc2!!!2$p$p`-c`!!$`m!`-$0m!$2!2!-$-h
|
||||||
|
`$2!!$`$-hm$2!!!2m-hm$2!!!2h2hm$2!!!!r-rm$2!!!!!2r`r2!!!!!!!!!2!
|
||||||
|
!!!!!!!#D8f0bDA"d)%&`F'aTBf&dD@pZ$3e8D'Pc)(0MFQP`G#"MFQ9KG'9c)#i
|
||||||
|
Z,fPZBfaeC'8[Eh"PER0cE#"KEQ3JCQPXE(-JDA3JGfPdD#"ZC@0PFh0KFRNJB@a
|
||||||
|
TBA0PFbi0$8Pd)'eTCfKd)(4KDf8JB5"hD'PXC5"dEb"MEfe`E'9dC5"cEb"`E'9
|
||||||
|
KFf8JBQ8JF'&dD@9ZG$SY+3!!!")!!J!!!!!!!!!!!!%!"J!'%iN!!!!+@1!!!b!
|
||||||
|
!!!-J!!!!!"3!+`!(!Cm#@!!V!!F"f!*B!!!!!3!!M`C'BA0N98&6)$%Z-6!a,M%
|
||||||
|
`$J!!!!32rrm!!3!#!!-"rrm!!!d!!3!"D`!!!!!!!!!%!J!%!!)!"3!'$3!&!!*
|
||||||
|
X!!)!!!U`!!IrrJd!"`!#6`!!!!!+X!!)!!N0!!J!!@X!!!!%#Um!#J)!#J!#!!X
|
||||||
|
!$!d!#`!#E!!#!!3!"2rprr`"rrd!!!(rr!!!!J!-!!)!$3!1$3!0!!*X!!%!"!!
|
||||||
|
%rrX!$`(rq`!!$!!2!&N!8b"(CA3JF'&dD#"dEb"dD'Pc)%&`F'aP8f0bDA"d)'&
|
||||||
|
`F'aPG$XJGA0P)'Pd)(4[)'C[FQdJG'KP)("KG'JJG'mJG'KP)'PZBfaeC'8JCQp
|
||||||
|
XC'9b!!)!!!)!$J!#!"!!%3d!%!!#E!!"!!3!"2rk!")"rrS!!!`!%J!Q!#!JB@j
|
||||||
|
N)(4SC5"[G'KPFL"bC@aPGQ&ZG#"QEfaNCA*c,J!#!!!#!"%!!J!6!"30!"-!!R-
|
||||||
|
!!!!%!"%!&3!@$3!9!!*M!!!!"!!1!"F!'!d!&`!#E!!&!!3!$!!CrrN0!"N!!Qi
|
||||||
|
!!!!%!!`!'J!E$3!D!!)d!!!!"3!-rrJ!(!Vrq!!%#Q0[BQS0!"`!!Q`!"3!'!!X
|
||||||
|
!(Irh$3!G!!0*!!)!"J!,rrB!([re#[rf!"JZC@&bFfCQC(*KE'Pc!!!!!!!!)!"
|
||||||
|
KCQ4b$3!H!!"Q!!!!"J!(![re!!!"rrF!!!d!'`!"E3!!!!3!"3!I$`!I!6J)ER9
|
||||||
|
XE!!!!!!!!Gq!rrm!!!!A"NCTEQ4PFJ!!(`*[Me!!ASfm!Qq,i!"HA[!!I&M!!!!
|
||||||
|
!!!!!'mi!!JN#!Qq-1!!!Kb%#Ei`J!!!!!%C14&*038e"3e-!!"%!B@aTF`!!!!!
|
||||||
|
!fJ!#!!!-6@&MD@jdEh0S)%K%!!!!!!!!!!!!!!!!!!!!XSA5h%*%!!!!!!!A"NC
|
||||||
|
TEQ4PFJ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
!!!!!!!!!!!!!!!!!!!!!3rLc#@a!4Nj%8Ne"3e2rrrrr!!!!!!!!!!!!!!!!!!!
|
||||||
|
!!!!!!!e6HA0dC@dJ4QpXC'9b!!!"!!3!!!!A!!)!)8eKBfPZG'pcD#")4$T6HA0
|
||||||
|
dC@dJ4QpXC'9b1NCTEQ4PFJ$rr`!!!Irj!!!0!"J!!@d!!!!-!!hrp!Vrp!!%#Q0
|
||||||
|
dH(30!"B!!@m!!!!!!!$rm`[rm`!5-!!(G'KPF'&dD!!(G'KP8'&dD!)!&!!#!#!
|
||||||
|
!)3d!)!!#E!!#!")!%[rbrr%"rr)!!!(rm3!!!J!K!!)!)J!M$3!L!!*b!!!!%J!
|
||||||
|
A!#3!*3d!*!!#EJ!$!")!&3!Q!#F0!#B!!6%!!!!6!"Arm!Vrm!!%#R4iC'`0!#F
|
||||||
|
!!6%!!!!5!"2rl`Vrl`!%#Q&cBh)0!#8!!@m!!!!!!!$rlJ[rlJ!F-!!-G'KPEfa
|
||||||
|
NC'9XD@ec!!adD'92E'4%C@aTEA-#!#-!!J!S!#N0!#J!!R)!!!!B!"d!+J!V$3!
|
||||||
|
U!!&Y!!!!'!!C!#`-!#`!"`!"1J!#!!!0!#X!!Qi!!`!!!!!!,3!Z$3!Y!!%a!!!
|
||||||
|
!'J!Frqd+rqd!"!TdH'4X$3!Z!!%a!!!!'3!Drq`+rq`!"!TKFf0b!J!T!!)!,`!
|
||||||
|
`$3![!!*X!!)!(J!Hrq[rkJ(rk`!!!IrU!!!#!$!!!J!a!$)0!$%!!R)!!!!H!#X
|
||||||
|
!-`!d$3!c!!*X!!8!(J!T!$Ark3d!03!#EJ!!!"i!+3!f!$F0!$B!!cF"!!!I!#R
|
||||||
|
rk!!i!$N+rqJ!"!TMDA4Y$3!i!!&Y!!!!)`!PrqF$rqF!!3d!13!"E3!!!#B!+2r
|
||||||
|
Q!rrQrrd0!$F!!@m!!!!H!"rrj3[rj3!5-!!(G'KPF'&dD!!(G'KP8'&dD!(rk3!
|
||||||
|
!$3!d!!&[!!!!!!!!rq3,rq3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0
|
||||||
|
d8'&dD!)!-J!#!$S!1`d!1J!#FJ!!!#`!1`!m!$d0!$`!!Q-!!!!X!$N!2J!r$3!
|
||||||
|
q!!*X!!8!,!!h!%$ri`d!3!!#EJ!!!#`!0`""!%)0!%%!!cF"!!!Y!$IriJ"$!%3
|
||||||
|
+rq)!"!TMDA4Y$3"$!!&Y!!!!-3!crq%$rq%!!3d!4!!"E3!!!$3!0[rJ!rrJrri
|
||||||
|
0!%)!!@m!!!!X!#hrh`[rh`!5-!!(G'KPF'&dD!!(G'KP8'&dD!(ri`!!$3!r!!&
|
||||||
|
Y!!!!0`!irpi+rpi!"!T849K8$3!p!!&[!!!!!!!!rpd,rpd!&M!!#A4SC@ePF'&
|
||||||
|
dD!!*G'KP6@93BA4S!J!l!!)!43"'$3"&!!*X!!)!2!!mrpcrf`(rh!!!!IrE!!!
|
||||||
|
#!%B!!J"(!%J0!%F!!R)!!!!m!%8!53"+$3"*!!*M!!!!2!""!%X!6!d!5`!#BJ!
|
||||||
|
!!$`!2`"0!%i0!%d!!@m!!!!m!$hrfJ[rfJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4
|
||||||
|
SC9"bEfTPBh43BA4S$3"1!!&Y!!!!23!q!%m-!%m!$3!(D@jME(9NC3!#!!!0!%`
|
||||||
|
!!@d!!!!r!%$rf3Vrf3!%#P4&@&30!%S!!@m!!!!!!!$rf![rf!!Q-!!4D@jME(9
|
||||||
|
NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S!J")!!)!8!"4$3"3!!*b!!!
|
||||||
|
!4J"9!&)!8`d!8J!#B`!!!%B!83"8!&80!&3!!Q)!!!"'!%m!9J"A$3"@!!*L!!!
|
||||||
|
!4J",!&J!@3d!@!!"E`!!!%B!4rrA#rrA!#!`!!jdD'9`FQpUC@0dF'&dD!!1G'K
|
||||||
|
P8(*[DQ9MG&"KG'J0!&N!!@d!!!"(!%S!@J`!@J!0!!GTEQ0XG@4P!!)!!!d!9`!
|
||||||
|
"E3!!!%X!6J"E$!"E!!d!"fp`C@jcFf`!!J!!$3"9!!&Y!!!!6`"3rpB+rpB!"!T
|
||||||
|
849K8$3"6!!&[!!!!!!!!rp8,rp8!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
|
||||||
|
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S!J"4!!)!A!"G$3"F!!*b!!!!9J"
|
||||||
|
K!&i!A`d!AJ!#B`!!!&B!A3"J!'%0!'!!!Q)!!!"@!&X!BJ"M$3"L!!&[!!!!9J"
|
||||||
|
Arp3,rp3!)$!!$R4SCA"bEfTPBh4`BA4S!!jdD'93FQpUC@0d8'&dD!d!B`!"E3!
|
||||||
|
!!&F!@J"N$!"N!!`!"Q0bHA"dE`!#!!!0!'%!!@d!!!"E!&crd`Vrd`!%#P4&@&3
|
||||||
|
0!&m!!@m!!!!!!!$rdJ[rdJ!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
|
||||||
|
XC'9b8'&dD!)!A3!#!'8!CJd!C3!#FJ!!!')!E3"R!'J0!'F!!Q-!!!"L!'N!D3"
|
||||||
|
U$3"T!!*L!!!!BJ"R!'X!E!d!D`!"E`!!!')!Brr4#rr4!#!`!!jdD'9`FQpUC@0
|
||||||
|
dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!'`!!@d!!!"M!'B!E3`!E3!*!!0cFf`!!J!
|
||||||
|
!$3"U!!&Y!!!!C`"Srp!+rp!!"!T849K8$3"S!!&[!!!!!!!!rmm,rmm!(M!!$A0
|
||||||
|
cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J#!'B!!J"Z!'m0!'i!!R)!!!"Z!(8
|
||||||
|
!F!"a$3"`!!*M!!!!EJ"a!()!F`d!FJ!"E`!!!'i!Err1#rr1!#!`!!jdD'9`FQp
|
||||||
|
UC@0dF'&dD!!1G'KP8(*[DQ9MG&"KG'J0!(-!!@d!!!"[!($rc3Vrc3!%#P4&@&3
|
||||||
|
0!(%!!@m!!!!!!!$rc![rc!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p`C@jcFfa
|
||||||
|
'EfaNCA*3BA4S!J"[!!)!G!"e$3"d!!*X!!)!GJ"frm[rbJ(rb`!!!Ir+!!!#!(8
|
||||||
|
!!J"f!(F0!(B!!R)!!!"f!(X!H!"j$3"i!!&[!!!!GJ"hrmN,rmN!($!!$(4SC@p
|
||||||
|
XC'4PE'PYF`!-G'KP6faN4'9XD@ec$3"j!!*Z!!-!!!!!!(S!H`d!HJ!"-3!!!(J
|
||||||
|
!H[r)#[r)!!3+G(KNE!d!H`!"-3!!!(F!H2r(#[r(!!3+BA0MFJ)!G`!#!(`!I3d
|
||||||
|
!I!!#E!!#!(`!I2r'rm8"rmB!!!(ra3!!!J"p!!)!IJ"r$3"q!!*X!!%!I!"mrm3
|
||||||
|
!J!(ra!!!$!#!!%!!1L"NC@aPG'8JEfaN)'PZBfaeC'8kEh"PER0cE#"QEfaNCA)
|
||||||
|
JB@jN)(*PBh*PBA4P)'Pd)'0XC@&ZE(N!!J!!!J"r!!)!J3##$3#"!!*X!!)!I!"
|
||||||
|
mrm2r`J(r``!!!Ir#!!!#!))!!J#$!)30!)-!!e%!!!"m!+8!K3#'!)F0!)8!!@X
|
||||||
|
!!!"r!*`!L!)!L!!#!)N!LJd!L3!$53!#!(m!N[r"!)[r`!Vr`3!B,QeTFf0cE'0
|
||||||
|
d+LSU+J!!!!!!!*!!!#SU+LS0!)X!!Qi!!!"r!)i!M!#0$3#-!!)d!!!!K`#1rlm
|
||||||
|
!MJVr[`!%#Q0QEf`0!)i!!@d!!!#+!)d!M``!M`!0!!G[F'9ZFh0X!!)!!!d!M3!
|
||||||
|
#0!!!!(m!Krqq!*!!#[qq!!3+BfC[E!d!N!!!!@m!!!#$!)Er[3[r[3!Q-!!4D@j
|
||||||
|
ME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S![r!!!!#!)S!!J#4rl`
|
||||||
|
0!*%!!dN!!J#6!*crZ`#5rlS+rlX!'#jMEh*PC'9XEbSU+LS!!!!!!!#3!!!U+LS
|
||||||
|
U$3#5!!%a!!!!N`#BrlN+rlN!"!TcC@aP![qk!!!#rl`!!!d!KJ!$8J!!!!!!!2q
|
||||||
|
irlIrYJVrZ!!B,Q&cBh*PFR)J+LSU+J!!!!!!!*!!!#SU+LS"rlF!!!,rYJ!!$3#
|
||||||
|
(!!*X!!%!T!#Nrl8!N`(rY3!!$!#6!"-!$5"TCfj[FQ8JCA*bEh)!!J!!!J#%!!)
|
||||||
|
!P!#9$3#8!!*X!!)!TJ#Qrl6rX`(rY!!!!Iqc!!!#!*8!!J#@!*F0!*B!!dN!!J#
|
||||||
|
Q!,lrX[qa!*J+rl)!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Iqa!!!'!*J
|
||||||
|
!!rq`!*N!QJVrX!!%#QY[Bf`0!*N!!@d!!!#U!+hrV`VrV`!%#Q0QEf`'!*S!!rq
|
||||||
|
Z!*[rV3VrVJ!%#QPZFfJ0!*X!!M3!!!#`!,MrV!#F#[qX!!3+BfC[E!d!R!!"E`!
|
||||||
|
!!,3!YrqV#rqV!#B`!"&TEQ0XG@4PCQpXC'9bF'&dD!!4D@jME(9NC8C[E'4PFP"
|
||||||
|
KG'J'rkd!!!)!P`!#!*d!RJd!R3!#FJ!!!,m!aJ#I!+!0!*m!!Q`"!!#r!-)!SIq
|
||||||
|
U$3#K!!%a!!!![`$#rkN+rkN!"!TbFfad!IqU!!!0!+!!!@m!!!!!!!$rU![rU!!
|
||||||
|
Z-!!9G'KPEQ9hCQpXC'9bFQ9QCA*PEQ0P!"9dD'91CAG'EfaNCA*5C@CPFQ9ZBf8
|
||||||
|
#!*i!!J#L!+-0!+)!!dN!!J$(!-lrT`#NrkB+rkF!'#jYDA0MFfaMG#SU+LS!!!!
|
||||||
|
!!!#3!!!U+LSU$3#N!!&[!!!!a`$+rk8,rk8!,M!!&A4SC@jPGfC[E'4PFR*PCQ9
|
||||||
|
bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P![qQ!!!#!+-!!J#P!+B0!+8!!R)
|
||||||
|
!!!$2!0`!T`#S$3#R!!&Y!!!!c`$5!+N-!+N!$3!(Eh"PER0cE!!#!!!0!+J!!Qi
|
||||||
|
!!!!!!!!!UJ#V$3#U!!%a!!!!e`$Erk3+rk3!"!T`EQ&Y$3#V!!%a!!!!dJ$Ark-
|
||||||
|
+rk-!"!TcC@aP!J#Q!!)!V!#Y$3#X!!*X!!)!h3$Grk,rS3(rSJ!!!IqK!!!#!+d
|
||||||
|
!!J#Z!+m0!+i!!Q`!!3$G!0hrS!#`!IqJ!!!-!,!!(`!C)&0dBA*d)'eKDfPZCb"
|
||||||
|
dD'8JB@aTBA0PF`!#!!!#!+m!!J#a!,)0!,%!!dN!!J$G!3ArRrqH!,-+rjm!'#j
|
||||||
|
MEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!IqH!!!'!,-!!rqG!,3!Y3VrR3!%#QY
|
||||||
|
[Bf`0!,3!!@d!!!$K!16rR!VrR!!%#Q&XD@%'!,8!!rqE!,B!Y`VrQ`!%#QPZFfJ
|
||||||
|
0!,B!!M3!!!$R!1rrQJ#i#[qD!!3+BfC[E!d!Z!!"E`!!!1X!l[qC#rqC!$3`!"K
|
||||||
|
[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
|
||||||
|
dD!B!Y`!$rjJ!ZIqA#[qB!!3+G'mJ)!d!Z3!#EJ!!!2)!r`#k!,X0!,S!!M3!!!$
|
||||||
|
i!2rrPJ#m#[q@!!3+CQPXC3d![!!"E3!!!2X!rJ#p$!#p!"-!$@p`C@jcFfaMEfj
|
||||||
|
Q,QJ!!J!!$3#l!!)d!!!!mJ$irj8![JVrP3!%#Q0QEf`0!,i!!@m!!!$f!2IrP![
|
||||||
|
rP!!@-!!*G'KPE@9`BA4S!!PdD'90C9"KG'J'rjF!!!)!XJ!#!,m!`!d![`!#E!!
|
||||||
|
#!3B""[q6rj)"rj-!!!(rNJ!!!J$!!!)!`3$#$3$"!!*b!!!""J%4!--!a!d!``!
|
||||||
|
#BJ!!!3B"$3$&!-B0!-8!!@m!!!%'!3RrN3[rN3!N-!!3Bh*jF(4[CQpXC'9bF'&
|
||||||
|
dD!!3Bh*jF(4[4QpXC'9b8'&dD!d!aJ!"E3!!!3N"$!$($!$(!!X!"6TKFfia!!)
|
||||||
|
!!!d!a!!"E`!!!!!!!2q3!![rN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!`J!
|
||||||
|
#!-J!b3d!b!!$53!#!4)"22q2rii!bJVrM`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!
|
||||||
|
!!'jeE'`"rii!!!B!bJ!$rid!b`$-#[q0!!3+DfpME!d!b`!"E3!!!4B"'Iq-#[q
|
||||||
|
-!!3+B@aTB3B!c!!$riX!c3$1#[q,!!3+D@jcD!d!c3!#0!!!!4`"*2q+!-m+riS
|
||||||
|
!"!TMCQpX$3$2!!&[!!!")!%MriN,riN!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9
|
||||||
|
bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J$1!!2rL!$3riF+riJ!"!T
|
||||||
|
dEb!J$3$3!!*Z!!!"*`%f!0%!dJd!d3!#0!!!!5m"0[q'!0-+riB!"!TQD@aP$3$
|
||||||
|
6!!&Y!!!"-J%e!03-!03!$!!'BA0Z-5jS!!)!!!d!dJ!#0!!!!5F",rq&!08+ri8
|
||||||
|
!"!TMCQpX$3$9!!&[!!!"+`%Zri3,ri3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!E
|
||||||
|
rK`!!!J$*!!)!eJ$A$3$@!!0*!!)"23&Rri2rJJ$B#[q$!"JZBfpbC@0bC@`U+LS
|
||||||
|
U!!!!!!!!N!!!ER9XE!(rJJ!!"J$B!!2rJ3$C!0S+ri%!"!TVEf0X$3$C!!&Y!!!
|
||||||
|
"33&%ri!+ri!!"!TKE'PK"J$D!!2rI`$E!0`+rhm!"!TTER0S$3$E!!)d!!!"4`&
|
||||||
|
2rhi!h3VrIJ!%#Q0QEf`0!0d!!@m!!!&,!8lrI3[rI3!d-!!BEh"PER0cE'PZBfa
|
||||||
|
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!0`!!rpm!0l
|
||||||
|
rH`VrI!!%#R4[)#!0!0i!!Qi!!!&5!@%!h`$J$3$I!!)d!!!"@J&KrhS!i3VrHJ!
|
||||||
|
%#QCTE'80!1%!!@d!!!&G!@!!iJ`!iJ!3!!TKFfiaAfeKBbjS!!)!!!d!i!!#0!!
|
||||||
|
!!9)"@[pj!1-+rhN!"!TMCQpX$3$M!!&[!!!"9J&CrhJ,rhJ!&$!!#(4PEA"`BA4
|
||||||
|
S!!KdC@e`8'&dD!ErH`!!!J$A!!)!j!$P$3$N!!*X!!)"D!&SrhIrGJ(rG`!!!Ip
|
||||||
|
f!!!#!18!!J$Q!1F0!1B!!R)!!!&S!A-!k!$T$3$S!!*L!!!"D!&[!1S!k`d!kJ!
|
||||||
|
"E`!!!@J"Drpe#rpe!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*
|
||||||
|
3BA4S$3$V!!&Y!!!"D`&Z!1`-!1`!#J!%1Q*TE`!#!!!0!1N!!@m!!!!!!!$rG![
|
||||||
|
rG!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J$R!!)!l3$Z$3$Y!!0*!!)"G!'Hrh2
|
||||||
|
rFJ$[#[pc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(rFJ!!"J$[!!2rF3$
|
||||||
|
`!2%+rh%!"!TVEf0X$3$`!!&Y!!!"H!&lrh!+rh!!"!TKE'PK"J$a!!2rE`$b!2-
|
||||||
|
+rfm!"!TTER0S$3$b!!)d!!!"IJ''rfi!p!VrEJ!%#Q0QEf`0!23!!@m!!!'#!BA
|
||||||
|
rE3[rE3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
|
||||||
|
NC8C[E'4PFP"KG'J'!2-!!rpX!2ArD`VrE!!%#R4[)#!0!28!!Qi!!!'*!CJ!pJ$
|
||||||
|
h$3$f!!)d!!!"N3'BrfS!q!VrDJ!%#QCTE'80!2J!!@d!!!'8!CF!q3`!q3!,!!9
|
||||||
|
LD@mZD!!#!!!0!2F!!M3!!!'*!C(rD3$k#[pT!!3+BfC[E!d!qJ!"E`!!!Bd"N!$
|
||||||
|
rD![rD!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[pV!!!#!1i!!J$l!2`0!2X!!Q`
|
||||||
|
!!J'I!CrrCrpQ!IpR!!!"rfB!!!)!r!!#!2d!rJd!r3!#FJ!!!Cm"UJ$r!3!0!2m
|
||||||
|
!!Q)!!!'I!DB"!3%#$3%"!!&[!!!"R`'Lrf8,rf8!*$!!%'0bHA"dEfC[E'4PFR"
|
||||||
|
KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!3)!!@d!!!'L!D8"!``"!`!*!!-kBQB!!J!
|
||||||
|
!$3%!!!&[!!!!!!!!rf3,rf3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)!rJ!#!33
|
||||||
|
""3d""!!$53!#!DX"eIpMrf)""JVrB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
|
||||||
|
eE'`"rf)!!!B""J!$rf%""`%)#[pK!!3+DfpME!d""`!"E3!!!Dm"X[pJ#[pJ!!3
|
||||||
|
+B@aTB3B"#!!$rem"#3%+#[pI!!3+D@jcD!d"#3!#0!!!!E8"[IpH!3X+rei!"!T
|
||||||
|
MCQpX$3%,!!&[!!!"Z3'mred,red!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
|
||||||
|
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J%+!!2rA!%-reX+re`!"!TdEb!
|
||||||
|
J$3%-!!*Z!!!"`!(2!3d"$Jd"$3!#0!!!!FJ"crpD!3m+reS!"!TQD@aP$3%2!!&
|
||||||
|
Y!!!"b`(1!4!-!4!!%!!+BQa[GfCTFfJZD!!#!!!0!3i!!M3!!!(!!FMr@3%4#[p
|
||||||
|
C!!3+BfC[E!d"%3!"E`!!!F3"arpB#rpB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J
|
||||||
|
'reX!!!)""3!#!4)"%`d"%J!#E!!#!GB"e[pAreB"reF!!!(r9J!!!J%6!!)"&!%
|
||||||
|
9$3%8!!*b!!!"eJ(K!4B"&`d"&J!#BJ!!!GB"h3%B!4N0!4J!!@m!!!(@!GRr93[
|
||||||
|
r93!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"'3!"E3!
|
||||||
|
!!GN"h!%D$!%D!!N!!cTLEJ!#!!!0!4F!!@m!!!!!!!$r9![r9!!8-!!)G'9YF("
|
||||||
|
KG'J!#(4PEA"3BA4S!J%9!!)"'`%F$3%E!!0*!!)"iJ)-re2r8J%G#[p6!"JZBfp
|
||||||
|
bC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r8J!!"J%G!!2r83%H!4m+re%!"!TVEf0
|
||||||
|
X$3%H!!&Y!!!"jJ(Tre!+re!!"!TKE'PK"J%I!!2r6`%J!5%+rdm!"!TTER0S$3%
|
||||||
|
J!!)d!!!"l!(drdi")JVr6J!%#Q0QEf`0!5)!!@m!!!(`!I2r63[r63!d-!!BEh"
|
||||||
|
PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J
|
||||||
|
'!5%!!rp-!52r5`Vr6!!%#R4[)#!0!5-!!Qi!!!(h!JB"*!%P$3%N!!)d!!!"r`)
|
||||||
|
'rdS"*JVr5J!%#QCTE'80!5B!!@d!!!)#!J8"*``"*`!+!!4LELjS!!)!!!d"*3!
|
||||||
|
#0!!!!IF"rrp*!5J+rdN!"!TMCQpX$3%S!!&[!!!"q`(qrdJ,rdJ!&$!!#(4PEA"
|
||||||
|
`BA4S!!KdC@e`8'&dD!Er5`!!!J%F!!)"+3%U$3%T!!*X!!)#$3)0rdIr4J(r4`!
|
||||||
|
!!Ip'!!!#!5S!!J%V!5`0!5X!!R)!!!)0!KJ",3%Z$3%Y!!*L!!!#$3)8!5m"-!d
|
||||||
|
",`!"E`!!!Jd#%2p&#rp&!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
|
||||||
|
NCA*3BA4S$3%`!!&Y!!!#%!)6!6%-!6%!$3!(1Q*eCQCPFJ!#!!!0!5i!!@m!!!!
|
||||||
|
!!!$r4![r4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J%X!!)"-J%c$3%b!!0*!!)
|
||||||
|
#'3*$rd2r3J%d#[p$!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(r3J!!"J%
|
||||||
|
d!!2r33%e!6B+rd%!"!TVEf0X$3%e!!&Y!!!#(3)Jrd!+rd!!"!TKE'PK"J%f!!2
|
||||||
|
r2`%h!6J+rcm!"!TTER0S$3%h!!)d!!!#)`)Vrci"13Vr2J!%#Q0QEf`0!6N!!@m
|
||||||
|
!!!)R!LVr23[r23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
|
||||||
|
-5@jME(9NC8C[E'4PFP"KG'J'!6J!!rmm!6Vr1`Vr2!!%#R4[)#!0!6S!!Qi!!!)
|
||||||
|
Z!Md"1`%m$3%l!!)d!!!#0J)prcS"23Vr1J!%#QCTE'80!6d!!@d!!!)j!M`"2J`
|
||||||
|
"2J!1!!KLG@CQCA)ZD!!#!!!0!6`!!M3!!!)Z!MEr13%r#[mj!!3+BfC[E!d"2`!
|
||||||
|
"E`!!!M)#0Imi#rmi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rcX!!!)"-`!#!8!
|
||||||
|
"33d"3!!#E!!#!N3#42mhrcB"rcF!!!(r0J!!!J&"!!)"3J&$$3&#!!*b!!!#4!*
|
||||||
|
2!83"43d"4!!#BJ!!!N3#5`&'!8F0!8B!!@m!!!*%!NIr03[r03!N-!!3Bh*jF(4
|
||||||
|
[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"4`!"E3!!!NF#5J&)$!&)!!X
|
||||||
|
!"6TMBA0d!!)!!!d"43!"E`!!!!!!!2md#rmd!"3`!!KdC@e`F'&dD!!)G'9YF&"
|
||||||
|
KG'J#!8-!!J&*!8S0!8N!!dN!!J*3!RVr-rmb!8X+rc-!'#jMEh*PBh*PE#SU+LS
|
||||||
|
!!!!!!!#3!!"ZG@aX!Imb!!!'!8X!!rma!8`"63Vr-3!%#QY[Bf`0!8`!!@d!!!*
|
||||||
|
8!PIr-!Vr-!!%#Q&XD@%'!8d!!rm[!8i"6`Vr,`!%#QPZFfJ0!8i!!M3!!!*D!Q,
|
||||||
|
r,J&3#[mZ!!3+BfC[E!d"8!!"E`!!!Pi#BImY#rmY!$3`!"K[F'9ZFh0XD@jME(9
|
||||||
|
NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"6`!$rb`"8Im
|
||||||
|
V#[mX!!3+G'mJ)!d"83!#EJ!!!Q8#G!&5!9-0!9)!!M3!!!*Y!R6r+J&8#[mU!!3
|
||||||
|
+CQPXC3d"9!!"E3!!!R!#F`&9$!&9!!`!"Q0KFh3ZD!!#!!!0!9-!!M3!!!*P!Qh
|
||||||
|
r+3&@#[mT!!3+BfC[E!d"9J!"E`!!!QN#E2mS#rmS!"3`!!KdC@e`F'&dD!!)G'9
|
||||||
|
YF&"KG'J'rbX!!!)"5J!#!9F"@!d"9`!#E!!#!RX#HrmRrbB"rbF!!!(r*J!!!J&
|
||||||
|
B!!)"@3&D$3&C!!*b!!!#H`+'!9X"A!d"@`!#BJ!!!RX#JJ&G!9i0!9d!!@m!!!*
|
||||||
|
l!Rlr*3[r*3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
|
||||||
|
"AJ!"E3!!!Ri#J3&I$!&I!!X!"6TMEfe`!!)!!!d"A!!"E`!!!!!!!2mN#rmN!"3
|
||||||
|
`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!9S!!J&J!@%0!@!!!dN!!J+(!V(r)rmL!@)
|
||||||
|
+rb-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!ImL!!!'!@)!!rmK!@-"C!V
|
||||||
|
r)3!%#QY[Bf`0!@-!!@d!!!+,!Slr)!Vr)!!%#Q&XD@%'!@3!!rmI!@8"CJVr(`!
|
||||||
|
%#QPZFfJ0!@8!!M3!!!+4!TRr(J&R#[mH!!3+BfC[E!d"C`!"E`!!!T8#Q2mG#rm
|
||||||
|
G!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4Qp
|
||||||
|
XC'9b8'&dD!B"CJ!$ra`"D2mE#[mF!!3+G'mJ)!d"D!!#EJ!!!T`#U`&T!@S0!@N
|
||||||
|
!!M3!!!+N!U[r'J&V#[mD!!3+CQPXC3d"D`!"E3!!!UF#UJ&X$!&X!!`!"Q0[EA!
|
||||||
|
ZD!!#!!!0!@S!!M3!!!+F!U6r'3&Y#[mC!!3+BfC[E!d"E3!"E`!!!U!#SrmB#rm
|
||||||
|
B!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'raX!!!)"B3!#!@i"E`d"EJ!#E!!#!V)
|
||||||
|
#X[mAraB"raF!!!(r&J!!!J&[!!)"F!&a$3&`!!*b!!!#XJ+p!A)"F`d"FJ!#BJ!
|
||||||
|
!!V)#Z3&d!A80!A3!!@m!!!+b!VAr&3[r&3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!
|
||||||
|
3Bh*jF(4[4QpXC'9b8'&dD!d"G3!"E3!!!V8#Z!&f$!&f!!X!"6TMEfjQ!!)!!!d
|
||||||
|
"F`!"E`!!!!!!!2m8#rm8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!A%!!J&h!AJ
|
||||||
|
0!AF!!dN!!J+q!ZMr%rm5!AN+ra-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@a
|
||||||
|
X!Im5!!!'!AN!!rm4!AS"H`Vr%3!%#QY[Bf`0!AS!!@d!!!,#!XAr%!Vr%!!%#Q&
|
||||||
|
XD@%'!AX!!rm2!A`"I3Vr$`!%#QPZFfJ0!A`!!M3!!!,)!Y$r$J&q#[m1!!3+BfC
|
||||||
|
[E!d"IJ!"E`!!!X`#crm0#rm0!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J
|
||||||
|
!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B"I3!$r``"Irm,#[m-!!3+G'mJ)!d
|
||||||
|
"I`!#EJ!!!Y-#iJ'!!B%0!B!!!M3!!!,E!Z,r#J'##[m+!!3+CQPXC3d"JJ!"E3!
|
||||||
|
!!Yi#i3'$$!'$!!`!"Q0[EQBZD!!#!!!0!B%!!M3!!!,6!Y[r#3'%#[m*!!3+BfC
|
||||||
|
[E!d"K!!"E`!!!YF#f[m)#rm)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r`X!!!)
|
||||||
|
"H!!#!B8"KJd"K3!#E!!#!ZN#kIm(r`B"r`F!!!(r"J!!!J''!!)"K`')$3'(!!*
|
||||||
|
b!!!#k3,d!BN"LJd"L3!#BJ!!!ZN#m!',!B`0!BX!!@m!!!,T!Zcr"3[r"3!N-!!
|
||||||
|
3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"M!!"E3!!!Z`#l`'
|
||||||
|
0$!'0!!S!"$TNCA-!!J!!$3'+!!&[!!!!!!!!r`3,r`3!&$!!#(4PEA"`BA4S!!K
|
||||||
|
dC@e`8'&dD!)"L!!#!Bi"M`d"MJ!$53!#![8$(rm$r`)"N!!+r`-!'#jMEh*PBh*
|
||||||
|
PE#SU+LS!!!!!!!#3!!"ZG@aX!Im#!!!'!C!!!!2r!3'4!C)+r`%!"!TVEf0X$3'
|
||||||
|
4!!&Y!!!#q3,mr`!+r`!!"!TKE'PK"J'5!!2qr`'6!C3+r[m!"!TTER0S$3'6!!)
|
||||||
|
d!!!#r`-(r[i"P3VqrJ!%#Q0QEf`0!C8!!@m!!!-$!`Eqr3[qr3!d-!!BEh"PER0
|
||||||
|
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!C3
|
||||||
|
!!rlm!CEqq`Vqr!!%#R4[)#!0!CB!!Qi!!!-+!aN"P`'B$3'A!!)d!!!$%J-Cr[S
|
||||||
|
"Q3VqqJ!%#QCTE'80!CN!!@d!!!-9!aJ"QJ`"QJ!,!!9NCA-ZD!!#!!!0!CJ!!M3
|
||||||
|
!!!-+!a,qq3'E#[lj!!3+BfC[E!d"Q`!"E`!!!`i$%Ili#rli!"3`!!KdC@e`F'&
|
||||||
|
dD!!)G'9YF&"KG'J'r[X!!!)"M`!#!C`"R3d"R!!#E!!#!b!$)2lhr[B"r[F!!!(
|
||||||
|
qpJ!!!J'G!!)"RJ'I$3'H!!*b!!!$)!-V!D!"S3d"S!!#BJ!!!b!$*`'L!D-0!D)
|
||||||
|
!!@m!!!-J!b2qp3[qp3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9
|
||||||
|
b8'&dD!d"S`!"E3!!!b-$*J'N$!'N!!N!!cTND!!#!!!0!D%!!@m!!!!!!!$qp![
|
||||||
|
qp!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'I!!)"T3'Q$3'P!!0*!!)$,!0@r[2
|
||||||
|
qmJ'R#[lc!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(qmJ!!"J'R!!2qm3'
|
||||||
|
S!DN+r[%!"!TVEf0X$3'S!!&Y!!!$-!-cr[!+r[!!"!TKE'PK"J'T!!2ql`'U!DX
|
||||||
|
+rZm!"!TTER0S$3'U!!)d!!!$0J-qrZi"V!VqlJ!%#Q0QEf`0!D`!!@m!!!-k!ch
|
||||||
|
ql3[ql3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
|
||||||
|
NC8C[E'4PFP"KG'J'!DX!!rlX!Dhqk`Vql!!%#R4[)#!0!Dd!!Qi!!!0"!e!"VJ'
|
||||||
|
[$3'Z!!)d!!!$5303rZS"X!VqkJ!%#QCTE'80!E!!!@d!!!0-!dm"X3`"X3!+!!4
|
||||||
|
ND#jS!!)!!!d"V`!#0!!!!d%$5IlT!E)+rZN!"!TMCQpX$3'b!!&[!!!$430)rZJ
|
||||||
|
,rZJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eqk`!!!J'Q!!)"X`'d$3'c!!*X!!)
|
||||||
|
$9`0ArZIqjJ(qj`!!!IlQ!!!#!E3!!J'e!EB0!E8!!R)!!!0A!f)"Y`'i$3'h!!*
|
||||||
|
L!!!$9`0H!EN"ZJd"Z3!"E`!!!eF$@[lP#rlP!#3`!""MFRP`G'pQEfaNCA*`BA4
|
||||||
|
S!""MFRP`G'p'EfaNCA*3BA4S$3'k!!&Y!!!$@J0G!EX-!EX!#J!%1Q4cB3!#!!!
|
||||||
|
0!EJ!!@m!!!!!!!$qj![qj!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J'f!!)"[!'
|
||||||
|
p$3'm!!0*!!)$B`10rZ2qiJ'q#[lM!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
|
||||||
|
XE!(qiJ!!"J'q!!2qi3'r!F!+rZ%!"!TVEf0X$3'r!!&Y!!!$C`0UrZ!+rZ!!"!T
|
||||||
|
KE'PK"J(!!!2qh`("!F)+rYm!"!TTER0S$3("!!)d!!!$E30erYi"``VqhJ!%#Q0
|
||||||
|
QEf`0!F-!!@m!!!0a!h6qh3[qh3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
|
||||||
|
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!F)!!rlF!F6qf`Vqh!!%#R4[)#!
|
||||||
|
0!F3!!Qi!!!0i!iF"a3('$3(&!!)d!!!$J!1(rYS"a`VqfJ!%#QCTE'80!FF!!@d
|
||||||
|
!!!1$!iB"b!`"b!!,!!9NFf%ZD!!#!!!0!FB!!M3!!!0i!i$qf3(*#[lC!!3+BfC
|
||||||
|
[E!d"b3!"E`!!!h`$IrlB#rlB!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rYX!!!)
|
||||||
|
"[3!#!FS"b`d"bJ!#E!!#!ii$M[lArYB"rYF!!!(qeJ!!!J(,!!)"c!(0$3(-!!*
|
||||||
|
b!!!$MJ1C!Fi"c`d"cJ!#BJ!!!ii$P3(3!G%0!G!!!@m!!!11!j(qe3[qe3!N-!!
|
||||||
|
3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d"d3!"E3!!!j%$P!(
|
||||||
|
5$!(5!!S!"$TPFR)!!J!!$3(2!!&[!!!!!!!!rY3,rY3!&$!!#(4PEA"`BA4S!!K
|
||||||
|
dC@e`8'&dD!)"c3!#!G-"e!d"d`!$53!#!jS$a2l6rY)"e3Vqd`!B,Q0[FQ9MFQ9
|
||||||
|
X+LSU+J!!!!!!!*!!!'jeE'`"rY)!!!B"e3!$rY%"eJ(A#[l4!!3+DfpME!d"eJ!
|
||||||
|
"E3!!!ji$SIl3#[l3!!3+B@aTB3B"e`!$rXm"f!(C#[l2!!3+D@jcD!d"f!!#0!!
|
||||||
|
!!k3$V2l1!GS+rXi!"!TMCQpX$3(D!!&[!!!$U!1VrXd,rXd!0$!!''p`C@jcFfa
|
||||||
|
TEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J(C!!2
|
||||||
|
qc!(ErXX+rX`!"!TdEb!J$3(E!!*Z!!!$V`1q!G`"h3d"h!!#0!!!!lF$[[l+!Gi
|
||||||
|
+rXS!"!TQD@aP$3(H!!&Y!!!$ZJ1p!Gm-!Gm!#`!&CA*b,QJ!!J!!$3(G!!)d!!!
|
||||||
|
$V`1hrXN"i!Vqb3!%#Q0QEf`0!H!!!@m!!!1c!lEqb![qb!!8-!!)G'9YF("KG'J
|
||||||
|
!#(4PEA"3BA4S"[l,!!!#!G3!!J(K!H)0!H%!!Q`!!J2&!mAqarl'!Il(!!!"rXB
|
||||||
|
!!!)"iJ!#!H-"j!d"i`!#FJ!!!m8$d!(P!HB0!H8!!Q)!!!2&!m`"j`(S$3(R!!&
|
||||||
|
[!!!$a32)rX8,rX8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"
|
||||||
|
KG'J0!HJ!!@d!!!2)!mX"k3`"k3!+!!3kCAC`!!)!!!d"jJ!"E`!!!!!!!2l%#rl
|
||||||
|
%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!H3!!J(U!HX0!HS!!dN!!J24!r[q`rl
|
||||||
|
#!H`+rX-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Il#!!!'!H`!!rl"!Hd
|
||||||
|
"lJVq`3!%#QY[Bf`0!Hd!!@d!!!29!pMq`!Vq`!!%#Q&XD@%'!Hi!!rkr!Hm"m!V
|
||||||
|
q[`!%#QPZFfJ0!Hm!!M3!!!2E!q2q[J(a#[kq!!3+BfC[E!d"m3!"E`!!!pm$i[k
|
||||||
|
p#rkp!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4
|
||||||
|
P4QpXC'9b8'&dD!B"m!!$rV`"m[kl#[km!!3+G'mJ)!d"mJ!#EJ!!!qB$p3(c!I3
|
||||||
|
0!I-!!M3!!!2Z!rAqZJ(e#[kk!!3+CQPXC3d"p3!"E3!!!r%$p!(f$!(f!!X!"@9
|
||||||
|
fF#jS!!)!!!d"p!!#0!!!!qB$l[kj!IF+rVN!"!TMCQpX$3(h!!&[!!!$kJ2YrVJ
|
||||||
|
,rVJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqZ`!!!J(V!!)"q!(j$3(i!!*X!!)
|
||||||
|
$r!2mrVIqYJ(qY`!!!Ikf!!!#!IN!!J(k!IX0!IS!!R)!!!2m"!F"r!(p$3(m!!*
|
||||||
|
L!!!$r!3$!Ii"r`d"rJ!"E`!!!r`$rrke#rke!#3`!""MFRP`G'pQEfaNCA*`BA4
|
||||||
|
S!""MFRP`G'p'EfaNCA*3BA4S$3(r!!&Y!!!$r`3#!J!-!J!!#`!&1QKYB@-!!J!
|
||||||
|
!$3(p!!&[!!!!!!!!rV3,rV3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)"q`!#!J%
|
||||||
|
#!Jd#!3!$53!#"!J%-[kcrV)#!`VqX`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'j
|
||||||
|
eE'`"rV)!!!B#!`!$rV%#"!)&#[ka!!3+DfpME!d#"!!"E3!!"!`%$rk`#[k`!!3
|
||||||
|
+B@aTB3B#"3!$rUm#"J)(#[k[!!3+D@jcD!d#"J!#0!!!"")%'[kZ!JJ+rUi!"!T
|
||||||
|
MCQpX$3))!!&[!!!%&J3CrUd,rUd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&
|
||||||
|
dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)(!!2qV!)*rUX+rU`!"!TdEb!
|
||||||
|
J$3)*!!*Z!!!%(33X!JS##`d##J!#0!!!"#8%,2kU!J`+rUS!"!TQD@aP$3)-!!&
|
||||||
|
Y!!!%+!3V!Jd-!Jd!$!!'D'eKBbjS!!)!!!d##`!#0!!!""d%*IkT!Ji+rUN!"!T
|
||||||
|
MCQpX$3)1!!&[!!!%)33NrUJ,rUJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EqU`!
|
||||||
|
!!J)#!!)#$`)3$3)2!!*X!!)%-`3crUIqTJ(qT`!!!IkQ!!!#!K!!!J)4!K)0!K%
|
||||||
|
!!R)!!!3c"$i#%`)8$3)6!!*L!!!%-`3k!K8#&Jd#&3!"E`!!"$-%0[kP#rkP!#3
|
||||||
|
`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3)@!!&Y!!!%0J3
|
||||||
|
j!KF-!KF!#`!&1QPNC@%!!J!!$3)8!!&[!!!!!!!!rU3,rU3!&$!!#(4PEA"`BA4
|
||||||
|
S!!KdC@e`8'&dD!)#%J!#!KJ#'3d#'!!$53!#"$m%DIkMrU)#'JVqS`!B,Q0[FQ9
|
||||||
|
MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rU)!!!B#'J!$rU%#'`)F#[kK!!3+DfpME!d
|
||||||
|
#'`!"E3!!"%-%4[kJ#[kJ!!3+B@aTB3B#(!!$rTm#(3)H#[kI!!3+D@jcD!d#(3!
|
||||||
|
#0!!!"%N%8IkH!Km+rTi!"!TMCQpX$3)I!!&[!!!%6343rTd,rTd!0$!!''p`C@j
|
||||||
|
cFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J)
|
||||||
|
H!!2qR!)JrTX+rT`!"!TdEb!J$3)J!!*Z!!!%9!4M!L%#)Jd#)3!#0!!!"&`%Brk
|
||||||
|
D!L-+rTS!"!TQD@aP$3)M!!&Y!!!%A`4L!L3-!L3!$!!'D@4PB5jS!!)!!!d#)J!
|
||||||
|
#0!!!"&3%A2kC!L8+rTN!"!TMCQpX$3)P!!&[!!!%@!4ErTJ,rTJ!&$!!#(4PEA"
|
||||||
|
`BA4S!!KdC@e`8'&dD!EqQ`!!!J)C!!)#*J)R$3)Q!!*X!!)%DJ4UrTIqPJ(qP`!
|
||||||
|
!!Ik@!!!#!LF!!J)S!LN0!LJ!!R)!!!4U"(8#+J)V$3)U!!*L!!!%DJ4a!L`#,3d
|
||||||
|
#,!!"E`!!"'S%EIk9#rk9!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'Efa
|
||||||
|
NCA*3BA4S$3)Y!!&Y!!!%E34`!Li-!Li!$!!'1QaSBA0S!!)!!!d#+`!"E`!!!!!
|
||||||
|
!!2k8#rk8!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!LN!!J)[!M!0!Lm!!dN!!J4
|
||||||
|
f"+$qNrk5!M%+rT-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ik5!!!'!M%
|
||||||
|
!!rk4!M)#-`VqN3!%#QY[Bf`0!M)!!@d!!!4k"(hqN!!+rT!!!!3+B@aTB3B#-`!
|
||||||
|
$rSm#0!)e#[k2!!3+D@jcD!d#0!!#0!!!")!%L2k1!MB+rSi!"!TMCQpX$3)f!!&
|
||||||
|
[!!!%K!5(rSd,rSd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP0
|
||||||
|
66%PZBfaeC'9'EfaNCA*3BA4S"J)e!!2qM!)hrSX+rS`!"!TdEb!J$3)h!!*Z!!!
|
||||||
|
%L`5D!MJ#13d#1!!#0!!!"*-%Q[k+!MS+rSS!"!TQD@aP$3)k!!&Y!!!%PJ5C!MX
|
||||||
|
-!MX!$3!(E'KKFfJZD!!#!!!0!MN!!M3!!!5,"*2qL3)m#[k*!!3+BfC[E!d#2!!
|
||||||
|
"E`!!")m%N[k)#rk)!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rSX!!!)#-!!#!Md
|
||||||
|
#2Jd#23!#E!!#"+%%SIk(rSB"rSF!!!(qKJ!!!J)q!!)#2`*!$3)r!!*b!!!%S35
|
||||||
|
X!N%#3Jd#33!#BJ!!"+%%U!*$!N30!N-!!@m!!!5K"+6qK3[qK3!N-!!3Bh*jF(4
|
||||||
|
[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d#4!!"E3!!"+3%T`*&$!*&!!S
|
||||||
|
!"$TYC$)!!J!!$3*#!!&[!!!!!!!!rS3,rS3!&$!!#(4PEA"`BA4S!!KdC@e`8'&
|
||||||
|
dD!)#3!!#!NB#4`d#4J!$53!#"+d%erk$rS)#5!VqJ`!B,Q0[FQ9MFQ9X+LSU+J!
|
||||||
|
!!!!!!*!!!'jeE'`"rS)!!!B#5!!$rS%#53*+#[k"!!3+DfpME!d#53!"E3!!",%
|
||||||
|
%Y2k!#[k!!!3+B@aTB3B#5J!$rRm#5`*-#[jr!!3+D@jcD!d#5`!#0!!!",F%[rj
|
||||||
|
q!Nd+rRi!"!TMCQpX$3*0!!&[!!!%Z`5qrRd,rRd!0$!!''p`C@jcFfaTEQ0XG@4
|
||||||
|
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*-!!2qI!*1rRX
|
||||||
|
+rR`!"!TdEb!J$3*1!!*Z!!!%`J64!Nm#8!d#6`!#0!!!"-S%dIjk!P%+rRS!"!T
|
||||||
|
QD@aP$3*4!!&Y!!!%c363!P)-!P)!#`!&E@3b,QJ!!J!!$3*3!!)d!!!%`J6+rRN
|
||||||
|
#8`VqH3!%#Q0QEf`0!P-!!@m!!!6'"-RqH![qH!!8-!!)G'9YF("KG'J!#(4PEA"
|
||||||
|
3BA4S"[jl!!!#!NF!!J*8!P80!P3!!Q`!!J6B"0MqGrjf!Ijh!!!"rRB!!!)#93!
|
||||||
|
#!PB#9`d#9J!#FJ!!"0J%i`*B!PN0!PJ!!Q)!!!6B"0m#@J*E$3*D!!&[!!!%f!6
|
||||||
|
ErR8,rR8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!PX
|
||||||
|
!!@d!!!6E"0i#A!`#A!!+!!3kE@3e!!)!!!d#@3!"E`!!!!!!!2jd#rjd!"3`!!K
|
||||||
|
dC@e`F'&dD!!)G'9YF&"KG'J#!PF!!J*G!Pi0!Pd!!dN!!J6N"3lqFrjb!Pm+rR-
|
||||||
|
!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ijb!!!'!Pm!!rja!Q!#B3VqF3!
|
||||||
|
%#QY[Bf`0!Q!!!@d!!!6S"1[qF!VqF!!%#Q&XD@%'!Q%!!rj[!Q)#B`VqE`!%#QP
|
||||||
|
ZFfJ0!Q)!!M3!!!6Z"2EqEJ*N#[jZ!!3+BfC[E!d#C!!"E`!!"2)%pIjY#rjY!$3
|
||||||
|
`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9
|
||||||
|
b8'&dD!B#B`!$rQ`#CIjV#[jX!!3+G'mJ)!d#C3!#EJ!!"2N&#!*Q!QF0!QB!!M3
|
||||||
|
!!!8""3MqDJ*S#[jU!!3+CQPXC3d#D!!"E3!!"33&"`*T$!*T!!X!"@eN05jS!!)
|
||||||
|
!!!d#C`!#0!!!"2N&!IjT!QS+rQN!"!TMCQpX$3*U!!&[!!!%r38!rQJ,rQJ!&$!
|
||||||
|
!#(4PEA"`BA4S!!KdC@e`8'&dD!EqD`!!!J*H!!)#D`*X$3*V!!*X!!)&$`82rQI
|
||||||
|
qCJ(qC`!!!IjQ!!!#!Q`!!J*Y!Qi0!Qd!!R)!!!82"4S#E`*`$3*[!!*L!!!&$`8
|
||||||
|
@!R%#FJd#F3!"E`!!"3m&%[jP#rjP!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP
|
||||||
|
`G'p'EfaNCA*3BA4S$3*b!!&Y!!!&%J89!R--!R-!#`!&1QeNBc)!!J!!$3*`!!&
|
||||||
|
[!!!!!!!!rQ3,rQ3!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)#EJ!#!R3#G3d#G!!
|
||||||
|
$53!#"4X&4IjMrQ)#GJVqB`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rQ)
|
||||||
|
!!!B#GJ!$rQ%#G`*i#[jK!!3+DfpME!d#G`!"E3!!"4m&)[jJ#[jJ!!3+B@aTB3B
|
||||||
|
#H!!$rPm#H3*k#[jI!!3+D@jcD!d#H3!#0!!!"58&,IjH!RX+rPi!"!TMCQpX$3*
|
||||||
|
l!!&[!!!&+38XrPd,rPd!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"
|
||||||
|
PEP066%PZBfaeC'9'EfaNCA*3BA4S"J*k!!2qA!*mrPX+rP`!"!TdEb!J$3*m!!*
|
||||||
|
Z!!!&-!8r!Rd#IJd#I3!#0!!!"6J&2rjD!Rm+rPS!"!TQD@aP$3*r!!&Y!!!&1`8
|
||||||
|
q!S!-!S!!$!!'E@4M-LjS!!)!!!d#IJ!#0!!!"6!&12jC!S%+rPN!"!TMCQpX$3+
|
||||||
|
"!!&[!!!&0!8hrPJ,rPJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq@`!!!J*e!!)
|
||||||
|
#JJ+$$3+#!!*X!!)&4J9'rPIq9J(q9`!!!Ij@!!!#!S-!!J+%!S80!S3!!R)!!!9
|
||||||
|
'"9%#KJ+($3+'!!*L!!!&4J90!SJ#L3d#L!!"E`!!"8B&5Ij9#rj9!#3`!""MFRP
|
||||||
|
`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3+*!!&Y!!!&539-!SS-!SS
|
||||||
|
!$J!)1QpLDQ9MG(-!!J!!$3+(!!&[!!!!!!!!rP3,rP3!&$!!#(4PEA"`BA4S!!K
|
||||||
|
dC@e`8'&dD!)#K3!#!SX#M!d#L`!$53!#"9)&I2j6rP)#M3Vq8`!B,Q0[FQ9MFQ9
|
||||||
|
X+LSU+J!!!!!!!*!!!'jeE'`"rP)!!!B#M3!$rP%#MJ+2#[j4!!3+DfpME!d#MJ!
|
||||||
|
"E3!!"9B&@Ij3#[j3!!3+B@aTB3B#M`!$rNm#N!!#N3Vq6`!%#QPZFfJ0!T!!!!)
|
||||||
|
d!!!&A!9NrNi#NJVq6J!%#Q0QEf`0!T)!!@m!!!9J"@2q63[q63!d-!!BEh"PER0
|
||||||
|
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!T%
|
||||||
|
!!rj-!T2q5`Vq6!!%#R4[)#!0!T-!!Qi!!!9R"AB#P!+9$3+8!!)d!!!&E`9frNS
|
||||||
|
#PJVq5J!%#QCTE'80!TB!!@d!!!9b"A8#P``#P`!2!!P[BQTPBh4c,QJ!!J!!$3+
|
||||||
|
9!!)d!!!&C`9[rNN#Q!Vq53!%#Q0QEf`0!TJ!!@m!!!9V"@lq5![q5!!8-!!)G'9
|
||||||
|
YF("KG'J!#(4PEA"3BA4S"[j,!!!#!S`!!J+C!TS0!TN!!Q`!!J9p"Ahq4rj'!Ij
|
||||||
|
(!!!"rNB!!!)#QJ!#!TX#R!d#Q`!#FJ!!"Ad&L!+G!Ti0!Td!!Q)!!!9p"B3#R`+
|
||||||
|
J$3+I!!&[!!!&I3@!rN8,rN8!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC
|
||||||
|
[E'4PFP"KG'J0!U!!!@d!!!@!"B-#S3`#S3!+!!3kF'9Y!!)!!!d#RJ!"E`!!!!!
|
||||||
|
!!2j%#rj%!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!T`!!J+L!U-0!U)!!dN!!J@
|
||||||
|
*"E2q3rj#!U3+rN-!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ij#!!!'!U3
|
||||||
|
!!rj"!U8#TJVq33!%#QY[Bf`0!U8!!@d!!!@0"C!!rN!+rN!!"!TKE'PK"J+Q!!2
|
||||||
|
q2`+R!UJ+rMm!"!TTER0S$3+R!!)d!!!&N`@ErMi#U3Vq2J!%#Q0QEf`0!UN!!@m
|
||||||
|
!!!@A"CVq23[q23!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
|
||||||
|
-5@jME(9NC8C[E'4PFP"KG'J'!UJ!!rim!UVq1`Vq2!!%#R4[)#!0!US!!Qi!!!@
|
||||||
|
H"Dd#U`+X$3+V!!)d!!!&TJ@YrMS#V3Vq1J!%#QCTE'80!Ud!!@d!!!@T"D`#VJ`
|
||||||
|
#VJ!,!!9`C@dZD!!#!!!0!U`!!M3!!!@H"DEq13+[#[ij!!3+BfC[E!d#V`!"E`!
|
||||||
|
!"D)&TIii#rii!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'rMX!!!)#S`!#!V!#X3d
|
||||||
|
#X!!$53!#"E3&h[ihrMB#XJVq0`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`
|
||||||
|
"rMB!!!B#XJ!$rM8#X`+d#[ie!!3+DfpME!d#X`!"E3!!"EJ&Zrid#[id!!3+B@a
|
||||||
|
TB3B#Y!!$rM-#Y3+f#[ic!!3+D@jcD!d#Y3!#0!!!"Ei&a[ib!VF+rM)!"!TMCQp
|
||||||
|
X$3+h!!&[!!!&`JA&rM%,rM%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!
|
||||||
|
BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J+f!!2q-!+irLm+rM!!"!TdEb!J$3+
|
||||||
|
i!!*Z!!!&b3AB!VN#ZJd#Z3!#0!!!"G%&f2iZ!VX+rLi!"!TQD@aP$3+l!!&Y!!!
|
||||||
|
&e!AA!V`-!V`!$!!'F'9Y-LjS!!)!!!d#ZJ!#0!!!"FN&dIiY!Vd+rLd!"!TMCQp
|
||||||
|
X$3+p!!&[!!!&c3A3rL`,rL`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq,`!!!J+
|
||||||
|
a!!)#[J+r$3+q!!*X!!)&h`AIrL[q+J(q+`!!!IiU!!!#!Vm!!J,!!X%0!X!!!R)
|
||||||
|
!!!AI"HS#`J,$$3,#!!*L!!!&h`AQ!X3#a3d#a!!"E`!!"Gm&i[iT#riT!#3`!""
|
||||||
|
MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,&!!&Y!!!&iJAP!XB
|
||||||
|
-!XB!$3!(1R"VBh-a-J!#!!!0!X-!!@m!!!!!!!$q+![q+!!8-!!)G'9YF("KG'J
|
||||||
|
!#(4PEA"3BA4S!J,"!!)#a`,)$3,(!!0*!!)&k`B9rLIq*J,*#[iR!"JZBfpbC@0
|
||||||
|
bC@`U+LSU!!!!!!!!N!!!ER9XE!(q*J!!"J,*!!2q*3,+!XX+rL8!"!TVEf0X$3,
|
||||||
|
+!!&Y!!!&l`AbrL3+rL3!"!TKE'PK"J,,!!2q)`,-!Xd+rL-!"!TTER0S$3,-!!)
|
||||||
|
d!!!&p3AprL)#cJVq)J!%#Q0QEf`0!Xi!!@m!!!Aj"Icq)3[q)3!d-!!BEh"PER0
|
||||||
|
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!Xd
|
||||||
|
!!riJ!Xrq(`Vq)!!%#R4[)#!0!Xm!!Qi!!!B!"Jm#d!,4$3,3!!)d!!!'#!B2rKi
|
||||||
|
#dJVq(J!%#QCTE'80!Y)!!@d!!!B,"Ji#d``#d`!1!!K`Df0c-6)ZD!!#!!!0!Y%
|
||||||
|
!!M3!!!B!"JMq(3,8#[iG!!3+BfC[E!d#e!!"E`!!"J3'"riF#riF!"3`!!KdC@e
|
||||||
|
`F'&dD!!)G'9YF&"KG'J'rKm!!!)#b!!#!Y8#eJd#e3!#E!!#"KB'&[iErKS"rKX
|
||||||
|
!!!(q'J!!!J,@!!)#e`,B$3,A!!*b!!!'&JBK!YN#fJd#f3!#BJ!!"KB'(3,E!Y`
|
||||||
|
0!YX!!@m!!!B@"KRq'3[q'3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4Qp
|
||||||
|
XC'9b8'&dD!d#h!!"E3!!"KN'(!,G$!,G!!`!"MT`Df0c0`!#!!!0!YS!!@m!!!!
|
||||||
|
!!!$q'![q'!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J,B!!)#hJ,I$3,H!!0*!!)
|
||||||
|
')JC-rKIq&J,J#[iA!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!(q&J!!"J,
|
||||||
|
J!!2q&3,K!Z)+rK8!"!TVEf0X$3,K!!&Y!!!'*JBTrK3+rK3!"!TKE'PK"J,L!!2
|
||||||
|
q%`,M!Z3+rK-!"!TTER0S$3,M!!)d!!!',!BdrK)#j3Vq%J!%#Q0QEf`0!Z8!!@m
|
||||||
|
!!!B`"M2q%3[q%3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0
|
||||||
|
-5@jME(9NC8C[E'4PFP"KG'J'!Z3!!ri3!ZEq$`Vq%!!%#R4[)#!0!ZB!!Qi!!!B
|
||||||
|
h"NB#j`,S$3,R!!)d!!!'2`C'rJi#k3Vq$J!%#QCTE'80!ZN!!@d!!!C#"N8#kJ`
|
||||||
|
#kJ!0!!G`Df0c0bjS!!)!!!d#k!!#0!!!"MF'2ri0!ZX+rJd!"!TMCQpX$3,V!!&
|
||||||
|
[!!!'1`BqrJ`,rJ`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eq$`!!!J,I!!)#l!,
|
||||||
|
Y$3,X!!*X!!)'63C0rJ[q#J(q#`!!!Ii+!!!#!Zd!!J,Z!Zm0!Zi!!R)!!!C0"PJ
|
||||||
|
#m!,a$3,`!!*L!!!'63C8![)#m`d#mJ!"E`!!"Nd'82i*#ri*!#3`!""MFRP`G'p
|
||||||
|
QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3,c!!&Y!!!'8!C6![3-![3!#`!
|
||||||
|
&1R*KEQ3!!J!!$3,a!!&[!!!!!!!!rJJ,rJJ!&$!!#(4PEA"`BA4S!!KdC@e`8'&
|
||||||
|
dD!)#l`!#![8#pJd#p3!$53!#"PN'Jri(rJB#p`Vq"`!B,Q0[FQ9MFQ9X+LSU+J!
|
||||||
|
!!!!!!*!!!'jeE'`"rJB!!!B#p`!$rJ8#q!,j#[i&!!3+DfpME!d#q!!"E3!!"Pd
|
||||||
|
'B2i%#[i%!!3+B@aTB3B#q3!$rJ-#qJ,l#[i$!!3+D@jcD!d#qJ!#0!!!"Q-'Dri
|
||||||
|
#![`+rJ)!"!TMCQpX$3,m!!&[!!!'C`CUrJ%,rJ%!0$!!''p`C@jcFfaTEQ0XG@4
|
||||||
|
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J,l!!2q!!,prIm
|
||||||
|
+rJ!!"!TdEb!J$3,p!!*Z!!!'EJCp![i#r`d#rJ!#0!!!"RB'IIhq!`!+rIi!"!T
|
||||||
|
QD@aP$3-!!!&Y!!!'H3Cm!`%-!`%!$!!'FQ&ZC#jS!!)!!!d#r`!#0!!!"Qi'G[h
|
||||||
|
p!`)+rId!"!TMCQpX$3-#!!&[!!!'FJCerI`,rI`!&$!!#(4PEA"`BA4S!!KdC@e
|
||||||
|
`8'&dD!Epr`!!!J,f!!)$!`-%$3-$!!*X!!)'K!D%rI[pqJ(pq`!!!Ihk!!!#!`3
|
||||||
|
!!J-&!`B0!`8!!R)!!!D%"Sm$"`-)$3-(!!*L!!!'K!D,!`N$#Jd$#3!"E`!!"S3
|
||||||
|
'Krhj#rhj!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-
|
||||||
|
+!!&Y!!!'K`D+!`X-!`X!#J!%1R*M-J!#!!!0!`J!!@m!!!!!!!$pq![pq!!8-!!
|
||||||
|
)G'9YF("KG'J!#(4PEA"3BA4S!J-'!!)$$!-0$3--!!0*!!)'N!!'Z[hhrIB$$JV
|
||||||
|
pp`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rIB!!!B$$J!$rI8$$`-3#[h
|
||||||
|
e!!3+DfpME!d$$`!"E3!!"T3'Prhd#[hd!!3+B@aTB3B$%!!$rI-$%3-5#[hc!!3
|
||||||
|
+D@jcD!d$%3!#0!!!"TS'S[hb!a-+rI)!"!TMCQpX$3-6!!&[!!!'RJDKrI%,rI%
|
||||||
|
!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
|
||||||
|
NCA*3BA4S"J-5!!2pm!-8rHm+rI!!"!TdEb!J$3-8!!*Z!!!'T3Dd!a8$&Jd$&3!
|
||||||
|
#0!!!"Ud'Y2hZ!aF+rHi!"!TQD@aP$3-A!!&Y!!!'X!Dc!aJ-!aJ!#`!&FQ-b,QJ
|
||||||
|
!!J!!$3-@!!)d!!!'T3DYrHd$'3Vpl3!%#Q0QEf`0!aN!!@m!!!DT"Ucpl![pl!!
|
||||||
|
8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[h[!!!#!`d!!J-D!aX0!aS!!Q`!!JDl"V[
|
||||||
|
pkrhU!IhV!!!"rHS!!!)$'`!#!a`$(3d$(!!#FJ!!"VX'aJ-H!am0!ai!!Q)!!!D
|
||||||
|
l"X)$)!-K$3-J!!&[!!!'Z`DqrHN,rHN!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0
|
||||||
|
bHA"dEdC[E'4PFP"KG'J0!b%!!@d!!!Dq"X%$)J`$)J!+!!3kFQ-d!!)!!!d$(`!
|
||||||
|
"E`!!!!!!!2hS#rhS!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!ad!!J-M!b30!b-
|
||||||
|
!!dN!!JE("[(pjrhQ!b8+rHF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"ZG@aX!Ih
|
||||||
|
Q!!!'!b8!!rhP!bB$*`Vpj3!%#QY[Bf`0!bB!!@d!!!E,"Xlpj!Vpj!!%#Q&XD@%
|
||||||
|
'!bF!!rhM!bJ$+3Vpi`!%#QPZFfJ0!bJ!!M3!!!E4"YRpiJ-U#[hL!!3+BfC[E!d
|
||||||
|
$+J!"E`!!"Y8'f2hK#rhK!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p
|
||||||
|
`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$+3!$rH!$+rhI#[hJ!!3+G'mJ)!d$+`!
|
||||||
|
#EJ!!"Y`'k`-X!bd0!b`!!M3!!!EN"Z[phJ-Z#[hH!!3+CQPXC3d$,J!"E3!!"ZF
|
||||||
|
'kJ-[$!-[!!X!"A*M0#jS!!)!!!d$,3!#0!!!"Y`'j2hG!c!+rGd!"!TMCQpX$3-
|
||||||
|
`!!&[!!!'i!EMrG`,rG`!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!Eph`!!!J-N!!)
|
||||||
|
$-3-b$3-a!!*X!!)'mJEbrG[pfJ(pf`!!!IhD!!!#!c)!!J-c!c30!c-!!R)!!!E
|
||||||
|
b"[d$03-f$3-e!!*L!!!'mJEj!cF$1!d$0`!"E`!!"[)'pIhC#rhC!#3`!""MFRP
|
||||||
|
`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$3-i!!&Y!!!'p3Ei!cN-!cN
|
||||||
|
!#J!%1R*M03!#!!!0!cB!!@m!!!!!!!$pf![pf!!8-!!)G'9YF("KG'J!#(4PEA"
|
||||||
|
3BA4S!J-d!!)$1J-l$3-k!!0*!!)'rJFSrGIpeJ-m#[hA!"JZBfpbC@0bC@`U+LS
|
||||||
|
U!!!!!!!!N!!!ER9XE!(peJ!!"J-m!!2pe3-p!ci+rG8!"!TVEf0X$3-p!!&Y!!!
|
||||||
|
(!JF&rG3+rG3!"!TKE'PK"J-q!!2pd`-r!d!+rG-!"!TTER0S$3-r!!)d!!!(#!F
|
||||||
|
3rG)$33VpdJ!%#Q0QEf`0!d%!!@m!!!F-"`rpd3[pd3!d-!!BEh"PER0cE'PZBfa
|
||||||
|
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!d!!!rh3!d,
|
||||||
|
pc`Vpd!!%#R4[)#!0!d)!!Qi!!!F6"b)$3`0%$30$!!)d!!!('`FLrFi$43VpcJ!
|
||||||
|
%#QCTE'80!d8!!@d!!!FH"b%$4J`$4J!,!!9bBc8ZD!!#!!!0!d3!!M3!!!F6"a[
|
||||||
|
pc30(#[h0!!3+BfC[E!d$4`!"E`!!"aF('[h-#rh-!"3`!!KdC@e`F'&dD!!)G'9
|
||||||
|
YF&"KG'J'rFm!!!)$1`!#!dJ$53d$5!!#E!!#"bN(+Ih,rFS"rFX!!!(pbJ!!!J0
|
||||||
|
*!!)$5J0,$30+!!*b!!!(+3Fd!d`$63d$6!!#BJ!!"bN(-!01!dm0!di!!@m!!!F
|
||||||
|
T"bcpb3[pb3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d
|
||||||
|
$6`!"E3!!"b`(,`03$!03!!d!"cTbDA"PE@3!!J!!$300!!&[!!!!!!!!rFJ,rFJ
|
||||||
|
!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$5`!#!e%$8Jd$83!$53!#"c8(Arh(rFB
|
||||||
|
$8`Vpa`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rFB!!!B$8`!$rF8$9!0
|
||||||
|
9#[h&!!3+DfpME!d$9!!"E3!!"cN(22h%#[h%!!3+B@aTB3B$93!$rF-$9J0A#[h
|
||||||
|
$!!3+D@jcD!d$9J!#0!!!"cm(4rh#!eJ+rF)!"!TMCQpX$30B!!&[!!!(3`G'rF%
|
||||||
|
,rF%!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
|
||||||
|
'EfaNCA*3BA4S"J0A!!2p`!0CrEm+rF!!"!TdEb!J$30C!!*Z!!!(5JGC!eS$@`d
|
||||||
|
$@J!#0!!!"e)(@Ifq!e`+rEi!"!TQD@aP$30F!!&Y!!!(93GB!ed-!ed!$J!)FQP
|
||||||
|
`C@eN,QJ!!J!!$30E!!)d!!!(5JG5rEd$AJVp[3!%#Q0QEf`0!ei!!@m!!!G1"e(
|
||||||
|
p[![p[!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[fr!!!#!e)!!J0I!f!0!em!!Q`
|
||||||
|
!!JGJ"f$pZrfk!Ifl!!!"rES!!!)$B!!#!f%$BJd$B3!#FJ!!"f!(D`0M!f30!f-
|
||||||
|
!!Q)!!!GJ"fF$C30Q$30P!!&[!!!(B!GMrEN,rEN!*$!!%'0bHA"dEfC[E'4PFR"
|
||||||
|
KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!fB!!@d!!!GM"fB$C``$C`!+!!3kFR0K!!)
|
||||||
|
!!!d$C!!"E`!!!!!!!2fi#rfi!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J#!f)!!J0
|
||||||
|
S!fN0!fJ!!dN!!JGX"jEpYrff!fS+rEF!'#jMEh*PBh*PE#SU+LS!!!!!!!#3!!"
|
||||||
|
ZG@aX!Iff!!!'!fS!!rfe!fX$E!VpY3!%#QY[Bf`0!fX!!@d!!!G`"h2pY!VpY!!
|
||||||
|
%#Q&XD@%'!f`!!rfc!fd$EJVpX`!%#QPZFfJ0!fd!!M3!!!Gf"hlpXJ0[#[fb!!3
|
||||||
|
+BfC[E!d$E`!"E`!!"hS(IIfa#rfa!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4PFR"
|
||||||
|
KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B$EJ!$rE!$F2f[#[f`!!3+G'm
|
||||||
|
J)!d$F!!#EJ!!"i%(N!!$F30b$30a!!)d!!!(L3H3!2fZ!h-+rDi!"!TQD@aP$30
|
||||||
|
c!!&Y!!!(M!H2!h3-!h3!#`!&FR0K,QJ!!J!!$30b!!)d!!!(J3H*rDd$G3VpV3!
|
||||||
|
%#Q0QEf`0!h8!!@m!!!H&"iMpV![pV!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[f
|
||||||
|
[!!!#!fN!!J0f!hF0!hB!!Q`!!JHA"jIpUrfU!IfV!!!"rDS!!!)$G`!#!hJ$H3d
|
||||||
|
$H!!#FJ!!"jF(SJ0k!hX0!hS!!Q)!!!HA"ji$I!0p$30m!!&[!!!(P`HDrDN,rDN
|
||||||
|
!*$!!%'0bHA"dEfC[E'4PFR"KG'J!%'0bHA"dEdC[E'4PFP"KG'J0!hd!!@d!!!H
|
||||||
|
D"jd$IJ`$IJ!-!!BkFh4KBfX!!J!!$30l!!&[!!!!!!!!rDJ,rDJ!&$!!#(4PEA"
|
||||||
|
`BA4S!!KdC@e`8'&dD!)$H3!#!hm$J!d$I`!$53!#"k-(cIfRrDB$J3VpT`!B,Q0
|
||||||
|
[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rDB!!!B$J3!$rD8$JJ1$#[fP!!3+Dfp
|
||||||
|
ME!d$JJ!"E3!!"kF(U[fN#[fN!!3+B@aTB3B$J`!$rD-$K!1&#[fM!!3+D@jcD!d
|
||||||
|
$K!!#0!!!"kd(YIfL!iB+rD)!"!TMCQpX$31'!!&[!!!(X3HdrD%,rD%!0$!!''p
|
||||||
|
`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4
|
||||||
|
S"J1&!!2pS!1(rCm+rD!!"!TdEb!J$31(!!*Z!!!(Z!I(!iJ$L3d$L!!#0!!!"m!
|
||||||
|
(arfH!iS+rCi!"!TQD@aP$31+!!&Y!!!(``I'!iX-!iX!$3!(Fh4KBfXZD!!#!!!
|
||||||
|
0!iN!!M3!!!Hi"m$pR31-#[fG!!3+BfC[E!d$M!!"E`!!"l`([rfF#rfF!"3`!!K
|
||||||
|
dC@e`F'&dD!!)G'9YF&"KG'J'rCm!!!)$J!!#!id$MJd$M3!$53!#"mi(q2fErCS
|
||||||
|
$M`VpQ`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rCS!!!B$M`!$rCN$N!!
|
||||||
|
$N3VpQ3!%#QY[Bf`0!j!!!!&Y!!!(dJI9rCJ+rCJ!"!TKE'PK"J14!!2pP`15!j-
|
||||||
|
+rCF!"!TTER0S$315!!)d!!!(f!IJrCB$P!VpPJ!%#Q0QEf`0!j3!!@m!!!IF"pr
|
||||||
|
pP3[pP3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
|
||||||
|
NC8C[E'4PFP"KG'J'!j-!!rf8!jApN`VpP!!%#R4[)#!0!j8!!Qi!!!IM"r)$PJ1
|
||||||
|
A$31@!!)d!!!(k`IbrC)$Q!VpNJ!%#QCTE'80!jJ!!@d!!!IZ"r%$Q3`$Q3!4!!Y
|
||||||
|
cB@CPFh4KBfXZD!!#!!!0!jF!!M3!!!IM"q[pN31D#[f4!!3+BfC[E!d$QJ!"E`!
|
||||||
|
!"qF(k[f3!![pN!!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!EpN`!!!J11!!)$Q`1
|
||||||
|
F$31E!!*X!!)(q3IjrBrpMJ(pM`!!!If1!!!#!j`!!J1G!ji0!jd!!R)!!!Ij#!3
|
||||||
|
$R`1J$31I!!*L!!!(q3J!!k%$SJd$S3!"E`!!"rN(r2f0#rf0!#3`!""MFRP`G'p
|
||||||
|
QEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S$31L!!&Y!!!(r!Ir!k--!k-!#J!
|
||||||
|
%1R0SB3!#!!!0!k!!!@m!!!!!!!$pM![pM!!8-!!)G'9YF("KG'J!#(4PEA"3BA4
|
||||||
|
S!J1H!!)$T!1P$31N!!0*!!))"3J[rB[pLJ1Q#[f,!"JZBfpbC@0bC@`U+LSU!!!
|
||||||
|
!!!!!N!!!ER9XE!(pLJ!!"J1Q!!2pL31R!kJ+rBN!"!TVEf0X$31R!!&Y!!!)#3J
|
||||||
|
-rBJ+rBJ!"!TKE'PK"J1S!!2pK`1T!kS+rBF!"!TTER0S$31T!!)d!!!)$`JArBB
|
||||||
|
$U`VpKJ!%#Q0QEf`0!kX!!@m!!!J6#"EpK3[pK3!d-!!BEh"PER0cE'PZBfaeC'9
|
||||||
|
QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!kS!!rf%!kcpJ`V
|
||||||
|
pK!!%#R4[)#!0!k`!!Qi!!!JD##N$V31Z$31Y!!)d!!!))JJTrB)$V`VpJJ!%#QC
|
||||||
|
TE'80!km!!@d!!!JP##J$X!`$X!!,!!9cD'%ZD!!#!!!0!ki!!M3!!!JD##,pJ31
|
||||||
|
a#[f"!!3+BfC[E!d$X3!"E`!!#"i))If!#rf!!"3`!!KdC@e`F'&dD!!)G'9YF&"
|
||||||
|
KG'J'rB-!!!)$T3!#!l)$X`d$XJ!#E!!##$!)-2errAi"rAm!!!(pIJ!!!J1c!!)
|
||||||
|
$Y!1e$31d!!*b!!!)-!Jl!lB$Y`d$YJ!#BJ!!#$!)0`1i!lN0!lJ!!@m!!!J`#$2
|
||||||
|
pI3[pI3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD!d$Z3!
|
||||||
|
"E3!!#$-)0J1k$!1k!!d!"cTdH(4IC')!!J!!$31h!!&[!!!!!!!!rA`,rA`!&$!
|
||||||
|
!#(4PEA"`BA4S!!KdC@e`8'&dD!)$Y3!#!lX$[!d$Z`!$53!##$`)C[elrAS$[3V
|
||||||
|
pH`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"rAS!!!B$[3!$rAN$[J1r#[e
|
||||||
|
j!!3+DfpME!d$[J!"E3!!#%!)3rei#[ei!!3+B@aTB3B$[`!$rAF$`!2"#[eh!!3
|
||||||
|
+D@jcD!d$`!!#0!!!#%B)6[ef!m)+rAB!"!TMCQpX$32#!!&[!!!)5JK0rA8,rA8
|
||||||
|
!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'Efa
|
||||||
|
NCA*3BA4S"J2"!!2pG!2$rA-+rA3!"!TdEb!J$32$!!*Z!!!)83KJ!m3$a3d$a!!
|
||||||
|
#0!!!#&N)B2eb!mB+rA)!"!TQD@aP$32'!!&Y!!!)A!KI!mF-!mF!$J!)G(KdAf4
|
||||||
|
L,QJ!!J!!$32&!!)d!!!)83KCrA%$b!VpF3!%#Q0QEf`0!mJ!!@m!!!K9#&MpF![
|
||||||
|
pF!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[ec!!!#!l`!!J2*!mS0!mN!!Q`!!JK
|
||||||
|
R#'IpEreZ!Ie[!!!"r@i!!!)$bJ!#!mX$c!d$b`!#FJ!!#'F)FJ20!mi0!md!!Q)
|
||||||
|
!!!KR#'i$c`23$322!!&[!!!)C`KUr@d,r@d!*$!!%'0bHA"dEfC[E'4PFR"KG'J
|
||||||
|
!%'0bHA"dEdC[E'4PFP"KG'J0!p!!!@d!!!KU#'d$d3`$d3!,!!8kH$8`13!#!!!
|
||||||
|
0!mi!!@m!!!!!!!$pE![pE!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!J2-!!)$dJ2
|
||||||
|
6$325!!0*!!))F`LGr@[pDJ28#[eV!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
|
||||||
|
XE!(pDJ!!"J28!!2pD329!pB+r@N!"!TVEf0X$329!!&Y!!!)G`Kkr@J+r@J!"!T
|
||||||
|
KE'PK"J2@!!2pC`2A!pJ+r@F!"!TTER0S$32A!!)d!!!)I3L&r@B$f3VpCJ!%#Q0
|
||||||
|
QEf`0!pN!!@m!!!L"#)6pC3[pC3!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
|
||||||
|
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'!pJ!!reN!pVpB`VpC!!%#R4[)#!
|
||||||
|
0!pS!!Qi!!!L)#*F$f`2F$32E!!)d!!!)N!!)PreL!pd+r@)!"!TQD@aP$32G!!&
|
||||||
|
Y!!!)N`L@!pi-!pi!$!!'H$8`15jS!!)!!!d$h!!#0!!!#)J)N!$pB32I#[eK!!3
|
||||||
|
+BfC[E!d$h`!"E`!!#)`)MreJ#reJ!"3`!!KdC@e`F'&dD!!)G'9YF&"KG'J'r@-
|
||||||
|
!!!)$d`!#!q!$i3d$i!!$53!##*i)b2eIr9i$iJVpA`!B,Q0[FQ9MFQ9X+LSU+J!
|
||||||
|
!!!!!!*!!!'jeE'`"r9i!!!B$iJ!$r9d$i`2N#[eG!!3+DfpME!d$i`!"E3!!#+)
|
||||||
|
)TIeF#[eF!!3+B@aTB3B$j!!$r9X$j32Q#[eE!!3+D@jcD!d$j3!#0!!!#+J)X2e
|
||||||
|
D!qF+r9S!"!TMCQpX$32R!!&[!!!)V!L[r9N,r9N!0$!!''p`C@jcFfaTEQ0XG@4
|
||||||
|
PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J2Q!!2p@!2Sr9F
|
||||||
|
+r9J!"!TdEb!J$32S!!*Z!!!)X`M#!qN$kJd$k3!#0!!!#,X)`[e@!qX+r9B!"!T
|
||||||
|
QD@aP$32V!!&Y!!!)[JM"!q`-!q`!%!!+H$8`19pfCRNZD!!#!!!0!qS!!M3!!!L
|
||||||
|
c#,[p932Y#[e9!!3+BfC[E!d$l3!"E`!!#,F)Z[e8#re8!"3`!!KdC@e`F'&dD!!
|
||||||
|
)G'9YF&"KG'J'r9F!!!)$i3!#!qi$l`d$lJ!#E!!##-N)bIe6r9)"r9-!!!(p8J!
|
||||||
|
!!J2[!!)$m!2a$32`!!*b!!!)b3M8!r)$m`d$mJ!#BJ!!#-N)d!2d!r80!r3!!@m
|
||||||
|
!!!M*#-cp83[p83!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&
|
||||||
|
dD!d$p3!"E3!!#-`)c`2f$!2f!!d!"cTi06!jGM-!!J!!$32c!!&[!!!!!!!!r9!
|
||||||
|
,r9!!&$!!#(4PEA"`BA4S!!KdC@e`8'&dD!)$m3!#!rF$q!d$p`!$53!##08)rre
|
||||||
|
2r8i$q3Vp6`!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8i!!!B$q3!$r8d
|
||||||
|
$qJ2l#[e0!!3+DfpME!d$qJ!"E3!!#0N)h2e-#[e-!!3+B@aTB3B$q`!$r8X$r!2
|
||||||
|
p#[e,!!3+D@jcD!d$r!!#0!!!#0m)jre+!ri+r8S!"!TMCQpX$32q!!&[!!!)i`M
|
||||||
|
Qr8N,r8N!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfa
|
||||||
|
eC'9'EfaNCA*3BA4S"J2p!!2p5!2rr8F+r8J!"!TdEb!J$32r!!*Z!!!)kJMj"!!
|
||||||
|
%!3d%!!!#0!!!#2))qIe'"!)+r8B!"!TQD@aP$33#!!&Y!!!)p3Mi"!--"!-!$J!
|
||||||
|
)H$8`1ABc,QJ!!J!!$33"!!)d!!!)kJMbr88%"!Vp43!%#Q0QEf`0"!3!!@m!!!M
|
||||||
|
Z#2(p4![p4!!8-!!)G'9YF("KG'J!#(4PEA"3BA4S"[e(!!!#!rJ!!J3&"!B0"!8
|
||||||
|
!!Q`!!JN!#3$p3re#!Ie$!!!"r8)!!!)%"J!#"!F%#!d%"`!$53!##3!*+[e"r8!
|
||||||
|
%#3Vp33!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r8!!!!B%#3!$r6m%#J3
|
||||||
|
,#[dr!!3+DfpME!d%#J!"E3!!#33*"rdq#[dq!!3+B@aTB3B%#`!$r6d%$!30#[d
|
||||||
|
p!!3+D@jcD!d%$!!#0!!!#3S*%[dm"!i+r6`!"!TMCQpX$331!!&[!!!*$JN4r6X
|
||||||
|
,r6X!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9
|
||||||
|
'EfaNCA*3BA4S"J30!!2p1J32r6N+r6S!"!TdEb!J$332!!*Z!!!*&3NN""!%%3d
|
||||||
|
%%!!#0!!!#4d**2di"")+r6J!"!TQD@aP$335!!&Y!!!*)!NM""--""-!#`!&Fh0
|
||||||
|
X,QJ!!J!!$334!!)d!!!*&3NGr6F%&!Vp0`!%#Q0QEf`0""3!!@m!!!NC#4cp0J[
|
||||||
|
p0J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD!Ep13!!!J3)!!)%&33
|
||||||
|
@$339!!0*!!)*+`P9r6Ap0!3A#[de!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9
|
||||||
|
XE!(p0!!!"J3A!!2p-`3B""N+r6-!"!TVEf0X$33B!!&Y!!!*,`Nbr6)+r6)!"!T
|
||||||
|
KE'PK"J3C!!2p-33D""X+r6%!"!TTER0S$33D!!)d!!!*03Npr6!%(!Vp-!!%#Q0
|
||||||
|
QEf`0""`!!@m!!!Nj#6cp,`[p,`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4
|
||||||
|
S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'""X!!rdZ""hp,3Vp,J!%#R4[)#!
|
||||||
|
0""d!!Qi!!!P!#8m%(J3I$33H!!)d!!!*5!P2r5`%)!Vp,!!%#QCTE'80"#!!!@d
|
||||||
|
!!!P,#8i%)3`%)3!-!!CcFf`b,QJ!!J!!$33I!!)d!!!*3!P)r5X%)JVp+`!%#Q0
|
||||||
|
QEf`0"#)!!@m!!!P%#8Ip+J[p+J!H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9
|
||||||
|
b8'&dD!Ep,3!!!J3@!!)%)`3N$33M!!0*!!)*9JQ!r5Rp+!3P#[dT!"JZBfpbC@0
|
||||||
|
bC@`U+LSU!!!!!!!!N!!!ER9XE!(p+!!!"J3P!!2p*`3Q"#F+r5F!"!TVEf0X$33
|
||||||
|
Q!!&Y!!!*@JPGr5B+r5B!"!TKE'PK"J3R!!2p*33S"#N+r58!"!TTER0S$33S!!)
|
||||||
|
d!!!*B!PSr53%+JVp*!!%#Q0QEf`0"#S!!@m!!!PN#@Ip)`[p)`!d-!!BEh"PER0
|
||||||
|
cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"#N
|
||||||
|
!!rdL"#[p)3Vp)J!%#R4[)#!0"#X!!Qi!!!PV#AS%,!3Y$33X!!)d!!!*F`Pkr5!
|
||||||
|
%,JVp)!!%#QCTE'80"#i!!@d!!!Pf#AN%,``%,`!0!!GcFf`b-bjS!!)!!!d%,3!
|
||||||
|
#0!!!#@X*FrdI"$!+r4m!"!TMCQpX$33`!!&[!!!*E`Pbr4i,r4i!(M!!$A0cE'C
|
||||||
|
[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r5%!!!)%*!!#"$%%-Jd%-3!$53!##B%
|
||||||
|
*UrdGr4`%-`Vp(3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r4`!!!B%-`!
|
||||||
|
$r4X%0!3e#[dE!!3+DfpME!d%0!!"E3!!#B8*L2dD#[dD!!3+B@aTB3B%03!$r4N
|
||||||
|
%0J3h#[dC!!3+D@jcD!d%0J!#0!!!#BX*NrdB"$J+r4J!"!TMCQpX$33i!!&[!!!
|
||||||
|
*M`Q5r4F,r4F!0$!!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%P
|
||||||
|
ZBfaeC'9'EfaNCA*3BA4S"J3h!!2p&J3jr48+r4B!"!TdEb!J$33j!!*Z!!!*PJQ
|
||||||
|
P"$S%1`d%1J!#0!!!#Ci*TId8"$`+r43!"!TQD@aP$33m!!&Y!!!*S3QN"$d-"$d
|
||||||
|
!$!!'Fh0X-bjS!!)!!!d%1`!#0!!!#CB*R[d6"$i+r4-!"!TMCQpX$33q!!&[!!!
|
||||||
|
*QJQGr4),r4)!(M!!$A0cE'C[E'4PFR"KG'J!$A0cE%C[E'4PFP"KG'J'r48!!!)
|
||||||
|
%-J!#"$m%3!d%2`!$53!##D`*e[d4r4!%33Vp%3!B,Q0[FQ9MFQ9X+LSU+J!!!!!
|
||||||
|
!!*!!!'jeE'`"r4!!!!B%33!$r3m%3J4$#[d2!!3+DfpME!d%3J!"E3!!#E!*Xrd
|
||||||
|
1#[d1!!3+B@aTB3B%3`!$r3d%4!4&#[d0!!3+D@jcD!d%4!!#0!!!#EB*[[d-"%B
|
||||||
|
+r3`!"!TMCQpX$34'!!&[!!!*ZJQpr3X,r3X!0$!!''p`C@jcFfaTEQ0XG@4PCQp
|
||||||
|
XC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*3BA4S"J4&!!2p#J4(r3N+r3S
|
||||||
|
!"!TdEb!J$34(!!*Z!!!*`3R3"%J%53d%5!!#0!!!#FN*d2d)"%S+r3J!"!TQD@a
|
||||||
|
P$34+!!&Y!!!*c!R2"%X-"%X!$!!'G'ac-5jS!!)!!!d%53!#0!!!#F%*bId("%`
|
||||||
|
+r3F!"!TMCQpX$34-!!&[!!!*a3R)r3B,r3B!(M!!$A0cE'C[E'4PFR"KG'J!$A0
|
||||||
|
cE%C[E'4PFP"KG'J'r3N!!!)%3!!#"%d%6Jd%63!#E!!##GF*erd&r33"r38!!!(
|
||||||
|
p"!!!!J41!!)%6`43$342!!0*!!)*e`S"r32p!J44#[d$!"JZBfpbC@0bC@`U+LS
|
||||||
|
U!!!!!!!!N!!!ER9XE!(p!J!!"J44!!2p!345"&-+r3%!"!TVEf0X$345!!&Y!!!
|
||||||
|
*f`RHr3!+r3!!"!TKE'PK"J46!!2mr`48"&8+r2m!"!TTER0S$348!!)d!!!*i3R
|
||||||
|
Tr2i%9JVmrJ!%#Q0QEf`0"&B!!@m!!!RP#HMmr3[mr3!d-!!BEh"PER0cE'PZBfa
|
||||||
|
eC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9NC8C[E'4PFP"KG'J'"&8!!rcm"&I
|
||||||
|
mq`Vmr!!%#R4[)#!0"&F!!Qi!!!RX#IX%@!4C$34B!!)d!!!*p!Rlr2S%@JVmqJ!
|
||||||
|
%#QCTE'80"&S!!@d!!!Rh#IS%@``%@`!1!!KMFRP`G'mZD!!#!!!0"&N!!M3!!!R
|
||||||
|
X#I6mq34F#[cj!!3+BfC[E!d%A!!"E`!!#I!*mrci#rci!#3`!""MFRP`G'pQEfa
|
||||||
|
NCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cl!!!#"&!!!J4G"&i0"&d!!Q`!!JS
|
||||||
|
##J,mprcf!Ich!!!"r2B!!!)%AJ!#"&m%B!d%A`!$53!##J)+,2cer23%B3Vmp3!
|
||||||
|
B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r23!!!B%B3!$r2-%BJ4M#[cc!!3
|
||||||
|
+DfpME!d%BJ!"E3!!#JB+#Icb#[cb!!3+B@aTB3B%B`!$r2%%C!4P#[ca!!3+D@j
|
||||||
|
cD!d%C!!#0!!!#J`+&2c`"'B+r2!!"!TMCQpX$34Q!!&[!!!+%!S6r1m,r1m!0$!
|
||||||
|
!''p`C@jcFfaTEQ0XG@4PCQpXC'9bF'&dD!!BEh"PEP066%PZBfaeC'9'EfaNCA*
|
||||||
|
3BA4S"J4P!!2mlJ4Rr1d+r1i!"!TdEb!J$34R!!*Z!!!+&`SQ"'J%D3d%D!!#0!!
|
||||||
|
!#Km+*[cX"'S+r1`!"!TQD@aP$34U!!&Y!!!+)JSP"'X-"'X!%!!+Eh"PER0cE(B
|
||||||
|
ZD!!#!!!0"'N!!M3!!!SA#Krmk`4X#[cV!!3+BfC[E!d%E!!"E`!!#KX+([cU#rc
|
||||||
|
U!#3`!""MFRP`G'pQEfaNCA*`BA4S!""MFRP`G'p'EfaNCA*3BA4S"[cY!!!#"'!
|
||||||
|
!!J4Y"'i0"'d!!dN!!JSY#PImkIcS"'m+r1N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
|
||||||
|
3!!"ZG@aX!IcS!!!'"'m!!rcR"(!%F3Vmj`!%#QY[Bf`0"(!!!@d!!!Sa#M6mjJV
|
||||||
|
mjJ!%#Q&XD@%'"(%!!rcP"()%F`Vmj3!%#QPZFfJ0"()!!M3!!!Sh#Mrmj!4d#[c
|
||||||
|
N!!3+BfC[E!d%G!!"E`!!#MX+2[cM#rcM!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
|
||||||
|
PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%F`!$r1)%GIcK#[cL!!3
|
||||||
|
+G'mJ)!d%G3!#EJ!!#N)+834f"(F0"(B!!M3!!!T+#P(mi!4i#[cJ!!3+CQPXC3d
|
||||||
|
%H!!"E3!!#Nd+8!4j$!4j!!i!#(4YC'PQCLjS!!)!!!d%G`!#0!!!#N)+5[cI"(S
|
||||||
|
+r0m!"!TMCQpX$34k!!&[!!!+4JT*r0i,r0i!*$!!%'0bHA"dEfC[E'4PFR"KG'J
|
||||||
|
!%'0bHA"dEdC[E'4PFP"KG'J'r1%!!!)%EJ!#"(X%I!d%H`!#E!!##PJ+@2cGr0`
|
||||||
|
"r0d!!!(mh!!!!J4m!!)%I34q$34p!!*X!!)+@!TBr0[mfJ(mf`!!!IcD!!!#"(i
|
||||||
|
!!J4r")!0"(m!!dN!!JTB#S,mfIcB")%+r0N!'#jMEh*PBh*PE#SU+LS!!!!!!!#
|
||||||
|
3!!"ZG@aX!IcB!!!'")%!!rcA"))%J`Vme`!%#QY[Bf`0"))!!@d!!!TF#PrmeJV
|
||||||
|
meJ!%#Q&XD@%'")-!!rc9")3%K3Vme3!%#QPZFfJ0")3!!M3!!!TL#QVme!5'#[c
|
||||||
|
8!!3+BfC[E!d%KJ!"E`!!#QB+DIc6#rc6!$3`!"K[F'9ZFh0XD@jME(9NC@C[E'4
|
||||||
|
PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD!B%K3!$r0)%Krc4#[c5!!3
|
||||||
|
+G'mJ)!d%K`!#EJ!!#Qd+I!5)")N0")J!!M3!!!Te#Rcmd!5+#[c3!!3+CQPXC3d
|
||||||
|
%LJ!"E3!!#RJ+H`5,$!5,!!`!"Q9IEh-ZD!!#!!!0")N!!M3!!!TY#RAmc`5-#[c
|
||||||
|
2!!3+BfC[E!d%M!!"E`!!#R%+G2c1#rc1!#B`!"&[F'9ZFh0XCQpXC'9bF'&dD!!
|
||||||
|
4Eh"PER0cE%C[E'4PFP"KG'J'r0%!!!)%J!!#")d%MJd%M3!$53!##S-+VIc0r-`
|
||||||
|
%M`Vmc3!B,Q0[FQ9MFQ9X+LSU+J!!!!!!!*!!!'jeE'`"r-`!!!B%M`!$r-X%N!!
|
||||||
|
%N3Vmb`!%#QY[Bf`0"*!!!!&Y!!!+K`U+r-S+r-S!"!TKE'PK"J54!!2mb355"*-
|
||||||
|
+r-N!"!TTER0S$355!!)d!!!+M3U9r-J%P!Vmb!!%#Q0QEf`0"*3!!@m!!!U4#T6
|
||||||
|
ma`[ma`!d-!!BEh"PER0cE'PZBfaeC'9QEfaNCA*`BA4S!"K[F'9Z8e0-5@jME(9
|
||||||
|
NC8C[E'4PFP"KG'J'"*-!!rc'"*Ama3VmaJ!%#R4[)#!0"*8!!Qi!!!UB#UF%PJ5
|
||||||
|
A$35@!!)d!!!+S!URr-3%Q!Vma!!%#QCTE'80"*J!!@d!!!UM#UB%Q3`%Q3!0!!G
|
||||||
|
PAfpc-LjS!!)!!!d%P`!#0!!!#TJ+S2c$"*S+r--!"!TMCQpX$35D!!&[!!!+R!U
|
||||||
|
Ir-),r-)!*M!!%@p`C@jcFfaQEfaNCA*`BA4S!"&[F'9ZFh0X4QpXC'9b8'&dD!E
|
||||||
|
ma3!!!J51!!)%Qrc"$35E!!*X!!)+VJUZr-$m[`(m`!!!!Ibr!!!#r-%!!!d!#3!
|
||||||
|
"E3!!!!!!!3!I!Irq!!!#!!B!!J5F"*d0"*`!!Q`!!J!!!!$m[[bp!Ibq!!!"r,d
|
||||||
|
!!!)%R3!#"*i%R`d%RJ!#E!!##V%+b!5Jr,`0"+!!!dN!!JUa#XMmZ`5K"+)+r,X
|
||||||
|
!'#jcHA0[C'a[Cf&cDh)!!!!!!!!!!&4&@&30"+%!!@d!!!Ua#V3%S``%S`!'!!!
|
||||||
|
!!J!!"J5L!!2mZJ5N"+8+r,S!"!TLG'jc$35N!!&+!!!+Y`Um"+B#"+B!!J5Rr,N
|
||||||
|
0"+F!!@d!!!Uh#VS%U!`%U!!+!!4%EfjP!!)!!!,mZ3!!"J5P!!2mZ!5Tr,F+r,J
|
||||||
|
!"!TRDACe$35T!!&Y!!!+[`V#r,B$r,B!"3EmY`!!!Ibm!!!#"*m!!J5Ur,80"+S
|
||||||
|
!!Q`!!J!!!!$mY2bc!Ibd!!!"r,-!!!,mY3!!$J!#!!!2%!!$!",mXJ5V"+`%V35
|
||||||
|
Z"+m%X!5a",)%X`5d",8%YJ5hr,(mX2b[r+i"r,)!!"!%U`!3r+hmV2bVr+VmUIb
|
||||||
|
Sr+ImT[bPr+6mSrbLr+(mS2bIr*i+r+d!'#jKCACdEf&`F'jeE'`!!)!!!!#3!!!
|
||||||
|
U+LSU#rbX!")`!!GdD'9`BA4S!!GdD'93BA4S#rbV!"``!!adD'9[E'4NC@aTEA-
|
||||||
|
!$(4SC8pXC%4PE'PYF`[mUJ!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh4
|
||||||
|
3BA4S#rbT!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mU!!Q-!!4D@jME(9NC@C
|
||||||
|
[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rbR!$3`!"K[F'9ZFh0XD@jME(9
|
||||||
|
NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&dD![mTJ!N-!!3Bh*
|
||||||
|
jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mT3!H-!!0Fh0XCQpXC'9
|
||||||
|
bF'&dD!!0Fh0X4QpXC'9b8'&dD![mT!!Q-!!4Eh"PER0cE'C[E'4PFR"KG'J!%@p
|
||||||
|
`C@jcFfa'EfaNCA*3BA4S#rbM!#i`!"9dD'9ZCAGQEfaNCA*bC@CPFQ9ZBf8!&A4
|
||||||
|
SC8jPGdC[E'4PFP*PCQ9bC@jMC3[mSJ!8-!!)G'9YF("KG'J!#(4PEA"3BA4S!Ib
|
||||||
|
K!!!"r+!!!!(mR`!!!IbH!!!1"+`!"a$mR35ir*cmQ`5j",VmQJVmR3!B,Q&PGR4
|
||||||
|
[BA"`ER9XE!!!J!!!!*!!!#SU+LS0",J!!@X!!!!!#XJ%Z`)%Z`!#!!8%[!)%[!!
|
||||||
|
#"*lmQ3,mQ3!!!IbF!!!#r*X!!"!%Z3!!%!5k!)B!(rbBr*ImP[b9r*6mNrb5!#c
|
||||||
|
mNIb3!2b2r)lmMIb-!%rmL`"D!&[mLJ"Nr)N!EIb)r)ImKJ#2r)AmK2b$r),mJIb
|
||||||
|
!r(rmI[apr(cmH`#Tr(VmHIair(F![Iaf!-ImG3$8!1)!l!$j!3-"%!%D!5F"-3%
|
||||||
|
q!8J"93&I!@`"GJ'$!Bd"QJ'N!E%"Z`()!G)"h`(T!IB#!!)0!KF#*!)Z!MX#43*
|
||||||
|
5!P`#D3*c!S!#LJ+A!U%#VJ+m!XB#d`,G!ZS#p!-"!`X$'!-L!bm$130'!e!$A30
|
||||||
|
R!h3$IJ1,!jN$S`1`!lS$a`24!pi$l!2f"!-%%`3K"#m%234,"&X%D`4j")X%Q35
|
||||||
|
Mr(3%U2acr(,mF3VmQ!!%#Q0[BQS+r*F!'#jPBA*cCQCNFQ&XDA-!!!!!!!!J!'&
|
||||||
|
QC()+r*B!"!TMG(Kd#rb9!")`!!GdD'9`BA4S!!GdD'93BA4S#[b8!!3+BA0MFJV
|
||||||
|
mN`!%#R4iC'`,r*)!($!!$(4SC@pXC'4PE'PYF`!-G'KP6faN4'9XD@ec#[b4!!3
|
||||||
|
+BfPdE32mN!$rr3[mM`!J-!!1G'KPF(*[DQ9MG("KG'J!$R4SC9"bEfTPBh43BA4
|
||||||
|
S!rb1rri+r)d!"!T849K8#rb-!"B`!!PdD'9YCA"KG'J!#A4SC8eP8'&dD![mL`!
|
||||||
|
Q-!!4D@jME(9NC@C[E'4PFR"KG'J!%@PZBfaeC'9'EfaNCA*3BA4S#rb+!$3`!"K
|
||||||
|
[F'9ZFh0XD@jME(9NC@C[E'4PFR"KG'J!''p`C@j68da*EQ0XG@4P4QpXC'9b8'&
|
||||||
|
dD![mL3!N-!!3Bh*jF(4[CQpXC'9bF'&dD!!3Bh*jF(4[4QpXC'9b8'&dD![mL!!
|
||||||
|
H-!!0Fh0XCQpXC'9bF'&dD!!0Fh0X4QpXC'9b8'&dD![mK`!Q-!!4Eh"PER0cE'C
|
||||||
|
[E'4PFR"KG'J!%@p`C@jcFfa'EfaNCA*3BA4S#[b'!!3+BfC[E!VmK3!B,QeTFf0
|
||||||
|
cE'0d+LSU+J!!!!!!!*!!!#SU+LS+r)3!"!TcC@aP#[b$!"JZBfpbC@4PE'mU+LS
|
||||||
|
U!!!!!!!!N!!!+LSU+J(mJJ!!![b"!!!+r)!!"!TVEf0X#[ar!!3+D@jcD!2mIJ!
|
||||||
|
%#[ap!"JZBfpbC@0bC@`U+LSU!!!!!!!!N!!!ER9XE!VmI!!%#R*cE(3,r(X!,M!
|
||||||
|
!&A4SC@jPGfC[E'4PFR*PCQ9bC@jMC3!9G'KP6Q9h4QpXC'9b8Q9QCA*PEQ0P#[a
|
||||||
|
k!!3+F'jKE3VmH3!%#Q&XD@%+r(J!"!TdEb!J#[ah!!3+CQPXC32mGJ!'#rae!"3
|
||||||
|
`!!KdC@e`F'&dD!!)G'9YF&"KG'J+r(3!"!TLG'jc#[ac!!3+CfPfG32mFJ!&#[a
|
||||||
|
a!"JZFhPcEf4XEfGKFfYb!!!!!!!!!!"849K8%IbD#XRJ%JUYi1%TDJ`!!LrM*N9
|
||||||
|
4e%r&jLa&edrSaHBX4Nr%@qPF@eTVA&VU-NAE6m4Ek9aE@QYF@Z`bl5C&hNr,lbA
|
||||||
|
Y*N9J!""2bf%!%59K!")Pl5C&B!!66mYK!"3Pl5C&B!!96mYK!"BPl5C&B!!A6m[
|
||||||
|
Y*N9J!"K2amAQ,%C2&!!L+Q%!'9m!%#pK!"PK!"S[DJ`!'dmUB3!F,'S-!"eA!!K
|
||||||
|
B!"i!(fK2+Q%!)'%!'@%!)5TK!"PI!"![B3!L$!!M6em!*%9J!#92A`!PDJ`!'dp
|
||||||
|
K!#BUB3!F,'%!*ba'6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"R1,f%!+Q%!+bp
|
||||||
|
K!#`-!#02A`!9B3!Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
|
||||||
|
K!#TK!#m[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!
|
||||||
|
`,f%!,!`!)dpI!"9K!$%P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!
|
||||||
|
Z,f%!+Q%!-LpK!#`-!#02A`!9B3!c*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!
|
||||||
|
T+Q%!'9m!,LpK!#TK!$3[B3!X$!!M6em!&@%!059&B!!Z6bTK!#"K!#KK!#%UB3!
|
||||||
|
CA`!6,f%!+5TK!"PI!#i[B3!UB3!f,f%!,!`!)dpI!"9K!$FP4@!!,NmUB3!JB3!
|
||||||
|
SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!1#pK!#`-!#02A`!9B3!j*89J!#j
|
||||||
|
2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!$S[B3!X$!!M6em!&@%
|
||||||
|
!1b9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3!m,f%!,!`
|
||||||
|
!)dpI!"9K!$dP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
|
||||||
|
!2LpK!#`-!#02A`!9B3!r*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
|
||||||
|
!,LpK!#TK!%![B3!X$!!M6em!&@%!359&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
|
||||||
|
!+5TK!"PI!#i[B3!UB3"#,f%!,!`!)dpI!"9K!%-P4@!!,NmUB3!JB3!SB3!K+Q%
|
||||||
|
!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!4#pK!#`-!#02A`!9B3"&*89J!#j2+Q%!)'%
|
||||||
|
!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!%B[B3!X$!!M6em!&@%!4b9&B!!
|
||||||
|
Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"),f%!,!`!)dpI!"9
|
||||||
|
K!%NP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!5LpK!#`
|
||||||
|
-!#02A`!9B3",*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#T
|
||||||
|
K!%`[B3!X$!!M6em!&@%!659&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
|
||||||
|
I!#i[B3!UB3"1,f%!,!`!)dpI!"9K!%mP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bp
|
||||||
|
K!#NUB3!CA`!Z,f%!+Q%!8#pK!#`-!#02A`!9B3"4*89J!#j2+Q%!)'%!+'%!)5T
|
||||||
|
K!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&)[B3!X$!!M6em!&@%!8b9&B!!Z6bTK!#"
|
||||||
|
K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"8,f%!,!`!)dpI!"9K!&8P4@!
|
||||||
|
!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!9LpK!#`-!#02A`!
|
||||||
|
9B3"A*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!&J[B3!
|
||||||
|
X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"C,f%!,!`!)dp
|
||||||
|
I!"9K!&SP4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!@bp
|
||||||
|
K!#`-!#02A`!9B3"F*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,Lp
|
||||||
|
K!#TK!&d[B3!X$!!M6em!&@%!AL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5T
|
||||||
|
K!"PI!#i[B3!UB3"I,f%!,!`!)dpI!"9K!'!P4@!!,NmUB3!JB3!SB3!K+Q%!'9m
|
||||||
|
!%bpK!#NUB3!CA`!Z,f%!+Q%!B5pK!#`-!#02A`!9B3"L*89J!#j2+Q%!)'%!+'%
|
||||||
|
!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'-[B3!X$!!M6em!&@%!C#9&B!!Z6bT
|
||||||
|
K!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"P,f%!,!`!)dpI!"9K!'B
|
||||||
|
P4@!!,NmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!CbpK!#`-!#0
|
||||||
|
2A`!9B3"S*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!,LpK!#TK!'N
|
||||||
|
[B3!X$!!M6em!&@%!DL9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!#i
|
||||||
|
[B3!UB3"V,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%
|
||||||
|
!E#pK!#`-!#02A`!9B3"Y*89J!#j2+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m
|
||||||
|
!,LpK!#TK!'i[B3!X$!!M6em!&@%!Eb9&B!!Z6bTK!#"K!#KK!#%UB3!CA`!6,f%
|
||||||
|
!+5TK!"PI!#i[B3!UB3"`,f%!,!`!)dpI!"9K!(%P4@!!,NmUB3!JB3!SB3!K+Q%
|
||||||
|
!'9m!%bpK!#NUB3!CA`!Z,f%!+Q%!FLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-
|
||||||
|
[B3!T+Q%!'9m!,LpK!#TK!(-[B3!X$!!M6em!&@%!G#9&B!!Z6bTK!#"K!#KK!#%
|
||||||
|
UB3!CA`!6,f%!+5TK!"PI!#i[B3!UB3"e,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m
|
||||||
|
!%bpK!#NUB3!CA`!A,f%!+Q%!GLpK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!
|
||||||
|
T+Q%!'9m!&bpK!#TK!(F[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"P
|
||||||
|
I!"F[B3!UB3"i,f%!,!`!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!A,f%
|
||||||
|
!+Q%!H5pK!#`-!#02+Q%!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&bpK!#TK!(S
|
||||||
|
[B3!X$!!M6bTK!#"K!#KK!#%UB3!CA`!6,f%!+5TK!"PI!"8[B3!UB3"l,f%!,!`
|
||||||
|
!)dmUB3!JB3!SB3!K+Q%!'9m!%bpK!#NUB3!CA`!9,f%!+Q%!I#pK!#`-!#02+Q%
|
||||||
|
!)'%!+'%!)5TK!"PI!"-[B3!T+Q%!'9m!&5pK!#TK!(d[B3!X$!!M6bTK!#"K!#K
|
||||||
|
K!#%UB3!CA`!6,f%!+5TK!"PI!"J[B3!UB3"q,f%!,!`!)dmUB3!JB3!SB3!K+Q%
|
||||||
|
!'9m!%bpK!#NUB3!CA`!B,f%!+Q%!IbpK!#`-!#028&92B3#!B3#"B3##DhCK!)0
|
||||||
|
K!)4K!#)-!)82$!5Y!&%!5deKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0
|
||||||
|
[E@PZCcT[F'9ZFh0X,90139!Y-6Nj16%b-6%k6@&M6e-kE@YXD@jVFbjKF`!#!!!
|
||||||
|
1"+i!!J6mF!5p!ra`!!%1",d!!3!%[J`%[J!'!!!!!J!!$J5[!!)%r'm%[`2mE`!
|
||||||
|
%$J5r!!3!"-!%`36#"---"-!!%J!-6@&MD@jdEh0S)%K%!!)!!!`%`3!8!!j%CA0
|
||||||
|
VG'p`)%C[E'4PFJ!#!!!-"-)!$J!)5@jMEfeTEQF!!J!!$!6$!"X!&@p`C@jcFf`
|
||||||
|
Y8dj"8#da16Nj-6)a-3!#!!!-",!!4J"!6@&MD@jdEh0S)%K%1N4PFfYdEh!J4Qp
|
||||||
|
XC'9b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6T0B@028`!#!!!-",%
|
||||||
|
!5!"#6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9b1NPZBfpYD@jR1Qp`C@jcFf`
|
||||||
|
Y8dj"8#da16Nj-6)a-6TTEQ0XG@4P!!)!!!`%XJ"3!%T0B@0TER4[FfJJ5%3k4'9
|
||||||
|
cDh4[F#"'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a1QPZBfa
|
||||||
|
eC'8kEh"PER0cE!!#!!!-",-!4`""6@&MD@jdEh0S)%K%1N4PFfYdEh!J4QpXC'9
|
||||||
|
b1NPZBfpYD@jR1Qp`C@jcFf`Y8dj"8#da16Nj-6)a-6TMFRP`G'm!!J!!$!5d!%3
|
||||||
|
!2NeKBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90
|
||||||
|
139!Y-6Nj16%b-6%kFh0X!!)!!!`%Y3"!!$T0B@0TER4[FfJJ5%3k4'9cDh4[F#"
|
||||||
|
'EfaNCA)k5@jMEfeTEQFkEh"PER0cE#e66N&3,6%j16Na-M%a!!)!!!i%YJ!"&!6
|
||||||
|
%$J6%!!-B"-AmEJ6'$J6&!!-B"-ImE36)$J6(!!-B"-RmE!6+$J6*!!-B!"rmD`6
|
||||||
|
,#[aV!!3+BfC[E!`%b`!1!!K*EQ0[E@PZC`!#!!!+r'`!"!TMCQpX$!6+!"X!&@p
|
||||||
|
`C@jcFf`Y8dj"8#da16Nj-6)a-3!#!!!+r'd!"!TMCQpX$!6)!!d!"fPZBfaeC'8
|
||||||
|
!!J!!#[aZ!!3+BfC[E!`%aJ!9!!peER4TG'aPC#"QEfaNCA)!!J!!$!5h!%i!5%e
|
||||||
|
KBfPZG'pcD#")4$T%CA0VG'p`)%C[E'4PFMT*EQ0[E@PZCcT[F'9ZFh0X,90139!
|
||||||
|
Y-6Nj16%b-6%kBh*jF(4[1RJe-$Pf-`!#!!!"r,%!!!(mX!!!!Ib[!!!"r+i!!'&
|
||||||
|
cBh)!!3!-qYlHV3!!!3!!!*G#!!#@3J!!!AB!!$-8-0J!!!!F!AB!$h0MFhS!!!#
|
||||||
|
#6Np853!!!)jcBh"d!!!!QP4&@&3!!3#QFh4jE!!!!,j$6d4&!!%!bN*14%`!!!$
|
||||||
|
LBA"XG!!!!1j'8N9'!!!!qNP$6L-!!!%'D@0X0!!!!4*TBh-M!!!"(QPMFc3!!!%
|
||||||
|
UD'CNFJ!!!6C659T&!!!"3PG3Eh-!!!&1!!$rr`!!!!!!!!!!!)$rre!!!"i!!!!
|
||||||
|
!!)$rr`!!"cJ#DH#m"'Mrr`!!!*S!!!!!%iRrr`!!"Pi!!!!!"'Mrr`!!!53!!!!
|
||||||
|
!!!$rrb!!!9)!!!!!!!(rra3!!@i#DG`%!)$rr`!!!Pi#DH"X!!$rr`!!!Ri!!!!
|
||||||
|
!!)$rr`!!!S-#DH"d!*Err`!!!Si!!!!!!*Err`!!!j)!!!!!!*Err`!!"CB#DH%
|
||||||
|
i!*Err`!!"GS#DH%dkF$rr`!!"[`!!!!!rrrrr`!!"a)!!!!!!)$rr`!!"b!!!!!
|
||||||
|
!*4S:
|
||||||
126
MacOS/opensslconf.h
Normal file
126
MacOS/opensslconf.h
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
/* MacOS/opensslconf.h */
|
||||||
|
|
||||||
|
#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
|
||||||
|
# if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
|
||||||
|
# define OPENSSLDIR "/usr/local/ssl"
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
|
||||||
|
# define IDEA_INT unsigned int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_MD2_H) && !defined(MD2_INT)
|
||||||
|
# define MD2_INT unsigned int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_RC2_H) && !defined(RC2_INT)
|
||||||
|
/* I need to put in a mod for the alpha - eay */
|
||||||
|
# define RC2_INT unsigned int
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_RC4_H)
|
||||||
|
# if !defined(RC4_INT)
|
||||||
|
/*
|
||||||
|
* using int types make the structure larger but make the code faster on most
|
||||||
|
* boxes I have tested - up to %20 faster.
|
||||||
|
*/
|
||||||
|
/*-
|
||||||
|
* I don't know what does "most" mean, but declaring "int" is a must on:
|
||||||
|
* - Intel P6 because partial register stalls are very expensive;
|
||||||
|
* - elder Alpha because it lacks byte load/store instructions;
|
||||||
|
*/
|
||||||
|
# define RC4_INT unsigned char
|
||||||
|
# endif
|
||||||
|
# if !defined(RC4_CHUNK)
|
||||||
|
/*
|
||||||
|
* This enables code handling data aligned at natural CPU word
|
||||||
|
* boundary. See crypto/rc4/rc4_enc.c for further details.
|
||||||
|
*/
|
||||||
|
# define RC4_CHUNK unsigned long
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_DES_H) && !defined(DES_LONG)
|
||||||
|
/*
|
||||||
|
* If this is set to 'unsigned int' on a DEC Alpha, this gives about a %20
|
||||||
|
* speed up (longs are 8 bytes, int's are 4).
|
||||||
|
*/
|
||||||
|
# ifndef DES_LONG
|
||||||
|
# define DES_LONG unsigned long
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
|
||||||
|
# define CONFIG_HEADER_BN_H
|
||||||
|
# if __option(longlong)
|
||||||
|
# define BN_LLONG
|
||||||
|
# else
|
||||||
|
# undef BN_LLONG
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* Should we define BN_DIV2W here? */
|
||||||
|
|
||||||
|
/* Only one for the following should be defined */
|
||||||
|
/*
|
||||||
|
* The prime number generation stuff may not work when EIGHT_BIT but I don't
|
||||||
|
* care since I've only used this mode for debuging the bignum libraries
|
||||||
|
*/
|
||||||
|
# undef SIXTY_FOUR_BIT_LONG
|
||||||
|
# undef SIXTY_FOUR_BIT
|
||||||
|
# define THIRTY_TWO_BIT
|
||||||
|
# undef SIXTEEN_BIT
|
||||||
|
# undef EIGHT_BIT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
|
||||||
|
# define CONFIG_HEADER_RC4_LOCL_H
|
||||||
|
/*
|
||||||
|
* if this is defined data[i] is used instead of *data, this is a %20 speedup
|
||||||
|
* on x86
|
||||||
|
*/
|
||||||
|
# undef RC4_INDEX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
|
||||||
|
# define CONFIG_HEADER_BF_LOCL_H
|
||||||
|
# define BF_PTR
|
||||||
|
#endif /* HEADER_BF_LOCL_H */
|
||||||
|
|
||||||
|
#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
|
||||||
|
# define CONFIG_HEADER_DES_LOCL_H
|
||||||
|
/*
|
||||||
|
* the following is tweaked from a config script, that is why it is a
|
||||||
|
* protected undef/define
|
||||||
|
*/
|
||||||
|
# ifndef DES_PTR
|
||||||
|
# define DES_PTR
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This helps C compiler generate the correct code for multiple functional
|
||||||
|
* units. It reduces register dependancies at the expense of 2 more
|
||||||
|
* registers
|
||||||
|
*/
|
||||||
|
# ifndef DES_RISC1
|
||||||
|
# define DES_RISC1
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifndef DES_RISC2
|
||||||
|
# undef DES_RISC2
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if defined(DES_RISC1) && defined(DES_RISC2)
|
||||||
|
YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED ! !!!!
|
||||||
|
# endif
|
||||||
|
/*
|
||||||
|
* Unroll the inner loop, this sometimes helps, sometimes hinders. Very mucy
|
||||||
|
* CPU dependant
|
||||||
|
*/
|
||||||
|
# ifndef DES_UNROLL
|
||||||
|
# define DES_UNROLL
|
||||||
|
# endif
|
||||||
|
#endif /* HEADER_DES_LOCL_H */
|
||||||
|
#ifndef __POWERPC__
|
||||||
|
# define MD32_XARRAY
|
||||||
|
#endif
|
||||||
638
Makefile.fips
638
Makefile.fips
@@ -1,638 +0,0 @@
|
|||||||
##
|
|
||||||
## Makefile for OpenSSL: fipscanister.o only
|
|
||||||
##
|
|
||||||
|
|
||||||
VERSION=fips-2.0-test
|
|
||||||
MAJOR=
|
|
||||||
MINOR=
|
|
||||||
SHLIB_VERSION_NUMBER=
|
|
||||||
SHLIB_VERSION_HISTORY=
|
|
||||||
SHLIB_MAJOR=
|
|
||||||
SHLIB_MINOR=
|
|
||||||
SHLIB_EXT=
|
|
||||||
PLATFORM=dist
|
|
||||||
OPTIONS=
|
|
||||||
CONFIGURE_ARGS=
|
|
||||||
SHLIB_TARGET=
|
|
||||||
|
|
||||||
# HERE indicates where this Makefile lives. This can be used to indicate
|
|
||||||
# where sub-Makefiles are expected to be. Currently has very limited usage,
|
|
||||||
# and should probably not be bothered with at all.
|
|
||||||
HERE=.
|
|
||||||
|
|
||||||
# INSTALL_PREFIX is for package builders so that they can configure
|
|
||||||
# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.
|
|
||||||
# Normally it is left empty.
|
|
||||||
INSTALL_PREFIX=
|
|
||||||
INSTALLTOP=/usr/local/ssl
|
|
||||||
|
|
||||||
# Do not edit this manually. Use Configure --openssldir=DIR do change this!
|
|
||||||
OPENSSLDIR=/usr/local/ssl
|
|
||||||
|
|
||||||
# NO_IDEA - Define to build without the IDEA algorithm
|
|
||||||
# NO_RC4 - Define to build without the RC4 algorithm
|
|
||||||
# NO_RC2 - Define to build without the RC2 algorithm
|
|
||||||
# THREADS - Define when building with threads, you will probably also need any
|
|
||||||
# system defines as well, i.e. _REENTERANT for Solaris 2.[34]
|
|
||||||
# TERMIO - Define the termio terminal subsystem, needed if sgtty is missing.
|
|
||||||
# TERMIOS - Define the termios terminal subsystem, Silicon Graphics.
|
|
||||||
# LONGCRYPT - Define to use HPUX 10.x's long password modification to crypt(3).
|
|
||||||
# DEVRANDOM - Give this the value of the 'random device' if your OS supports
|
|
||||||
# one. 32 bytes will be read from this when the random
|
|
||||||
# number generator is initalised.
|
|
||||||
# SSL_FORBID_ENULL - define if you want the server to be not able to use the
|
|
||||||
# NULL encryption ciphers.
|
|
||||||
#
|
|
||||||
# LOCK_DEBUG - turns on lots of lock debug output :-)
|
|
||||||
# REF_CHECK - turn on some xyz_free() assertions.
|
|
||||||
# REF_PRINT - prints some stuff on structure free.
|
|
||||||
# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
|
|
||||||
# MFUNC - Make all Malloc/Free/Realloc calls call
|
|
||||||
# CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
|
|
||||||
# call application defined callbacks via CRYPTO_set_mem_functions()
|
|
||||||
# MD5_ASM needs to be defined to use the x86 assembler for MD5
|
|
||||||
# SHA1_ASM needs to be defined to use the x86 assembler for SHA1
|
|
||||||
# RMD160_ASM needs to be defined to use the x86 assembler for RIPEMD160
|
|
||||||
# Do not define B_ENDIAN or L_ENDIAN if 'unsigned long' == 8. It must
|
|
||||||
# equal 4.
|
|
||||||
# PKCS1_CHECK - pkcs1 tests.
|
|
||||||
|
|
||||||
CC= cc
|
|
||||||
CFLAG= -O
|
|
||||||
DEPFLAG=
|
|
||||||
PEX_LIBS=
|
|
||||||
EX_LIBS=
|
|
||||||
EXE_EXT=
|
|
||||||
ARFLAGS=
|
|
||||||
AR=ar $(ARFLAGS) r
|
|
||||||
RANLIB= ranlib
|
|
||||||
NM= nm
|
|
||||||
PERL= perl
|
|
||||||
TAR= tar
|
|
||||||
TARFLAGS= --no-recursion
|
|
||||||
MAKEDEPPROG=makedepend
|
|
||||||
LIBDIR=lib
|
|
||||||
|
|
||||||
# We let the C compiler driver to take care of .s files. This is done in
|
|
||||||
# order to be excused from maintaining a separate set of architecture
|
|
||||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
|
|
||||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
|
|
||||||
# and pass it down to assembler.
|
|
||||||
#AS=$(CC) -c
|
|
||||||
ASFLAG=$(CFLAG)
|
|
||||||
|
|
||||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
|
|
||||||
# the 80386.
|
|
||||||
PROCESSOR=
|
|
||||||
|
|
||||||
# CPUID module collects small commonly used assembler snippets
|
|
||||||
CPUID_OBJ=
|
|
||||||
BN_ASM= bn_asm.o
|
|
||||||
DES_ENC= des_enc.o fcrypt_b.o
|
|
||||||
AES_ENC= aes_core.o aes_cbc.o
|
|
||||||
BF_ENC= bf_enc.o
|
|
||||||
CAST_ENC= c_enc.o
|
|
||||||
RC4_ENC= rc4_enc.o
|
|
||||||
RC5_ENC= rc5_enc.o
|
|
||||||
MD5_ASM_OBJ=
|
|
||||||
SHA1_ASM_OBJ=
|
|
||||||
RMD160_ASM_OBJ=
|
|
||||||
WP_ASM_OBJ=
|
|
||||||
CMLL_ENC=
|
|
||||||
MODES_ASM_OBJ=
|
|
||||||
PERLASM_SCHEME=
|
|
||||||
|
|
||||||
# KRB5 stuff
|
|
||||||
KRB5_INCLUDES=
|
|
||||||
LIBKRB5=
|
|
||||||
|
|
||||||
# Zlib stuff
|
|
||||||
ZLIB_INCLUDE=
|
|
||||||
LIBZLIB=
|
|
||||||
|
|
||||||
# This is the location of fipscanister.o and friends.
|
|
||||||
# The FIPS module build will place it $(INSTALLTOP)/lib
|
|
||||||
# but since $(INSTALLTOP) can only take the default value
|
|
||||||
# when the module is built it will be in /usr/local/ssl/lib
|
|
||||||
# $(INSTALLTOP) for this build may be different so hard
|
|
||||||
# code the path.
|
|
||||||
|
|
||||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
|
|
||||||
|
|
||||||
# This is set to "y" if fipscanister.o is compiled internally as
|
|
||||||
# opposed to coming from an external validated location.
|
|
||||||
|
|
||||||
FIPSCANISTERINTERNAL=n
|
|
||||||
|
|
||||||
# This is set if we only build fipscanister.o
|
|
||||||
|
|
||||||
FIPSCANISTERONLY=y
|
|
||||||
|
|
||||||
# The location of the library which contains fipscanister.o
|
|
||||||
# normally it will be libcrypto unless fipsdso is set in which
|
|
||||||
# case it will be libfips. If not compiling in FIPS mode at all
|
|
||||||
# this is empty making it a useful test for a FIPS compile.
|
|
||||||
|
|
||||||
FIPSCANLIB=
|
|
||||||
|
|
||||||
# Shared library base address. Currently only used on Windows.
|
|
||||||
#
|
|
||||||
|
|
||||||
BASEADDR=
|
|
||||||
|
|
||||||
DIRS= crypto fips test
|
|
||||||
ENGDIRS= ccgost
|
|
||||||
SHLIBDIRS= crypto
|
|
||||||
|
|
||||||
# dirs in crypto to build
|
|
||||||
SDIRS= \
|
|
||||||
sha hmac des aes modes \
|
|
||||||
bn ec rsa dsa ecdsa dh \
|
|
||||||
buffer evp ecdh cmac
|
|
||||||
# keep in mind that the above list is adjusted by ./Configure
|
|
||||||
# according to no-xxx arguments...
|
|
||||||
|
|
||||||
LINKDIRS= \
|
|
||||||
objects sha hmac des aes modes \
|
|
||||||
bn ec rsa dsa ecdh cmac ecdsa dh engine \
|
|
||||||
buffer bio stack lhash rand err \
|
|
||||||
evp asn1 ui
|
|
||||||
|
|
||||||
# tests to perform. "alltests" is a special word indicating that all tests
|
|
||||||
# should be performed.
|
|
||||||
TESTS = alltests
|
|
||||||
|
|
||||||
MAKEFILE= Makefile
|
|
||||||
|
|
||||||
MANDIR=$(OPENSSLDIR)/man
|
|
||||||
MAN1=1
|
|
||||||
MAN3=3
|
|
||||||
MANSUFFIX=
|
|
||||||
HTMLSUFFIX=html
|
|
||||||
HTMLDIR=$(OPENSSLDIR)/html
|
|
||||||
SHELL=/bin/sh
|
|
||||||
|
|
||||||
TOP= .
|
|
||||||
ONEDIRS=out tmp
|
|
||||||
EDIRS= times doc bugs util include certs ms shlib mt demos perl sf dep VMS
|
|
||||||
WDIRS= windows
|
|
||||||
LIBS=
|
|
||||||
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
|
|
||||||
SHARED_SSL=libssl$(SHLIB_EXT)
|
|
||||||
SHARED_LIBS=
|
|
||||||
SHARED_LIBS_LINK_EXTS=
|
|
||||||
SHARED_LDFLAGS=
|
|
||||||
|
|
||||||
GENERAL= Makefile
|
|
||||||
BASENAME= openssl
|
|
||||||
NAME= $(BASENAME)-$(VERSION)
|
|
||||||
TARFILE= openssl-fips-2.0.tar
|
|
||||||
WTARFILE= $(NAME)-win.tar
|
|
||||||
EXHEADER= e_os2.h
|
|
||||||
HEADER= e_os.h
|
|
||||||
|
|
||||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
|
|
||||||
|
|
||||||
# as we stick to -e, CLEARENV ensures that local variables in lower
|
|
||||||
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
|
|
||||||
# shell, which [annoyingly enough] terminates unset with error if VAR
|
|
||||||
# is not present:-( TOP= && unset TOP is tribute to HP-UX /bin/sh,
|
|
||||||
# which terminates unset with error if no variable was present:-(
|
|
||||||
CLEARENV= TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS} \
|
|
||||||
$${INCLUDE+INCLUDE} $${INCLUDES+INCLUDES} \
|
|
||||||
$${DIR+DIR} $${DIRS+DIRS} $${SRC+SRC} \
|
|
||||||
$${LIBSRC+LIBSRC} $${LIBOBJ+LIBOBJ} $${ALL+ALL} \
|
|
||||||
$${EXHEADER+EXHEADER} $${HEADER+HEADER} \
|
|
||||||
$${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \
|
|
||||||
$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \
|
|
||||||
$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} \
|
|
||||||
$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \
|
|
||||||
$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
|
|
||||||
|
|
||||||
BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
|
|
||||||
CC='$(CC)' CFLAG='$(CFLAG)' \
|
|
||||||
ASFLAG='$(CFLAG) -c' \
|
|
||||||
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
|
|
||||||
CROSS_COMPILE='$(CROSS_COMPILE)' \
|
|
||||||
PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \
|
|
||||||
SDIRS='$(SDIRS)' LIBRPATH='$(INSTALLTOP)/$(LIBDIR)' \
|
|
||||||
INSTALL_PREFIX='$(INSTALL_PREFIX)' \
|
|
||||||
INSTALLTOP='$(INSTALLTOP)' OPENSSLDIR='$(OPENSSLDIR)' \
|
|
||||||
LIBDIR='$(LIBDIR)' \
|
|
||||||
MAKEDEPEND='$$$${TOP}/util/domd $$$${TOP} -MD $(MAKEDEPPROG)' \
|
|
||||||
DEPFLAG='-DOPENSSL_NO_DEPRECATED $(DEPFLAG)' \
|
|
||||||
MAKEDEPPROG='$(MAKEDEPPROG)' \
|
|
||||||
SHARED_LDFLAGS='$(SHARED_LDFLAGS)' \
|
|
||||||
KRB5_INCLUDES='$(KRB5_INCLUDES)' LIBKRB5='$(LIBKRB5)' \
|
|
||||||
ZLIB_INCLUDE='$(ZLIB_INCLUDE)' LIBZLIB='$(LIBZLIB)' \
|
|
||||||
EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \
|
|
||||||
SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \
|
|
||||||
PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \
|
|
||||||
CPUID_OBJ='$(CPUID_OBJ)' \
|
|
||||||
BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' \
|
|
||||||
AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \
|
|
||||||
BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \
|
|
||||||
RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \
|
|
||||||
SHA1_ASM_OBJ='$(SHA1_ASM_OBJ)' \
|
|
||||||
MD5_ASM_OBJ='$(MD5_ASM_OBJ)' \
|
|
||||||
RMD160_ASM_OBJ='$(RMD160_ASM_OBJ)' \
|
|
||||||
WP_ASM_OBJ='$(WP_ASM_OBJ)' \
|
|
||||||
MODES_ASM_OBJ='$(MODES_ASM_OBJ)' \
|
|
||||||
PERLASM_SCHEME='$(PERLASM_SCHEME)' \
|
|
||||||
FIPSLIBDIR='${FIPSLIBDIR}' \
|
|
||||||
FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}" \
|
|
||||||
FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}' \
|
|
||||||
FIPSCANISTERONLY='${FIPSCANISTERONLY}' \
|
|
||||||
FIPS_EX_OBJ='${FIPS_EX_OBJ}' \
|
|
||||||
THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
|
|
||||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
|
|
||||||
# which in turn eliminates ambiguities in variable treatment with -e.
|
|
||||||
|
|
||||||
# BUILD_CMD is a generic macro to build a given target in a given
|
|
||||||
# subdirectory. The target must be given through the shell variable
|
|
||||||
# `target' and the subdirectory to build in must be given through `dir'.
|
|
||||||
# This macro shouldn't be used directly, use RECURSIVE_BUILD_CMD or
|
|
||||||
# BUILD_ONE_CMD instead.
|
|
||||||
#
|
|
||||||
# BUILD_ONE_CMD is a macro to build a given target in a given
|
|
||||||
# subdirectory if that subdirectory is part of $(DIRS). It requires
|
|
||||||
# exactly the same shell variables as BUILD_CMD.
|
|
||||||
#
|
|
||||||
# RECURSIVE_BUILD_CMD is a macro to build a given target in all
|
|
||||||
# subdirectories defined in $(DIRS). It requires that the target
|
|
||||||
# is given through the shell variable `target'.
|
|
||||||
BUILD_CMD= if [ -d "$$dir" ]; then \
|
|
||||||
( cd $$dir && echo "making $$target in $$dir..." && \
|
|
||||||
$(CLEARENV) && $(MAKE) -e $(BUILDENV) TOP=.. DIR=$$dir $$target \
|
|
||||||
) || exit 1; \
|
|
||||||
fi
|
|
||||||
RECURSIVE_BUILD_CMD=for dir in $(DIRS); do $(BUILD_CMD); done
|
|
||||||
BUILD_ONE_CMD=\
|
|
||||||
if expr " $(DIRS) " : ".* $$dir " >/dev/null 2>&1; then \
|
|
||||||
$(BUILD_CMD); \
|
|
||||||
fi
|
|
||||||
|
|
||||||
reflect:
|
|
||||||
@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
|
|
||||||
|
|
||||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
|
|
||||||
../crypto/aes/aes_ecb.o \
|
|
||||||
../crypto/aes/aes_ofb.o \
|
|
||||||
../crypto/bn/bn_add.o \
|
|
||||||
../crypto/bn/bn_blind.o \
|
|
||||||
../crypto/bn/bn_ctx.o \
|
|
||||||
../crypto/bn/bn_div.o \
|
|
||||||
../crypto/bn/bn_exp2.o \
|
|
||||||
../crypto/bn/bn_exp.o \
|
|
||||||
../crypto/bn/bn_gcd.o \
|
|
||||||
../crypto/bn/bn_gf2m.o \
|
|
||||||
../crypto/bn/bn_lib.o \
|
|
||||||
../crypto/bn/bn_mod.o \
|
|
||||||
../crypto/bn/bn_mont.o \
|
|
||||||
../crypto/bn/bn_mul.o \
|
|
||||||
../crypto/bn/bn_nist.o \
|
|
||||||
../crypto/bn/bn_prime.o \
|
|
||||||
../crypto/bn/bn_rand.o \
|
|
||||||
../crypto/bn/bn_recp.o \
|
|
||||||
../crypto/bn/bn_shift.o \
|
|
||||||
../crypto/bn/bn_sqr.o \
|
|
||||||
../crypto/bn/bn_word.o \
|
|
||||||
../crypto/bn/bn_x931p.o \
|
|
||||||
../crypto/buffer/buf_str.o \
|
|
||||||
../crypto/cmac/cmac.o \
|
|
||||||
../crypto/cryptlib.o \
|
|
||||||
../crypto/des/cfb64ede.o \
|
|
||||||
../crypto/des/cfb64enc.o \
|
|
||||||
../crypto/des/cfb_enc.o \
|
|
||||||
../crypto/des/ecb3_enc.o \
|
|
||||||
../crypto/des/ofb64ede.o \
|
|
||||||
../crypto/des/fcrypt.o \
|
|
||||||
../crypto/des/set_key.o \
|
|
||||||
../crypto/dh/dh_check.o \
|
|
||||||
../crypto/dh/dh_gen.o \
|
|
||||||
../crypto/dh/dh_key.o \
|
|
||||||
../crypto/dsa/dsa_gen.o \
|
|
||||||
../crypto/dsa/dsa_key.o \
|
|
||||||
../crypto/dsa/dsa_ossl.o \
|
|
||||||
../crypto/ec/ec_curve.o \
|
|
||||||
../crypto/ec/ec_cvt.o \
|
|
||||||
../crypto/ec/ec_key.o \
|
|
||||||
../crypto/ec/ec_lib.o \
|
|
||||||
../crypto/ec/ecp_mont.o \
|
|
||||||
../crypto/ec/ec_mult.o \
|
|
||||||
../crypto/ec/ecp_nist.o \
|
|
||||||
../crypto/ec/ecp_smpl.o \
|
|
||||||
../crypto/ec/ec2_mult.o \
|
|
||||||
../crypto/ec/ec2_smpl.o \
|
|
||||||
../crypto/ecdh/ech_key.o \
|
|
||||||
../crypto/ecdh/ech_ossl.o \
|
|
||||||
../crypto/ecdsa/ecs_ossl.o \
|
|
||||||
../crypto/evp/e_aes.o \
|
|
||||||
../crypto/evp/e_des3.o \
|
|
||||||
../crypto/evp/e_null.o \
|
|
||||||
../crypto/evp/m_sha1.o \
|
|
||||||
../crypto/evp/m_dss1.o \
|
|
||||||
../crypto/evp/m_dss.o \
|
|
||||||
../crypto/evp/m_ecdsa.o \
|
|
||||||
../crypto/hmac/hmac.o \
|
|
||||||
../crypto/modes/cbc128.o \
|
|
||||||
../crypto/modes/ccm128.o \
|
|
||||||
../crypto/modes/cfb128.o \
|
|
||||||
../crypto/modes/ctr128.o \
|
|
||||||
../crypto/modes/gcm128.o \
|
|
||||||
../crypto/modes/ofb128.o \
|
|
||||||
../crypto/modes/xts128.o \
|
|
||||||
../crypto/rsa/rsa_eay.o \
|
|
||||||
../crypto/rsa/rsa_gen.o \
|
|
||||||
../crypto/rsa/rsa_crpt.o \
|
|
||||||
../crypto/rsa/rsa_none.o \
|
|
||||||
../crypto/rsa/rsa_oaep.o \
|
|
||||||
../crypto/rsa/rsa_pk1.o \
|
|
||||||
../crypto/rsa/rsa_pss.o \
|
|
||||||
../crypto/rsa/rsa_ssl.o \
|
|
||||||
../crypto/rsa/rsa_x931.o \
|
|
||||||
../crypto/rsa/rsa_x931g.o \
|
|
||||||
../crypto/sha/sha1dgst.o \
|
|
||||||
../crypto/sha/sha256.o \
|
|
||||||
../crypto/sha/sha512.o \
|
|
||||||
../crypto/thr_id.o \
|
|
||||||
../crypto/uid.o
|
|
||||||
|
|
||||||
sub_all: build_all
|
|
||||||
build_all: build_libs
|
|
||||||
|
|
||||||
build_libs: build_crypto build_fips
|
|
||||||
|
|
||||||
build_fips:
|
|
||||||
@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
|
|
||||||
|
|
||||||
build_crypto:
|
|
||||||
if [ -n "$(FIPSCANLIB)" ]; then \
|
|
||||||
EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(MODES_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
|
|
||||||
ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
|
|
||||||
else \
|
|
||||||
ARX='${AR}' ; \
|
|
||||||
fi ; export ARX ; \
|
|
||||||
if [ $(FIPSCANISTERINTERNAL) = "y" ]; then \
|
|
||||||
AS='$(PERL) $${TOP}/util/fipsas.pl $${TOP} $${<} $(CC)' ; \
|
|
||||||
else \
|
|
||||||
AS='$(CC) -c' ; \
|
|
||||||
fi ; export AS ; \
|
|
||||||
dir=crypto; target=fips; $(BUILD_ONE_CMD)
|
|
||||||
build_ssl:
|
|
||||||
@dir=ssl; target=all; $(BUILD_ONE_CMD)
|
|
||||||
build_engines:
|
|
||||||
@dir=engines; target=all; $(BUILD_ONE_CMD)
|
|
||||||
build_apps:
|
|
||||||
@dir=apps; target=all; $(BUILD_ONE_CMD)
|
|
||||||
build_tests:
|
|
||||||
@dir=test; target=fipsexe; $(BUILD_ONE_CMD)
|
|
||||||
build_algvs:
|
|
||||||
@dir=test; target=fipsalgvs; $(BUILD_ONE_CMD)
|
|
||||||
build_tools:
|
|
||||||
@dir=tools; target=all; $(BUILD_ONE_CMD)
|
|
||||||
|
|
||||||
all_testapps: build_libs build_testapps
|
|
||||||
build_testapps:
|
|
||||||
@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
|
|
||||||
|
|
||||||
libcrypto$(SHLIB_EXT): libcrypto.a build_fips
|
|
||||||
@if [ "$(SHLIB_TARGET)" != "" ]; then \
|
|
||||||
if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
|
|
||||||
FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
|
|
||||||
export CC FIPSLD_CC; \
|
|
||||||
fi; \
|
|
||||||
$(MAKE) SHLIBDIRS=crypto build-shared; \
|
|
||||||
else \
|
|
||||||
echo "There's no support for shared libraries on this platform" >&2; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
|
|
||||||
@if [ "$(SHLIB_TARGET)" != "" ]; then \
|
|
||||||
$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
|
|
||||||
else \
|
|
||||||
echo "There's no support for shared libraries on this platform" >&2; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
clean-shared:
|
|
||||||
@set -e; for i in $(SHLIBDIRS); do \
|
|
||||||
if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
|
|
||||||
tmp="$(SHARED_LIBS_LINK_EXTS)"; \
|
|
||||||
for j in $${tmp:-x}; do \
|
|
||||||
( set -x; rm -f lib$$i$$j ); \
|
|
||||||
done; \
|
|
||||||
fi; \
|
|
||||||
( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
|
|
||||||
if [ "$(PLATFORM)" = "Cygwin" ]; then \
|
|
||||||
( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
link-shared:
|
|
||||||
@ set -e; for i in $(SHLIBDIRS); do \
|
|
||||||
$(MAKE) -f $(HERE)/Makefile.shared -e $(BUILDENV) \
|
|
||||||
LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
|
|
||||||
LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
|
|
||||||
symlink.$(SHLIB_TARGET); \
|
|
||||||
libs="$$libs -l$$i"; \
|
|
||||||
done
|
|
||||||
|
|
||||||
build-shared: do_$(SHLIB_TARGET) link-shared
|
|
||||||
|
|
||||||
do_$(SHLIB_TARGET):
|
|
||||||
@ set -e; libs='-L. $(SHLIBDEPS)'; for i in $(SHLIBDIRS); do \
|
|
||||||
if [ "$$i" = "ssl" -a -n "$(LIBKRB5)" ]; then \
|
|
||||||
libs="$(LIBKRB5) $$libs"; \
|
|
||||||
fi; \
|
|
||||||
$(CLEARENV) && $(MAKE) -f Makefile.shared -e $(BUILDENV) \
|
|
||||||
LIBNAME=$$i LIBVERSION=$(SHLIB_MAJOR).$(SHLIB_MINOR) \
|
|
||||||
LIBCOMPATVERSIONS=";$(SHLIB_VERSION_HISTORY)" \
|
|
||||||
LIBDEPS="$$libs $(EX_LIBS)" \
|
|
||||||
link_a.$(SHLIB_TARGET); \
|
|
||||||
libs="-l$$i $$libs"; \
|
|
||||||
done
|
|
||||||
|
|
||||||
libcrypto.pc: Makefile
|
|
||||||
@ ( echo 'prefix=$(INSTALLTOP)'; \
|
|
||||||
echo 'exec_prefix=$${prefix}'; \
|
|
||||||
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
|
|
||||||
echo 'includedir=$${prefix}/include'; \
|
|
||||||
echo ''; \
|
|
||||||
echo 'Name: OpenSSL-libcrypto'; \
|
|
||||||
echo 'Description: OpenSSL cryptography library'; \
|
|
||||||
echo 'Version: '$(VERSION); \
|
|
||||||
echo 'Requires: '; \
|
|
||||||
echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
|
|
||||||
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
|
|
||||||
|
|
||||||
libssl.pc: Makefile
|
|
||||||
@ ( echo 'prefix=$(INSTALLTOP)'; \
|
|
||||||
echo 'exec_prefix=$${prefix}'; \
|
|
||||||
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
|
|
||||||
echo 'includedir=$${prefix}/include'; \
|
|
||||||
echo ''; \
|
|
||||||
echo 'Name: OpenSSL'; \
|
|
||||||
echo 'Description: Secure Sockets Layer and cryptography libraries'; \
|
|
||||||
echo 'Version: '$(VERSION); \
|
|
||||||
echo 'Requires: '; \
|
|
||||||
echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
|
|
||||||
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
|
|
||||||
|
|
||||||
openssl.pc: Makefile
|
|
||||||
@ ( echo 'prefix=$(INSTALLTOP)'; \
|
|
||||||
echo 'exec_prefix=$${prefix}'; \
|
|
||||||
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
|
|
||||||
echo 'includedir=$${prefix}/include'; \
|
|
||||||
echo ''; \
|
|
||||||
echo 'Name: OpenSSL'; \
|
|
||||||
echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
|
|
||||||
echo 'Version: '$(VERSION); \
|
|
||||||
echo 'Requires: '; \
|
|
||||||
echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
|
|
||||||
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
|
|
||||||
|
|
||||||
Makefile: Makefile.fips Configure config
|
|
||||||
@echo "Makefile is older than Makefile.org, Configure or config."
|
|
||||||
@echo "Reconfigure the source tree (via './config' or 'perl Configure'), please."
|
|
||||||
@false
|
|
||||||
|
|
||||||
libclean:
|
|
||||||
rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
|
|
||||||
|
|
||||||
clean: libclean
|
|
||||||
rm -f shlib/*.o *.o core a.out fluff testlog make.log cctest cctest.c
|
|
||||||
@set -e; target=clean; $(RECURSIVE_BUILD_CMD)
|
|
||||||
rm -f $(LIBS)
|
|
||||||
rm -f openssl.pc libssl.pc libcrypto.pc
|
|
||||||
rm -f speed.* .pure
|
|
||||||
rm -f $(TARFILE)
|
|
||||||
@set -e; for i in $(ONEDIRS) ;\
|
|
||||||
do \
|
|
||||||
rm -fr $$i/*; \
|
|
||||||
done
|
|
||||||
|
|
||||||
makefile.one: files
|
|
||||||
$(PERL) util/mk1mf.pl >makefile.one; \
|
|
||||||
sh util/do_ms.sh
|
|
||||||
|
|
||||||
files:
|
|
||||||
$(PERL) $(TOP)/util/files.pl Makefile > $(TOP)/MINFO
|
|
||||||
@set -e; target=files; $(RECURSIVE_BUILD_CMD)
|
|
||||||
|
|
||||||
links:
|
|
||||||
@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
|
|
||||||
@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
|
|
||||||
@set -e; dir=fips target=links; $(BUILD_ONE_CMD)
|
|
||||||
@(cd crypto ; TEST='' SDIRS='$(LINKDIRS)' $(MAKE) -e links)
|
|
||||||
|
|
||||||
gentests:
|
|
||||||
@(cd test && echo "generating dummy tests (if needed)..." && \
|
|
||||||
$(CLEARENV) && $(MAKE) -e $(BUILDENV) TESTS='$(TESTS)' OPENSSL_DEBUG_MEMORY=on generate );
|
|
||||||
|
|
||||||
dclean:
|
|
||||||
rm -rf *.bak include/openssl certs/.0
|
|
||||||
@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
|
|
||||||
|
|
||||||
test: tests
|
|
||||||
|
|
||||||
tests:
|
|
||||||
@echo "Not implemented in FIPS build" ; false
|
|
||||||
|
|
||||||
report:
|
|
||||||
@$(PERL) util/selftest.pl
|
|
||||||
|
|
||||||
depend:
|
|
||||||
@echo make depend not supported ; false
|
|
||||||
|
|
||||||
lint:
|
|
||||||
@set -e; target=lint; $(RECURSIVE_BUILD_CMD)
|
|
||||||
|
|
||||||
tags:
|
|
||||||
rm -f TAGS
|
|
||||||
find . -name '[^.]*.[ch]' | xargs etags -a
|
|
||||||
|
|
||||||
errors:
|
|
||||||
$(PERL) util/mkerr.pl -recurse -write
|
|
||||||
(cd engines; $(MAKE) PERL=$(PERL) errors)
|
|
||||||
$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
|
|
||||||
|
|
||||||
stacks:
|
|
||||||
$(PERL) util/mkstack.pl -write
|
|
||||||
|
|
||||||
util/libeay.num::
|
|
||||||
$(PERL) util/mkdef.pl crypto update
|
|
||||||
|
|
||||||
util/ssleay.num::
|
|
||||||
$(PERL) util/mkdef.pl ssl update
|
|
||||||
|
|
||||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
|
|
||||||
$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
|
|
||||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
|
|
||||||
$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
|
|
||||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
|
|
||||||
$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
|
|
||||||
|
|
||||||
apps/openssl-vms.cnf: apps/openssl.cnf
|
|
||||||
$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
|
|
||||||
|
|
||||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
|
|
||||||
$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
|
|
||||||
|
|
||||||
|
|
||||||
TABLE: Configure
|
|
||||||
(echo 'Output of `Configure TABLE'"':"; \
|
|
||||||
$(PERL) Configure TABLE) > TABLE
|
|
||||||
|
|
||||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
|
|
||||||
|
|
||||||
# Build distribution tar-file. As the list of files returned by "find" is
|
|
||||||
# pretty long, on several platforms a "too many arguments" error or similar
|
|
||||||
# would occur. Therefore the list of files is temporarily stored into a file
|
|
||||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
|
|
||||||
# tar does not support the --files-from option.
|
|
||||||
tar:
|
|
||||||
find . -type d -print | xargs chmod 755
|
|
||||||
find . -type f -print | xargs chmod a+r
|
|
||||||
find . -type f -perm -0100 -print | xargs chmod a+x
|
|
||||||
find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | $(BUILDENV) LINKDIRS='$(LINKDIRS)' $(PERL) util/fipsdist.pl | sort > ../$(TARFILE).list; \
|
|
||||||
$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
|
|
||||||
tardy --user_number=0 --user_name=openssl \
|
|
||||||
--group_number=0 --group_name=openssl \
|
|
||||||
--prefix=openssl-$(VERSION) - |\
|
|
||||||
gzip --best >../$(TARFILE).gz; \
|
|
||||||
rm -f ../$(TARFILE).list; \
|
|
||||||
ls -l ../$(TARFILE).gz
|
|
||||||
|
|
||||||
tar-snap:
|
|
||||||
@$(TAR) $(TARFLAGS) -cvf - \
|
|
||||||
`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
|
|
||||||
tardy --user_number=0 --user_name=openssl \
|
|
||||||
--group_number=0 --group_name=openssl \
|
|
||||||
--prefix=openssl-$(VERSION) - > ../$(TARFILE);\
|
|
||||||
ls -l ../$(TARFILE)
|
|
||||||
|
|
||||||
dist:
|
|
||||||
$(PERL) Configure dist fipscanisteronly
|
|
||||||
@$(MAKE) dist_pem_h
|
|
||||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
|
||||||
@$(MAKE) -f Makefile.fips TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
|
|
||||||
|
|
||||||
dist_pem_h:
|
|
||||||
(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
|
|
||||||
|
|
||||||
install: all install_sw
|
|
||||||
|
|
||||||
install_sw:
|
|
||||||
@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
|
|
||||||
$(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
|
|
||||||
$(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl
|
|
||||||
@set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
|
|
||||||
do \
|
|
||||||
(cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
|
|
||||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
|
|
||||||
done;
|
|
||||||
@set -e; target=install; $(RECURSIVE_BUILD_CMD)
|
|
||||||
|
|
||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
|
||||||
270
Makefile.org
270
Makefile.org
@@ -78,7 +78,7 @@ LIBDIR=lib
|
|||||||
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
|
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
|
||||||
# gcc, then the driver will automatically translate it to -xarch=v8plus
|
# gcc, then the driver will automatically translate it to -xarch=v8plus
|
||||||
# and pass it down to assembler.
|
# and pass it down to assembler.
|
||||||
#AS=$(CC) -c
|
AS=$(CC) -c
|
||||||
ASFLAG=$(CFLAG)
|
ASFLAG=$(CFLAG)
|
||||||
|
|
||||||
# For x86 assembler: Set PROCESSOR to 386 if you want to support
|
# For x86 assembler: Set PROCESSOR to 386 if you want to support
|
||||||
@@ -88,6 +88,7 @@ PROCESSOR=
|
|||||||
# CPUID module collects small commonly used assembler snippets
|
# CPUID module collects small commonly used assembler snippets
|
||||||
CPUID_OBJ=
|
CPUID_OBJ=
|
||||||
BN_ASM= bn_asm.o
|
BN_ASM= bn_asm.o
|
||||||
|
EC_ASM=
|
||||||
DES_ENC= des_enc.o fcrypt_b.o
|
DES_ENC= des_enc.o fcrypt_b.o
|
||||||
AES_ENC= aes_core.o aes_cbc.o
|
AES_ENC= aes_core.o aes_cbc.o
|
||||||
BF_ENC= bf_enc.o
|
BF_ENC= bf_enc.o
|
||||||
@@ -111,6 +112,9 @@ LIBKRB5=
|
|||||||
ZLIB_INCLUDE=
|
ZLIB_INCLUDE=
|
||||||
LIBZLIB=
|
LIBZLIB=
|
||||||
|
|
||||||
|
# TOP level FIPS install directory.
|
||||||
|
FIPSDIR=
|
||||||
|
|
||||||
# This is the location of fipscanister.o and friends.
|
# This is the location of fipscanister.o and friends.
|
||||||
# The FIPS module build will place it $(INSTALLTOP)/lib
|
# The FIPS module build will place it $(INSTALLTOP)/lib
|
||||||
# but since $(INSTALLTOP) can only take the default value
|
# but since $(INSTALLTOP) can only take the default value
|
||||||
@@ -118,12 +122,7 @@ LIBZLIB=
|
|||||||
# $(INSTALLTOP) for this build may be different so hard
|
# $(INSTALLTOP) for this build may be different so hard
|
||||||
# code the path.
|
# code the path.
|
||||||
|
|
||||||
FIPSLIBDIR=/usr/local/ssl/$(LIBDIR)/
|
FIPSLIBDIR=
|
||||||
|
|
||||||
# This is set to "y" if fipscanister.o is compiled internally as
|
|
||||||
# opposed to coming from an external validated location.
|
|
||||||
|
|
||||||
FIPSCANISTERINTERNAL=n
|
|
||||||
|
|
||||||
# The location of the library which contains fipscanister.o
|
# The location of the library which contains fipscanister.o
|
||||||
# normally it will be libcrypto unless fipsdso is set in which
|
# normally it will be libcrypto unless fipsdso is set in which
|
||||||
@@ -137,7 +136,7 @@ FIPSCANLIB=
|
|||||||
|
|
||||||
BASEADDR=
|
BASEADDR=
|
||||||
|
|
||||||
DIRS= crypto fips ssl engines apps test tools
|
DIRS= crypto ssl engines apps test tools
|
||||||
ENGDIRS= ccgost
|
ENGDIRS= ccgost
|
||||||
SHLIBDIRS= crypto ssl
|
SHLIBDIRS= crypto ssl
|
||||||
|
|
||||||
@@ -181,12 +180,11 @@ SHARED_LDFLAGS=
|
|||||||
GENERAL= Makefile
|
GENERAL= Makefile
|
||||||
BASENAME= openssl
|
BASENAME= openssl
|
||||||
NAME= $(BASENAME)-$(VERSION)
|
NAME= $(BASENAME)-$(VERSION)
|
||||||
TARFILE= $(NAME).tar
|
TARFILE= ../$(NAME).tar
|
||||||
WTARFILE= $(NAME)-win.tar
|
|
||||||
EXHEADER= e_os2.h
|
EXHEADER= e_os2.h
|
||||||
HEADER= e_os.h
|
HEADER= e_os.h
|
||||||
|
|
||||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
|
all: Makefile build_all
|
||||||
|
|
||||||
# as we stick to -e, CLEARENV ensures that local variables in lower
|
# as we stick to -e, CLEARENV ensures that local variables in lower
|
||||||
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
|
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
|
||||||
@@ -200,13 +198,15 @@ CLEARENV= TOP= && unset TOP $${LIB+LIB} $${LIBS+LIBS} \
|
|||||||
$${EXHEADER+EXHEADER} $${HEADER+HEADER} \
|
$${EXHEADER+EXHEADER} $${HEADER+HEADER} \
|
||||||
$${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \
|
$${GENERAL+GENERAL} $${CFLAGS+CFLAGS} \
|
||||||
$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \
|
$${ASFLAGS+ASFLAGS} $${AFLAGS+AFLAGS} \
|
||||||
$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} \
|
$${LDCMD+LDCMD} $${LDFLAGS+LDFLAGS} $${SCRIPTS+SCRIPTS} \
|
||||||
$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \
|
$${SHAREDCMD+SHAREDCMD} $${SHAREDFLAGS+SHAREDFLAGS} \
|
||||||
$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
|
$${SHARED_LIB+SHARED_LIB} $${LIBEXTRAS+LIBEXTRAS}
|
||||||
|
|
||||||
BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
|
# LC_ALL=C ensures that error [and other] messages are delivered in
|
||||||
|
# same language for uniform treatment.
|
||||||
|
BUILDENV= LC_ALL=C PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)'\
|
||||||
CC='$(CC)' CFLAG='$(CFLAG)' \
|
CC='$(CC)' CFLAG='$(CFLAG)' \
|
||||||
ASFLAG='$(CFLAG) -c' \
|
AS='$(CC)' ASFLAG='$(CFLAG) -c' \
|
||||||
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
|
AR='$(AR)' NM='$(NM)' RANLIB='$(RANLIB)' \
|
||||||
CROSS_COMPILE='$(CROSS_COMPILE)' \
|
CROSS_COMPILE='$(CROSS_COMPILE)' \
|
||||||
PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \
|
PERL='$(PERL)' ENGDIRS='$(ENGDIRS)' \
|
||||||
@@ -223,8 +223,8 @@ BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
|
|||||||
EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \
|
EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \
|
||||||
SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \
|
SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \
|
||||||
PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \
|
PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \
|
||||||
CPUID_OBJ='$(CPUID_OBJ)' \
|
CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)' \
|
||||||
BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' \
|
EC_ASM='$(EC_ASM)' DES_ENC='$(DES_ENC)' \
|
||||||
AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \
|
AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \
|
||||||
BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \
|
BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \
|
||||||
RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \
|
RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \
|
||||||
@@ -236,9 +236,8 @@ BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
|
|||||||
ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)' \
|
ENGINES_ASM_OBJ='$(ENGINES_ASM_OBJ)' \
|
||||||
PERLASM_SCHEME='$(PERLASM_SCHEME)' \
|
PERLASM_SCHEME='$(PERLASM_SCHEME)' \
|
||||||
FIPSLIBDIR='${FIPSLIBDIR}' \
|
FIPSLIBDIR='${FIPSLIBDIR}' \
|
||||||
|
FIPSDIR='${FIPSDIR}' \
|
||||||
FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}" \
|
FIPSCANLIB="$${FIPSCANLIB:-$(FIPSCANLIB)}" \
|
||||||
FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}' \
|
|
||||||
FIPS_EX_OBJ='${FIPS_EX_OBJ}' \
|
|
||||||
THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
|
THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
|
||||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
|
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
|
||||||
# which in turn eliminates ambiguities in variable treatment with -e.
|
# which in turn eliminates ambiguities in variable treatment with -e.
|
||||||
@@ -270,132 +269,47 @@ BUILD_ONE_CMD=\
|
|||||||
reflect:
|
reflect:
|
||||||
@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
|
@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
|
||||||
|
|
||||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
|
|
||||||
../crypto/aes/aes_ecb.o \
|
|
||||||
../crypto/aes/aes_ofb.o \
|
|
||||||
../crypto/bn/bn_add.o \
|
|
||||||
../crypto/bn/bn_blind.o \
|
|
||||||
../crypto/bn/bn_ctx.o \
|
|
||||||
../crypto/bn/bn_div.o \
|
|
||||||
../crypto/bn/bn_exp2.o \
|
|
||||||
../crypto/bn/bn_exp.o \
|
|
||||||
../crypto/bn/bn_gcd.o \
|
|
||||||
../crypto/bn/bn_gf2m.o \
|
|
||||||
../crypto/bn/bn_lib.o \
|
|
||||||
../crypto/bn/bn_mod.o \
|
|
||||||
../crypto/bn/bn_mont.o \
|
|
||||||
../crypto/bn/bn_mul.o \
|
|
||||||
../crypto/bn/bn_nist.o \
|
|
||||||
../crypto/bn/bn_prime.o \
|
|
||||||
../crypto/bn/bn_rand.o \
|
|
||||||
../crypto/bn/bn_recp.o \
|
|
||||||
../crypto/bn/bn_shift.o \
|
|
||||||
../crypto/bn/bn_sqr.o \
|
|
||||||
../crypto/bn/bn_word.o \
|
|
||||||
../crypto/bn/bn_x931p.o \
|
|
||||||
../crypto/buffer/buf_str.o \
|
|
||||||
../crypto/cmac/cmac.o \
|
|
||||||
../crypto/cryptlib.o \
|
|
||||||
../crypto/des/cfb64ede.o \
|
|
||||||
../crypto/des/cfb64enc.o \
|
|
||||||
../crypto/des/cfb_enc.o \
|
|
||||||
../crypto/des/ecb3_enc.o \
|
|
||||||
../crypto/des/ofb64ede.o \
|
|
||||||
../crypto/des/fcrypt.o \
|
|
||||||
../crypto/des/set_key.o \
|
|
||||||
../crypto/dh/dh_check.o \
|
|
||||||
../crypto/dh/dh_gen.o \
|
|
||||||
../crypto/dh/dh_key.o \
|
|
||||||
../crypto/dsa/dsa_gen.o \
|
|
||||||
../crypto/dsa/dsa_key.o \
|
|
||||||
../crypto/dsa/dsa_ossl.o \
|
|
||||||
../crypto/ec/ec_curve.o \
|
|
||||||
../crypto/ec/ec_cvt.o \
|
|
||||||
../crypto/ec/ec_key.o \
|
|
||||||
../crypto/ec/ec_lib.o \
|
|
||||||
../crypto/ec/ecp_mont.o \
|
|
||||||
../crypto/ec/ec_mult.o \
|
|
||||||
../crypto/ec/ecp_nist.o \
|
|
||||||
../crypto/ec/ecp_smpl.o \
|
|
||||||
../crypto/ec/ec2_mult.o \
|
|
||||||
../crypto/ec/ec2_smpl.o \
|
|
||||||
../crypto/ecdh/ech_key.o \
|
|
||||||
../crypto/ecdh/ech_ossl.o \
|
|
||||||
../crypto/ecdsa/ecs_ossl.o \
|
|
||||||
../crypto/evp/e_aes.o \
|
|
||||||
../crypto/evp/e_des3.o \
|
|
||||||
../crypto/evp/e_null.o \
|
|
||||||
../crypto/evp/m_sha1.o \
|
|
||||||
../crypto/evp/m_dss1.o \
|
|
||||||
../crypto/evp/m_dss.o \
|
|
||||||
../crypto/evp/m_ecdsa.o \
|
|
||||||
../crypto/hmac/hmac.o \
|
|
||||||
../crypto/modes/cbc128.o \
|
|
||||||
../crypto/modes/ccm128.o \
|
|
||||||
../crypto/modes/cfb128.o \
|
|
||||||
../crypto/modes/ctr128.o \
|
|
||||||
../crypto/modes/gcm128.o \
|
|
||||||
../crypto/modes/ofb128.o \
|
|
||||||
../crypto/modes/xts128.o \
|
|
||||||
../crypto/rsa/rsa_eay.o \
|
|
||||||
../crypto/rsa/rsa_gen.o \
|
|
||||||
../crypto/rsa/rsa_crpt.o \
|
|
||||||
../crypto/rsa/rsa_none.o \
|
|
||||||
../crypto/rsa/rsa_oaep.o \
|
|
||||||
../crypto/rsa/rsa_pk1.o \
|
|
||||||
../crypto/rsa/rsa_pss.o \
|
|
||||||
../crypto/rsa/rsa_ssl.o \
|
|
||||||
../crypto/rsa/rsa_x931.o \
|
|
||||||
../crypto/rsa/rsa_x931g.o \
|
|
||||||
../crypto/sha/sha1dgst.o \
|
|
||||||
../crypto/sha/sha256.o \
|
|
||||||
../crypto/sha/sha512.o \
|
|
||||||
../crypto/thr_id.o \
|
|
||||||
../crypto/uid.o
|
|
||||||
|
|
||||||
sub_all: build_all
|
sub_all: build_all
|
||||||
|
|
||||||
build_all: build_libs build_apps build_tests build_tools
|
build_all: build_libs build_apps build_tests build_tools
|
||||||
|
|
||||||
build_libs: build_crypto build_fips build_ssl build_engines
|
build_libs: build_libcrypto build_libssl openssl.pc
|
||||||
|
|
||||||
build_fips:
|
build_libcrypto: build_crypto build_engines libcrypto.pc
|
||||||
@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
|
build_libssl: build_ssl libssl.pc
|
||||||
|
|
||||||
build_crypto:
|
build_crypto:
|
||||||
if [ -n "$(FIPSCANLIB)" ]; then \
|
@dir=crypto; target=all; $(BUILD_ONE_CMD)
|
||||||
EXCL_OBJ='$(AES_ENC) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(MODES_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
|
build_ssl: build_crypto
|
||||||
ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
|
|
||||||
else \
|
|
||||||
ARX='${AR}' ; \
|
|
||||||
fi ; export ARX ; \
|
|
||||||
if [ $(FIPSCANISTERINTERNAL) = "y" ]; then \
|
|
||||||
AS='$(PERL) $${TOP}/util/fipsas.pl $${TOP} $${<} $(CC) -c' ; \
|
|
||||||
else \
|
|
||||||
AS='$(CC) -c' ; \
|
|
||||||
fi ; export AS ; \
|
|
||||||
dir=crypto; target=all; $(BUILD_ONE_CMD)
|
|
||||||
build_ssl:
|
|
||||||
@dir=ssl; target=all; $(BUILD_ONE_CMD)
|
@dir=ssl; target=all; $(BUILD_ONE_CMD)
|
||||||
build_engines:
|
build_engines: build_crypto
|
||||||
@dir=engines; target=all; AS='$(CC) -c'; export AS; $(BUILD_ONE_CMD)
|
@dir=engines; target=all; $(BUILD_ONE_CMD)
|
||||||
build_apps:
|
build_apps: build_libs
|
||||||
@dir=apps; target=all; $(BUILD_ONE_CMD)
|
@dir=apps; target=all; $(BUILD_ONE_CMD)
|
||||||
build_tests:
|
build_tests: build_libs
|
||||||
@dir=test; target=all; $(BUILD_ONE_CMD)
|
@dir=test; target=all; $(BUILD_ONE_CMD)
|
||||||
build_tools:
|
build_tools: build_libs
|
||||||
@dir=tools; target=all; $(BUILD_ONE_CMD)
|
@dir=tools; target=all; $(BUILD_ONE_CMD)
|
||||||
|
|
||||||
all_testapps: build_libs build_testapps
|
all_testapps: build_libs build_testapps
|
||||||
build_testapps:
|
build_testapps:
|
||||||
@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
|
@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
|
||||||
|
|
||||||
libcrypto$(SHLIB_EXT): libcrypto.a build_fips
|
fips_premain_dso$(EXE_EXT): libcrypto.a
|
||||||
|
[ -z "$(FIPSCANLIB)" ] || $(CC) $(CFLAG) -Iinclude \
|
||||||
|
-DFINGERPRINT_PREMAIN_DSO_LOAD -o $@ \
|
||||||
|
$(FIPSLIBDIR)fips_premain.c $(FIPSLIBDIR)fipscanister.o \
|
||||||
|
libcrypto.a $(EX_LIBS)
|
||||||
|
|
||||||
|
libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
|
||||||
@if [ "$(SHLIB_TARGET)" != "" ]; then \
|
@if [ "$(SHLIB_TARGET)" != "" ]; then \
|
||||||
if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
|
if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
|
||||||
FIPSLD_CC="$(CC)"; CC=fips/fipsld; \
|
FIPSLD_LIBCRYPTO=libcrypto.a ; \
|
||||||
export CC FIPSLD_CC; \
|
FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \
|
||||||
|
export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \
|
||||||
fi; \
|
fi; \
|
||||||
$(MAKE) -e SHLIBDIRS=crypto build-shared; \
|
$(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared && \
|
||||||
|
(touch -c fips_premain_dso$(EXE_EXT) || :); \
|
||||||
else \
|
else \
|
||||||
echo "There's no support for shared libraries on this platform" >&2; \
|
echo "There's no support for shared libraries on this platform" >&2; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
@@ -418,7 +332,7 @@ clean-shared:
|
|||||||
done; \
|
done; \
|
||||||
fi; \
|
fi; \
|
||||||
( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
|
( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
|
||||||
if [ "$(PLATFORM)" = "Cygwin" ]; then \
|
if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
|
||||||
( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
|
( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
@@ -457,7 +371,8 @@ libcrypto.pc: Makefile
|
|||||||
echo 'Description: OpenSSL cryptography library'; \
|
echo 'Description: OpenSSL cryptography library'; \
|
||||||
echo 'Version: '$(VERSION); \
|
echo 'Version: '$(VERSION); \
|
||||||
echo 'Requires: '; \
|
echo 'Requires: '; \
|
||||||
echo 'Libs: -L$${libdir} -lcrypto $(EX_LIBS)'; \
|
echo 'Libs: -L$${libdir} -lcrypto'; \
|
||||||
|
echo 'Libs.private: $(EX_LIBS)'; \
|
||||||
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
|
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libcrypto.pc
|
||||||
|
|
||||||
libssl.pc: Makefile
|
libssl.pc: Makefile
|
||||||
@@ -466,11 +381,12 @@ libssl.pc: Makefile
|
|||||||
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
|
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
|
||||||
echo 'includedir=$${prefix}/include'; \
|
echo 'includedir=$${prefix}/include'; \
|
||||||
echo ''; \
|
echo ''; \
|
||||||
echo 'Name: OpenSSL'; \
|
echo 'Name: OpenSSL-libssl'; \
|
||||||
echo 'Description: Secure Sockets Layer and cryptography libraries'; \
|
echo 'Description: Secure Sockets Layer and cryptography libraries'; \
|
||||||
echo 'Version: '$(VERSION); \
|
echo 'Version: '$(VERSION); \
|
||||||
echo 'Requires: '; \
|
echo 'Requires.private: libcrypto'; \
|
||||||
echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
|
echo 'Libs: -L$${libdir} -lssl'; \
|
||||||
|
echo 'Libs.private: $(EX_LIBS)'; \
|
||||||
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
|
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
|
||||||
|
|
||||||
openssl.pc: Makefile
|
openssl.pc: Makefile
|
||||||
@@ -482,9 +398,7 @@ openssl.pc: Makefile
|
|||||||
echo 'Name: OpenSSL'; \
|
echo 'Name: OpenSSL'; \
|
||||||
echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
|
echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
|
||||||
echo 'Version: '$(VERSION); \
|
echo 'Version: '$(VERSION); \
|
||||||
echo 'Requires: '; \
|
echo 'Requires: libssl libcrypto' ) > openssl.pc
|
||||||
echo 'Libs: -L$${libdir} -lssl -lcrypto $(EX_LIBS)'; \
|
|
||||||
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
|
|
||||||
|
|
||||||
Makefile: Makefile.org Configure config
|
Makefile: Makefile.org Configure config
|
||||||
@echo "Makefile is older than Makefile.org, Configure or config."
|
@echo "Makefile is older than Makefile.org, Configure or config."
|
||||||
@@ -492,7 +406,7 @@ Makefile: Makefile.org Configure config
|
|||||||
@false
|
@false
|
||||||
|
|
||||||
libclean:
|
libclean:
|
||||||
rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a */lib */*/lib
|
rm -f *.map *.so *.so.* *.dylib *.dll engines/*.so engines/*.dll engines/*.dylib *.a engines/*.a */lib */*/lib
|
||||||
|
|
||||||
clean: libclean
|
clean: libclean
|
||||||
rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
|
rm -f shlib/*.o *.o core a.out fluff rehash.time testlog make.log cctest cctest.c
|
||||||
@@ -518,9 +432,6 @@ links:
|
|||||||
@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
|
@$(PERL) $(TOP)/util/mkdir-p.pl include/openssl
|
||||||
@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
|
@$(PERL) $(TOP)/util/mklink.pl include/openssl $(EXHEADER)
|
||||||
@set -e; target=links; $(RECURSIVE_BUILD_CMD)
|
@set -e; target=links; $(RECURSIVE_BUILD_CMD)
|
||||||
@if [ -z "$(FIPSCANLIB)" ]; then \
|
|
||||||
set -e; target=links; dir=fips ; $(BUILD_CMD) ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
gentests:
|
gentests:
|
||||||
@(cd test && echo "generating dummy tests (if needed)..." && \
|
@(cd test && echo "generating dummy tests (if needed)..." && \
|
||||||
@@ -537,7 +448,7 @@ rehash.time: certs apps
|
|||||||
[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
|
[ -x "apps/openssl.exe" ] && OPENSSL="apps/openssl.exe" || :; \
|
||||||
OPENSSL_DEBUG_MEMORY=on; \
|
OPENSSL_DEBUG_MEMORY=on; \
|
||||||
export OPENSSL OPENSSL_DEBUG_MEMORY; \
|
export OPENSSL OPENSSL_DEBUG_MEMORY; \
|
||||||
$(PERL) tools/c_rehash certs) && \
|
$(PERL) tools/c_rehash certs/demo) && \
|
||||||
touch rehash.time; \
|
touch rehash.time; \
|
||||||
else :; fi
|
else :; fi
|
||||||
|
|
||||||
@@ -551,6 +462,9 @@ tests: rehash
|
|||||||
report:
|
report:
|
||||||
@$(PERL) util/selftest.pl
|
@$(PERL) util/selftest.pl
|
||||||
|
|
||||||
|
update: errors stacks util/libeay.num util/ssleay.num TABLE
|
||||||
|
@set -e; target=update; $(RECURSIVE_BUILD_CMD)
|
||||||
|
|
||||||
depend:
|
depend:
|
||||||
@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
|
@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
|
||||||
|
|
||||||
@@ -562,9 +476,9 @@ tags:
|
|||||||
find . -name '[^.]*.[ch]' | xargs etags -a
|
find . -name '[^.]*.[ch]' | xargs etags -a
|
||||||
|
|
||||||
errors:
|
errors:
|
||||||
|
$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
|
||||||
$(PERL) util/mkerr.pl -recurse -write
|
$(PERL) util/mkerr.pl -recurse -write
|
||||||
(cd engines; $(MAKE) PERL=$(PERL) errors)
|
(cd engines; $(MAKE) PERL=$(PERL) errors)
|
||||||
$(PERL) util/ck_errf.pl -strict */*.c */*/*.c
|
|
||||||
|
|
||||||
stacks:
|
stacks:
|
||||||
$(PERL) util/mkstack.pl -write
|
$(PERL) util/mkstack.pl -write
|
||||||
@@ -575,60 +489,44 @@ util/libeay.num::
|
|||||||
util/ssleay.num::
|
util/ssleay.num::
|
||||||
$(PERL) util/mkdef.pl ssl update
|
$(PERL) util/mkdef.pl ssl update
|
||||||
|
|
||||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
|
|
||||||
$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
|
|
||||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
|
|
||||||
$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
|
|
||||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
|
|
||||||
$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
|
|
||||||
|
|
||||||
apps/openssl-vms.cnf: apps/openssl.cnf
|
|
||||||
$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
|
|
||||||
|
|
||||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
|
|
||||||
$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
|
|
||||||
|
|
||||||
|
|
||||||
TABLE: Configure
|
TABLE: Configure
|
||||||
(echo 'Output of `Configure TABLE'"':"; \
|
(echo 'Output of `Configure TABLE'"':"; \
|
||||||
$(PERL) Configure TABLE) > TABLE
|
$(PERL) Configure TABLE) > TABLE
|
||||||
|
|
||||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
|
|
||||||
|
|
||||||
# Build distribution tar-file. As the list of files returned by "find" is
|
# Build distribution tar-file. As the list of files returned by "find" is
|
||||||
# pretty long, on several platforms a "too many arguments" error or similar
|
# pretty long, on several platforms a "too many arguments" error or similar
|
||||||
# would occur. Therefore the list of files is temporarily stored into a file
|
# would occur. Therefore the list of files is temporarily stored into a file
|
||||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
|
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
|
||||||
# tar does not support the --files-from option.
|
# tar does not support the --files-from option.
|
||||||
tar:
|
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from $(TARFILE).list \
|
||||||
|
--owner 0 --group 0 \
|
||||||
|
--transform 's|^|$(NAME)/|' \
|
||||||
|
-cvf -
|
||||||
|
|
||||||
|
$(TARFILE).list:
|
||||||
|
find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
|
||||||
|
\! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \
|
||||||
|
\( \! -name '*test' -o -name bctest -o -name pod2mantest \) \
|
||||||
|
\! -name '.#*' \! -name '*~' \! -type l \
|
||||||
|
| sort > $(TARFILE).list
|
||||||
|
|
||||||
|
tar: $(TARFILE).list
|
||||||
find . -type d -print | xargs chmod 755
|
find . -type d -print | xargs chmod 755
|
||||||
find . -type f -print | xargs chmod a+r
|
find . -type f -print | xargs chmod a+r
|
||||||
find . -type f -perm -0100 -print | xargs chmod a+x
|
find . -type f -perm -0100 -print | xargs chmod a+x
|
||||||
find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
|
$(TAR_COMMAND) | gzip --best > $(TARFILE).gz
|
||||||
$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
|
rm -f $(TARFILE).list
|
||||||
tardy --user_number=0 --user_name=openssl \
|
ls -l $(TARFILE).gz
|
||||||
--group_number=0 --group_name=openssl \
|
|
||||||
--prefix=openssl-$(VERSION) - |\
|
|
||||||
gzip --best >../$(TARFILE).gz; \
|
|
||||||
rm -f ../$(TARFILE).list; \
|
|
||||||
ls -l ../$(TARFILE).gz
|
|
||||||
|
|
||||||
tar-snap:
|
tar-snap: $(TARFILE).list
|
||||||
@$(TAR) $(TARFLAGS) -cvf - \
|
$(TAR_COMMAND) > $(TARFILE)
|
||||||
`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*' \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
|
rm -f $(TARFILE).list
|
||||||
tardy --user_number=0 --user_name=openssl \
|
ls -l $(TARFILE)
|
||||||
--group_number=0 --group_name=openssl \
|
|
||||||
--prefix=openssl-$(VERSION) - > ../$(TARFILE);\
|
|
||||||
ls -l ../$(TARFILE)
|
|
||||||
|
|
||||||
dist:
|
dist:
|
||||||
$(PERL) Configure dist
|
$(PERL) Configure dist
|
||||||
@$(MAKE) dist_pem_h
|
|
||||||
@$(MAKE) SDIRS='$(SDIRS)' clean
|
@$(MAKE) SDIRS='$(SDIRS)' clean
|
||||||
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' tar
|
@$(MAKE) TAR='$(TAR)' TARFLAGS='$(TARFLAGS)' $(DISTTARVARS) tar
|
||||||
|
|
||||||
dist_pem_h:
|
|
||||||
(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
|
|
||||||
|
|
||||||
install: all install_docs install_sw
|
install: all install_docs install_sw
|
||||||
|
|
||||||
@@ -663,11 +561,7 @@ install_sw:
|
|||||||
do \
|
do \
|
||||||
if [ -f "$$i" -o -f "$$i.a" ]; then \
|
if [ -f "$$i" -o -f "$$i.a" ]; then \
|
||||||
( echo installing $$i; \
|
( echo installing $$i; \
|
||||||
if [ "$(PLATFORM)" != "Cygwin" ]; then \
|
if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
|
||||||
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
|
||||||
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
|
||||||
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
|
|
||||||
else \
|
|
||||||
c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
|
c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
|
||||||
cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
|
cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
|
||||||
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
|
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
|
||||||
@@ -675,6 +569,10 @@ install_sw:
|
|||||||
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
||||||
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
||||||
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
|
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
|
||||||
|
else \
|
||||||
|
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
||||||
|
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
|
||||||
|
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
|
||||||
fi ); \
|
fi ); \
|
||||||
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
|
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
|
||||||
( case $$i in \
|
( case $$i in \
|
||||||
@@ -707,6 +605,10 @@ install_sw:
|
|||||||
|
|
||||||
install_html_docs:
|
install_html_docs:
|
||||||
here="`pwd`"; \
|
here="`pwd`"; \
|
||||||
|
filecase=; \
|
||||||
|
case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
|
||||||
|
filecase=-i; \
|
||||||
|
esac; \
|
||||||
for subdir in apps crypto ssl; do \
|
for subdir in apps crypto ssl; do \
|
||||||
mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
|
mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
|
||||||
for i in doc/$$subdir/*.pod; do \
|
for i in doc/$$subdir/*.pod; do \
|
||||||
@@ -735,9 +637,9 @@ install_docs:
|
|||||||
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
|
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
|
||||||
here="`pwd`"; \
|
here="`pwd`"; \
|
||||||
filecase=; \
|
filecase=; \
|
||||||
if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
|
case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
|
||||||
filecase=-i; \
|
filecase=-i; \
|
||||||
fi; \
|
esac; \
|
||||||
set -e; for i in doc/apps/*.pod; do \
|
set -e; for i in doc/apps/*.pod; do \
|
||||||
fn=`basename $$i .pod`; \
|
fn=`basename $$i .pod`; \
|
||||||
sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
|
sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ link_o.cygwin:
|
|||||||
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
|
SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
|
||||||
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||||
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-s,-Bsymbolic"; \
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base $$deffile -Wl,-Bsymbolic"; \
|
||||||
$(LINK_SO_O)
|
$(LINK_SO_O)
|
||||||
#for mingw target if def-file is in use dll-name should match library-name
|
#for mingw target if def-file is in use dll-name should match library-name
|
||||||
link_a.cygwin:
|
link_a.cygwin:
|
||||||
@@ -289,7 +289,7 @@ link_a.cygwin:
|
|||||||
SHLIB_SOVER=32; \
|
SHLIB_SOVER=32; \
|
||||||
extras="$(LIBNAME).def"; \
|
extras="$(LIBNAME).def"; \
|
||||||
$(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \
|
$(PERL) util/mkdef.pl 32 $$SHLIB > $$extras; \
|
||||||
base=; [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
|
base=; [ $(LIBNAME) = "crypto" -a -n "$(FIPSCANLIB)" ] && base=-Wl,--image-base,0x63000000; \
|
||||||
fi; \
|
fi; \
|
||||||
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
|
dll_name=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX; \
|
||||||
$(PERL) util/mkrc.pl $$dll_name | \
|
$(PERL) util/mkrc.pl $$dll_name | \
|
||||||
@@ -297,7 +297,7 @@ link_a.cygwin:
|
|||||||
extras="$$extras rc.o"; \
|
extras="$$extras rc.o"; \
|
||||||
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
ALLSYMSFLAGS='-Wl,--whole-archive'; \
|
||||||
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
|
||||||
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-s,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \
|
SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a $$extras"; \
|
||||||
[ -f apps/$$dll_name ] && rm apps/$$dll_name; \
|
[ -f apps/$$dll_name ] && rm apps/$$dll_name; \
|
||||||
[ -f test/$$dll_name ] && rm test/$$dll_name; \
|
[ -f test/$$dll_name ] && rm test/$$dll_name; \
|
||||||
$(LINK_SO_A) || exit 1; \
|
$(LINK_SO_A) || exit 1; \
|
||||||
|
|||||||
318
NEWS
318
NEWS
@@ -5,11 +5,206 @@
|
|||||||
This file gives a brief overview of the major changes between each OpenSSL
|
This file gives a brief overview of the major changes between each OpenSSL
|
||||||
release. For more details please read the CHANGES file.
|
release. For more details please read the CHANGES file.
|
||||||
|
|
||||||
Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d:
|
Major changes between OpenSSL 1.0.2f and OpenSSL 1.0.2g [1 Mar 2016]
|
||||||
|
|
||||||
|
o Disable weak ciphers in SSLv3 and up in default builds of OpenSSL.
|
||||||
|
o Disable SSLv2 default build, default negotiation and weak ciphers
|
||||||
|
(CVE-2016-0800)
|
||||||
|
o Fix a double-free in DSA code (CVE-2016-0705)
|
||||||
|
o Disable SRP fake user seed to address a server memory leak
|
||||||
|
(CVE-2016-0798)
|
||||||
|
o Fix BN_hex2bn/BN_dec2bn NULL pointer deref/heap corruption
|
||||||
|
(CVE-2016-0797)
|
||||||
|
o Fix memory issues in BIO_*printf functions (CVE-2016-0799)
|
||||||
|
o Fix side channel attack on modular exponentiation (CVE-2016-0702)
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.2e and OpenSSL 1.0.2f [28 Jan 2016]
|
||||||
|
|
||||||
|
o DH small subgroups (CVE-2016-0701)
|
||||||
|
o SSLv2 doesn't block disabled ciphers (CVE-2015-3197)
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.2d and OpenSSL 1.0.2e [3 Dec 2015]
|
||||||
|
|
||||||
|
o BN_mod_exp may produce incorrect results on x86_64 (CVE-2015-3193)
|
||||||
|
o Certificate verify crash with missing PSS parameter (CVE-2015-3194)
|
||||||
|
o X509_ATTRIBUTE memory leak (CVE-2015-3195)
|
||||||
|
o Rewrite EVP_DecodeUpdate (base64 decoding) to fix several bugs
|
||||||
|
o In DSA_generate_parameters_ex, if the provided seed is too short,
|
||||||
|
return an error
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.2c and OpenSSL 1.0.2d [9 Jul 2015]
|
||||||
|
|
||||||
|
o Alternate chains certificate forgery (CVE-2015-1793)
|
||||||
|
o Race condition handling PSK identify hint (CVE-2015-3196)
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.2b and OpenSSL 1.0.2c [12 Jun 2015]
|
||||||
|
|
||||||
|
o Fix HMAC ABI incompatibility
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.2a and OpenSSL 1.0.2b [11 Jun 2015]
|
||||||
|
|
||||||
|
o Malformed ECParameters causes infinite loop (CVE-2015-1788)
|
||||||
|
o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
|
||||||
|
o PKCS7 crash with missing EnvelopedContent (CVE-2015-1790)
|
||||||
|
o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
|
||||||
|
o Race condition handling NewSessionTicket (CVE-2015-1791)
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.2 and OpenSSL 1.0.2a [19 Mar 2015]
|
||||||
|
|
||||||
|
o OpenSSL 1.0.2 ClientHello sigalgs DoS fix (CVE-2015-0291)
|
||||||
|
o Multiblock corrupted pointer fix (CVE-2015-0290)
|
||||||
|
o Segmentation fault in DTLSv1_listen fix (CVE-2015-0207)
|
||||||
|
o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
|
||||||
|
o Segmentation fault for invalid PSS parameters fix (CVE-2015-0208)
|
||||||
|
o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
|
||||||
|
o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
|
||||||
|
o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
|
||||||
|
o Empty CKE with client auth and DHE fix (CVE-2015-1787)
|
||||||
|
o Handshake with unseeded PRNG fix (CVE-2015-0285)
|
||||||
|
o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
|
||||||
|
o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
|
||||||
|
o Removed the export ciphers from the DEFAULT ciphers
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.2 [22 Jan 2015]:
|
||||||
|
|
||||||
|
o Suite B support for TLS 1.2 and DTLS 1.2
|
||||||
|
o Support for DTLS 1.2
|
||||||
|
o TLS automatic EC curve selection.
|
||||||
|
o API to set TLS supported signature algorithms and curves
|
||||||
|
o SSL_CONF configuration API.
|
||||||
|
o TLS Brainpool support.
|
||||||
|
o ALPN support.
|
||||||
|
o CMS support for RSA-PSS, RSA-OAEP, ECDH and X9.42 DH.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1k and OpenSSL 1.0.1l [15 Jan 2015]
|
||||||
|
|
||||||
|
o Build fixes for the Windows and OpenVMS platforms
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1j and OpenSSL 1.0.1k [8 Jan 2015]
|
||||||
|
|
||||||
|
o Fix for CVE-2014-3571
|
||||||
|
o Fix for CVE-2015-0206
|
||||||
|
o Fix for CVE-2014-3569
|
||||||
|
o Fix for CVE-2014-3572
|
||||||
|
o Fix for CVE-2015-0204
|
||||||
|
o Fix for CVE-2015-0205
|
||||||
|
o Fix for CVE-2014-8275
|
||||||
|
o Fix for CVE-2014-3570
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1i and OpenSSL 1.0.1j [15 Oct 2014]
|
||||||
|
|
||||||
|
o Fix for CVE-2014-3513
|
||||||
|
o Fix for CVE-2014-3567
|
||||||
|
o Mitigation for CVE-2014-3566 (SSL protocol vulnerability)
|
||||||
|
o Fix for CVE-2014-3568
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1h and OpenSSL 1.0.1i [6 Aug 2014]
|
||||||
|
|
||||||
|
o Fix for CVE-2014-3512
|
||||||
|
o Fix for CVE-2014-3511
|
||||||
|
o Fix for CVE-2014-3510
|
||||||
|
o Fix for CVE-2014-3507
|
||||||
|
o Fix for CVE-2014-3506
|
||||||
|
o Fix for CVE-2014-3505
|
||||||
|
o Fix for CVE-2014-3509
|
||||||
|
o Fix for CVE-2014-5139
|
||||||
|
o Fix for CVE-2014-3508
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1g and OpenSSL 1.0.1h [5 Jun 2014]
|
||||||
|
|
||||||
|
o Fix for CVE-2014-0224
|
||||||
|
o Fix for CVE-2014-0221
|
||||||
|
o Fix for CVE-2014-0198
|
||||||
|
o Fix for CVE-2014-0195
|
||||||
|
o Fix for CVE-2014-3470
|
||||||
|
o Fix for CVE-2010-5298
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1f and OpenSSL 1.0.1g [7 Apr 2014]
|
||||||
|
|
||||||
|
o Fix for CVE-2014-0160
|
||||||
|
o Add TLS padding extension workaround for broken servers.
|
||||||
|
o Fix for CVE-2014-0076
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1e and OpenSSL 1.0.1f [6 Jan 2014]
|
||||||
|
|
||||||
|
o Don't include gmt_unix_time in TLS server and client random values
|
||||||
|
o Fix for TLS record tampering bug CVE-2013-4353
|
||||||
|
o Fix for TLS version checking bug CVE-2013-6449
|
||||||
|
o Fix for DTLS retransmission bug CVE-2013-6450
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1d and OpenSSL 1.0.1e [11 Feb 2013]:
|
||||||
|
|
||||||
|
o Corrected fix for CVE-2013-0169
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1c and OpenSSL 1.0.1d [4 Feb 2013]:
|
||||||
|
|
||||||
|
o Fix renegotiation in TLS 1.1, 1.2 by using the correct TLS version.
|
||||||
|
o Include the fips configuration module.
|
||||||
|
o Fix OCSP bad key DoS attack CVE-2013-0166
|
||||||
|
o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
|
||||||
|
o Fix for TLS AESNI record handling flaw CVE-2012-2686
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1b and OpenSSL 1.0.1c [10 May 2012]:
|
||||||
|
|
||||||
|
o Fix TLS/DTLS record length checking bug CVE-2012-2333
|
||||||
|
o Don't attempt to use non-FIPS composite ciphers in FIPS mode.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1a and OpenSSL 1.0.1b [26 Apr 2012]:
|
||||||
|
|
||||||
|
o Fix compilation error on non-x86 platforms.
|
||||||
|
o Make FIPS capable OpenSSL ciphers work in non-FIPS mode.
|
||||||
|
o Fix SSL_OP_NO_TLSv1_1 clash with SSL_OP_ALL in OpenSSL 1.0.0
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.1 and OpenSSL 1.0.1a [19 Apr 2012]:
|
||||||
|
|
||||||
|
o Fix for ASN1 overflow bug CVE-2012-2110
|
||||||
|
o Workarounds for some servers that hang on long client hellos.
|
||||||
|
o Fix SEGV in AES code.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.1 [14 Mar 2012]:
|
||||||
|
|
||||||
|
o TLS/DTLS heartbeat support.
|
||||||
|
o SCTP support.
|
||||||
|
o RFC 5705 TLS key material exporter.
|
||||||
|
o RFC 5764 DTLS-SRTP negotiation.
|
||||||
|
o Next Protocol Negotiation.
|
||||||
|
o PSS signatures in certificates, requests and CRLs.
|
||||||
|
o Support for password based recipient info for CMS.
|
||||||
|
o Support TLS v1.2 and TLS v1.1.
|
||||||
|
o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
|
||||||
|
o SRP support.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
|
||||||
|
|
||||||
|
o Fix for CMS/PKCS#7 MMA CVE-2012-0884
|
||||||
|
o Corrected fix for CVE-2011-4619
|
||||||
|
o Various DTLS fixes.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0f and OpenSSL 1.0.0g [18 Jan 2012]:
|
||||||
|
|
||||||
|
o Fix for DTLS DoS issue CVE-2012-0050
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0e and OpenSSL 1.0.0f [4 Jan 2012]:
|
||||||
|
|
||||||
|
o Fix for DTLS plaintext recovery attack CVE-2011-4108
|
||||||
|
o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
|
||||||
|
o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
|
||||||
|
o Check parameters are not NULL in GOST ENGINE CVE-2012-0027
|
||||||
|
o Check for malformed RFC3779 data CVE-2011-4577
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0d and OpenSSL 1.0.0e [6 Sep 2011]:
|
||||||
|
|
||||||
|
o Fix for CRL vulnerability issue CVE-2011-3207
|
||||||
|
o Fix for ECDH crashes CVE-2011-3210
|
||||||
|
o Protection against EC timing attacks.
|
||||||
|
o Support ECDH ciphersuites for certificates using SHA2 algorithms.
|
||||||
|
o Various DTLS fixes.
|
||||||
|
|
||||||
|
Major changes between OpenSSL 1.0.0c and OpenSSL 1.0.0d [8 Feb 2011]:
|
||||||
|
|
||||||
o Fix for security issue CVE-2011-0014
|
o Fix for security issue CVE-2011-0014
|
||||||
|
|
||||||
Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c:
|
Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c [2 Dec 2010]:
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-4180
|
o Fix for security issue CVE-2010-4180
|
||||||
o Fix for CVE-2010-4252
|
o Fix for CVE-2010-4252
|
||||||
@@ -17,18 +212,18 @@
|
|||||||
o Fix various platform compilation issues.
|
o Fix various platform compilation issues.
|
||||||
o Corrected fix for security issue CVE-2010-3864.
|
o Corrected fix for security issue CVE-2010-3864.
|
||||||
|
|
||||||
Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b:
|
Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b [16 Nov 2010]:
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-3864.
|
o Fix for security issue CVE-2010-3864.
|
||||||
o Fix for CVE-2010-2939
|
o Fix for CVE-2010-2939
|
||||||
o Fix WIN32 build system for GOST ENGINE.
|
o Fix WIN32 build system for GOST ENGINE.
|
||||||
|
|
||||||
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
|
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a [1 Jun 2010]:
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-1633.
|
o Fix for security issue CVE-2010-1633.
|
||||||
o GOST MAC and CFB fixes.
|
o GOST MAC and CFB fixes.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0:
|
Major changes between OpenSSL 0.9.8n and OpenSSL 1.0.0 [29 Mar 2010]:
|
||||||
|
|
||||||
o RFC3280 path validation: sufficient to process PKITS tests.
|
o RFC3280 path validation: sufficient to process PKITS tests.
|
||||||
o Integrated support for PVK files and keyblobs.
|
o Integrated support for PVK files and keyblobs.
|
||||||
@@ -51,33 +246,12 @@
|
|||||||
o Opaque PRF Input TLS extension support.
|
o Opaque PRF Input TLS extension support.
|
||||||
o Updated time routines to avoid OS limitations.
|
o Updated time routines to avoid OS limitations.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r:
|
Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
|
||||||
|
|
||||||
o Fix for security issue CVE-2011-0014
|
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q:
|
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-4180
|
|
||||||
o Fix for CVE-2010-4252
|
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p:
|
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-3864.
|
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o:
|
|
||||||
|
|
||||||
o Fix for security issue CVE-2010-0742.
|
|
||||||
o Various DTLS fixes.
|
|
||||||
o Recognise SHA2 certificates if only SSL algorithms added.
|
|
||||||
o Fix for no-rc4 compilation.
|
|
||||||
o Chil ENGINE unload workaround.
|
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n:
|
|
||||||
|
|
||||||
o CFB cipher definition fixes.
|
o CFB cipher definition fixes.
|
||||||
o Fix security issues CVE-2010-0740 and CVE-2010-0433.
|
o Fix security issues CVE-2010-0740 and CVE-2010-0433.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m:
|
Major changes between OpenSSL 0.9.8l and OpenSSL 0.9.8m [25 Feb 2010]:
|
||||||
|
|
||||||
o Cipher definition fixes.
|
o Cipher definition fixes.
|
||||||
o Workaround for slow RAND_poll() on some WIN32 versions.
|
o Workaround for slow RAND_poll() on some WIN32 versions.
|
||||||
@@ -89,33 +263,33 @@
|
|||||||
o Ticket and SNI coexistence fixes.
|
o Ticket and SNI coexistence fixes.
|
||||||
o Many fixes to DTLS handling.
|
o Many fixes to DTLS handling.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l:
|
Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]:
|
||||||
|
|
||||||
o Temporary work around for CVE-2009-3555: disable renegotiation.
|
o Temporary work around for CVE-2009-3555: disable renegotiation.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k:
|
Major changes between OpenSSL 0.9.8j and OpenSSL 0.9.8k [25 Mar 2009]:
|
||||||
|
|
||||||
o Fix various build issues.
|
o Fix various build issues.
|
||||||
o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
|
o Fix security issues (CVE-2009-0590, CVE-2009-0591, CVE-2009-0789)
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j:
|
Major changes between OpenSSL 0.9.8i and OpenSSL 0.9.8j [7 Jan 2009]:
|
||||||
|
|
||||||
o Fix security issue (CVE-2008-5077)
|
o Fix security issue (CVE-2008-5077)
|
||||||
o Merge FIPS 140-2 branch code.
|
o Merge FIPS 140-2 branch code.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h:
|
Major changes between OpenSSL 0.9.8g and OpenSSL 0.9.8h [28 May 2008]:
|
||||||
|
|
||||||
o CryptoAPI ENGINE support.
|
o CryptoAPI ENGINE support.
|
||||||
o Various precautionary measures.
|
o Various precautionary measures.
|
||||||
o Fix for bugs affecting certificate request creation.
|
o Fix for bugs affecting certificate request creation.
|
||||||
o Support for local machine keyset attribute in PKCS#12 files.
|
o Support for local machine keyset attribute in PKCS#12 files.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g:
|
Major changes between OpenSSL 0.9.8f and OpenSSL 0.9.8g [19 Oct 2007]:
|
||||||
|
|
||||||
o Backport of CMS functionality to 0.9.8.
|
o Backport of CMS functionality to 0.9.8.
|
||||||
o Fixes for bugs introduced with 0.9.8f.
|
o Fixes for bugs introduced with 0.9.8f.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f:
|
Major changes between OpenSSL 0.9.8e and OpenSSL 0.9.8f [11 Oct 2007]:
|
||||||
|
|
||||||
o Add gcc 4.2 support.
|
o Add gcc 4.2 support.
|
||||||
o Add support for AES and SSE2 assembly lanugauge optimization
|
o Add support for AES and SSE2 assembly lanugauge optimization
|
||||||
@@ -126,23 +300,23 @@
|
|||||||
o RFC4507bis support.
|
o RFC4507bis support.
|
||||||
o TLS Extensions support.
|
o TLS Extensions support.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e:
|
Major changes between OpenSSL 0.9.8d and OpenSSL 0.9.8e [23 Feb 2007]:
|
||||||
|
|
||||||
o Various ciphersuite selection fixes.
|
o Various ciphersuite selection fixes.
|
||||||
o RFC3779 support.
|
o RFC3779 support.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d:
|
Major changes between OpenSSL 0.9.8c and OpenSSL 0.9.8d [28 Sep 2006]:
|
||||||
|
|
||||||
o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
|
o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
|
||||||
o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
|
o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
|
||||||
o Changes to ciphersuite selection algorithm
|
o Changes to ciphersuite selection algorithm
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c:
|
Major changes between OpenSSL 0.9.8b and OpenSSL 0.9.8c [5 Sep 2006]:
|
||||||
|
|
||||||
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
|
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
|
||||||
o New cipher Camellia
|
o New cipher Camellia
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b:
|
Major changes between OpenSSL 0.9.8a and OpenSSL 0.9.8b [4 May 2006]:
|
||||||
|
|
||||||
o Cipher string fixes.
|
o Cipher string fixes.
|
||||||
o Fixes for VC++ 2005.
|
o Fixes for VC++ 2005.
|
||||||
@@ -152,12 +326,12 @@
|
|||||||
o Built in dynamic engine compilation support on Win32.
|
o Built in dynamic engine compilation support on Win32.
|
||||||
o Fixes auto dynamic engine loading in Win32.
|
o Fixes auto dynamic engine loading in Win32.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a:
|
Major changes between OpenSSL 0.9.8 and OpenSSL 0.9.8a [11 Oct 2005]:
|
||||||
|
|
||||||
o Fix potential SSL 2.0 rollback, CVE-2005-2969
|
o Fix potential SSL 2.0 rollback, CVE-2005-2969
|
||||||
o Extended Windows CE support
|
o Extended Windows CE support
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8:
|
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.8 [5 Jul 2005]:
|
||||||
|
|
||||||
o Major work on the BIGNUM library for higher efficiency and to
|
o Major work on the BIGNUM library for higher efficiency and to
|
||||||
make operations more streamlined and less contradictory. This
|
make operations more streamlined and less contradictory. This
|
||||||
@@ -231,36 +405,36 @@
|
|||||||
o Added initial support for Win64.
|
o Added initial support for Win64.
|
||||||
o Added alternate pkg-config files.
|
o Added alternate pkg-config files.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m:
|
Major changes between OpenSSL 0.9.7l and OpenSSL 0.9.7m [23 Feb 2007]:
|
||||||
|
|
||||||
o FIPS 1.1.1 module linking.
|
o FIPS 1.1.1 module linking.
|
||||||
o Various ciphersuite selection fixes.
|
o Various ciphersuite selection fixes.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l:
|
Major changes between OpenSSL 0.9.7k and OpenSSL 0.9.7l [28 Sep 2006]:
|
||||||
|
|
||||||
o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
|
o Introduce limits to prevent malicious key DoS (CVE-2006-2940)
|
||||||
o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
|
o Fix security issues (CVE-2006-2937, CVE-2006-3737, CVE-2006-4343)
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k:
|
Major changes between OpenSSL 0.9.7j and OpenSSL 0.9.7k [5 Sep 2006]:
|
||||||
|
|
||||||
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
|
o Fix Daniel Bleichenbacher forged signature attack, CVE-2006-4339
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j:
|
Major changes between OpenSSL 0.9.7i and OpenSSL 0.9.7j [4 May 2006]:
|
||||||
|
|
||||||
o Visual C++ 2005 fixes.
|
o Visual C++ 2005 fixes.
|
||||||
o Update Windows build system for FIPS.
|
o Update Windows build system for FIPS.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i:
|
Major changes between OpenSSL 0.9.7h and OpenSSL 0.9.7i [14 Oct 2005]:
|
||||||
|
|
||||||
o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
|
o Give EVP_MAX_MD_SIZE it's old value, except for a FIPS build.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h:
|
Major changes between OpenSSL 0.9.7g and OpenSSL 0.9.7h [11 Oct 2005]:
|
||||||
|
|
||||||
o Fix SSL 2.0 Rollback, CVE-2005-2969
|
o Fix SSL 2.0 Rollback, CVE-2005-2969
|
||||||
o Allow use of fixed-length exponent on DSA signing
|
o Allow use of fixed-length exponent on DSA signing
|
||||||
o Default fixed-window RSA, DSA, DH private-key operations
|
o Default fixed-window RSA, DSA, DH private-key operations
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g:
|
Major changes between OpenSSL 0.9.7f and OpenSSL 0.9.7g [11 Apr 2005]:
|
||||||
|
|
||||||
o More compilation issues fixed.
|
o More compilation issues fixed.
|
||||||
o Adaptation to more modern Kerberos API.
|
o Adaptation to more modern Kerberos API.
|
||||||
@@ -269,7 +443,7 @@
|
|||||||
o More constification.
|
o More constification.
|
||||||
o Added processing of proxy certificates (RFC 3820).
|
o Added processing of proxy certificates (RFC 3820).
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f:
|
Major changes between OpenSSL 0.9.7e and OpenSSL 0.9.7f [22 Mar 2005]:
|
||||||
|
|
||||||
o Several compilation issues fixed.
|
o Several compilation issues fixed.
|
||||||
o Many memory allocation failure checks added.
|
o Many memory allocation failure checks added.
|
||||||
@@ -277,12 +451,12 @@
|
|||||||
o Mandatory basic checks on certificates.
|
o Mandatory basic checks on certificates.
|
||||||
o Performance improvements.
|
o Performance improvements.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e:
|
Major changes between OpenSSL 0.9.7d and OpenSSL 0.9.7e [25 Oct 2004]:
|
||||||
|
|
||||||
o Fix race condition in CRL checking code.
|
o Fix race condition in CRL checking code.
|
||||||
o Fixes to PKCS#7 (S/MIME) code.
|
o Fixes to PKCS#7 (S/MIME) code.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d:
|
Major changes between OpenSSL 0.9.7c and OpenSSL 0.9.7d [17 Mar 2004]:
|
||||||
|
|
||||||
o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
|
o Security: Fix Kerberos ciphersuite SSL/TLS handshaking bug
|
||||||
o Security: Fix null-pointer assignment in do_change_cipher_spec()
|
o Security: Fix null-pointer assignment in do_change_cipher_spec()
|
||||||
@@ -290,14 +464,14 @@
|
|||||||
o Multiple X509 verification fixes
|
o Multiple X509 verification fixes
|
||||||
o Speed up HMAC and other operations
|
o Speed up HMAC and other operations
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c:
|
Major changes between OpenSSL 0.9.7b and OpenSSL 0.9.7c [30 Sep 2003]:
|
||||||
|
|
||||||
o Security: fix various ASN1 parsing bugs.
|
o Security: fix various ASN1 parsing bugs.
|
||||||
o New -ignore_err option to OCSP utility.
|
o New -ignore_err option to OCSP utility.
|
||||||
o Various interop and bug fixes in S/MIME code.
|
o Various interop and bug fixes in S/MIME code.
|
||||||
o SSL/TLS protocol fix for unrequested client certificates.
|
o SSL/TLS protocol fix for unrequested client certificates.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b:
|
Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]:
|
||||||
|
|
||||||
o Security: counter the Klima-Pokorny-Rosa extension of
|
o Security: counter the Klima-Pokorny-Rosa extension of
|
||||||
Bleichbacher's attack
|
Bleichbacher's attack
|
||||||
@@ -308,7 +482,7 @@
|
|||||||
o ASN.1: treat domainComponent correctly.
|
o ASN.1: treat domainComponent correctly.
|
||||||
o Documentation: fixes and additions.
|
o Documentation: fixes and additions.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a:
|
Major changes between OpenSSL 0.9.7 and OpenSSL 0.9.7a [19 Feb 2003]:
|
||||||
|
|
||||||
o Security: Important security related bugfixes.
|
o Security: Important security related bugfixes.
|
||||||
o Enhanced compatibility with MIT Kerberos.
|
o Enhanced compatibility with MIT Kerberos.
|
||||||
@@ -319,7 +493,7 @@
|
|||||||
o SSL/TLS: now handles manual certificate chain building.
|
o SSL/TLS: now handles manual certificate chain building.
|
||||||
o SSL/TLS: certain session ID malfunctions corrected.
|
o SSL/TLS: certain session ID malfunctions corrected.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7:
|
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.7 [30 Dec 2002]:
|
||||||
|
|
||||||
o New library section OCSP.
|
o New library section OCSP.
|
||||||
o Complete rewrite of ASN1 code.
|
o Complete rewrite of ASN1 code.
|
||||||
@@ -365,23 +539,23 @@
|
|||||||
o SSL/TLS: add callback to retrieve SSL/TLS messages.
|
o SSL/TLS: add callback to retrieve SSL/TLS messages.
|
||||||
o SSL/TLS: support AES cipher suites (RFC3268).
|
o SSL/TLS: support AES cipher suites (RFC3268).
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k:
|
Major changes between OpenSSL 0.9.6j and OpenSSL 0.9.6k [30 Sep 2003]:
|
||||||
|
|
||||||
o Security: fix various ASN1 parsing bugs.
|
o Security: fix various ASN1 parsing bugs.
|
||||||
o SSL/TLS protocol fix for unrequested client certificates.
|
o SSL/TLS protocol fix for unrequested client certificates.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j:
|
Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]:
|
||||||
|
|
||||||
o Security: counter the Klima-Pokorny-Rosa extension of
|
o Security: counter the Klima-Pokorny-Rosa extension of
|
||||||
Bleichbacher's attack
|
Bleichbacher's attack
|
||||||
o Security: make RSA blinding default.
|
o Security: make RSA blinding default.
|
||||||
o Build: shared library support fixes.
|
o Build: shared library support fixes.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i:
|
Major changes between OpenSSL 0.9.6h and OpenSSL 0.9.6i [19 Feb 2003]:
|
||||||
|
|
||||||
o Important security related bugfixes.
|
o Important security related bugfixes.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h:
|
Major changes between OpenSSL 0.9.6g and OpenSSL 0.9.6h [5 Dec 2002]:
|
||||||
|
|
||||||
o New configuration targets for Tandem OSS and A/UX.
|
o New configuration targets for Tandem OSS and A/UX.
|
||||||
o New OIDs for Microsoft attributes.
|
o New OIDs for Microsoft attributes.
|
||||||
@@ -395,25 +569,25 @@
|
|||||||
o Fixes for smaller building problems.
|
o Fixes for smaller building problems.
|
||||||
o Updates of manuals, FAQ and other instructive documents.
|
o Updates of manuals, FAQ and other instructive documents.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g:
|
Major changes between OpenSSL 0.9.6f and OpenSSL 0.9.6g [9 Aug 2002]:
|
||||||
|
|
||||||
o Important building fixes on Unix.
|
o Important building fixes on Unix.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f:
|
Major changes between OpenSSL 0.9.6e and OpenSSL 0.9.6f [8 Aug 2002]:
|
||||||
|
|
||||||
o Various important bugfixes.
|
o Various important bugfixes.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e:
|
Major changes between OpenSSL 0.9.6d and OpenSSL 0.9.6e [30 Jul 2002]:
|
||||||
|
|
||||||
o Important security related bugfixes.
|
o Important security related bugfixes.
|
||||||
o Various SSL/TLS library bugfixes.
|
o Various SSL/TLS library bugfixes.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d:
|
Major changes between OpenSSL 0.9.6c and OpenSSL 0.9.6d [9 May 2002]:
|
||||||
|
|
||||||
o Various SSL/TLS library bugfixes.
|
o Various SSL/TLS library bugfixes.
|
||||||
o Fix DH parameter generation for 'non-standard' generators.
|
o Fix DH parameter generation for 'non-standard' generators.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c:
|
Major changes between OpenSSL 0.9.6b and OpenSSL 0.9.6c [21 Dec 2001]:
|
||||||
|
|
||||||
o Various SSL/TLS library bugfixes.
|
o Various SSL/TLS library bugfixes.
|
||||||
o BIGNUM library fixes.
|
o BIGNUM library fixes.
|
||||||
@@ -426,7 +600,7 @@
|
|||||||
Broadcom and Cryptographic Appliance's keyserver
|
Broadcom and Cryptographic Appliance's keyserver
|
||||||
[in 0.9.6c-engine release].
|
[in 0.9.6c-engine release].
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b:
|
Major changes between OpenSSL 0.9.6a and OpenSSL 0.9.6b [9 Jul 2001]:
|
||||||
|
|
||||||
o Security fix: PRNG improvements.
|
o Security fix: PRNG improvements.
|
||||||
o Security fix: RSA OAEP check.
|
o Security fix: RSA OAEP check.
|
||||||
@@ -443,7 +617,7 @@
|
|||||||
o Increase default size for BIO buffering filter.
|
o Increase default size for BIO buffering filter.
|
||||||
o Compatibility fixes in some scripts.
|
o Compatibility fixes in some scripts.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a:
|
Major changes between OpenSSL 0.9.6 and OpenSSL 0.9.6a [5 Apr 2001]:
|
||||||
|
|
||||||
o Security fix: change behavior of OpenSSL to avoid using
|
o Security fix: change behavior of OpenSSL to avoid using
|
||||||
environment variables when running as root.
|
environment variables when running as root.
|
||||||
@@ -468,7 +642,7 @@
|
|||||||
o New function BN_rand_range().
|
o New function BN_rand_range().
|
||||||
o Add "-rand" option to openssl s_client and s_server.
|
o Add "-rand" option to openssl s_client and s_server.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6:
|
Major changes between OpenSSL 0.9.5a and OpenSSL 0.9.6 [10 Oct 2000]:
|
||||||
|
|
||||||
o Some documentation for BIO and SSL libraries.
|
o Some documentation for BIO and SSL libraries.
|
||||||
o Enhanced chain verification using key identifiers.
|
o Enhanced chain verification using key identifiers.
|
||||||
@@ -483,7 +657,7 @@
|
|||||||
[1] The support for external crypto devices is currently a separate
|
[1] The support for external crypto devices is currently a separate
|
||||||
distribution. See the file README.ENGINE.
|
distribution. See the file README.ENGINE.
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a:
|
Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]:
|
||||||
|
|
||||||
o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8
|
o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8
|
||||||
o Shared library support for HPUX and Solaris-gcc
|
o Shared library support for HPUX and Solaris-gcc
|
||||||
@@ -492,7 +666,7 @@
|
|||||||
o New 'rand' application
|
o New 'rand' application
|
||||||
o New way to check for existence of algorithms from scripts
|
o New way to check for existence of algorithms from scripts
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5:
|
Major changes between OpenSSL 0.9.4 and OpenSSL 0.9.5 [25 May 2000]:
|
||||||
|
|
||||||
o S/MIME support in new 'smime' command
|
o S/MIME support in new 'smime' command
|
||||||
o Documentation for the OpenSSL command line application
|
o Documentation for the OpenSSL command line application
|
||||||
@@ -528,7 +702,7 @@
|
|||||||
o Enhanced support for Alpha Linux
|
o Enhanced support for Alpha Linux
|
||||||
o Experimental MacOS support
|
o Experimental MacOS support
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4:
|
Major changes between OpenSSL 0.9.3 and OpenSSL 0.9.4 [9 Aug 1999]:
|
||||||
|
|
||||||
o Transparent support for PKCS#8 format private keys: these are used
|
o Transparent support for PKCS#8 format private keys: these are used
|
||||||
by several software packages and are more secure than the standard
|
by several software packages and are more secure than the standard
|
||||||
@@ -539,7 +713,7 @@
|
|||||||
o New pipe-like BIO that allows using the SSL library when actual I/O
|
o New pipe-like BIO that allows using the SSL library when actual I/O
|
||||||
must be handled by the application (BIO pair)
|
must be handled by the application (BIO pair)
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3:
|
Major changes between OpenSSL 0.9.2b and OpenSSL 0.9.3 [24 May 1999]:
|
||||||
o Lots of enhancements and cleanups to the Configuration mechanism
|
o Lots of enhancements and cleanups to the Configuration mechanism
|
||||||
o RSA OEAP related fixes
|
o RSA OEAP related fixes
|
||||||
o Added `openssl ca -revoke' option for revoking a certificate
|
o Added `openssl ca -revoke' option for revoking a certificate
|
||||||
@@ -553,7 +727,7 @@
|
|||||||
o Sparc assembler bignum implementation, optimized hash functions
|
o Sparc assembler bignum implementation, optimized hash functions
|
||||||
o Option to disable selected ciphers
|
o Option to disable selected ciphers
|
||||||
|
|
||||||
Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b:
|
Major changes between OpenSSL 0.9.1c and OpenSSL 0.9.2b [22 Mar 1999]:
|
||||||
o Fixed a security hole related to session resumption
|
o Fixed a security hole related to session resumption
|
||||||
o Fixed RSA encryption routines for the p < q case
|
o Fixed RSA encryption routines for the p < q case
|
||||||
o "ALL" in cipher lists now means "everything except NULL ciphers"
|
o "ALL" in cipher lists now means "everything except NULL ciphers"
|
||||||
@@ -575,7 +749,7 @@
|
|||||||
o Lots of memory leak fixes.
|
o Lots of memory leak fixes.
|
||||||
o Lots of bug fixes.
|
o Lots of bug fixes.
|
||||||
|
|
||||||
Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c:
|
Major changes between SSLeay 0.9.0b and OpenSSL 0.9.1c [23 Dec 1998]:
|
||||||
o Integration of the popular NO_RSA/NO_DSA patches
|
o Integration of the popular NO_RSA/NO_DSA patches
|
||||||
o Initial support for compression inside the SSL record layer
|
o Initial support for compression inside the SSL record layer
|
||||||
o Added BIO proxy and filtering functionality
|
o Added BIO proxy and filtering functionality
|
||||||
|
|||||||
14
PROBLEMS
14
PROBLEMS
@@ -197,3 +197,17 @@ reconfigure with additional no-sse2 [or 386] option passed to ./config.
|
|||||||
We don't have framework to associate -ldl with no-dso, therefore the only
|
We don't have framework to associate -ldl with no-dso, therefore the only
|
||||||
way is to edit Makefile right after ./config no-dso and remove -ldl from
|
way is to edit Makefile right after ./config no-dso and remove -ldl from
|
||||||
EX_LIBS line.
|
EX_LIBS line.
|
||||||
|
|
||||||
|
* hpux-parisc2-cc no-asm build fails with SEGV in ECDSA/DH.
|
||||||
|
|
||||||
|
Compiler bug, presumably at particular patch level. Remaining
|
||||||
|
hpux*-parisc*-cc configurations can be affected too. Drop optimization
|
||||||
|
level to +O2 when compiling bn_nist.o.
|
||||||
|
|
||||||
|
* solaris64-sparcv9-cc link failure
|
||||||
|
|
||||||
|
Solaris 8 ar can fail to maintain symbol table in .a, which results in
|
||||||
|
link failures. Apply 109147-09 or later or modify Makefile generated
|
||||||
|
by ./Configure solaris64-sparcv9-cc and replace RANLIB assignment with
|
||||||
|
|
||||||
|
RANLIB= /usr/ccs/bin/ar rs
|
||||||
|
|||||||
205
README
205
README
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
OpenSSL 1.1.0-dev
|
OpenSSL 1.0.2g 1 Mar 2016
|
||||||
|
|
||||||
Copyright (c) 1998-2011 The OpenSSL Project
|
Copyright (c) 1998-2015 The OpenSSL Project
|
||||||
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
@@ -10,17 +10,17 @@
|
|||||||
|
|
||||||
The OpenSSL Project is a collaborative effort to develop a robust,
|
The OpenSSL Project is a collaborative effort to develop a robust,
|
||||||
commercial-grade, fully featured, and Open Source toolkit implementing the
|
commercial-grade, fully featured, and Open Source toolkit implementing the
|
||||||
Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
|
Secure Sockets Layer (SSLv3) and Transport Layer Security (TLS) protocols as
|
||||||
protocols as well as a full-strength general purpose cryptography library.
|
well as a full-strength general purpose cryptograpic library. The project is
|
||||||
The project is managed by a worldwide community of volunteers that use the
|
managed by a worldwide community of volunteers that use the Internet to
|
||||||
Internet to communicate, plan, and develop the OpenSSL toolkit and its
|
communicate, plan, and develop the OpenSSL toolkit and its related
|
||||||
related documentation.
|
documentation.
|
||||||
|
|
||||||
OpenSSL is based on the excellent SSLeay library developed from Eric A. Young
|
OpenSSL is descended from the SSLeay library developed by Eric A. Young
|
||||||
and Tim J. Hudson. The OpenSSL toolkit is licensed under a dual-license (the
|
and Tim J. Hudson. The OpenSSL toolkit is licensed under a dual-license (the
|
||||||
OpenSSL license plus the SSLeay license) situation, which basically means
|
OpenSSL license plus the SSLeay license), which means that you are free to
|
||||||
that you are free to get and use it for commercial and non-commercial
|
get and use it for commercial and non-commercial purposes as long as you
|
||||||
purposes as long as you fulfill the conditions of both licenses.
|
fulfill the conditions of both licenses.
|
||||||
|
|
||||||
OVERVIEW
|
OVERVIEW
|
||||||
--------
|
--------
|
||||||
@@ -28,116 +28,39 @@
|
|||||||
The OpenSSL toolkit includes:
|
The OpenSSL toolkit includes:
|
||||||
|
|
||||||
libssl.a:
|
libssl.a:
|
||||||
Implementation of SSLv2, SSLv3, TLSv1 and the required code to support
|
Provides the client and server-side implementations for SSLv3 and TLS.
|
||||||
both SSLv2, SSLv3 and TLSv1 in the one server and client.
|
|
||||||
|
|
||||||
libcrypto.a:
|
libcrypto.a:
|
||||||
General encryption and X.509 v1/v3 stuff needed by SSL/TLS but not
|
Provides general cryptographic and X.509 support needed by SSL/TLS but
|
||||||
actually logically part of it. It includes routines for the following:
|
not logically part of it.
|
||||||
|
|
||||||
Ciphers
|
|
||||||
libdes - EAY's libdes DES encryption package which was floating
|
|
||||||
around the net for a few years, and was then relicensed by
|
|
||||||
him as part of SSLeay. It includes 15 'modes/variations'
|
|
||||||
of DES (1, 2 and 3 key versions of ecb, cbc, cfb and ofb;
|
|
||||||
pcbc and a more general form of cfb and ofb) including desx
|
|
||||||
in cbc mode, a fast crypt(3), and routines to read
|
|
||||||
passwords from the keyboard.
|
|
||||||
RC4 encryption,
|
|
||||||
RC2 encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
|
||||||
Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
|
||||||
IDEA encryption - 4 different modes, ecb, cbc, cfb and ofb.
|
|
||||||
|
|
||||||
Digests
|
|
||||||
MD5 and MD2 message digest algorithms, fast implementations,
|
|
||||||
SHA (SHA-0) and SHA-1 message digest algorithms,
|
|
||||||
MDC2 message digest. A DES based hash that is popular on smart cards.
|
|
||||||
|
|
||||||
Public Key
|
|
||||||
RSA encryption/decryption/generation.
|
|
||||||
There is no limit on the number of bits.
|
|
||||||
DSA encryption/decryption/generation.
|
|
||||||
There is no limit on the number of bits.
|
|
||||||
Diffie-Hellman key-exchange/key generation.
|
|
||||||
There is no limit on the number of bits.
|
|
||||||
|
|
||||||
X.509v3 certificates
|
|
||||||
X509 encoding/decoding into/from binary ASN1 and a PEM
|
|
||||||
based ASCII-binary encoding which supports encryption with a
|
|
||||||
private key. Program to generate RSA and DSA certificate
|
|
||||||
requests and to generate RSA and DSA certificates.
|
|
||||||
|
|
||||||
Systems
|
|
||||||
The normal digital envelope routines and base64 encoding. Higher
|
|
||||||
level access to ciphers and digests by name. New ciphers can be
|
|
||||||
loaded at run time. The BIO io system which is a simple non-blocking
|
|
||||||
IO abstraction. Current methods supported are file descriptors,
|
|
||||||
sockets, socket accept, socket connect, memory buffer, buffering, SSL
|
|
||||||
client/server, file pointer, encryption, digest, non-blocking testing
|
|
||||||
and null.
|
|
||||||
|
|
||||||
Data structures
|
|
||||||
A dynamically growing hashing system
|
|
||||||
A simple stack.
|
|
||||||
A Configuration loader that uses a format similar to MS .ini files.
|
|
||||||
|
|
||||||
openssl:
|
openssl:
|
||||||
A command line tool that can be used for:
|
A command line tool that can be used for:
|
||||||
Creation of RSA, DH and DSA key parameters
|
Creation of key parameters
|
||||||
Creation of X.509 certificates, CSRs and CRLs
|
Creation of X.509 certificates, CSRs and CRLs
|
||||||
Calculation of Message Digests
|
Calculation of message digests
|
||||||
Encryption and Decryption with Ciphers
|
Encryption and decryption
|
||||||
SSL/TLS Client and Server Tests
|
SSL/TLS client and server tests
|
||||||
Handling of S/MIME signed or encrypted mail
|
Handling of S/MIME signed or encrypted mail
|
||||||
|
And more...
|
||||||
|
|
||||||
PATENTS
|
|
||||||
-------
|
|
||||||
|
|
||||||
Various companies hold various patents for various algorithms in various
|
|
||||||
locations around the world. _YOU_ are responsible for ensuring that your use
|
|
||||||
of any algorithms is legal by checking if there are any patents in your
|
|
||||||
country. The file contains some of the patents that we know about or are
|
|
||||||
rumored to exist. This is not a definitive list.
|
|
||||||
|
|
||||||
RSA Security holds software patents on the RC5 algorithm. If you
|
|
||||||
intend to use this cipher, you must contact RSA Security for
|
|
||||||
licensing conditions. Their web page is http://www.rsasecurity.com/.
|
|
||||||
|
|
||||||
RC4 is a trademark of RSA Security, so use of this label should perhaps
|
|
||||||
only be used with RSA Security's permission.
|
|
||||||
|
|
||||||
The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
|
|
||||||
Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA. They
|
|
||||||
should be contacted if that algorithm is to be used; their web page is
|
|
||||||
http://www.ascom.ch/.
|
|
||||||
|
|
||||||
NTT and Mitsubishi have patents and pending patents on the Camellia
|
|
||||||
algorithm, but allow use at no charge without requiring an explicit
|
|
||||||
licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
|
|
||||||
|
|
||||||
INSTALLATION
|
INSTALLATION
|
||||||
------------
|
------------
|
||||||
|
|
||||||
To install this package under a Unix derivative, read the INSTALL file. For
|
See the appropriate file:
|
||||||
a Win32 platform, read the INSTALL.W32 file. For OpenVMS systems, read
|
INSTALL Linux, Unix, etc.
|
||||||
INSTALL.VMS.
|
INSTALL.DJGPP DOS platform with DJGPP
|
||||||
|
INSTALL.NW Netware
|
||||||
Read the documentation in the doc/ directory. It is quite rough, but it
|
INSTALL.OS2 OS/2
|
||||||
lists the functions; you will probably have to look at the code to work out
|
INSTALL.VMS VMS
|
||||||
how to use them. Look at the example programs.
|
INSTALL.W32 Windows (32bit)
|
||||||
|
INSTALL.W64 Windows (64bit)
|
||||||
PROBLEMS
|
INSTALL.WCE Windows CE
|
||||||
--------
|
|
||||||
|
|
||||||
For some platforms, there are some known problems that may affect the user
|
|
||||||
or application author. We try to collect those in doc/PROBLEMS, with current
|
|
||||||
thoughts on how they should be solved in a future of OpenSSL.
|
|
||||||
|
|
||||||
SUPPORT
|
SUPPORT
|
||||||
-------
|
-------
|
||||||
|
|
||||||
See the OpenSSL website www.openssl.org for details of how to obtain
|
See the OpenSSL website www.openssl.org for details on how to obtain
|
||||||
commercial technical support.
|
commercial technical support.
|
||||||
|
|
||||||
If you have any problems with OpenSSL then please take the following steps
|
If you have any problems with OpenSSL then please take the following steps
|
||||||
@@ -161,58 +84,36 @@
|
|||||||
- Problem Description (steps that will reproduce the problem, if known)
|
- Problem Description (steps that will reproduce the problem, if known)
|
||||||
- Stack Traceback (if the application dumps core)
|
- Stack Traceback (if the application dumps core)
|
||||||
|
|
||||||
Report the bug to the OpenSSL project via the Request Tracker
|
Email the report to:
|
||||||
(http://www.openssl.org/support/rt.html) by mail to:
|
|
||||||
|
|
||||||
openssl-bugs@openssl.org
|
rt@openssl.org
|
||||||
|
|
||||||
Note that the request tracker should NOT be used for general assistance
|
In order to avoid spam, this is a moderated mailing list, and it might
|
||||||
or support queries. Just because something doesn't work the way you expect
|
take a day for the ticket to show up. (We also scan posts to make sure
|
||||||
does not mean it is necessarily a bug in OpenSSL.
|
that security disclosures aren't publically posted by mistake.) Mail
|
||||||
|
to this address is recorded in the public RT (request tracker) database
|
||||||
|
(see https://www.openssl.org/community/index.html#bugs for details) and
|
||||||
|
also forwarded the public openssl-dev mailing list. Confidential mail
|
||||||
|
may be sent to openssl-security@openssl.org (PGP key available from the
|
||||||
|
key servers).
|
||||||
|
|
||||||
Note that mail to openssl-bugs@openssl.org is recorded in the publicly
|
Please do NOT use this for general assistance or support queries.
|
||||||
readable request tracker database and is forwarded to a public
|
Just because something doesn't work the way you expect does not mean it
|
||||||
mailing list. Confidential mail may be sent to openssl-security@openssl.org
|
is necessarily a bug in OpenSSL.
|
||||||
(PGP key available from the key servers).
|
|
||||||
|
You can also make GitHub pull requests. If you do this, please also send
|
||||||
|
mail to rt@openssl.org with a link to the PR so that we can more easily
|
||||||
|
keep track of it.
|
||||||
|
|
||||||
HOW TO CONTRIBUTE TO OpenSSL
|
HOW TO CONTRIBUTE TO OpenSSL
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
Development is coordinated on the openssl-dev mailing list (see
|
See CONTRIBUTING
|
||||||
http://www.openssl.org for information on subscribing). If you
|
|
||||||
would like to submit a patch, send it to openssl-bugs@openssl.org with
|
|
||||||
the string "[PATCH]" in the subject. Please be sure to include a
|
|
||||||
textual explanation of what your patch does.
|
|
||||||
|
|
||||||
If you are unsure as to whether a feature will be useful for the general
|
LEGALITIES
|
||||||
OpenSSL community please discuss it on the openssl-dev mailing list first.
|
----------
|
||||||
Someone may be already working on the same thing or there may be a good
|
|
||||||
reason as to why that feature isn't implemented.
|
|
||||||
|
|
||||||
Patches should be as up to date as possible, preferably relative to the
|
|
||||||
current CVS or the last snapshot. They should follow the coding style of
|
|
||||||
OpenSSL and compile without warnings. Some of the core team developer targets
|
|
||||||
can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
|
|
||||||
compiles on many varied platforms: try to ensure you only use portable
|
|
||||||
features.
|
|
||||||
|
|
||||||
Note: For legal reasons, contributions from the US can be accepted only
|
|
||||||
if a TSU notification and a copy of the patch are sent to crypt@bis.doc.gov
|
|
||||||
(formerly BXA) with a copy to the ENC Encryption Request Coordinator;
|
|
||||||
please take some time to look at
|
|
||||||
http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
|
|
||||||
and
|
|
||||||
http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e))
|
|
||||||
for the details. If "your encryption source code is too large to serve as
|
|
||||||
an email attachment", they are glad to receive it by fax instead; hope you
|
|
||||||
have a cheap long-distance plan.
|
|
||||||
|
|
||||||
Our preferred format for changes is "diff -u" output. You might
|
|
||||||
generate it like this:
|
|
||||||
|
|
||||||
# cd openssl-work
|
|
||||||
# [your changes]
|
|
||||||
# ./Configure dist; make clean
|
|
||||||
# cd ..
|
|
||||||
# diff -ur openssl-orig openssl-work > mydiffs.patch
|
|
||||||
|
|
||||||
|
A number of nations, in particular the U.S., restrict the use or export
|
||||||
|
of cryptography. If you are potentially subject to such restrictions
|
||||||
|
you should seek competent professional legal advice before attempting to
|
||||||
|
develop or distribute cryptographic code.
|
||||||
|
|||||||
61
README.ECC
61
README.ECC
@@ -1,61 +0,0 @@
|
|||||||
NOTE: The OpenSSL Software Foundation has executed a sublicense agreement
|
|
||||||
entitled "Elliptic Curve Cryptography Patent License Agreement" with the
|
|
||||||
National Security Agency/ Central Security Service Commercial Solutions
|
|
||||||
Center (NCSC) dated 2010-11-04. That agreement permits implementation and
|
|
||||||
distribution of software containing features covered by any or all of the
|
|
||||||
following patents:
|
|
||||||
|
|
||||||
1.) U.S. Pat. No. 5,761,305 entitled "Key Agreement and Transport Protocol
|
|
||||||
with Implicit Signatures" issued on June 2, 1998;
|
|
||||||
2.) Can. Pat. Appl. Ser. No. 2176972 entitled "Key Agreement and Transport
|
|
||||||
Protocol with Implicit Signature and Reduced Bandwidth" filed on May
|
|
||||||
16, 1996;
|
|
||||||
3.) U.S. Pat. No. 5,889,865 entitled "Key Agreement and Transport Protocol
|
|
||||||
with Implicit Signatures" issued on March 30, 1999;
|
|
||||||
4.) U.S. Pat. No. 5,896,455 entitled "Key Agreement and Transport Protocol
|
|
||||||
with Implicit Signatures" issued on April 20, 1999;
|
|
||||||
5.) U.S. Pat. No. 5,933,504 entitled "Strengthened Public Key Protocol"
|
|
||||||
issued on August 3, 1999;
|
|
||||||
6.) Can. Pat. Appl. Ser. No. 2176866 entitled "Strengthened Public Key
|
|
||||||
Protocol" filed on May 17, 1996;
|
|
||||||
7.) E.P. Pat. Appl. Ser. No. 96201322.3 entitled "Strengthened Public Key
|
|
||||||
Protocol" filed on May 17, 1996;
|
|
||||||
8.) U.S. Pat. No. 5,999,626 entitled "Digital Signatures on a Smartcard"
|
|
||||||
issued on December 7, 1999;
|
|
||||||
9.) Can. Pat. Appl. Ser. No. 2202566 entitled "Digital Signatures on a
|
|
||||||
Smartcard" filed on April 14, 1997;
|
|
||||||
10.) E.P. Pat. Appl. No. 97106114.8 entitled "Digital Signatures on a
|
|
||||||
Smartcard" filed on April 15, 1997;
|
|
||||||
11.) U.S Pat. No. 6,122,736 entitled "Key Agreement and Transport Protocol
|
|
||||||
with Implicit Signatures" issued on September 19, 2000;
|
|
||||||
12.) Can. Pat. Appl. Ser. No. 2174261 entitled "Key Agreement and Transport
|
|
||||||
Protocol with Implicit Signatures" filed on April 16, 1996;
|
|
||||||
13.) E.P. Pat. Appl. Ser. No. 96105920.1 entitled "Key Agreement and
|
|
||||||
Transport Protocol with Implicit Signatures" filed on April 16, 1996;
|
|
||||||
14.) U.S. Pat. No. 6,141,420 entitled "Elliptic Curve Encryption Systems"
|
|
||||||
issued on October 31, 2000;
|
|
||||||
15.) Can. Pat. Appl. Ser. No. 2155038 entitled "Elliptic Curve Encryption
|
|
||||||
Systems" filed on July 31, 1995;
|
|
||||||
16.) E.P. Pat. Appl. Ser. No. 95926348.4 entitled "Elliptic Curve Encryption
|
|
||||||
Systems" filed on July 31, 1995;
|
|
||||||
17.) U.S. Pat. No. 6,336,188 entitled "Authenticated Key Agreement" issued
|
|
||||||
on January 1, 2002;
|
|
||||||
18.) U.S. Pat. No. 6,487,661 entitled "Key Agreement and Transport Protocol"
|
|
||||||
issued on November 26, 2002;
|
|
||||||
19.) Can. Pat. Appl. Ser. No. 2174260 entitled "Key Agreement and Transport
|
|
||||||
Protocol" filed on April 16, 1996;
|
|
||||||
20.) E.P. Pat. Appl. Ser. No. 96105921.9 entitled "Key Agreement and
|
|
||||||
Transport Protocol" filed on April 21, 1996;
|
|
||||||
21.) U.S. Pat. No. 6,563,928 entitled "Strengthened Public Key Protocol"
|
|
||||||
issued on May 13, 2003;
|
|
||||||
22.) U.S. Pat. No. 6,618,483 entitled "Elliptic Curve Encryption Systems"
|
|
||||||
issued September 9, 2003;
|
|
||||||
23.) U.S. Pat. Appl. Ser. No. 09/434,247 entitled "Digital Signatures on a
|
|
||||||
Smartcard" filed on November 5, 1999;
|
|
||||||
24.) U.S. Pat. Appl. Ser. No. 09/558,256 entitled "Key Agreement and
|
|
||||||
Transport Protocol with Implicit Signatures" filed on April 25, 2000;
|
|
||||||
25.) U.S. Pat. Appl. Ser. No. 09/942,492 entitled "Digital Signatures on a
|
|
||||||
Smartcard" filed on August 29, 2001 and published on July 18, 2002; and,
|
|
||||||
26.) U.S. Pat. Appl. Ser. No. 10/185,735 entitled "Strengthened Public Key
|
|
||||||
Protocol" filed on July 1, 2000.
|
|
||||||
|
|
||||||
130
README.FIPS
130
README.FIPS
@@ -1,130 +0,0 @@
|
|||||||
Preliminary status and build information for FIPS module v2.0
|
|
||||||
|
|
||||||
NB: if you are cross compiling you now need to use the latest "incore" script
|
|
||||||
this can be found at util/incore in the tarballs.
|
|
||||||
|
|
||||||
If you have any object files from a previous build do:
|
|
||||||
|
|
||||||
make clean
|
|
||||||
|
|
||||||
To build the module do:
|
|
||||||
|
|
||||||
./config fipscanisteronly
|
|
||||||
make
|
|
||||||
|
|
||||||
Build should complete without errors.
|
|
||||||
|
|
||||||
Build test utilities:
|
|
||||||
|
|
||||||
make build_tests
|
|
||||||
|
|
||||||
Run test suite:
|
|
||||||
|
|
||||||
test/fips_test_suite
|
|
||||||
|
|
||||||
again should complete without errors.
|
|
||||||
|
|
||||||
Run test vectors:
|
|
||||||
|
|
||||||
1. Download an appropriate set of testvectors from www.openssl.org/docs/fips
|
|
||||||
only the fips-2.0 testvector files are usable for complete tests.
|
|
||||||
|
|
||||||
2. Extract the files to a suitable directory.
|
|
||||||
|
|
||||||
3. Run the test vector perl script, for example:
|
|
||||||
|
|
||||||
cd fips
|
|
||||||
perl fipsalgtest.pl --dir=/wherever/stuff/was/extracted
|
|
||||||
|
|
||||||
4. It should say "passed all tests" at the end. Report full details of any
|
|
||||||
failures.
|
|
||||||
|
|
||||||
If you wish to use the older 1.2.x testvectors (for example those from 2007)
|
|
||||||
you need the command line switch --disable-v2 to fipsalgtest.pl
|
|
||||||
|
|
||||||
Examine the external symbols in fips/fipscanister.o they should all begin
|
|
||||||
with FIPS or fips. One way to check with GNU nm is:
|
|
||||||
|
|
||||||
nm -g --defined-only fips/fipscanister.o | grep -v -i fips
|
|
||||||
|
|
||||||
If you get *any* output at all from this test (i.e. symbols not starting with
|
|
||||||
fips or FIPS) please report it.
|
|
||||||
|
|
||||||
Restricted tarball tests.
|
|
||||||
|
|
||||||
The validated module will have its own tarball containing sufficient code to
|
|
||||||
build fipscanister.o and the associated algorithm tests. You can create a
|
|
||||||
similar tarball yourself for testing purposes using the commands below.
|
|
||||||
|
|
||||||
Standard restricted tarball:
|
|
||||||
|
|
||||||
make -f Makefile.fips dist
|
|
||||||
|
|
||||||
Prime field field only ECC tarball:
|
|
||||||
|
|
||||||
make NOEC2M=1 -f Makefile.fips dist
|
|
||||||
|
|
||||||
Once you've created the tarball extract into a fresh directory and do:
|
|
||||||
|
|
||||||
./config
|
|
||||||
make
|
|
||||||
|
|
||||||
You can then run the algorithm tests as above. This build automatically uses
|
|
||||||
fipscanisterbuild and no-ec2m as appropriate.
|
|
||||||
|
|
||||||
FIPS capable OpenSSL test: WARNING PRELIMINARY INSTRUCTIONS, SUBJECT TO CHANGE.
|
|
||||||
|
|
||||||
At least initially the test module and FIPS capable OpenSSL may change and
|
|
||||||
by out of sync. You are advised to check for any changes and pull the latest
|
|
||||||
source from CVS if you have problems. See anon CVS and rsync instructions at:
|
|
||||||
|
|
||||||
http://www.openssl.org/source/repos.html
|
|
||||||
|
|
||||||
Make or download a restricted tarball from ftp://ftp.openssl.org/snapshot/
|
|
||||||
|
|
||||||
If required set the environment variable FIPSDIR to an appropriate location
|
|
||||||
to install the test module. If cross compiling set other environment
|
|
||||||
variables too.
|
|
||||||
|
|
||||||
In this restricted tarball on a Linux or U*ix like system run:
|
|
||||||
|
|
||||||
./config
|
|
||||||
make
|
|
||||||
make install
|
|
||||||
|
|
||||||
On Windows from a VC++ environment do:
|
|
||||||
|
|
||||||
ms\do_fips
|
|
||||||
|
|
||||||
This will build and install the test module and some associated files.
|
|
||||||
|
|
||||||
Now download the latest version of the OpenSSL 1.0.1 branch from either a
|
|
||||||
snapshot or preferably CVS. For Linux do:
|
|
||||||
|
|
||||||
./config fips [other args]
|
|
||||||
make
|
|
||||||
|
|
||||||
For Windows:
|
|
||||||
|
|
||||||
perl Configure VC-WIN32 fips [other args]
|
|
||||||
ms\do_nasm
|
|
||||||
nmake -f ms\ntdll.mak
|
|
||||||
|
|
||||||
(or ms\nt.mak for a static build).
|
|
||||||
|
|
||||||
Where [other args] can be any other arguments you use for an OpenSSL build
|
|
||||||
such as "shared" or "zlib".
|
|
||||||
|
|
||||||
This will build the fips capable OpenSSL and link it to the test module. You
|
|
||||||
can now try linking and testing applications against the FIPS capable OpenSSL.
|
|
||||||
|
|
||||||
Please report any problems to either the openssl-dev mailing list or directly
|
|
||||||
to me steve@openssl.org . Check the mailing lists regularly to avoid duplicate
|
|
||||||
reports.
|
|
||||||
|
|
||||||
Known issues:
|
|
||||||
|
|
||||||
Code needs extensively reviewing to ensure it builds correctly on
|
|
||||||
supported platforms and is compliant with FIPS 140-2.
|
|
||||||
The "FIPS capable OpenSSL" is still largely untested, it builds and runs
|
|
||||||
some simple tests OK on some systems but needs far more "real world" testing.
|
|
||||||
148
STATUS
148
STATUS
@@ -1,148 +0,0 @@
|
|||||||
|
|
||||||
OpenSSL STATUS Last modified at
|
|
||||||
______________ $Date: 2011/02/08 17:48:56 $
|
|
||||||
|
|
||||||
DEVELOPMENT STATE
|
|
||||||
|
|
||||||
o OpenSSL 1.1.0: Under development...
|
|
||||||
o OpenSSL 1.0.1: Under development...
|
|
||||||
o OpenSSL 1.0.0d: Released on February 8nd, 2011
|
|
||||||
o OpenSSL 1.0.0c: Released on December 2nd, 2010
|
|
||||||
o OpenSSL 1.0.0b: Released on November 16th, 2010
|
|
||||||
o OpenSSL 1.0.0a: Released on June 1st, 2010
|
|
||||||
o OpenSSL 1.0.0: Released on March 29th, 2010
|
|
||||||
o OpenSSL 0.9.8r: Released on February 8nd, 2011
|
|
||||||
o OpenSSL 0.9.8q: Released on December 2nd, 2010
|
|
||||||
o OpenSSL 0.9.8p: Released on November 16th, 2010
|
|
||||||
o OpenSSL 0.9.8o: Released on June 1st, 2010
|
|
||||||
o OpenSSL 0.9.8n: Released on March 24th, 2010
|
|
||||||
o OpenSSL 0.9.8m: Released on February 25th, 2010
|
|
||||||
o OpenSSL 0.9.8l: Released on November 5th, 2009
|
|
||||||
o OpenSSL 0.9.8k: Released on March 25th, 2009
|
|
||||||
o OpenSSL 0.9.8j: Released on January 7th, 2009
|
|
||||||
o OpenSSL 0.9.8i: Released on September 15th, 2008
|
|
||||||
o OpenSSL 0.9.8h: Released on May 28th, 2008
|
|
||||||
o OpenSSL 0.9.8g: Released on October 19th, 2007
|
|
||||||
o OpenSSL 0.9.8f: Released on October 11th, 2007
|
|
||||||
o OpenSSL 0.9.8e: Released on February 23rd, 2007
|
|
||||||
o OpenSSL 0.9.8d: Released on September 28th, 2006
|
|
||||||
o OpenSSL 0.9.8c: Released on September 5th, 2006
|
|
||||||
o OpenSSL 0.9.8b: Released on May 4th, 2006
|
|
||||||
o OpenSSL 0.9.8a: Released on October 11th, 2005
|
|
||||||
o OpenSSL 0.9.8: Released on July 5th, 2005
|
|
||||||
o OpenSSL 0.9.7m: Released on February 23rd, 2007
|
|
||||||
o OpenSSL 0.9.7l: Released on September 28th, 2006
|
|
||||||
o OpenSSL 0.9.7k: Released on September 5th, 2006
|
|
||||||
o OpenSSL 0.9.7j: Released on May 4th, 2006
|
|
||||||
o OpenSSL 0.9.7i: Released on October 14th, 2005
|
|
||||||
o OpenSSL 0.9.7h: Released on October 11th, 2005
|
|
||||||
o OpenSSL 0.9.7g: Released on April 11th, 2005
|
|
||||||
o OpenSSL 0.9.7f: Released on March 22nd, 2005
|
|
||||||
o OpenSSL 0.9.7e: Released on October 25th, 2004
|
|
||||||
o OpenSSL 0.9.7d: Released on March 17th, 2004
|
|
||||||
o OpenSSL 0.9.7c: Released on September 30th, 2003
|
|
||||||
o OpenSSL 0.9.7b: Released on April 10th, 2003
|
|
||||||
o OpenSSL 0.9.7a: Released on February 19th, 2003
|
|
||||||
o OpenSSL 0.9.7: Released on December 31st, 2002
|
|
||||||
o OpenSSL 0.9.6m: Released on March 17th, 2004
|
|
||||||
o OpenSSL 0.9.6l: Released on November 4th, 2003
|
|
||||||
o OpenSSL 0.9.6k: Released on September 30th, 2003
|
|
||||||
o OpenSSL 0.9.6j: Released on April 10th, 2003
|
|
||||||
o OpenSSL 0.9.6i: Released on February 19th, 2003
|
|
||||||
o OpenSSL 0.9.6h: Released on December 5th, 2002
|
|
||||||
o OpenSSL 0.9.6g: Released on August 9th, 2002
|
|
||||||
o OpenSSL 0.9.6f: Released on August 8th, 2002
|
|
||||||
o OpenSSL 0.9.6e: Released on July 30th, 2002
|
|
||||||
o OpenSSL 0.9.6d: Released on May 9th, 2002
|
|
||||||
o OpenSSL 0.9.6c: Released on December 21st, 2001
|
|
||||||
o OpenSSL 0.9.6b: Released on July 9th, 2001
|
|
||||||
o OpenSSL 0.9.6a: Released on April 5th, 2001
|
|
||||||
o OpenSSL 0.9.6: Released on September 24th, 2000
|
|
||||||
o OpenSSL 0.9.5a: Released on April 1st, 2000
|
|
||||||
o OpenSSL 0.9.5: Released on February 28th, 2000
|
|
||||||
o OpenSSL 0.9.4: Released on August 09th, 1999
|
|
||||||
o OpenSSL 0.9.3a: Released on May 29th, 1999
|
|
||||||
o OpenSSL 0.9.3: Released on May 25th, 1999
|
|
||||||
o OpenSSL 0.9.2b: Released on March 22th, 1999
|
|
||||||
o OpenSSL 0.9.1c: Released on December 23th, 1998
|
|
||||||
|
|
||||||
[See also http://www.openssl.org/support/rt.html]
|
|
||||||
|
|
||||||
RELEASE SHOWSTOPPERS
|
|
||||||
|
|
||||||
o The Makefiles fail with some SysV makes.
|
|
||||||
o
|
|
||||||
|
|
||||||
AVAILABLE PATCHES
|
|
||||||
|
|
||||||
o
|
|
||||||
|
|
||||||
IN PROGRESS
|
|
||||||
|
|
||||||
o Steve is currently working on (in no particular order):
|
|
||||||
ASN1 code redesign, butchery, replacement.
|
|
||||||
OCSP
|
|
||||||
EVP cipher enhancement.
|
|
||||||
Enhanced certificate chain verification.
|
|
||||||
Private key, certificate and CRL API and implementation.
|
|
||||||
Developing and bugfixing PKCS#7 (S/MIME code).
|
|
||||||
Various X509 issues: character sets, certificate request extensions.
|
|
||||||
o Richard is currently working on:
|
|
||||||
Constification
|
|
||||||
Attribute Certificate support
|
|
||||||
Certificate Pair support
|
|
||||||
Storage Engines (primarly an LDAP storage engine)
|
|
||||||
Certificate chain validation with full RFC 3280 compatibility
|
|
||||||
|
|
||||||
NEEDS PATCH
|
|
||||||
|
|
||||||
o 0.9.8-dev: COMPLEMENTOFALL and COMPLEMENTOFDEFAULT do not
|
|
||||||
handle ECCdraft cipher suites correctly.
|
|
||||||
|
|
||||||
o apps/ca.c: "Sign the certificate?" - "n" creates empty certificate file
|
|
||||||
|
|
||||||
o "OpenSSL STATUS" is never up-to-date.
|
|
||||||
|
|
||||||
OPEN ISSUES
|
|
||||||
|
|
||||||
o The Makefile hierarchy and build mechanism is still not a round thing:
|
|
||||||
|
|
||||||
1. The config vs. Configure scripts
|
|
||||||
It's the same nasty situation as for Apache with APACI vs.
|
|
||||||
src/Configure. It confuses.
|
|
||||||
Suggestion: Merge Configure and config into a single configure
|
|
||||||
script with a Autoconf style interface ;-) and remove
|
|
||||||
Configure and config. Or even let us use GNU Autoconf
|
|
||||||
itself. Then we can avoid a lot of those platform checks
|
|
||||||
which are currently in Configure.
|
|
||||||
|
|
||||||
o Support for Shared Libraries has to be added at least
|
|
||||||
for the major Unix platforms. The details we can rip from the stuff
|
|
||||||
Ralf has done for the Apache src/Configure script. Ben wants the
|
|
||||||
solution to be really simple.
|
|
||||||
|
|
||||||
Status: Ralf will look how we can easily incorporate the
|
|
||||||
compiler PIC and linker DSO flags from Apache
|
|
||||||
into the OpenSSL Configure script.
|
|
||||||
|
|
||||||
Ulf: +1 for using GNU autoconf and libtool (but not automake,
|
|
||||||
which apparently is not flexible enough to generate
|
|
||||||
libcrypto)
|
|
||||||
|
|
||||||
WISHES
|
|
||||||
|
|
||||||
o Add variants of DH_generate_parameters() and BN_generate_prime() [etc?]
|
|
||||||
where the callback function can request that the function be aborted.
|
|
||||||
[Gregory Stark <ghstark@pobox.com>, <rayyang2000@yahoo.com>]
|
|
||||||
|
|
||||||
o SRP in TLS.
|
|
||||||
[wished by:
|
|
||||||
Dj <derek@yo.net>, Tom Wu <tom@arcot.com>,
|
|
||||||
Tom Holroyd <tomh@po.crl.go.jp>]
|
|
||||||
|
|
||||||
See http://search.ietf.org/internet-drafts/draft-ietf-tls-srp-00.txt
|
|
||||||
as well as http://www-cs-students.stanford.edu/~tjw/srp/.
|
|
||||||
|
|
||||||
Tom Holroyd tells us there is a SRP patch for OpenSSH at
|
|
||||||
http://members.tripod.com/professor_tom/archives/, that could
|
|
||||||
be useful.
|
|
||||||
@@ -6,6 +6,7 @@ $! P2: Zlib object library path (optional).
|
|||||||
$!
|
$!
|
||||||
$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
|
$! Input: [.UTIL]LIBEAY.NUM,[.xxx.EXE.CRYPTO]SSL_LIBCRYPTO[32].OLB
|
||||||
$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
|
$! [.UTIL]SSLEAY.NUM,[.xxx.EXE.SSL]SSL_LIBSSL[32].OLB
|
||||||
|
$! [.CRYPTO.xxx]OPENSSLCONF.H
|
||||||
$! Output: [.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
|
$! Output: [.xxx.EXE.CRYPTO]SSL_LIBCRYPTO_SHR[32].OPT,.MAP,.EXE
|
||||||
$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
|
$! [.xxx.EXE.SSL]SSL_LIBSSL_SRH[32].OPT,.MAP,.EXE
|
||||||
$!
|
$!
|
||||||
@@ -70,6 +71,9 @@ $ endif
|
|||||||
$ endif
|
$ endif
|
||||||
$ endif
|
$ endif
|
||||||
$!
|
$!
|
||||||
|
$! ----- Prepare info for processing: disabled algorithms info
|
||||||
|
$ gosub read_disabled_algorithms_info
|
||||||
|
$!
|
||||||
$ ZLIB = p2
|
$ ZLIB = p2
|
||||||
$ zlib_lib = ""
|
$ zlib_lib = ""
|
||||||
$ if (ZLIB .nes. "")
|
$ if (ZLIB .nes. "")
|
||||||
@@ -384,8 +388,7 @@ $ alg_i = alg_i + 1
|
|||||||
$ if alg_entry .eqs. "" then goto loop2
|
$ if alg_entry .eqs. "" then goto loop2
|
||||||
$ if alg_entry .nes. ","
|
$ if alg_entry .nes. ","
|
||||||
$ then
|
$ then
|
||||||
$ if alg_entry .eqs. "KRB5" then goto loop ! Special for now
|
$ if disabled_algorithms - ("," + alg_entry + ",") .nes disabled_algorithms then goto loop
|
||||||
$ if alg_entry .eqs. "STATIC_ENGINE" then goto loop ! Special for now
|
|
||||||
$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
|
$ if f$trnlnm("OPENSSL_NO_"+alg_entry) .nes. "" then goto loop
|
||||||
$ goto loop2
|
$ goto loop2
|
||||||
$ endif
|
$ endif
|
||||||
@@ -452,3 +455,22 @@ $ endif
|
|||||||
$ endloop_rvi:
|
$ endloop_rvi:
|
||||||
$ close vf
|
$ close vf
|
||||||
$ return
|
$ return
|
||||||
|
$
|
||||||
|
$! The disabled algorithms reader
|
||||||
|
$ read_disabled_algorithms_info:
|
||||||
|
$ disabled_algorithms = ","
|
||||||
|
$ open /read cf [.CRYPTO.'ARCH']OPENSSLCONF.H
|
||||||
|
$ loop_rci:
|
||||||
|
$ read/err=endloop_rci/end=endloop_rci cf rci_line
|
||||||
|
$ rci_line = f$edit(rci_line,"TRIM,COMPRESS")
|
||||||
|
$ rci_ei = 0
|
||||||
|
$ if f$extract(0,9,rci_line) .eqs. "# define " then rci_ei = 2
|
||||||
|
$ if f$extract(0,8,rci_line) .eqs. "#define " then rci_ei = 1
|
||||||
|
$ if rci_ei .eq. 0 then goto loop_rci
|
||||||
|
$ rci_e = f$element(rci_ei," ",rci_line)
|
||||||
|
$ if f$extract(0,11,rci_e) .nes. "OPENSSL_NO_" then goto loop_rci
|
||||||
|
$ disabled_algorithms = disabled_algorithms + f$extract(11,999,rci_e) + ","
|
||||||
|
$ goto loop_rci
|
||||||
|
$ endloop_rci:
|
||||||
|
$ close cf
|
||||||
|
$ return
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
openssl
|
|
||||||
Makefile.save
|
|
||||||
der_chop
|
|
||||||
der_chop.bak
|
|
||||||
CA.pl
|
|
||||||
*.flc
|
|
||||||
semantic.cache
|
|
||||||
*.dll
|
|
||||||
178
apps/Makefile
178
apps/Makefile
@@ -94,6 +94,9 @@ req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
|
|||||||
sreq.o: req.c
|
sreq.o: req.c
|
||||||
$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
|
$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
|
||||||
|
|
||||||
|
openssl-vms.cnf: openssl.cnf
|
||||||
|
$(PERL) $(TOP)/VMS/VMSify-conf.pl < openssl.cnf > openssl-vms.cnf
|
||||||
|
|
||||||
files:
|
files:
|
||||||
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
|
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
|
||||||
|
|
||||||
@@ -127,12 +130,12 @@ links:
|
|||||||
lint:
|
lint:
|
||||||
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
lint -DLINT $(INCLUDES) $(SRC)>fluff
|
||||||
|
|
||||||
depend:
|
update: openssl-vms.cnf local_depend
|
||||||
@if [ -z "$(THIS)" ]; then \
|
|
||||||
$(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
|
depend: local_depend
|
||||||
else \
|
@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
|
||||||
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
|
local_depend:
|
||||||
fi
|
@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC)
|
||||||
|
|
||||||
dclean:
|
dclean:
|
||||||
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
|
||||||
@@ -144,15 +147,17 @@ clean:
|
|||||||
rm -f req
|
rm -f req
|
||||||
|
|
||||||
$(DLIBSSL):
|
$(DLIBSSL):
|
||||||
(cd ..; $(MAKE) DIRS=ssl all)
|
(cd ..; $(MAKE) build_libssl)
|
||||||
|
|
||||||
$(DLIBCRYPTO):
|
$(DLIBCRYPTO):
|
||||||
(cd ..; $(MAKE) DIRS=crypto all)
|
(cd ..; $(MAKE) build_libcrypto)
|
||||||
|
|
||||||
$(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
|
$(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
|
||||||
$(RM) $(EXE)
|
$(RM) $(EXE)
|
||||||
shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
|
shlib_target=; if [ -n "$(SHARED_LIBS)" ]; then \
|
||||||
shlib_target="$(SHLIB_TARGET)"; \
|
shlib_target="$(SHLIB_TARGET)"; \
|
||||||
|
elif [ -n "$(FIPSCANLIB)" ]; then \
|
||||||
|
FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; export CC FIPSLD_CC; \
|
||||||
fi; \
|
fi; \
|
||||||
LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \
|
LIBRARIES="$(LIBSSL) $(LIBKRB5) $(LIBCRYPTO)" ; \
|
||||||
$(MAKE) -f $(TOP)/Makefile.shared -e \
|
$(MAKE) -f $(TOP)/Makefile.shared -e \
|
||||||
@@ -245,13 +250,13 @@ ciphers.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
|||||||
ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
ciphers.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
ciphers.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
ciphers.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
ciphers.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
||||||
ciphers.o: ../include/openssl/sha.h ../include/openssl/ssl.h
|
ciphers.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||||
ciphers.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
ciphers.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
ciphers.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
ciphers.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
ciphers.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
ciphers.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
ciphers.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
ciphers.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
||||||
ciphers.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
ciphers.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
||||||
ciphers.o: ciphers.c
|
ciphers.o: ../include/openssl/x509v3.h apps.h ciphers.c
|
||||||
cms.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
cms.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
cms.o: ../include/openssl/buffer.h ../include/openssl/cms.h
|
cms.o: ../include/openssl/buffer.h ../include/openssl/cms.h
|
||||||
cms.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
cms.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
||||||
@@ -427,13 +432,13 @@ engine.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
|||||||
engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
engine.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
engine.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
engine.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
engine.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
||||||
engine.o: ../include/openssl/sha.h ../include/openssl/ssl.h
|
engine.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||||
engine.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
engine.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
engine.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
engine.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
engine.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
engine.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
engine.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
engine.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
||||||
engine.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
engine.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
||||||
engine.o: engine.c
|
engine.o: ../include/openssl/x509v3.h apps.h engine.c
|
||||||
errstr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
errstr.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
errstr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
errstr.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
||||||
errstr.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
errstr.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
||||||
@@ -448,13 +453,13 @@ errstr.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
|||||||
errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
errstr.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
errstr.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
errstr.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
errstr.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
||||||
errstr.o: ../include/openssl/sha.h ../include/openssl/ssl.h
|
errstr.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||||
errstr.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
errstr.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
errstr.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
errstr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
errstr.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
errstr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
errstr.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
errstr.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
||||||
errstr.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
errstr.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
||||||
errstr.o: errstr.c
|
errstr.o: ../include/openssl/x509v3.h apps.h errstr.c
|
||||||
gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
gendh.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
|
gendh.o: ../include/openssl/bn.h ../include/openssl/buffer.h
|
||||||
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
gendh.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
||||||
@@ -556,12 +561,12 @@ ocsp.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
|
|||||||
ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
ocsp.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
||||||
ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
ocsp.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
||||||
ocsp.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
ocsp.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
ocsp.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
ocsp.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||||
ocsp.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
ocsp.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||||
ocsp.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
ocsp.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||||
ocsp.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
ocsp.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||||
ocsp.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
ocsp.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
||||||
ocsp.o: ../include/openssl/x509v3.h apps.h ocsp.c
|
ocsp.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h ocsp.c
|
||||||
openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
openssl.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
openssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
openssl.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
||||||
openssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
openssl.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
||||||
@@ -575,8 +580,9 @@ openssl.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
|
|||||||
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
openssl.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||||
openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
openssl.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
openssl.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
openssl.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
openssl.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
|
||||||
openssl.o: ../include/openssl/sha.h ../include/openssl/ssl.h
|
openssl.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
|
openssl.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||||
openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
openssl.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||||
openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
openssl.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||||
openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
openssl.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||||
@@ -791,12 +797,13 @@ s_cb.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
|||||||
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
s_cb.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
s_cb.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
|
s_cb.o: ../include/openssl/pqueue.h ../include/openssl/rand.h
|
||||||
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
s_cb.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
s_cb.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
s_cb.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||||
s_cb.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
s_cb.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||||
s_cb.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
s_cb.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||||
s_cb.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
s_cb.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||||
s_cb.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
s_cb.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
||||||
s_cb.o: ../include/openssl/x509v3.h apps.h s_apps.h s_cb.c
|
s_cb.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
||||||
|
s_cb.o: s_apps.h s_cb.c
|
||||||
s_client.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_client.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_client.o: ../include/openssl/bn.h ../include/openssl/buffer.h
|
s_client.o: ../include/openssl/bn.h ../include/openssl/buffer.h
|
||||||
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_client.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
||||||
@@ -813,12 +820,13 @@ s_client.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
|||||||
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
s_client.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
||||||
s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h
|
s_client.o: ../include/openssl/rand.h ../include/openssl/safestack.h
|
||||||
s_client.o: ../include/openssl/sha.h ../include/openssl/srp.h
|
s_client.o: ../include/openssl/sha.h ../include/openssl/srp.h
|
||||||
s_client.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
s_client.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
|
||||||
s_client.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
s_client.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
||||||
s_client.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
s_client.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
||||||
s_client.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
s_client.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
||||||
s_client.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
s_client.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
||||||
s_client.o: ../include/openssl/x509v3.h apps.h s_apps.h s_client.c timeouts.h
|
s_client.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
||||||
|
s_client.o: s_apps.h s_client.c timeouts.h
|
||||||
s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_server.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h
|
s_server.o: ../include/openssl/bn.h ../include/openssl/buffer.h
|
||||||
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
s_server.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
||||||
@@ -836,27 +844,29 @@ s_server.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
|||||||
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
s_server.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
||||||
s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h
|
s_server.o: ../include/openssl/rand.h ../include/openssl/rsa.h
|
||||||
s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
s_server.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
||||||
s_server.o: ../include/openssl/srp.h ../include/openssl/ssl.h
|
s_server.o: ../include/openssl/srp.h ../include/openssl/srtp.h
|
||||||
s_server.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
s_server.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
s_server.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
s_server.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
s_server.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
s_server.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
s_server.o: ../include/openssl/txt_db.h ../include/openssl/ui.h
|
s_server.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
||||||
s_server.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
s_server.o: ../include/openssl/ui.h ../include/openssl/x509.h
|
||||||
s_server.o: ../include/openssl/x509v3.h apps.h s_apps.h s_server.c timeouts.h
|
s_server.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
||||||
s_socket.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
s_server.o: s_apps.h s_server.c timeouts.h
|
||||||
s_socket.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
s_socket.o: ../e_os.h ../e_os2.h ../include/openssl/asn1.h
|
||||||
s_socket.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
s_socket.o: ../include/openssl/bio.h ../include/openssl/buffer.h
|
||||||
s_socket.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
|
s_socket.o: ../include/openssl/comp.h ../include/openssl/conf.h
|
||||||
s_socket.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
|
s_socket.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
|
||||||
s_socket.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
|
s_socket.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
|
||||||
s_socket.o: ../include/openssl/evp.h ../include/openssl/hmac.h
|
s_socket.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
|
||||||
s_socket.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
|
s_socket.o: ../include/openssl/engine.h ../include/openssl/evp.h
|
||||||
s_socket.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
|
s_socket.o: ../include/openssl/hmac.h ../include/openssl/kssl.h
|
||||||
s_socket.o: ../include/openssl/ocsp.h ../include/openssl/opensslconf.h
|
s_socket.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
|
||||||
s_socket.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
|
s_socket.o: ../include/openssl/objects.h ../include/openssl/ocsp.h
|
||||||
s_socket.o: ../include/openssl/pem.h ../include/openssl/pem2.h
|
s_socket.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
||||||
s_socket.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
|
s_socket.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
s_socket.o: ../include/openssl/safestack.h ../include/openssl/sha.h
|
s_socket.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
|
s_socket.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
||||||
|
s_socket.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||||
s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
s_socket.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
s_socket.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
s_socket.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
s_socket.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
s_socket.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
@@ -877,13 +887,13 @@ s_time.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
|||||||
s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
s_time.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
s_time.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
s_time.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
s_time.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
||||||
s_time.o: ../include/openssl/sha.h ../include/openssl/ssl.h
|
s_time.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||||
s_time.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
s_time.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
s_time.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
s_time.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
s_time.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
s_time.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
s_time.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
s_time.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
||||||
s_time.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
s_time.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
||||||
s_time.o: s_apps.h s_time.c
|
s_time.o: ../include/openssl/x509v3.h apps.h s_apps.h s_time.c
|
||||||
sess_id.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
sess_id.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
sess_id.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
sess_id.o: ../include/openssl/buffer.h ../include/openssl/comp.h
|
||||||
sess_id.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
sess_id.o: ../include/openssl/conf.h ../include/openssl/crypto.h
|
||||||
@@ -898,13 +908,13 @@ sess_id.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
|
|||||||
sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
sess_id.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
|
||||||
sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
sess_id.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
|
||||||
sess_id.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
sess_id.o: ../include/openssl/pqueue.h ../include/openssl/safestack.h
|
||||||
sess_id.o: ../include/openssl/sha.h ../include/openssl/ssl.h
|
sess_id.o: ../include/openssl/sha.h ../include/openssl/srtp.h
|
||||||
sess_id.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
|
sess_id.o: ../include/openssl/ssl.h ../include/openssl/ssl2.h
|
||||||
sess_id.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
|
sess_id.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
|
||||||
sess_id.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
|
sess_id.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
|
||||||
sess_id.o: ../include/openssl/txt_db.h ../include/openssl/x509.h
|
sess_id.o: ../include/openssl/tls1.h ../include/openssl/txt_db.h
|
||||||
sess_id.o: ../include/openssl/x509_vfy.h ../include/openssl/x509v3.h apps.h
|
sess_id.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h
|
||||||
sess_id.o: sess_id.c
|
sess_id.o: ../include/openssl/x509v3.h apps.h sess_id.c
|
||||||
smime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
smime.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
|
||||||
smime.o: ../include/openssl/buffer.h ../include/openssl/conf.h
|
smime.o: ../include/openssl/buffer.h ../include/openssl/conf.h
|
||||||
smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
|
smime.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
|
||||||
|
|||||||
185
apps/app_rand.c
185
apps/app_rand.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -115,104 +115,103 @@
|
|||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
|
|
||||||
|
|
||||||
static int seeded = 0;
|
static int seeded = 0;
|
||||||
static int egdsocket = 0;
|
static int egdsocket = 0;
|
||||||
|
|
||||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
|
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn)
|
||||||
{
|
{
|
||||||
int consider_randfile = (file == NULL);
|
int consider_randfile = (file == NULL);
|
||||||
char buffer[200];
|
char buffer[200];
|
||||||
|
|
||||||
#ifdef OPENSSL_SYS_WINDOWS
|
#ifdef OPENSSL_SYS_WINDOWS
|
||||||
BIO_printf(bio_e,"Loading 'screen' into random state -");
|
RAND_screen();
|
||||||
BIO_flush(bio_e);
|
|
||||||
RAND_screen();
|
|
||||||
BIO_printf(bio_e," done\n");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
file = RAND_file_name(buffer, sizeof buffer);
|
file = RAND_file_name(buffer, sizeof buffer);
|
||||||
else if (RAND_egd(file) > 0)
|
else if (RAND_egd(file) > 0) {
|
||||||
{
|
/*
|
||||||
/* we try if the given filename is an EGD socket.
|
* we try if the given filename is an EGD socket. if it is, we don't
|
||||||
if it is, we don't write anything back to the file. */
|
* write anything back to the file.
|
||||||
egdsocket = 1;
|
*/
|
||||||
return 1;
|
egdsocket = 1;
|
||||||
}
|
return 1;
|
||||||
if (file == NULL || !RAND_load_file(file, -1))
|
}
|
||||||
{
|
if (file == NULL || !RAND_load_file(file, -1)) {
|
||||||
if (RAND_status() == 0)
|
if (RAND_status() == 0) {
|
||||||
{
|
if (!dont_warn) {
|
||||||
if (!dont_warn)
|
BIO_printf(bio_e, "unable to load 'random state'\n");
|
||||||
{
|
BIO_printf(bio_e,
|
||||||
BIO_printf(bio_e,"unable to load 'random state'\n");
|
"This means that the random number generator has not been seeded\n");
|
||||||
BIO_printf(bio_e,"This means that the random number generator has not been seeded\n");
|
BIO_printf(bio_e, "with much random data.\n");
|
||||||
BIO_printf(bio_e,"with much random data.\n");
|
if (consider_randfile) { /* explanation does not apply when a
|
||||||
if (consider_randfile) /* explanation does not apply when a file is explicitly named */
|
* file is explicitly named */
|
||||||
{
|
BIO_printf(bio_e,
|
||||||
BIO_printf(bio_e,"Consider setting the RANDFILE environment variable to point at a file that\n");
|
"Consider setting the RANDFILE environment variable to point at a file that\n");
|
||||||
BIO_printf(bio_e,"'random' data can be kept in (the file will be overwritten).\n");
|
BIO_printf(bio_e,
|
||||||
}
|
"'random' data can be kept in (the file will be overwritten).\n");
|
||||||
}
|
}
|
||||||
return 0;
|
}
|
||||||
}
|
return 0;
|
||||||
}
|
}
|
||||||
seeded = 1;
|
}
|
||||||
return 1;
|
seeded = 1;
|
||||||
}
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
long app_RAND_load_files(char *name)
|
long app_RAND_load_files(char *name)
|
||||||
{
|
{
|
||||||
char *p,*n;
|
char *p, *n;
|
||||||
int last;
|
int last;
|
||||||
long tot=0;
|
long tot = 0;
|
||||||
int egd;
|
int egd;
|
||||||
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
last=0;
|
|
||||||
for (p=name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++);
|
|
||||||
if (*p == '\0') last=1;
|
|
||||||
*p='\0';
|
|
||||||
n=name;
|
|
||||||
name=p+1;
|
|
||||||
if (*n == '\0') break;
|
|
||||||
|
|
||||||
egd=RAND_egd(n);
|
for (;;) {
|
||||||
if (egd > 0)
|
last = 0;
|
||||||
tot+=egd;
|
for (p = name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++) ;
|
||||||
else
|
if (*p == '\0')
|
||||||
tot+=RAND_load_file(n,-1);
|
last = 1;
|
||||||
if (last) break;
|
*p = '\0';
|
||||||
}
|
n = name;
|
||||||
if (tot > 512)
|
name = p + 1;
|
||||||
app_RAND_allow_write_file();
|
if (*n == '\0')
|
||||||
return(tot);
|
break;
|
||||||
}
|
|
||||||
|
egd = RAND_egd(n);
|
||||||
|
if (egd > 0)
|
||||||
|
tot += egd;
|
||||||
|
else
|
||||||
|
tot += RAND_load_file(n, -1);
|
||||||
|
if (last)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (tot > 512)
|
||||||
|
app_RAND_allow_write_file();
|
||||||
|
return (tot);
|
||||||
|
}
|
||||||
|
|
||||||
int app_RAND_write_file(const char *file, BIO *bio_e)
|
int app_RAND_write_file(const char *file, BIO *bio_e)
|
||||||
{
|
{
|
||||||
char buffer[200];
|
char buffer[200];
|
||||||
|
|
||||||
if (egdsocket || !seeded)
|
|
||||||
/* If we did not manage to read the seed file,
|
|
||||||
* we should not write a low-entropy seed file back --
|
|
||||||
* it would suppress a crucial warning the next time
|
|
||||||
* we want to use it. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (file == NULL)
|
if (egdsocket || !seeded)
|
||||||
file = RAND_file_name(buffer, sizeof buffer);
|
/*
|
||||||
if (file == NULL || !RAND_write_file(file))
|
* If we did not manage to read the seed file, we should not write a
|
||||||
{
|
* low-entropy seed file back -- it would suppress a crucial warning
|
||||||
BIO_printf(bio_e,"unable to write 'random state'\n");
|
* the next time we want to use it.
|
||||||
return 0;
|
*/
|
||||||
}
|
return 0;
|
||||||
return 1;
|
|
||||||
}
|
if (file == NULL)
|
||||||
|
file = RAND_file_name(buffer, sizeof buffer);
|
||||||
|
if (file == NULL || !RAND_write_file(file)) {
|
||||||
|
BIO_printf(bio_e, "unable to write 'random state'\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void app_RAND_allow_write_file(void)
|
void app_RAND_allow_write_file(void)
|
||||||
{
|
{
|
||||||
seeded = 1;
|
seeded = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
5020
apps/apps.c
5020
apps/apps.c
File diff suppressed because it is too large
Load Diff
351
apps/apps.h
351
apps/apps.h
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -110,120 +110,119 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HEADER_APPS_H
|
#ifndef HEADER_APPS_H
|
||||||
#define HEADER_APPS_H
|
# define HEADER_APPS_H
|
||||||
|
|
||||||
#include "e_os.h"
|
# include "e_os.h"
|
||||||
|
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/lhash.h>
|
# include <openssl/lhash.h>
|
||||||
#include <openssl/conf.h>
|
# include <openssl/conf.h>
|
||||||
#include <openssl/txt_db.h>
|
# include <openssl/txt_db.h>
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#include <openssl/engine.h>
|
# include <openssl/engine.h>
|
||||||
#endif
|
# endif
|
||||||
#ifndef OPENSSL_NO_OCSP
|
# ifndef OPENSSL_NO_OCSP
|
||||||
#include <openssl/ocsp.h>
|
# include <openssl/ocsp.h>
|
||||||
#endif
|
# endif
|
||||||
#include <openssl/ossl_typ.h>
|
# include <openssl/ossl_typ.h>
|
||||||
|
|
||||||
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
|
int app_RAND_load_file(const char *file, BIO *bio_e, int dont_warn);
|
||||||
int app_RAND_write_file(const char *file, BIO *bio_e);
|
int app_RAND_write_file(const char *file, BIO *bio_e);
|
||||||
/* When `file' is NULL, use defaults.
|
/*
|
||||||
* `bio_e' is for error messages. */
|
* When `file' is NULL, use defaults. `bio_e' is for error messages.
|
||||||
|
*/
|
||||||
void app_RAND_allow_write_file(void);
|
void app_RAND_allow_write_file(void);
|
||||||
long app_RAND_load_files(char *file); /* `file' is a list of files to read,
|
long app_RAND_load_files(char *file); /* `file' is a list of files to read,
|
||||||
* separated by LIST_SEPARATOR_CHAR
|
* separated by LIST_SEPARATOR_CHAR
|
||||||
* (see e_os.h). The string is
|
* (see e_os.h). The string is
|
||||||
* destroyed! */
|
* destroyed! */
|
||||||
|
|
||||||
#ifndef MONOLITH
|
# ifndef MONOLITH
|
||||||
|
|
||||||
#define MAIN(a,v) main(a,v)
|
# define MAIN(a,v) main(a,v)
|
||||||
|
|
||||||
#ifndef NON_MAIN
|
# ifndef NON_MAIN
|
||||||
CONF *config=NULL;
|
CONF *config = NULL;
|
||||||
BIO *bio_err=NULL;
|
BIO *bio_err = NULL;
|
||||||
#else
|
# else
|
||||||
extern CONF *config;
|
extern CONF *config;
|
||||||
extern BIO *bio_err;
|
extern BIO *bio_err;
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#else
|
# else
|
||||||
|
|
||||||
#define MAIN(a,v) PROG(a,v)
|
# define MAIN(a,v) PROG(a,v)
|
||||||
extern CONF *config;
|
extern CONF *config;
|
||||||
extern char *default_config_file;
|
extern char *default_config_file;
|
||||||
extern BIO *bio_err;
|
extern BIO *bio_err;
|
||||||
|
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#ifndef OPENSSL_SYS_NETWARE
|
# ifndef OPENSSL_SYS_NETWARE
|
||||||
#include <signal.h>
|
# include <signal.h>
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#ifdef SIGPIPE
|
# ifdef SIGPIPE
|
||||||
#define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
|
# define do_pipe_sig() signal(SIGPIPE,SIG_IGN)
|
||||||
#else
|
# else
|
||||||
#define do_pipe_sig()
|
# define do_pipe_sig()
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#ifdef OPENSSL_NO_COMP
|
# ifdef OPENSSL_NO_COMP
|
||||||
#define zlib_cleanup()
|
# define zlib_cleanup()
|
||||||
#else
|
# else
|
||||||
#define zlib_cleanup() COMP_zlib_cleanup()
|
# define zlib_cleanup() COMP_zlib_cleanup()
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#if defined(MONOLITH) && !defined(OPENSSL_C)
|
# if defined(MONOLITH) && !defined(OPENSSL_C)
|
||||||
# define apps_startup() \
|
# define apps_startup() \
|
||||||
do_pipe_sig()
|
do_pipe_sig()
|
||||||
# define apps_shutdown()
|
# define apps_shutdown()
|
||||||
#else
|
# else
|
||||||
# ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
# define apps_startup() \
|
# define apps_startup() \
|
||||||
do { do_pipe_sig(); CRYPTO_malloc_init(); \
|
do { do_pipe_sig(); CRYPTO_malloc_init(); \
|
||||||
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
|
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
|
||||||
ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
|
ENGINE_load_builtin_engines(); setup_ui_method(); } while(0)
|
||||||
# define apps_shutdown() \
|
# define apps_shutdown() \
|
||||||
do { CONF_modules_unload(1); destroy_ui_method(); \
|
do { CONF_modules_unload(1); destroy_ui_method(); \
|
||||||
OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
|
OBJ_cleanup(); EVP_cleanup(); ENGINE_cleanup(); \
|
||||||
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
|
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
|
||||||
ERR_free_strings(); zlib_cleanup();} while(0)
|
RAND_cleanup(); \
|
||||||
|
ERR_free_strings(); zlib_cleanup();} while(0)
|
||||||
# else
|
# else
|
||||||
# define apps_startup() \
|
# define apps_startup() \
|
||||||
do { do_pipe_sig(); CRYPTO_malloc_init(); \
|
do { do_pipe_sig(); CRYPTO_malloc_init(); \
|
||||||
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
|
ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); \
|
||||||
setup_ui_method(); } while(0)
|
setup_ui_method(); } while(0)
|
||||||
# define apps_shutdown() \
|
# define apps_shutdown() \
|
||||||
do { CONF_modules_unload(1); destroy_ui_method(); \
|
do { CONF_modules_unload(1); destroy_ui_method(); \
|
||||||
OBJ_cleanup(); EVP_cleanup(); \
|
OBJ_cleanup(); EVP_cleanup(); \
|
||||||
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
|
CRYPTO_cleanup_all_ex_data(); ERR_remove_thread_state(NULL); \
|
||||||
ERR_free_strings(); zlib_cleanup(); } while(0)
|
RAND_cleanup(); \
|
||||||
|
ERR_free_strings(); zlib_cleanup(); } while(0)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#ifdef OPENSSL_SYSNAME_WIN32
|
# if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE)
|
||||||
# define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
|
# define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
|
||||||
#else
|
# else
|
||||||
# define openssl_fdset(a,b) FD_SET(a, b)
|
# define openssl_fdset(a,b) FD_SET(a, b)
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
typedef struct args_st {
|
||||||
|
char **data;
|
||||||
|
int count;
|
||||||
|
} ARGS;
|
||||||
|
|
||||||
typedef struct args_st
|
# define PW_MIN_LENGTH 4
|
||||||
{
|
typedef struct pw_cb_data {
|
||||||
char **data;
|
const void *password;
|
||||||
int count;
|
const char *prompt_info;
|
||||||
} ARGS;
|
} PW_CB_DATA;
|
||||||
|
|
||||||
#define PW_MIN_LENGTH 4
|
int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data);
|
||||||
typedef struct pw_cb_data
|
|
||||||
{
|
|
||||||
const void *password;
|
|
||||||
const char *prompt_info;
|
|
||||||
} PW_CB_DATA;
|
|
||||||
|
|
||||||
int password_callback(char *buf, int bufsiz, int verify,
|
|
||||||
PW_CB_DATA *cb_data);
|
|
||||||
|
|
||||||
int setup_ui_method(void);
|
int setup_ui_method(void);
|
||||||
void destroy_ui_method(void);
|
void destroy_ui_method(void);
|
||||||
@@ -231,12 +230,13 @@ void destroy_ui_method(void);
|
|||||||
int should_retry(int i);
|
int should_retry(int i);
|
||||||
int args_from_file(char *file, int *argc, char **argv[]);
|
int args_from_file(char *file, int *argc, char **argv[]);
|
||||||
int str2fmt(char *s);
|
int str2fmt(char *s);
|
||||||
void program_name(char *in,char *out,int size);
|
void program_name(char *in, char *out, int size);
|
||||||
int chopup_args(ARGS *arg,char *buf, int *argc, char **argv[]);
|
int chopup_args(ARGS *arg, char *buf, int *argc, char **argv[]);
|
||||||
#ifdef HEADER_X509_H
|
# ifdef HEADER_X509_H
|
||||||
int dump_cert_text(BIO *out, X509 *x);
|
int dump_cert_text(BIO *out, X509 *x);
|
||||||
void print_name(BIO *out, const char *title, X509_NAME *nm, unsigned long lflags);
|
void print_name(BIO *out, const char *title, X509_NAME *nm,
|
||||||
#endif
|
unsigned long lflags);
|
||||||
|
# endif
|
||||||
int set_cert_ex(unsigned long *flags, const char *arg);
|
int set_cert_ex(unsigned long *flags, const char *arg);
|
||||||
int set_name_ex(unsigned long *flags, const char *arg);
|
int set_name_ex(unsigned long *flags, const char *arg);
|
||||||
int set_ext_copy(int *copy_type, const char *arg);
|
int set_ext_copy(int *copy_type, const char *arg);
|
||||||
@@ -244,129 +244,144 @@ int copy_extensions(X509 *x, X509_REQ *req, int copy_type);
|
|||||||
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
|
int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
|
||||||
int add_oid_section(BIO *err, CONF *conf);
|
int add_oid_section(BIO *err, CONF *conf);
|
||||||
X509 *load_cert(BIO *err, const char *file, int format,
|
X509 *load_cert(BIO *err, const char *file, int format,
|
||||||
const char *pass, ENGINE *e, const char *cert_descrip);
|
const char *pass, ENGINE *e, const char *cert_descrip);
|
||||||
|
X509_CRL *load_crl(const char *infile, int format);
|
||||||
|
int load_cert_crl_http(const char *url, BIO *err,
|
||||||
|
X509 **pcert, X509_CRL **pcrl);
|
||||||
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
|
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
|
||||||
const char *pass, ENGINE *e, const char *key_descrip);
|
const char *pass, ENGINE *e, const char *key_descrip);
|
||||||
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
|
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
|
||||||
const char *pass, ENGINE *e, const char *key_descrip);
|
const char *pass, ENGINE *e, const char *key_descrip);
|
||||||
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
|
STACK_OF(X509) *load_certs(BIO *err, const char *file, int format,
|
||||||
const char *pass, ENGINE *e, const char *cert_descrip);
|
const char *pass, ENGINE *e,
|
||||||
|
const char *cert_descrip);
|
||||||
STACK_OF(X509_CRL) *load_crls(BIO *err, const char *file, int format,
|
STACK_OF(X509_CRL) *load_crls(BIO *err, const char *file, int format,
|
||||||
const char *pass, ENGINE *e, const char *cert_descrip);
|
const char *pass, ENGINE *e,
|
||||||
|
const char *cert_descrip);
|
||||||
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
|
X509_STORE *setup_verify(BIO *bp, char *CAfile, char *CApath);
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
|
ENGINE *setup_engine(BIO *err, const char *engine, int debug);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_OCSP
|
# ifndef OPENSSL_NO_OCSP
|
||||||
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
|
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
|
||||||
char *host, char *path, char *port, int use_ssl,
|
const char *host, const char *path,
|
||||||
STACK_OF(CONF_VALUE) *headers,
|
const char *port, int use_ssl,
|
||||||
int req_timeout);
|
const STACK_OF(CONF_VALUE) *headers,
|
||||||
#endif
|
int req_timeout);
|
||||||
|
# endif
|
||||||
|
|
||||||
int load_config(BIO *err, CONF *cnf);
|
int load_config(BIO *err, CONF *cnf);
|
||||||
char *make_config_name(void);
|
char *make_config_name(void);
|
||||||
|
|
||||||
/* Functions defined in ca.c and also used in ocsp.c */
|
/* Functions defined in ca.c and also used in ocsp.c */
|
||||||
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
|
int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
|
||||||
ASN1_GENERALIZEDTIME **pinvtm, const char *str);
|
ASN1_GENERALIZEDTIME **pinvtm, const char *str);
|
||||||
|
|
||||||
#define DB_type 0
|
# define DB_type 0
|
||||||
#define DB_exp_date 1
|
# define DB_exp_date 1
|
||||||
#define DB_rev_date 2
|
# define DB_rev_date 2
|
||||||
#define DB_serial 3 /* index - unique */
|
# define DB_serial 3 /* index - unique */
|
||||||
#define DB_file 4
|
# define DB_file 4
|
||||||
#define DB_name 5 /* index - unique when active and not disabled */
|
# define DB_name 5 /* index - unique when active and not
|
||||||
#define DB_NUMBER 6
|
* disabled */
|
||||||
|
# define DB_NUMBER 6
|
||||||
|
|
||||||
#define DB_TYPE_REV 'R'
|
# define DB_TYPE_REV 'R'
|
||||||
#define DB_TYPE_EXP 'E'
|
# define DB_TYPE_EXP 'E'
|
||||||
#define DB_TYPE_VAL 'V'
|
# define DB_TYPE_VAL 'V'
|
||||||
|
|
||||||
typedef struct db_attr_st
|
typedef struct db_attr_st {
|
||||||
{
|
int unique_subject;
|
||||||
int unique_subject;
|
} DB_ATTR;
|
||||||
} DB_ATTR;
|
typedef struct ca_db_st {
|
||||||
typedef struct ca_db_st
|
DB_ATTR attributes;
|
||||||
{
|
TXT_DB *db;
|
||||||
DB_ATTR attributes;
|
} CA_DB;
|
||||||
TXT_DB *db;
|
|
||||||
} CA_DB;
|
|
||||||
|
|
||||||
BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
|
BIGNUM *load_serial(char *serialfile, int create, ASN1_INTEGER **retai);
|
||||||
int save_serial(char *serialfile, char *suffix, BIGNUM *serial, ASN1_INTEGER **retai);
|
int save_serial(char *serialfile, char *suffix, BIGNUM *serial,
|
||||||
|
ASN1_INTEGER **retai);
|
||||||
int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
|
int rotate_serial(char *serialfile, char *new_suffix, char *old_suffix);
|
||||||
int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
|
int rand_serial(BIGNUM *b, ASN1_INTEGER *ai);
|
||||||
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
|
CA_DB *load_index(char *dbfile, DB_ATTR *dbattr);
|
||||||
int index_index(CA_DB *db);
|
int index_index(CA_DB *db);
|
||||||
int save_index(const char *dbfile, const char *suffix, CA_DB *db);
|
int save_index(const char *dbfile, const char *suffix, CA_DB *db);
|
||||||
int rotate_index(const char *dbfile, const char *new_suffix, const char *old_suffix);
|
int rotate_index(const char *dbfile, const char *new_suffix,
|
||||||
|
const char *old_suffix);
|
||||||
void free_index(CA_DB *db);
|
void free_index(CA_DB *db);
|
||||||
#define index_name_cmp_noconst(a, b) \
|
# define index_name_cmp_noconst(a, b) \
|
||||||
index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
|
index_name_cmp((const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, a), \
|
||||||
(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
|
(const OPENSSL_CSTRING *)CHECKED_PTR_OF(OPENSSL_STRING, b))
|
||||||
int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
|
int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b);
|
||||||
int parse_yesno(const char *str, int def);
|
int parse_yesno(const char *str, int def);
|
||||||
|
|
||||||
X509_NAME *parse_name(char *str, long chtype, int multirdn);
|
X509_NAME *parse_name(char *str, long chtype, int multirdn);
|
||||||
int args_verify(char ***pargs, int *pargc,
|
int args_verify(char ***pargs, int *pargc,
|
||||||
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
|
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
|
||||||
void policies_print(BIO *out, X509_STORE_CTX *ctx);
|
void policies_print(BIO *out, X509_STORE_CTX *ctx);
|
||||||
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
|
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
|
||||||
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
|
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, const char *value);
|
||||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
const char *algname, ENGINE *e, int do_param);
|
const char *algname, ENGINE *e, int do_param);
|
||||||
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
|
int do_X509_sign(BIO *err, X509 *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
STACK_OF(OPENSSL_STRING) *sigopts);
|
STACK_OF(OPENSSL_STRING) *sigopts);
|
||||||
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
|
int do_X509_REQ_sign(BIO *err, X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
STACK_OF(OPENSSL_STRING) *sigopts);
|
STACK_OF(OPENSSL_STRING) *sigopts);
|
||||||
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
|
int do_X509_CRL_sign(BIO *err, X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md,
|
||||||
STACK_OF(OPENSSL_STRING) *sigopts);
|
STACK_OF(OPENSSL_STRING) *sigopts);
|
||||||
#ifndef OPENSSL_NO_PSK
|
# ifndef OPENSSL_NO_PSK
|
||||||
extern char *psk_key;
|
extern char *psk_key;
|
||||||
#endif
|
# endif
|
||||||
#ifndef OPENSSL_NO_JPAKE
|
# ifndef OPENSSL_NO_JPAKE
|
||||||
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
|
void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
|
||||||
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
|
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#define FORMAT_UNDEF 0
|
# ifndef OPENSSL_NO_TLSEXT
|
||||||
#define FORMAT_ASN1 1
|
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
|
||||||
#define FORMAT_TEXT 2
|
# endif /* ndef OPENSSL_NO_TLSEXT */
|
||||||
#define FORMAT_PEM 3
|
|
||||||
#define FORMAT_NETSCAPE 4
|
|
||||||
#define FORMAT_PKCS12 5
|
|
||||||
#define FORMAT_SMIME 6
|
|
||||||
#define FORMAT_ENGINE 7
|
|
||||||
#define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid
|
|
||||||
* adding yet another param to load_*key() */
|
|
||||||
#define FORMAT_PEMRSA 9 /* PEM RSAPubicKey format */
|
|
||||||
#define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */
|
|
||||||
#define FORMAT_MSBLOB 11 /* MS Key blob format */
|
|
||||||
#define FORMAT_PVK 12 /* MS PVK file format */
|
|
||||||
|
|
||||||
#define EXT_COPY_NONE 0
|
void print_cert_checks(BIO *bio, X509 *x,
|
||||||
#define EXT_COPY_ADD 1
|
const char *checkhost,
|
||||||
#define EXT_COPY_ALL 2
|
const char *checkemail, const char *checkip);
|
||||||
|
|
||||||
#define NETSCAPE_CERT_HDR "certificate"
|
void store_setup_crl_download(X509_STORE *st);
|
||||||
|
|
||||||
#define APP_PASS_LEN 1024
|
# define FORMAT_UNDEF 0
|
||||||
|
# define FORMAT_ASN1 1
|
||||||
|
# define FORMAT_TEXT 2
|
||||||
|
# define FORMAT_PEM 3
|
||||||
|
# define FORMAT_NETSCAPE 4
|
||||||
|
# define FORMAT_PKCS12 5
|
||||||
|
# define FORMAT_SMIME 6
|
||||||
|
# define FORMAT_ENGINE 7
|
||||||
|
# define FORMAT_IISSGC 8 /* XXX this stupid macro helps us to avoid
|
||||||
|
* adding yet another param to load_*key() */
|
||||||
|
# define FORMAT_PEMRSA 9 /* PEM RSAPubicKey format */
|
||||||
|
# define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */
|
||||||
|
# define FORMAT_MSBLOB 11 /* MS Key blob format */
|
||||||
|
# define FORMAT_PVK 12 /* MS PVK file format */
|
||||||
|
# define FORMAT_HTTP 13 /* Download using HTTP */
|
||||||
|
|
||||||
#define SERIAL_RAND_BITS 64
|
# define EXT_COPY_NONE 0
|
||||||
|
# define EXT_COPY_ADD 1
|
||||||
|
# define EXT_COPY_ALL 2
|
||||||
|
|
||||||
|
# define NETSCAPE_CERT_HDR "certificate"
|
||||||
|
|
||||||
|
# define APP_PASS_LEN 1024
|
||||||
|
|
||||||
|
# define SERIAL_RAND_BITS 64
|
||||||
|
|
||||||
int app_isdir(const char *);
|
int app_isdir(const char *);
|
||||||
int raw_read_stdin(void *,int);
|
int raw_read_stdin(void *, int);
|
||||||
int raw_write_stdout(const void *,int);
|
int raw_write_stdout(const void *, int);
|
||||||
|
|
||||||
|
# define TM_START 0
|
||||||
|
# define TM_STOP 1
|
||||||
|
double app_tminterval(int stop, int usertime);
|
||||||
|
|
||||||
|
# define OPENSSL_NO_SSL_INTERN
|
||||||
|
|
||||||
#define TM_START 0
|
|
||||||
#define TM_STOP 1
|
|
||||||
double app_tminterval (int stop,int usertime);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define OPENSSL_NO_SSL_INTERN
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_NEXTPROTONEG
|
|
||||||
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
651
apps/asn1pars.c
651
apps/asn1pars.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,15 +49,16 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* A nice addition from Dr Stephen Henson <steve@openssl.org> to
|
/*
|
||||||
* add the -strparse option which parses nested binary structures
|
* A nice addition from Dr Stephen Henson <steve@openssl.org> to add the
|
||||||
|
* -strparse option which parses nested binary structures
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -69,377 +70,361 @@
|
|||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
* -in arg - input file - default stdin
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -i - indent the details by depth
|
* -in arg - input file - default stdin
|
||||||
* -offset - where in the file to start
|
* -i - indent the details by depth
|
||||||
* -length - how many bytes to use
|
* -offset - where in the file to start
|
||||||
* -oid file - extra oid description file
|
* -length - how many bytes to use
|
||||||
|
* -oid file - extra oid description file
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG asn1parse_main
|
#define PROG asn1parse_main
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf);
|
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i,badops=0,offset=0,ret=1,j;
|
int i, badops = 0, offset = 0, ret = 1, j;
|
||||||
unsigned int length=0;
|
unsigned int length = 0;
|
||||||
long num,tmplen;
|
long num, tmplen;
|
||||||
BIO *in=NULL,*out=NULL,*b64=NULL, *derout = NULL;
|
BIO *in = NULL, *out = NULL, *b64 = NULL, *derout = NULL;
|
||||||
int informat,indent=0, noout = 0, dump = 0;
|
int informat, indent = 0, noout = 0, dump = 0;
|
||||||
char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
|
char *infile = NULL, *str = NULL, *prog, *oidfile = NULL, *derfile = NULL;
|
||||||
char *genstr=NULL, *genconf=NULL;
|
char *genstr = NULL, *genconf = NULL;
|
||||||
unsigned char *tmpbuf;
|
unsigned char *tmpbuf;
|
||||||
const unsigned char *ctmpbuf;
|
const unsigned char *ctmpbuf;
|
||||||
BUF_MEM *buf=NULL;
|
BUF_MEM *buf = NULL;
|
||||||
STACK_OF(OPENSSL_STRING) *osk=NULL;
|
STACK_OF(OPENSSL_STRING) *osk = NULL;
|
||||||
ASN1_TYPE *at=NULL;
|
ASN1_TYPE *at = NULL;
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
if ((osk=sk_OPENSSL_STRING_new_null()) == NULL)
|
if ((osk = sk_OPENSSL_STRING_new_null()) == NULL) {
|
||||||
{
|
BIO_printf(bio_err, "Memory allocation failure\n");
|
||||||
BIO_printf(bio_err,"Memory allocation failure\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
while (argc >= 1) {
|
||||||
while (argc >= 1)
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
goto bad;
|
||||||
{
|
informat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
informat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
derfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
} else if (strcmp(*argv, "-i") == 0) {
|
||||||
{
|
indent = 1;
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-noout") == 0)
|
||||||
derfile= *(++argv);
|
noout = 1;
|
||||||
}
|
else if (strcmp(*argv, "-oid") == 0) {
|
||||||
else if (strcmp(*argv,"-i") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
indent=1;
|
oidfile = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-offset") == 0) {
|
||||||
else if (strcmp(*argv,"-noout") == 0) noout = 1;
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-oid") == 0)
|
goto bad;
|
||||||
{
|
offset = atoi(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-length") == 0) {
|
||||||
oidfile= *(++argv);
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-offset") == 0)
|
length = atoi(*(++argv));
|
||||||
{
|
if (length == 0)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
offset= atoi(*(++argv));
|
} else if (strcmp(*argv, "-dump") == 0) {
|
||||||
}
|
dump = -1;
|
||||||
else if (strcmp(*argv,"-length") == 0)
|
} else if (strcmp(*argv, "-dlimit") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
length= atoi(*(++argv));
|
dump = atoi(*(++argv));
|
||||||
if (length == 0) goto bad;
|
if (dump <= 0)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-dump") == 0)
|
} else if (strcmp(*argv, "-strparse") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
dump= -1;
|
goto bad;
|
||||||
}
|
sk_OPENSSL_STRING_push(osk, *(++argv));
|
||||||
else if (strcmp(*argv,"-dlimit") == 0)
|
} else if (strcmp(*argv, "-genstr") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
dump= atoi(*(++argv));
|
genstr = *(++argv);
|
||||||
if (dump <= 0) goto bad;
|
} else if (strcmp(*argv, "-genconf") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-strparse") == 0)
|
goto bad;
|
||||||
{
|
genconf = *(++argv);
|
||||||
if (--argc < 1) goto bad;
|
} else {
|
||||||
sk_OPENSSL_STRING_push(osk,*(++argv));
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
}
|
badops = 1;
|
||||||
else if (strcmp(*argv,"-genstr") == 0)
|
break;
|
||||||
{
|
}
|
||||||
if (--argc < 1) goto bad;
|
argc--;
|
||||||
genstr= *(++argv);
|
argv++;
|
||||||
}
|
}
|
||||||
else if (strcmp(*argv,"-genconf") == 0)
|
|
||||||
{
|
|
||||||
if (--argc < 1) goto bad;
|
|
||||||
genconf= *(++argv);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
|
||||||
badops=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] <infile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - one of DER PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - one of DER PEM\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -out arg output file (output format is always DER\n");
|
" -out arg output file (output format is always DER\n");
|
||||||
BIO_printf(bio_err," -noout arg don't produce any output\n");
|
BIO_printf(bio_err, " -noout arg don't produce any output\n");
|
||||||
BIO_printf(bio_err," -offset arg offset into file\n");
|
BIO_printf(bio_err, " -offset arg offset into file\n");
|
||||||
BIO_printf(bio_err," -length arg length of section in file\n");
|
BIO_printf(bio_err, " -length arg length of section in file\n");
|
||||||
BIO_printf(bio_err," -i indent entries\n");
|
BIO_printf(bio_err, " -i indent entries\n");
|
||||||
BIO_printf(bio_err," -dump dump unknown data in hex form\n");
|
BIO_printf(bio_err, " -dump dump unknown data in hex form\n");
|
||||||
BIO_printf(bio_err," -dlimit arg dump the first arg bytes of unknown data in hex form\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -oid file file of extra oid definitions\n");
|
" -dlimit arg dump the first arg bytes of unknown data in hex form\n");
|
||||||
BIO_printf(bio_err," -strparse offset\n");
|
BIO_printf(bio_err, " -oid file file of extra oid definitions\n");
|
||||||
BIO_printf(bio_err," a series of these can be used to 'dig' into multiple\n");
|
BIO_printf(bio_err, " -strparse offset\n");
|
||||||
BIO_printf(bio_err," ASN1 blob wrappings\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -genstr str string to generate ASN1 structure from\n");
|
" a series of these can be used to 'dig' into multiple\n");
|
||||||
BIO_printf(bio_err," -genconf file file to generate ASN1 structure from\n");
|
BIO_printf(bio_err, " ASN1 blob wrappings\n");
|
||||||
goto end;
|
BIO_printf(bio_err,
|
||||||
}
|
" -genstr str string to generate ASN1 structure from\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" -genconf file file to generate ASN1 structure from\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE|BIO_FP_TEXT);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (oidfile != NULL)
|
if (oidfile != NULL) {
|
||||||
{
|
if (BIO_read_filename(in, oidfile) <= 0) {
|
||||||
if (BIO_read_filename(in,oidfile) <= 0)
|
BIO_printf(bio_err, "problems opening %s\n", oidfile);
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(bio_err,"problems opening %s\n",oidfile);
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
OBJ_create_objects(in);
|
||||||
}
|
}
|
||||||
OBJ_create_objects(in);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
perror(infile);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (derfile) {
|
if (derfile) {
|
||||||
if(!(derout = BIO_new_file(derfile, "wb"))) {
|
if (!(derout = BIO_new_file(derfile, "wb"))) {
|
||||||
BIO_printf(bio_err,"problems opening %s\n",derfile);
|
BIO_printf(bio_err, "problems opening %s\n", derfile);
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((buf=BUF_MEM_new()) == NULL) goto end;
|
if ((buf = BUF_MEM_new()) == NULL)
|
||||||
if (!BUF_MEM_grow(buf,BUFSIZ*8)) goto end; /* Pre-allocate :-) */
|
goto end;
|
||||||
|
if (!BUF_MEM_grow(buf, BUFSIZ * 8))
|
||||||
|
goto end; /* Pre-allocate :-) */
|
||||||
|
|
||||||
if (genstr || genconf)
|
if (genstr || genconf) {
|
||||||
{
|
num = do_generate(bio_err, genstr, genconf, buf);
|
||||||
num = do_generate(bio_err, genstr, genconf, buf);
|
if (num < 0) {
|
||||||
if (num < 0)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
|
|
||||||
if (informat == FORMAT_PEM)
|
if (informat == FORMAT_PEM) {
|
||||||
{
|
BIO *tmp;
|
||||||
BIO *tmp;
|
|
||||||
|
|
||||||
if ((b64=BIO_new(BIO_f_base64())) == NULL)
|
if ((b64 = BIO_new(BIO_f_base64())) == NULL)
|
||||||
goto end;
|
goto end;
|
||||||
BIO_push(b64,in);
|
BIO_push(b64, in);
|
||||||
tmp=in;
|
tmp = in;
|
||||||
in=b64;
|
in = b64;
|
||||||
b64=tmp;
|
b64 = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
num=0;
|
num = 0;
|
||||||
for (;;)
|
for (;;) {
|
||||||
{
|
if (!BUF_MEM_grow(buf, (int)num + BUFSIZ))
|
||||||
if (!BUF_MEM_grow(buf,(int)num+BUFSIZ)) goto end;
|
goto end;
|
||||||
i=BIO_read(in,&(buf->data[num]),BUFSIZ);
|
i = BIO_read(in, &(buf->data[num]), BUFSIZ);
|
||||||
if (i <= 0) break;
|
if (i <= 0)
|
||||||
num+=i;
|
break;
|
||||||
}
|
num += i;
|
||||||
}
|
}
|
||||||
str=buf->data;
|
}
|
||||||
|
str = buf->data;
|
||||||
|
|
||||||
/* If any structs to parse go through in sequence */
|
/* If any structs to parse go through in sequence */
|
||||||
|
|
||||||
if (sk_OPENSSL_STRING_num(osk))
|
if (sk_OPENSSL_STRING_num(osk)) {
|
||||||
{
|
tmpbuf = (unsigned char *)str;
|
||||||
tmpbuf=(unsigned char *)str;
|
tmplen = num;
|
||||||
tmplen=num;
|
for (i = 0; i < sk_OPENSSL_STRING_num(osk); i++) {
|
||||||
for (i=0; i<sk_OPENSSL_STRING_num(osk); i++)
|
ASN1_TYPE *atmp;
|
||||||
{
|
int typ;
|
||||||
ASN1_TYPE *atmp;
|
j = atoi(sk_OPENSSL_STRING_value(osk, i));
|
||||||
int typ;
|
if (j == 0) {
|
||||||
j=atoi(sk_OPENSSL_STRING_value(osk,i));
|
BIO_printf(bio_err, "'%s' is an invalid number\n",
|
||||||
if (j == 0)
|
sk_OPENSSL_STRING_value(osk, i));
|
||||||
{
|
continue;
|
||||||
BIO_printf(bio_err,"'%s' is an invalid number\n",sk_OPENSSL_STRING_value(osk,i));
|
}
|
||||||
continue;
|
tmpbuf += j;
|
||||||
}
|
tmplen -= j;
|
||||||
tmpbuf+=j;
|
atmp = at;
|
||||||
tmplen-=j;
|
ctmpbuf = tmpbuf;
|
||||||
atmp = at;
|
at = d2i_ASN1_TYPE(NULL, &ctmpbuf, tmplen);
|
||||||
ctmpbuf = tmpbuf;
|
ASN1_TYPE_free(atmp);
|
||||||
at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
|
if (!at) {
|
||||||
ASN1_TYPE_free(atmp);
|
BIO_printf(bio_err, "Error parsing structure\n");
|
||||||
if(!at)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,"Error parsing structure\n");
|
}
|
||||||
ERR_print_errors(bio_err);
|
typ = ASN1_TYPE_get(at);
|
||||||
goto end;
|
if ((typ == V_ASN1_OBJECT)
|
||||||
}
|
|| (typ == V_ASN1_BOOLEAN)
|
||||||
typ = ASN1_TYPE_get(at);
|
|| (typ == V_ASN1_NULL)) {
|
||||||
if ((typ == V_ASN1_OBJECT)
|
BIO_printf(bio_err, "Can't parse %s type\n", ASN1_tag2str(typ));
|
||||||
|| (typ == V_ASN1_NULL))
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err, "Can't parse %s type\n",
|
}
|
||||||
typ == V_ASN1_NULL ? "NULL" : "OBJECT");
|
/* hmm... this is a little evil but it works */
|
||||||
ERR_print_errors(bio_err);
|
tmpbuf = at->value.asn1_string->data;
|
||||||
goto end;
|
tmplen = at->value.asn1_string->length;
|
||||||
}
|
}
|
||||||
/* hmm... this is a little evil but it works */
|
str = (char *)tmpbuf;
|
||||||
tmpbuf=at->value.asn1_string->data;
|
num = tmplen;
|
||||||
tmplen=at->value.asn1_string->length;
|
}
|
||||||
}
|
|
||||||
str=(char *)tmpbuf;
|
|
||||||
num=tmplen;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset >= num)
|
if (offset >= num) {
|
||||||
{
|
BIO_printf(bio_err, "Error: offset too large\n");
|
||||||
BIO_printf(bio_err, "Error: offset too large\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
num -= offset;
|
num -= offset;
|
||||||
|
|
||||||
if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
|
if ((length == 0) || ((long)length > num))
|
||||||
if(derout) {
|
length = (unsigned int)num;
|
||||||
if(BIO_write(derout, str + offset, length) != (int)length) {
|
if (derout) {
|
||||||
BIO_printf(bio_err, "Error writing output\n");
|
if (BIO_write(derout, str + offset, length) != (int)length) {
|
||||||
ERR_print_errors(bio_err);
|
BIO_printf(bio_err, "Error writing output\n");
|
||||||
goto end;
|
ERR_print_errors(bio_err);
|
||||||
}
|
goto end;
|
||||||
}
|
}
|
||||||
if (!noout &&
|
}
|
||||||
!ASN1_parse_dump(out,(unsigned char *)&(str[offset]),length,
|
if (!noout &&
|
||||||
indent,dump))
|
!ASN1_parse_dump(out, (unsigned char *)&(str[offset]), length,
|
||||||
{
|
indent, dump)) {
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
ret=0;
|
ret = 0;
|
||||||
end:
|
end:
|
||||||
BIO_free(derout);
|
BIO_free(derout);
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL)
|
||||||
if (out != NULL) BIO_free_all(out);
|
BIO_free(in);
|
||||||
if (b64 != NULL) BIO_free(b64);
|
if (out != NULL)
|
||||||
if (ret != 0)
|
BIO_free_all(out);
|
||||||
ERR_print_errors(bio_err);
|
if (b64 != NULL)
|
||||||
if (buf != NULL) BUF_MEM_free(buf);
|
BIO_free(b64);
|
||||||
if (at != NULL) ASN1_TYPE_free(at);
|
if (ret != 0)
|
||||||
if (osk != NULL) sk_OPENSSL_STRING_free(osk);
|
ERR_print_errors(bio_err);
|
||||||
OBJ_cleanup();
|
if (buf != NULL)
|
||||||
apps_shutdown();
|
BUF_MEM_free(buf);
|
||||||
OPENSSL_EXIT(ret);
|
if (at != NULL)
|
||||||
}
|
ASN1_TYPE_free(at);
|
||||||
|
if (osk != NULL)
|
||||||
|
sk_OPENSSL_STRING_free(osk);
|
||||||
|
OBJ_cleanup();
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
|
static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
|
||||||
{
|
{
|
||||||
CONF *cnf = NULL;
|
CONF *cnf = NULL;
|
||||||
int len;
|
int len;
|
||||||
long errline;
|
long errline = 0;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
ASN1_TYPE *atyp = NULL;
|
ASN1_TYPE *atyp = NULL;
|
||||||
|
|
||||||
if (genconf)
|
if (genconf) {
|
||||||
{
|
cnf = NCONF_new(NULL);
|
||||||
cnf = NCONF_new(NULL);
|
if (!NCONF_load(cnf, genconf, &errline))
|
||||||
if (!NCONF_load(cnf, genconf, &errline))
|
goto conferr;
|
||||||
goto conferr;
|
if (!genstr)
|
||||||
if (!genstr)
|
genstr = NCONF_get_string(cnf, "default", "asn1");
|
||||||
genstr = NCONF_get_string(cnf, "default", "asn1");
|
if (!genstr) {
|
||||||
if (!genstr)
|
BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
|
||||||
{
|
goto err;
|
||||||
BIO_printf(bio, "Can't find 'asn1' in '%s'\n", genconf);
|
}
|
||||||
goto err;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
atyp = ASN1_generate_nconf(genstr, cnf);
|
atyp = ASN1_generate_nconf(genstr, cnf);
|
||||||
NCONF_free(cnf);
|
NCONF_free(cnf);
|
||||||
cnf = NULL;
|
cnf = NULL;
|
||||||
|
|
||||||
if (!atyp)
|
if (!atyp)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
len = i2d_ASN1_TYPE(atyp, NULL);
|
len = i2d_ASN1_TYPE(atyp, NULL);
|
||||||
|
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (!BUF_MEM_grow(buf,len))
|
if (!BUF_MEM_grow(buf, len))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
p=(unsigned char *)buf->data;
|
p = (unsigned char *)buf->data;
|
||||||
|
|
||||||
i2d_ASN1_TYPE(atyp, &p);
|
i2d_ASN1_TYPE(atyp, &p);
|
||||||
|
|
||||||
ASN1_TYPE_free(atyp);
|
ASN1_TYPE_free(atyp);
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
conferr:
|
conferr:
|
||||||
|
|
||||||
if (errline > 0)
|
if (errline > 0)
|
||||||
BIO_printf(bio, "Error on line %ld of config file '%s'\n",
|
BIO_printf(bio, "Error on line %ld of config file '%s'\n",
|
||||||
errline, genconf);
|
errline, genconf);
|
||||||
else
|
else
|
||||||
BIO_printf(bio, "Error loading config file '%s'\n", genconf);
|
BIO_printf(bio, "Error loading config file '%s'\n", genconf);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
NCONF_free(cnf);
|
NCONF_free(cnf);
|
||||||
ASN1_TYPE_free(atyp);
|
ASN1_TYPE_free(atyp);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
290
apps/ciphers.c
290
apps/ciphers.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -60,172 +60,180 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifdef OPENSSL_NO_STDIO
|
#ifdef OPENSSL_NO_STDIO
|
||||||
#define APPS_WIN16
|
# define APPS_WIN16
|
||||||
#endif
|
#endif
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG ciphers_main
|
#define PROG ciphers_main
|
||||||
|
|
||||||
static const char *ciphers_usage[]={
|
static const char *ciphers_usage[] = {
|
||||||
"usage: ciphers args\n",
|
"usage: ciphers args\n",
|
||||||
" -v - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
|
" -v - verbose mode, a textual listing of the SSL/TLS ciphers in OpenSSL\n",
|
||||||
" -V - even more verbose\n",
|
" -V - even more verbose\n",
|
||||||
" -ssl2 - SSL2 mode\n",
|
" -ssl2 - SSL2 mode\n",
|
||||||
" -ssl3 - SSL3 mode\n",
|
" -ssl3 - SSL3 mode\n",
|
||||||
" -tls1 - TLS1 mode\n",
|
" -tls1 - TLS1 mode\n",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret=1,i;
|
int ret = 1, i;
|
||||||
int verbose=0,Verbose=0;
|
int verbose = 0, Verbose = 0;
|
||||||
const char **pp;
|
#ifndef OPENSSL_NO_SSL_TRACE
|
||||||
const char *p;
|
int stdname = 0;
|
||||||
int badops=0;
|
|
||||||
SSL_CTX *ctx=NULL;
|
|
||||||
SSL *ssl=NULL;
|
|
||||||
char *ciphers=NULL;
|
|
||||||
const SSL_METHOD *meth=NULL;
|
|
||||||
STACK_OF(SSL_CIPHER) *sk;
|
|
||||||
char buf[512];
|
|
||||||
BIO *STDout=NULL;
|
|
||||||
|
|
||||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
|
|
||||||
meth=SSLv23_server_method();
|
|
||||||
#elif !defined(OPENSSL_NO_SSL3)
|
|
||||||
meth=SSLv3_server_method();
|
|
||||||
#elif !defined(OPENSSL_NO_SSL2)
|
|
||||||
meth=SSLv2_server_method();
|
|
||||||
#endif
|
#endif
|
||||||
|
const char **pp;
|
||||||
|
const char *p;
|
||||||
|
int badops = 0;
|
||||||
|
SSL_CTX *ctx = NULL;
|
||||||
|
SSL *ssl = NULL;
|
||||||
|
char *ciphers = NULL;
|
||||||
|
const SSL_METHOD *meth = NULL;
|
||||||
|
STACK_OF(SSL_CIPHER) *sk;
|
||||||
|
char buf[512];
|
||||||
|
BIO *STDout = NULL;
|
||||||
|
|
||||||
apps_startup();
|
meth = SSLv23_server_method();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
apps_startup();
|
||||||
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
|
||||||
STDout=BIO_new_fp(stdout,BIO_NOCLOSE);
|
if (bio_err == NULL)
|
||||||
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
STDout = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
STDout = BIO_push(tmpbio, STDout);
|
STDout = BIO_push(tmpbio, STDout);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-v") == 0)
|
||||||
if (strcmp(*argv,"-v") == 0)
|
verbose = 1;
|
||||||
verbose=1;
|
else if (strcmp(*argv, "-V") == 0)
|
||||||
else if (strcmp(*argv,"-V") == 0)
|
verbose = Verbose = 1;
|
||||||
verbose=Verbose=1;
|
#ifndef OPENSSL_NO_SSL_TRACE
|
||||||
|
else if (strcmp(*argv, "-stdname") == 0)
|
||||||
|
stdname = verbose = 1;
|
||||||
|
#endif
|
||||||
#ifndef OPENSSL_NO_SSL2
|
#ifndef OPENSSL_NO_SSL2
|
||||||
else if (strcmp(*argv,"-ssl2") == 0)
|
else if (strcmp(*argv, "-ssl2") == 0)
|
||||||
meth=SSLv2_client_method();
|
meth = SSLv2_client_method();
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SSL3
|
#ifndef OPENSSL_NO_SSL3
|
||||||
else if (strcmp(*argv,"-ssl3") == 0)
|
else if (strcmp(*argv, "-ssl3") == 0)
|
||||||
meth=SSLv3_client_method();
|
meth = SSLv3_client_method();
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_TLS1
|
#ifndef OPENSSL_NO_TLS1
|
||||||
else if (strcmp(*argv,"-tls1") == 0)
|
else if (strcmp(*argv, "-tls1") == 0)
|
||||||
meth=TLSv1_client_method();
|
meth = TLSv1_client_method();
|
||||||
#endif
|
#endif
|
||||||
else if ((strncmp(*argv,"-h",2) == 0) ||
|
else if ((strncmp(*argv, "-h", 2) == 0) || (strcmp(*argv, "-?") == 0)) {
|
||||||
(strcmp(*argv,"-?") == 0))
|
badops = 1;
|
||||||
{
|
break;
|
||||||
badops=1;
|
} else {
|
||||||
break;
|
ciphers = *argv;
|
||||||
}
|
}
|
||||||
else
|
argc--;
|
||||||
{
|
argv++;
|
||||||
ciphers= *argv;
|
}
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
for (pp = ciphers_usage; (*pp != NULL); pp++)
|
||||||
for (pp=ciphers_usage; (*pp != NULL); pp++)
|
BIO_printf(bio_err, "%s", *pp);
|
||||||
BIO_printf(bio_err,"%s",*pp);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
OpenSSL_add_ssl_algorithms();
|
OpenSSL_add_ssl_algorithms();
|
||||||
|
|
||||||
ctx=SSL_CTX_new(meth);
|
ctx = SSL_CTX_new(meth);
|
||||||
if (ctx == NULL) goto err;
|
if (ctx == NULL)
|
||||||
if (ciphers != NULL) {
|
goto err;
|
||||||
if(!SSL_CTX_set_cipher_list(ctx,ciphers)) {
|
if (ciphers != NULL) {
|
||||||
BIO_printf(bio_err, "Error in cipher list\n");
|
if (!SSL_CTX_set_cipher_list(ctx, ciphers)) {
|
||||||
goto err;
|
BIO_printf(bio_err, "Error in cipher list\n");
|
||||||
}
|
goto err;
|
||||||
}
|
}
|
||||||
ssl=SSL_new(ctx);
|
}
|
||||||
if (ssl == NULL) goto err;
|
ssl = SSL_new(ctx);
|
||||||
|
if (ssl == NULL)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
if (!verbose) {
|
||||||
|
for (i = 0;; i++) {
|
||||||
|
p = SSL_get_cipher_list(ssl, i);
|
||||||
|
if (p == NULL)
|
||||||
|
break;
|
||||||
|
if (i != 0)
|
||||||
|
BIO_printf(STDout, ":");
|
||||||
|
BIO_printf(STDout, "%s", p);
|
||||||
|
}
|
||||||
|
BIO_printf(STDout, "\n");
|
||||||
|
} else { /* verbose */
|
||||||
|
|
||||||
if (!verbose)
|
sk = SSL_get_ciphers(ssl);
|
||||||
{
|
|
||||||
for (i=0; ; i++)
|
|
||||||
{
|
|
||||||
p=SSL_get_cipher_list(ssl,i);
|
|
||||||
if (p == NULL) break;
|
|
||||||
if (i != 0) BIO_printf(STDout,":");
|
|
||||||
BIO_printf(STDout,"%s",p);
|
|
||||||
}
|
|
||||||
BIO_printf(STDout,"\n");
|
|
||||||
}
|
|
||||||
else /* verbose */
|
|
||||||
{
|
|
||||||
sk=SSL_get_ciphers(ssl);
|
|
||||||
|
|
||||||
for (i=0; i<sk_SSL_CIPHER_num(sk); i++)
|
for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
|
||||||
{
|
SSL_CIPHER *c;
|
||||||
SSL_CIPHER *c;
|
|
||||||
|
|
||||||
c = sk_SSL_CIPHER_value(sk,i);
|
c = sk_SSL_CIPHER_value(sk, i);
|
||||||
|
|
||||||
if (Verbose)
|
|
||||||
{
|
|
||||||
unsigned long id = SSL_CIPHER_get_id(c);
|
|
||||||
int id0 = (int)(id >> 24);
|
|
||||||
int id1 = (int)((id >> 16) & 0xffL);
|
|
||||||
int id2 = (int)((id >> 8) & 0xffL);
|
|
||||||
int id3 = (int)(id & 0xffL);
|
|
||||||
|
|
||||||
if ((id & 0xff000000L) == 0x02000000L)
|
|
||||||
BIO_printf(STDout, " 0x%02X,0x%02X,0x%02X - ", id1, id2, id3); /* SSL2 cipher */
|
|
||||||
else if ((id & 0xff000000L) == 0x03000000L)
|
|
||||||
BIO_printf(STDout, " 0x%02X,0x%02X - ", id2, id3); /* SSL3 cipher */
|
|
||||||
else
|
|
||||||
BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0, id1, id2, id3); /* whatever */
|
|
||||||
}
|
|
||||||
|
|
||||||
BIO_puts(STDout,SSL_CIPHER_description(c,buf,sizeof buf));
|
if (Verbose) {
|
||||||
}
|
unsigned long id = SSL_CIPHER_get_id(c);
|
||||||
}
|
int id0 = (int)(id >> 24);
|
||||||
|
int id1 = (int)((id >> 16) & 0xffL);
|
||||||
|
int id2 = (int)((id >> 8) & 0xffL);
|
||||||
|
int id3 = (int)(id & 0xffL);
|
||||||
|
|
||||||
ret=0;
|
if ((id & 0xff000000L) == 0x02000000L) {
|
||||||
if (0)
|
/* SSL2 cipher */
|
||||||
{
|
BIO_printf(STDout, " 0x%02X,0x%02X,0x%02X - ", id1,
|
||||||
err:
|
id2, id3);
|
||||||
SSL_load_error_strings();
|
} else if ((id & 0xff000000L) == 0x03000000L) {
|
||||||
ERR_print_errors(bio_err);
|
/* SSL3 cipher */
|
||||||
}
|
BIO_printf(STDout, " 0x%02X,0x%02X - ", id2,
|
||||||
end:
|
id3);
|
||||||
if (ctx != NULL) SSL_CTX_free(ctx);
|
} else {
|
||||||
if (ssl != NULL) SSL_free(ssl);
|
/* whatever */
|
||||||
if (STDout != NULL) BIO_free_all(STDout);
|
BIO_printf(STDout, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0,
|
||||||
apps_shutdown();
|
id1, id2, id3);
|
||||||
OPENSSL_EXIT(ret);
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef OPENSSL_NO_SSL_TRACE
|
||||||
|
if (stdname) {
|
||||||
|
const char *nm = SSL_CIPHER_standard_name(c);
|
||||||
|
if (nm == NULL)
|
||||||
|
nm = "UNKNOWN";
|
||||||
|
BIO_printf(STDout, "%s - ", nm);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
if (0) {
|
||||||
|
err:
|
||||||
|
SSL_load_error_strings();
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
}
|
||||||
|
end:
|
||||||
|
if (ctx != NULL)
|
||||||
|
SSL_CTX_free(ctx);
|
||||||
|
if (ssl != NULL)
|
||||||
|
SSL_free(ssl);
|
||||||
|
if (STDout != NULL)
|
||||||
|
BIO_free_all(STDout);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,24 +1,52 @@
|
|||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
|
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Client Cert
|
||||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Client test cert (512 bit)
|
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIB6TCCAVICAQIwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
|
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6yMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
|
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
|
||||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU2WhcNOTgwNjA5
|
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
|
||||||
MTM1NzU2WjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
|
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
|
||||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGkNsaWVudCB0ZXN0IGNl
|
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
|
||||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtv55QyzG6i2Plw
|
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgQ2xpZW50IENlcnQw
|
||||||
Z1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexmq/R4KedLjFEIYjocDui+IXs62NNt
|
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC0ranbHRLcLVqN+0BzcZpY
|
||||||
XrT8odkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQBwtMmI7oGUG8nKmftQssATViH5
|
+yOLqxzDWT1LD9eW1stC4NzXX9/DCtSIVyN7YIHdGLrIPr64IDdXXaMRzgZ2rOKs
|
||||||
NRRtoEw07DxJp/LfatHdrhqQB73eGdL5WILZJXk46Xz2e9WMSUjVCSYhdKxtflU3
|
lmHCAiFpO/ja99gGCJRxH0xwQatqAULfJVHeUhs7OEGOZc2nWifjqKvGfNTilP7D
|
||||||
UR2Ajv1Oo0sTNdfz0wDqJNirLNtzyhhsaq8qMTrLwXrCP31VxBiigFSQSUFnZyTE
|
nwi69ipQFq9oS19FmhwVHk2wg7KZGHI1qDyG04UrfCZMRitvS9+UVhPpIPjuiBi2
|
||||||
9TKwhS4GlwbtCfxSKQ==
|
x3/FZIpL5gXJvvFK6xHY63oq2asyzBATntBgnP4qJFWWcvRx24wF1PnZabxuVoL2
|
||||||
|
bPnQ/KvONDrw3IdqkKhYNTul7jEcu3OlcZIMw+7DiaKJLAzKb/bBF5gm/pwW6As9
|
||||||
|
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
|
||||||
|
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
|
||||||
|
BBSZHKyLoTh7Mb409Zn/mK1ceSDAjDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
|
||||||
|
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAD0mL7PtPYgCEuDyOQSbLpeND5hVS
|
||||||
|
curxQdGnrJ6Acrhodb7E9ccATokeb0PLx6HBLQUicxhTZIQ9FbO43YkQcOU6C3BB
|
||||||
|
IlwskqmtN6+VmrQzNolHCDzvxNZs9lYL2VbGPGqVRyjZeHpoAlf9cQr8PgDb4d4b
|
||||||
|
vUx2KAhHQvV2nkmYvKyXcgnRuHggumF87mkxidriGAEFwH4qfOqetUg64WyxP7P2
|
||||||
|
QLipm04SyQa7ONtIApfVXgHcE42Py4/f4arzCzMjKe3VyhGkS7nsT55X/fWgTaRm
|
||||||
|
CQPkO+H94P958WTvQDt77bQ+D3IvYaVvfil8n6HJMOJfFT0LJuSUbpSXJg==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
MIIBOwIBAAJBALtv55QyzG6i2PlwZ1pah7++Gv8L5j6Hnyr/uTZE1NLG0ABDDexm
|
MIIEpQIBAAKCAQEAtK2p2x0S3C1ajftAc3GaWPsji6scw1k9Sw/XltbLQuDc11/f
|
||||||
q/R4KedLjFEIYjocDui+IXs62NNtXrT8odkCAwEAAQJAbwXq0vJ/+uyEvsNgxLko
|
wwrUiFcje2CB3Ri6yD6+uCA3V12jEc4GdqzirJZhwgIhaTv42vfYBgiUcR9McEGr
|
||||||
/V86mGXQ/KrSkeKlL0r4ENxjcyeMAGoKu6J9yMY7+X9+Zm4nxShNfTsf/+Freoe1
|
agFC3yVR3lIbOzhBjmXNp1on46irxnzU4pT+w58IuvYqUBavaEtfRZocFR5NsIOy
|
||||||
HQIhAPOSm5Q1YI+KIsII2GeVJx1U69+wnd71OasIPakS1L1XAiEAxQAW+J3/JWE0
|
mRhyNag8htOFK3wmTEYrb0vflFYT6SD47ogYtsd/xWSKS+YFyb7xSusR2Ot6Ktmr
|
||||||
ftEYakbhUOKL8tD1OaFZS71/5GdG7E8CIQCefUMmySSvwd6kC0VlATSWbW+d+jp/
|
MswQE57QYJz+KiRVlnL0cduMBdT52Wm8blaC9mz50PyrzjQ68NyHapCoWDU7pe4x
|
||||||
nWmM1KvqnAo5uQIhALqEADu5U1Wvt8UN8UDGBRPQulHWNycuNV45d3nnskWPAiAw
|
HLtzpXGSDMPuw4miiSwMym/2wReYJv6cFugLPQIDAQABAoIBAAZOyc9MhIwLSU4L
|
||||||
ueTyr6WsZ5+SD8g/Hy3xuvF3nPmJRH+rwvVihlcFOg==
|
p4RgQvM4UVVe8/Id+3XTZ8NsXExJbWxXfIhiqGjaIfL8u4vsgRjcl+v1s/jo2/iT
|
||||||
|
KMab4o4D8gXD7UavQVDjtjb/ta79WL3SjRl2Uc9YjjMkyq6WmDNQeo2NKDdafCTB
|
||||||
|
1uzSJtLNipB8Z53ELPuHJhxX9QMHrMnuha49riQgXZ7buP9iQrHJFhImBjSzbxJx
|
||||||
|
L+TI6rkyLSf9Wi0Pd3L27Ob3QWNfNRYNSeTE+08eSRChkur5W0RuXAcuAICdQlCl
|
||||||
|
LBvWO/LmmvbzCqiDcgy/TliSb6CGGwgiNG7LJZmlkYNj8laGwalNlYZs3UrVv6NO
|
||||||
|
Br2loAECgYEA2kvCvPGj0Dg/6g7WhXDvAkEbcaL1tSeCxBbNH+6HS2UWMWvyTtCn
|
||||||
|
/bbD519QIdkvayy1QjEf32GV/UjUVmlULMLBcDy0DGjtL3+XpIhLKWDNxN1v1/ai
|
||||||
|
1oz23ZJCOgnk6K4qtFtlRS1XtynjA+rBetvYvLP9SKeFrnpzCgaA2r0CgYEA0+KX
|
||||||
|
1ACXDTNH5ySX3kMjSS9xdINf+OOw4CvPHFwbtc9aqk2HePlEsBTz5I/W3rKwXva3
|
||||||
|
NqZ/bRqVVeZB/hHKFywgdUQk2Uc5z/S7Lw70/w1HubNTXGU06Ngb6zOFAo/o/TwZ
|
||||||
|
zTP1BMIKSOB6PAZPS3l+aLO4FRIRotfFhgRHOoECgYEAmiZbqt8cJaJDB/5YYDzC
|
||||||
|
mp3tSk6gIb936Q6M5VqkMYp9pIKsxhk0N8aDCnTU+kIK6SzWBpr3/d9Ecmqmfyq7
|
||||||
|
5SvWO3KyVf0WWK9KH0abhOm2BKm2HBQvI0DB5u8sUx2/hsvOnjPYDISbZ11t0MtK
|
||||||
|
u35Zy89yMYcSsIYJjG/ROCUCgYEAgI2P9G5PNxEP5OtMwOsW84Y3Xat/hPAQFlI+
|
||||||
|
HES+AzbFGWJkeT8zL2nm95tVkFP1sggZ7Kxjz3w7cpx7GX0NkbWSE9O+T51pNASV
|
||||||
|
tN1sQ3p5M+/a+cnlqgfEGJVvc7iAcXQPa3LEi5h2yPR49QYXAgG6cifn3dDSpmwn
|
||||||
|
SUI7PQECgYEApGCIIpSRPLAEHTGmP87RBL1smurhwmy2s/pghkvUkWehtxg0sGHh
|
||||||
|
kuaqDWcskogv+QC0sVdytiLSz8G0DwcEcsHK1Fkyb8A+ayiw6jWJDo2m9+IF4Fww
|
||||||
|
1Te6jFPYDESnbhq7+TLGgHGhtwcu5cnb4vSuYXGXKupZGzoLOBbv1Zw=
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
||||||
|
|||||||
2468
apps/cms.c
2468
apps/cms.c
File diff suppressed because it is too large
Load Diff
704
apps/crl.c
704
apps/crl.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -67,380 +67,376 @@
|
|||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG crl_main
|
#define PROG crl_main
|
||||||
|
|
||||||
#undef POSTFIX
|
#undef POSTFIX
|
||||||
#define POSTFIX ".rvk"
|
#define POSTFIX ".rvk"
|
||||||
|
|
||||||
static const char *crl_usage[]={
|
static const char *crl_usage[] = {
|
||||||
"usage: crl args\n",
|
"usage: crl args\n",
|
||||||
"\n",
|
"\n",
|
||||||
" -inform arg - input format - default PEM (DER or PEM)\n",
|
" -inform arg - input format - default PEM (DER or PEM)\n",
|
||||||
" -outform arg - output format - default PEM\n",
|
" -outform arg - output format - default PEM\n",
|
||||||
" -text - print out a text format version\n",
|
" -text - print out a text format version\n",
|
||||||
" -in arg - input file - default stdin\n",
|
" -in arg - input file - default stdin\n",
|
||||||
" -out arg - output file - default stdout\n",
|
" -out arg - output file - default stdout\n",
|
||||||
" -hash - print hash value\n",
|
" -hash - print hash value\n",
|
||||||
" -fingerprint - print the crl fingerprint\n",
|
#ifndef OPENSSL_NO_MD5
|
||||||
" -issuer - print issuer DN\n",
|
" -hash_old - print old-style (MD5) hash value\n",
|
||||||
" -lastupdate - lastUpdate field\n",
|
#endif
|
||||||
" -nextupdate - nextUpdate field\n",
|
" -fingerprint - print the crl fingerprint\n",
|
||||||
" -crlnumber - print CRL number\n",
|
" -issuer - print issuer DN\n",
|
||||||
" -noout - no CRL output\n",
|
" -lastupdate - lastUpdate field\n",
|
||||||
" -CAfile name - verify CRL using certificates in file \"name\"\n",
|
" -nextupdate - nextUpdate field\n",
|
||||||
" -CApath dir - verify CRL using certificates in \"dir\"\n",
|
" -crlnumber - print CRL number\n",
|
||||||
" -nameopt arg - various certificate name options\n",
|
" -noout - no CRL output\n",
|
||||||
NULL
|
" -CAfile name - verify CRL using certificates in file \"name\"\n",
|
||||||
|
" -CApath dir - verify CRL using certificates in \"dir\"\n",
|
||||||
|
" -nameopt arg - various certificate name options\n",
|
||||||
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static X509_CRL *load_crl(char *file, int format);
|
static BIO *bio_out = NULL;
|
||||||
static BIO *bio_out=NULL;
|
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
unsigned long nmflag = 0;
|
unsigned long nmflag = 0;
|
||||||
X509_CRL *x=NULL;
|
X509_CRL *x = NULL;
|
||||||
char *CAfile = NULL, *CApath = NULL;
|
char *CAfile = NULL, *CApath = NULL;
|
||||||
int ret=1,i,num,badops=0;
|
int ret = 1, i, num, badops = 0, badsig = 0;
|
||||||
BIO *out=NULL;
|
BIO *out = NULL;
|
||||||
int informat,outformat;
|
int informat, outformat, keyformat;
|
||||||
char *infile=NULL,*outfile=NULL;
|
char *infile = NULL, *outfile = NULL, *crldiff = NULL, *keyfile = NULL;
|
||||||
int hash=0,issuer=0,lastupdate=0,nextupdate=0,noout=0,text=0;
|
int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout =
|
||||||
int fingerprint = 0, crlnumber = 0;
|
0, text = 0;
|
||||||
const char **pp;
|
#ifndef OPENSSL_NO_MD5
|
||||||
X509_STORE *store = NULL;
|
int hash_old = 0;
|
||||||
X509_STORE_CTX ctx;
|
|
||||||
X509_LOOKUP *lookup = NULL;
|
|
||||||
X509_OBJECT xobj;
|
|
||||||
EVP_PKEY *pkey;
|
|
||||||
int do_ver = 0;
|
|
||||||
const EVP_MD *md_alg,*digest=EVP_sha1();
|
|
||||||
|
|
||||||
apps_startup();
|
|
||||||
|
|
||||||
if (bio_err == NULL)
|
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
if (bio_out == NULL)
|
|
||||||
if ((bio_out=BIO_new(BIO_s_file())) != NULL)
|
|
||||||
{
|
|
||||||
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
bio_out = BIO_push(tmpbio, bio_out);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
int fingerprint = 0, crlnumber = 0;
|
||||||
|
const char **pp;
|
||||||
|
X509_STORE *store = NULL;
|
||||||
|
X509_STORE_CTX ctx;
|
||||||
|
X509_LOOKUP *lookup = NULL;
|
||||||
|
X509_OBJECT xobj;
|
||||||
|
EVP_PKEY *pkey;
|
||||||
|
int do_ver = 0;
|
||||||
|
const EVP_MD *md_alg, *digest = EVP_sha1();
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
apps_startup();
|
||||||
outformat=FORMAT_PEM;
|
|
||||||
|
|
||||||
argc--;
|
if (bio_err == NULL)
|
||||||
argv++;
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
num=0;
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
while (argc >= 1)
|
|
||||||
{
|
if (!load_config(bio_err, NULL))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
if (bio_out == NULL)
|
||||||
|
if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
|
||||||
|
BIO_set_fp(bio_out, stdout, BIO_NOCLOSE);
|
||||||
|
#ifdef OPENSSL_SYS_VMS
|
||||||
|
{
|
||||||
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
|
bio_out = BIO_push(tmpbio, bio_out);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
informat = FORMAT_PEM;
|
||||||
|
outformat = FORMAT_PEM;
|
||||||
|
keyformat = FORMAT_PEM;
|
||||||
|
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
num = 0;
|
||||||
|
while (argc >= 1) {
|
||||||
#ifdef undef
|
#ifdef undef
|
||||||
if (strcmp(*argv,"-p") == 0)
|
if (strcmp(*argv, "-p") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
if (!args_from_file(++argv,Nargc,Nargv)) { goto end; }*/
|
if (!args_from_file(++argv, Nargc, Nargv)) {
|
||||||
}
|
goto end;
|
||||||
|
}
|
||||||
|
*/}
|
||||||
#endif
|
#endif
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
informat=str2fmt(*(++argv));
|
informat = str2fmt(*(++argv));
|
||||||
}
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
outformat = str2fmt(*(++argv));
|
||||||
outformat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
goto bad;
|
||||||
{
|
infile = *(++argv);
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-gendelta") == 0) {
|
||||||
infile= *(++argv);
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
crldiff = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-key") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
outfile= *(++argv);
|
goto bad;
|
||||||
}
|
keyfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-CApath") == 0)
|
} else if (strcmp(*argv, "-keyform") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
CApath = *(++argv);
|
keyformat = str2fmt(*(++argv));
|
||||||
do_ver = 1;
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-CAfile") == 0)
|
goto bad;
|
||||||
{
|
outfile = *(++argv);
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-CApath") == 0) {
|
||||||
CAfile = *(++argv);
|
if (--argc < 1)
|
||||||
do_ver = 1;
|
goto bad;
|
||||||
}
|
CApath = *(++argv);
|
||||||
else if (strcmp(*argv,"-verify") == 0)
|
do_ver = 1;
|
||||||
do_ver = 1;
|
} else if (strcmp(*argv, "-CAfile") == 0) {
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
if (--argc < 1)
|
||||||
text = 1;
|
goto bad;
|
||||||
else if (strcmp(*argv,"-hash") == 0)
|
CAfile = *(++argv);
|
||||||
hash= ++num;
|
do_ver = 1;
|
||||||
else if (strcmp(*argv,"-nameopt") == 0)
|
} else if (strcmp(*argv, "-verify") == 0)
|
||||||
{
|
do_ver = 1;
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
if (!set_name_ex(&nmflag, *(++argv))) goto bad;
|
text = 1;
|
||||||
}
|
else if (strcmp(*argv, "-hash") == 0)
|
||||||
else if (strcmp(*argv,"-issuer") == 0)
|
hash = ++num;
|
||||||
issuer= ++num;
|
#ifndef OPENSSL_NO_MD5
|
||||||
else if (strcmp(*argv,"-lastupdate") == 0)
|
else if (strcmp(*argv, "-hash_old") == 0)
|
||||||
lastupdate= ++num;
|
hash_old = ++num;
|
||||||
else if (strcmp(*argv,"-nextupdate") == 0)
|
#endif
|
||||||
nextupdate= ++num;
|
else if (strcmp(*argv, "-nameopt") == 0) {
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
if (--argc < 1)
|
||||||
noout= ++num;
|
goto bad;
|
||||||
else if (strcmp(*argv,"-fingerprint") == 0)
|
if (!set_name_ex(&nmflag, *(++argv)))
|
||||||
fingerprint= ++num;
|
goto bad;
|
||||||
else if (strcmp(*argv,"-crlnumber") == 0)
|
} else if (strcmp(*argv, "-issuer") == 0)
|
||||||
crlnumber= ++num;
|
issuer = ++num;
|
||||||
else if ((md_alg=EVP_get_digestbyname(*argv + 1)))
|
else if (strcmp(*argv, "-lastupdate") == 0)
|
||||||
{
|
lastupdate = ++num;
|
||||||
/* ok */
|
else if (strcmp(*argv, "-nextupdate") == 0)
|
||||||
digest=md_alg;
|
nextupdate = ++num;
|
||||||
}
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
else
|
noout = ++num;
|
||||||
{
|
else if (strcmp(*argv, "-fingerprint") == 0)
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
fingerprint = ++num;
|
||||||
badops=1;
|
else if (strcmp(*argv, "-crlnumber") == 0)
|
||||||
break;
|
crlnumber = ++num;
|
||||||
}
|
else if (strcmp(*argv, "-badsig") == 0)
|
||||||
argc--;
|
badsig = 1;
|
||||||
argv++;
|
else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
|
||||||
}
|
/* ok */
|
||||||
|
digest = md_alg;
|
||||||
|
} else {
|
||||||
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
|
badops = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
for (pp = crl_usage; (*pp != NULL); pp++)
|
||||||
for (pp=crl_usage; (*pp != NULL); pp++)
|
BIO_printf(bio_err, "%s", *pp);
|
||||||
BIO_printf(bio_err,"%s",*pp);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
x=load_crl(infile,informat);
|
x = load_crl(infile, informat);
|
||||||
if (x == NULL) { goto end; }
|
if (x == NULL) {
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if(do_ver) {
|
if (do_ver) {
|
||||||
store = X509_STORE_new();
|
store = X509_STORE_new();
|
||||||
lookup=X509_STORE_add_lookup(store,X509_LOOKUP_file());
|
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
|
||||||
if (lookup == NULL) goto end;
|
if (lookup == NULL)
|
||||||
if (!X509_LOOKUP_load_file(lookup,CAfile,X509_FILETYPE_PEM))
|
goto end;
|
||||||
X509_LOOKUP_load_file(lookup,NULL,X509_FILETYPE_DEFAULT);
|
if (!X509_LOOKUP_load_file(lookup, CAfile, X509_FILETYPE_PEM))
|
||||||
|
X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT);
|
||||||
lookup=X509_STORE_add_lookup(store,X509_LOOKUP_hash_dir());
|
|
||||||
if (lookup == NULL) goto end;
|
|
||||||
if (!X509_LOOKUP_add_dir(lookup,CApath,X509_FILETYPE_PEM))
|
|
||||||
X509_LOOKUP_add_dir(lookup,NULL,X509_FILETYPE_DEFAULT);
|
|
||||||
ERR_clear_error();
|
|
||||||
|
|
||||||
if(!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
|
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
|
||||||
BIO_printf(bio_err,
|
if (lookup == NULL)
|
||||||
"Error initialising X509 store\n");
|
goto end;
|
||||||
goto end;
|
if (!X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM))
|
||||||
}
|
X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT);
|
||||||
|
ERR_clear_error();
|
||||||
|
|
||||||
i = X509_STORE_get_by_subject(&ctx, X509_LU_X509,
|
if (!X509_STORE_CTX_init(&ctx, store, NULL, NULL)) {
|
||||||
X509_CRL_get_issuer(x), &xobj);
|
BIO_printf(bio_err, "Error initialising X509 store\n");
|
||||||
if(i <= 0) {
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Error getting CRL issuer certificate\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
pkey = X509_get_pubkey(xobj.data.x509);
|
|
||||||
X509_OBJECT_free_contents(&xobj);
|
|
||||||
if(!pkey) {
|
|
||||||
BIO_printf(bio_err,
|
|
||||||
"Error getting CRL issuer public key\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
i = X509_CRL_verify(x, pkey);
|
|
||||||
EVP_PKEY_free(pkey);
|
|
||||||
if(i < 0) goto end;
|
|
||||||
if(i == 0) BIO_printf(bio_err, "verify failure\n");
|
|
||||||
else BIO_printf(bio_err, "verify OK\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num)
|
i = X509_STORE_get_by_subject(&ctx, X509_LU_X509,
|
||||||
{
|
X509_CRL_get_issuer(x), &xobj);
|
||||||
for (i=1; i<=num; i++)
|
if (i <= 0) {
|
||||||
{
|
BIO_printf(bio_err, "Error getting CRL issuer certificate\n");
|
||||||
if (issuer == i)
|
goto end;
|
||||||
{
|
}
|
||||||
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), nmflag);
|
pkey = X509_get_pubkey(xobj.data.x509);
|
||||||
}
|
X509_OBJECT_free_contents(&xobj);
|
||||||
if (crlnumber == i)
|
if (!pkey) {
|
||||||
{
|
BIO_printf(bio_err, "Error getting CRL issuer public key\n");
|
||||||
ASN1_INTEGER *crlnum;
|
goto end;
|
||||||
crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number,
|
}
|
||||||
NULL, NULL);
|
i = X509_CRL_verify(x, pkey);
|
||||||
BIO_printf(bio_out,"crlNumber=");
|
EVP_PKEY_free(pkey);
|
||||||
if (crlnum)
|
if (i < 0)
|
||||||
{
|
goto end;
|
||||||
i2a_ASN1_INTEGER(bio_out, crlnum);
|
if (i == 0)
|
||||||
ASN1_INTEGER_free(crlnum);
|
BIO_printf(bio_err, "verify failure\n");
|
||||||
}
|
else
|
||||||
else
|
BIO_printf(bio_err, "verify OK\n");
|
||||||
BIO_puts(bio_out, "<NONE>");
|
}
|
||||||
BIO_printf(bio_out,"\n");
|
|
||||||
}
|
|
||||||
if (hash == i)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_out,"%08lx\n",
|
|
||||||
X509_NAME_hash(X509_CRL_get_issuer(x)));
|
|
||||||
}
|
|
||||||
if (lastupdate == i)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_out,"lastUpdate=");
|
|
||||||
ASN1_TIME_print(bio_out,
|
|
||||||
X509_CRL_get_lastUpdate(x));
|
|
||||||
BIO_printf(bio_out,"\n");
|
|
||||||
}
|
|
||||||
if (nextupdate == i)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_out,"nextUpdate=");
|
|
||||||
if (X509_CRL_get_nextUpdate(x))
|
|
||||||
ASN1_TIME_print(bio_out,
|
|
||||||
X509_CRL_get_nextUpdate(x));
|
|
||||||
else
|
|
||||||
BIO_printf(bio_out,"NONE");
|
|
||||||
BIO_printf(bio_out,"\n");
|
|
||||||
}
|
|
||||||
if (fingerprint == i)
|
|
||||||
{
|
|
||||||
int j;
|
|
||||||
unsigned int n;
|
|
||||||
unsigned char md[EVP_MAX_MD_SIZE];
|
|
||||||
|
|
||||||
if (!X509_CRL_digest(x,digest,md,&n))
|
if (crldiff) {
|
||||||
{
|
X509_CRL *newcrl, *delta;
|
||||||
BIO_printf(bio_err,"out of memory\n");
|
if (!keyfile) {
|
||||||
goto end;
|
BIO_puts(bio_err, "Missing CRL signing key\n");
|
||||||
}
|
goto end;
|
||||||
BIO_printf(bio_out,"%s Fingerprint=",
|
}
|
||||||
OBJ_nid2sn(EVP_MD_type(digest)));
|
newcrl = load_crl(crldiff, informat);
|
||||||
for (j=0; j<(int)n; j++)
|
if (!newcrl)
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_out,"%02X%c",md[j],
|
pkey = load_key(bio_err, keyfile, keyformat, 0, NULL, NULL,
|
||||||
(j+1 == (int)n)
|
"CRL signing key");
|
||||||
?'\n':':');
|
if (!pkey) {
|
||||||
}
|
X509_CRL_free(newcrl);
|
||||||
}
|
goto end;
|
||||||
}
|
}
|
||||||
}
|
delta = X509_CRL_diff(x, newcrl, pkey, digest, 0);
|
||||||
|
X509_CRL_free(newcrl);
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
if (delta) {
|
||||||
|
X509_CRL_free(x);
|
||||||
|
x = delta;
|
||||||
|
} else {
|
||||||
|
BIO_puts(bio_err, "Error creating delta CRL\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
if (num) {
|
||||||
if (out == NULL)
|
for (i = 1; i <= num; i++) {
|
||||||
{
|
if (issuer == i) {
|
||||||
ERR_print_errors(bio_err);
|
print_name(bio_out, "issuer=", X509_CRL_get_issuer(x),
|
||||||
goto end;
|
nmflag);
|
||||||
}
|
}
|
||||||
|
if (crlnumber == i) {
|
||||||
|
ASN1_INTEGER *crlnum;
|
||||||
|
crlnum = X509_CRL_get_ext_d2i(x, NID_crl_number, NULL, NULL);
|
||||||
|
BIO_printf(bio_out, "crlNumber=");
|
||||||
|
if (crlnum) {
|
||||||
|
i2a_ASN1_INTEGER(bio_out, crlnum);
|
||||||
|
ASN1_INTEGER_free(crlnum);
|
||||||
|
} else
|
||||||
|
BIO_puts(bio_out, "<NONE>");
|
||||||
|
BIO_printf(bio_out, "\n");
|
||||||
|
}
|
||||||
|
if (hash == i) {
|
||||||
|
BIO_printf(bio_out, "%08lx\n",
|
||||||
|
X509_NAME_hash(X509_CRL_get_issuer(x)));
|
||||||
|
}
|
||||||
|
#ifndef OPENSSL_NO_MD5
|
||||||
|
if (hash_old == i) {
|
||||||
|
BIO_printf(bio_out, "%08lx\n",
|
||||||
|
X509_NAME_hash_old(X509_CRL_get_issuer(x)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (lastupdate == i) {
|
||||||
|
BIO_printf(bio_out, "lastUpdate=");
|
||||||
|
ASN1_TIME_print(bio_out, X509_CRL_get_lastUpdate(x));
|
||||||
|
BIO_printf(bio_out, "\n");
|
||||||
|
}
|
||||||
|
if (nextupdate == i) {
|
||||||
|
BIO_printf(bio_out, "nextUpdate=");
|
||||||
|
if (X509_CRL_get_nextUpdate(x))
|
||||||
|
ASN1_TIME_print(bio_out, X509_CRL_get_nextUpdate(x));
|
||||||
|
else
|
||||||
|
BIO_printf(bio_out, "NONE");
|
||||||
|
BIO_printf(bio_out, "\n");
|
||||||
|
}
|
||||||
|
if (fingerprint == i) {
|
||||||
|
int j;
|
||||||
|
unsigned int n;
|
||||||
|
unsigned char md[EVP_MAX_MD_SIZE];
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (!X509_CRL_digest(x, digest, md, &n)) {
|
||||||
{
|
BIO_printf(bio_err, "out of memory\n");
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_printf(bio_out, "%s Fingerprint=",
|
||||||
|
OBJ_nid2sn(EVP_MD_type(digest)));
|
||||||
|
for (j = 0; j < (int)n; j++) {
|
||||||
|
BIO_printf(bio_out, "%02X%c", md[j], (j + 1 == (int)n)
|
||||||
|
? '\n' : ':');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out = BIO_new(BIO_s_file());
|
||||||
|
if (out == NULL) {
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outfile == NULL) {
|
||||||
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
{
|
perror(outfile);
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
goto end;
|
||||||
{
|
}
|
||||||
perror(outfile);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text) X509_CRL_print(out, x);
|
if (text)
|
||||||
|
X509_CRL_print(out, x);
|
||||||
|
|
||||||
if (noout)
|
if (noout) {
|
||||||
{
|
ret = 0;
|
||||||
ret = 0;
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (outformat == FORMAT_ASN1)
|
if (badsig)
|
||||||
i=(int)i2d_X509_CRL_bio(out,x);
|
x->signature->data[x->signature->length - 1] ^= 0x1;
|
||||||
else if (outformat == FORMAT_PEM)
|
|
||||||
i=PEM_write_bio_X509_CRL(out,x);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (!i) { BIO_printf(bio_err,"unable to write CRL\n"); goto end; }
|
|
||||||
ret=0;
|
|
||||||
end:
|
|
||||||
BIO_free_all(out);
|
|
||||||
BIO_free_all(bio_out);
|
|
||||||
bio_out=NULL;
|
|
||||||
X509_CRL_free(x);
|
|
||||||
if(store) {
|
|
||||||
X509_STORE_CTX_cleanup(&ctx);
|
|
||||||
X509_STORE_free(store);
|
|
||||||
}
|
|
||||||
apps_shutdown();
|
|
||||||
OPENSSL_EXIT(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
static X509_CRL *load_crl(char *infile, int format)
|
|
||||||
{
|
|
||||||
X509_CRL *x=NULL;
|
|
||||||
BIO *in=NULL;
|
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
|
||||||
if (in == NULL)
|
|
||||||
{
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
|
||||||
{
|
|
||||||
perror(infile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (format == FORMAT_ASN1)
|
|
||||||
x=d2i_X509_CRL_bio(in,NULL);
|
|
||||||
else if (format == FORMAT_PEM)
|
|
||||||
x=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
|
|
||||||
else {
|
|
||||||
BIO_printf(bio_err,"bad input format specified for input crl\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (x == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load CRL\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
BIO_free(in);
|
|
||||||
return(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (outformat == FORMAT_ASN1)
|
||||||
|
i = (int)i2d_X509_CRL_bio(out, x);
|
||||||
|
else if (outformat == FORMAT_PEM)
|
||||||
|
i = PEM_write_bio_X509_CRL(out, x);
|
||||||
|
else {
|
||||||
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (!i) {
|
||||||
|
BIO_printf(bio_err, "unable to write CRL\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
end:
|
||||||
|
if (ret != 0)
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
BIO_free_all(out);
|
||||||
|
BIO_free_all(bio_out);
|
||||||
|
bio_out = NULL;
|
||||||
|
X509_CRL_free(x);
|
||||||
|
if (store) {
|
||||||
|
X509_STORE_CTX_cleanup(&ctx);
|
||||||
|
X509_STORE_free(store);
|
||||||
|
}
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|||||||
463
apps/crl2p7.c
463
apps/crl2p7.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,16 +49,18 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu>
|
/*
|
||||||
* and donated 'to the cause' along with lots and lots of other fixes to
|
* This was written by Gordon Chaffee <chaffee@plateau.cs.berkeley.edu> and
|
||||||
* the library. */
|
* donated 'to the cause' along with lots and lots of other fixes to the
|
||||||
|
* library.
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -73,265 +75,260 @@
|
|||||||
|
|
||||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
|
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile);
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG crl2pkcs7_main
|
#define PROG crl2pkcs7_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i,badops=0;
|
int i, badops = 0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat,outformat;
|
int informat, outformat;
|
||||||
char *infile,*outfile,*prog,*certfile;
|
char *infile, *outfile, *prog, *certfile;
|
||||||
PKCS7 *p7 = NULL;
|
PKCS7 *p7 = NULL;
|
||||||
PKCS7_SIGNED *p7s = NULL;
|
PKCS7_SIGNED *p7s = NULL;
|
||||||
X509_CRL *crl=NULL;
|
X509_CRL *crl = NULL;
|
||||||
STACK_OF(OPENSSL_STRING) *certflst=NULL;
|
STACK_OF(OPENSSL_STRING) *certflst = NULL;
|
||||||
STACK_OF(X509_CRL) *crl_stack=NULL;
|
STACK_OF(X509_CRL) *crl_stack = NULL;
|
||||||
STACK_OF(X509) *cert_stack=NULL;
|
STACK_OF(X509) *cert_stack = NULL;
|
||||||
int ret=1,nocrl=0;
|
int ret = 1, nocrl = 0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-nocrl") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
nocrl = 1;
|
||||||
infile= *(++argv);
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-nocrl") == 0)
|
goto bad;
|
||||||
{
|
outfile = *(++argv);
|
||||||
nocrl=1;
|
} else if (strcmp(*argv, "-certfile") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
goto bad;
|
||||||
{
|
if (!certflst)
|
||||||
if (--argc < 1) goto bad;
|
certflst = sk_OPENSSL_STRING_new_null();
|
||||||
outfile= *(++argv);
|
if (!certflst)
|
||||||
}
|
goto end;
|
||||||
else if (strcmp(*argv,"-certfile") == 0)
|
if (!sk_OPENSSL_STRING_push(certflst, *(++argv))) {
|
||||||
{
|
sk_OPENSSL_STRING_free(certflst);
|
||||||
if (--argc < 1) goto bad;
|
goto end;
|
||||||
if(!certflst) certflst = sk_OPENSSL_STRING_new_null();
|
}
|
||||||
sk_OPENSSL_STRING_push(certflst,*(++argv));
|
} else {
|
||||||
}
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
else
|
badops = 1;
|
||||||
{
|
break;
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
}
|
||||||
badops=1;
|
argc--;
|
||||||
break;
|
argv++;
|
||||||
}
|
}
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
|
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -certfile arg certificates file of chain to a trusted CA\n");
|
" -certfile arg certificates file of chain to a trusted CA\n");
|
||||||
BIO_printf(bio_err," (can be used more than once)\n");
|
BIO_printf(bio_err, " (can be used more than once)\n");
|
||||||
BIO_printf(bio_err," -nocrl no crl to load, just certs from '-certfile'\n");
|
BIO_printf(bio_err,
|
||||||
ret = 1;
|
" -nocrl no crl to load, just certs from '-certfile'\n");
|
||||||
goto end;
|
ret = 1;
|
||||||
}
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!nocrl)
|
if (!nocrl) {
|
||||||
{
|
if (infile == NULL)
|
||||||
if (infile == NULL)
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
else {
|
||||||
else
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
{
|
perror(infile);
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
goto end;
|
||||||
{
|
}
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (informat == FORMAT_ASN1)
|
if (informat == FORMAT_ASN1)
|
||||||
crl=d2i_X509_CRL_bio(in,NULL);
|
crl = d2i_X509_CRL_bio(in, NULL);
|
||||||
else if (informat == FORMAT_PEM)
|
else if (informat == FORMAT_PEM)
|
||||||
crl=PEM_read_bio_X509_CRL(in,NULL,NULL,NULL);
|
crl = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
|
||||||
else {
|
else {
|
||||||
BIO_printf(bio_err,"bad input format specified for input crl\n");
|
BIO_printf(bio_err, "bad input format specified for input crl\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (crl == NULL)
|
if (crl == NULL) {
|
||||||
{
|
BIO_printf(bio_err, "unable to load CRL\n");
|
||||||
BIO_printf(bio_err,"unable to load CRL\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((p7=PKCS7_new()) == NULL) goto end;
|
|
||||||
if ((p7s=PKCS7_SIGNED_new()) == NULL) goto end;
|
|
||||||
p7->type=OBJ_nid2obj(NID_pkcs7_signed);
|
|
||||||
p7->d.sign=p7s;
|
|
||||||
p7s->contents->type=OBJ_nid2obj(NID_pkcs7_data);
|
|
||||||
|
|
||||||
if (!ASN1_INTEGER_set(p7s->version,1)) goto end;
|
if ((p7 = PKCS7_new()) == NULL)
|
||||||
if ((crl_stack=sk_X509_CRL_new_null()) == NULL) goto end;
|
goto end;
|
||||||
p7s->crl=crl_stack;
|
if ((p7s = PKCS7_SIGNED_new()) == NULL)
|
||||||
if (crl != NULL)
|
goto end;
|
||||||
{
|
p7->type = OBJ_nid2obj(NID_pkcs7_signed);
|
||||||
sk_X509_CRL_push(crl_stack,crl);
|
p7->d.sign = p7s;
|
||||||
crl=NULL; /* now part of p7 for OPENSSL_freeing */
|
p7s->contents->type = OBJ_nid2obj(NID_pkcs7_data);
|
||||||
}
|
|
||||||
|
|
||||||
if ((cert_stack=sk_X509_new_null()) == NULL) goto end;
|
if (!ASN1_INTEGER_set(p7s->version, 1))
|
||||||
p7s->cert=cert_stack;
|
goto end;
|
||||||
|
if ((crl_stack = sk_X509_CRL_new_null()) == NULL)
|
||||||
|
goto end;
|
||||||
|
p7s->crl = crl_stack;
|
||||||
|
if (crl != NULL) {
|
||||||
|
sk_X509_CRL_push(crl_stack, crl);
|
||||||
|
crl = NULL; /* now part of p7 for OPENSSL_freeing */
|
||||||
|
}
|
||||||
|
|
||||||
if(certflst) for(i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
|
if ((cert_stack = sk_X509_new_null()) == NULL)
|
||||||
certfile = sk_OPENSSL_STRING_value(certflst, i);
|
goto end;
|
||||||
if (add_certs_from_file(cert_stack,certfile) < 0)
|
p7s->cert = cert_stack;
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "error loading certificates\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sk_OPENSSL_STRING_free(certflst);
|
if (certflst)
|
||||||
|
for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) {
|
||||||
|
certfile = sk_OPENSSL_STRING_value(certflst, i);
|
||||||
|
if (add_certs_from_file(cert_stack, certfile) < 0) {
|
||||||
|
BIO_printf(bio_err, "error loading certificates\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
sk_OPENSSL_STRING_free(certflst);
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
if (outfile == NULL) {
|
||||||
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
{
|
perror(outfile);
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
goto end;
|
||||||
{
|
}
|
||||||
perror(outfile);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1)
|
||||||
i=i2d_PKCS7_bio(out,p7);
|
i = i2d_PKCS7_bio(out, p7);
|
||||||
else if (outformat == FORMAT_PEM)
|
else if (outformat == FORMAT_PEM)
|
||||||
i=PEM_write_bio_PKCS7(out,p7);
|
i = PEM_write_bio_PKCS7(out, p7);
|
||||||
else {
|
else {
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
if (!i)
|
if (!i) {
|
||||||
{
|
BIO_printf(bio_err, "unable to write pkcs7 object\n");
|
||||||
BIO_printf(bio_err,"unable to write pkcs7 object\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
ret = 0;
|
||||||
ret=0;
|
end:
|
||||||
end:
|
if (in != NULL)
|
||||||
if (in != NULL) BIO_free(in);
|
BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL)
|
||||||
if (p7 != NULL) PKCS7_free(p7);
|
BIO_free_all(out);
|
||||||
if (crl != NULL) X509_CRL_free(crl);
|
if (p7 != NULL)
|
||||||
|
PKCS7_free(p7);
|
||||||
|
if (crl != NULL)
|
||||||
|
X509_CRL_free(crl);
|
||||||
|
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*-
|
||||||
*----------------------------------------------------------------------
|
*----------------------------------------------------------------------
|
||||||
* int add_certs_from_file
|
* int add_certs_from_file
|
||||||
*
|
*
|
||||||
* Read a list of certificates to be checked from a file.
|
* Read a list of certificates to be checked from a file.
|
||||||
*
|
*
|
||||||
* Results:
|
* Results:
|
||||||
* number of certs added if successful, -1 if not.
|
* number of certs added if successful, -1 if not.
|
||||||
*----------------------------------------------------------------------
|
*----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
|
static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile)
|
||||||
{
|
{
|
||||||
BIO *in=NULL;
|
BIO *in = NULL;
|
||||||
int count=0;
|
int count = 0;
|
||||||
int ret= -1;
|
int ret = -1;
|
||||||
STACK_OF(X509_INFO) *sk=NULL;
|
STACK_OF(X509_INFO) *sk = NULL;
|
||||||
X509_INFO *xi;
|
X509_INFO *xi;
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (BIO_read_filename(in,certfile) <= 0))
|
if ((in == NULL) || (BIO_read_filename(in, certfile) <= 0)) {
|
||||||
{
|
BIO_printf(bio_err, "error opening the file, %s\n", certfile);
|
||||||
BIO_printf(bio_err,"error opening the file, %s\n",certfile);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* This loads from a file, a stack of x509/crl/pkey sets */
|
/* This loads from a file, a stack of x509/crl/pkey sets */
|
||||||
sk=PEM_X509_INFO_read_bio(in,NULL,NULL,NULL);
|
sk = PEM_X509_INFO_read_bio(in, NULL, NULL, NULL);
|
||||||
if (sk == NULL) {
|
if (sk == NULL) {
|
||||||
BIO_printf(bio_err,"error reading the file, %s\n",certfile);
|
BIO_printf(bio_err, "error reading the file, %s\n", certfile);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* scan over it and pull out the CRL's */
|
/* scan over it and pull out the CRL's */
|
||||||
while (sk_X509_INFO_num(sk))
|
while (sk_X509_INFO_num(sk)) {
|
||||||
{
|
xi = sk_X509_INFO_shift(sk);
|
||||||
xi=sk_X509_INFO_shift(sk);
|
if (xi->x509 != NULL) {
|
||||||
if (xi->x509 != NULL)
|
sk_X509_push(stack, xi->x509);
|
||||||
{
|
xi->x509 = NULL;
|
||||||
sk_X509_push(stack,xi->x509);
|
count++;
|
||||||
xi->x509=NULL;
|
}
|
||||||
count++;
|
X509_INFO_free(xi);
|
||||||
}
|
}
|
||||||
X509_INFO_free(xi);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret=count;
|
|
||||||
end:
|
|
||||||
/* never need to OPENSSL_free x */
|
|
||||||
if (in != NULL) BIO_free(in);
|
|
||||||
if (sk != NULL) sk_X509_INFO_free(sk);
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
ret = count;
|
||||||
|
end:
|
||||||
|
/* never need to OPENSSL_free x */
|
||||||
|
if (in != NULL)
|
||||||
|
BIO_free(in);
|
||||||
|
if (sk != NULL)
|
||||||
|
sk_X509_INFO_free(sk);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|||||||
1037
apps/dgst.c
1037
apps/dgst.c
File diff suppressed because it is too large
Load Diff
518
apps/dh.c
518
apps/dh.c
@@ -6,21 +6,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -35,10 +35,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -50,35 +50,36 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
|
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <time.h>
|
# include <time.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
#include <openssl/dh.h>
|
# include <openssl/dh.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG dh_main
|
# define PROG dh_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
* -check - check the parameters are ok
|
* -check - check the parameters are ok
|
||||||
* -noout
|
* -noout
|
||||||
* -text
|
* -text
|
||||||
* -C
|
* -C
|
||||||
@@ -87,269 +88,250 @@
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
DH *dh=NULL;
|
DH *dh = NULL;
|
||||||
int i,badops=0,text=0;
|
int i, badops = 0, text = 0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat,outformat,check=0,noout=0,C=0,ret=1;
|
int informat, outformat, check = 0, noout = 0, C = 0, ret = 1;
|
||||||
char *infile,*outfile,*prog;
|
char *infile, *outfile, *prog;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine;
|
char *engine;
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
engine=NULL;
|
engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
}
|
||||||
{
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
outfile= *(++argv);
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
engine = *(++argv);
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
}
|
||||||
{
|
# endif
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-check") == 0)
|
||||||
engine= *(++argv);
|
check = 1;
|
||||||
}
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
#endif
|
text = 1;
|
||||||
else if (strcmp(*argv,"-check") == 0)
|
else if (strcmp(*argv, "-C") == 0)
|
||||||
check=1;
|
C = 1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
text=1;
|
noout = 1;
|
||||||
else if (strcmp(*argv,"-C") == 0)
|
else {
|
||||||
C=1;
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
badops = 1;
|
||||||
noout=1;
|
break;
|
||||||
else
|
}
|
||||||
{
|
argc--;
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
argv++;
|
||||||
badops=1;
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - one of DER PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - one of DER PEM\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -outform arg output format - one of DER PEM\n");
|
" -outform arg output format - one of DER PEM\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err," -check check the DH parameters\n");
|
BIO_printf(bio_err, " -check check the DH parameters\n");
|
||||||
BIO_printf(bio_err," -text print a text form of the DH parameters\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -C Output C code\n");
|
" -text print a text form of the DH parameters\n");
|
||||||
BIO_printf(bio_err," -noout no output\n");
|
BIO_printf(bio_err, " -C Output C code\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
BIO_printf(bio_err, " -noout no output\n");
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
goto end;
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
}
|
# endif
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
perror(infile);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
if (outfile == NULL) {
|
||||||
}
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
if (outfile == NULL)
|
# ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
#ifdef OPENSSL_SYS_VMS
|
out = BIO_push(tmpbio, out);
|
||||||
{
|
}
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
# endif
|
||||||
out = BIO_push(tmpbio, out);
|
} else {
|
||||||
}
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
#endif
|
perror(outfile);
|
||||||
}
|
goto end;
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
|
||||||
{
|
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (informat == FORMAT_ASN1)
|
if (informat == FORMAT_ASN1)
|
||||||
dh=d2i_DHparams_bio(in,NULL);
|
dh = d2i_DHparams_bio(in, NULL);
|
||||||
else if (informat == FORMAT_PEM)
|
else if (informat == FORMAT_PEM)
|
||||||
dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
|
dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
|
||||||
else
|
else {
|
||||||
{
|
BIO_printf(bio_err, "bad input format specified\n");
|
||||||
BIO_printf(bio_err,"bad input format specified\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
if (dh == NULL) {
|
||||||
if (dh == NULL)
|
BIO_printf(bio_err, "unable to load DH parameters\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(bio_err,"unable to load DH parameters\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (text) {
|
||||||
|
DHparams_print(out, dh);
|
||||||
|
# ifdef undef
|
||||||
|
printf("p=");
|
||||||
|
BN_print(stdout, dh->p);
|
||||||
|
printf("\ng=");
|
||||||
|
BN_print(stdout, dh->g);
|
||||||
|
printf("\n");
|
||||||
|
if (dh->length != 0)
|
||||||
|
printf("recommended private length=%ld\n", dh->length);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
if (text)
|
if (check) {
|
||||||
{
|
if (!DH_check(dh, &i)) {
|
||||||
DHparams_print(out,dh);
|
ERR_print_errors(bio_err);
|
||||||
#ifdef undef
|
goto end;
|
||||||
printf("p=");
|
}
|
||||||
BN_print(stdout,dh->p);
|
if (i & DH_CHECK_P_NOT_PRIME)
|
||||||
printf("\ng=");
|
printf("p value is not prime\n");
|
||||||
BN_print(stdout,dh->g);
|
if (i & DH_CHECK_P_NOT_SAFE_PRIME)
|
||||||
printf("\n");
|
printf("p value is not a safe prime\n");
|
||||||
if (dh->length != 0)
|
if (i & DH_UNABLE_TO_CHECK_GENERATOR)
|
||||||
printf("recommended private length=%ld\n",dh->length);
|
printf("unable to check the generator value\n");
|
||||||
#endif
|
if (i & DH_NOT_SUITABLE_GENERATOR)
|
||||||
}
|
printf("the g value is not a generator\n");
|
||||||
|
if (i == 0)
|
||||||
if (check)
|
printf("DH parameters appear to be ok.\n");
|
||||||
{
|
}
|
||||||
if (!DH_check(dh,&i))
|
if (C) {
|
||||||
{
|
unsigned char *data;
|
||||||
ERR_print_errors(bio_err);
|
int len, l, bits;
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (i & DH_CHECK_P_NOT_PRIME)
|
|
||||||
printf("p value is not prime\n");
|
|
||||||
if (i & DH_CHECK_P_NOT_SAFE_PRIME)
|
|
||||||
printf("p value is not a safe prime\n");
|
|
||||||
if (i & DH_UNABLE_TO_CHECK_GENERATOR)
|
|
||||||
printf("unable to check the generator value\n");
|
|
||||||
if (i & DH_NOT_SUITABLE_GENERATOR)
|
|
||||||
printf("the g value is not a generator\n");
|
|
||||||
if (i == 0)
|
|
||||||
printf("DH parameters appear to be ok.\n");
|
|
||||||
}
|
|
||||||
if (C)
|
|
||||||
{
|
|
||||||
unsigned char *data;
|
|
||||||
int len,l,bits;
|
|
||||||
|
|
||||||
len=BN_num_bytes(dh->p);
|
len = BN_num_bytes(dh->p);
|
||||||
bits=BN_num_bits(dh->p);
|
bits = BN_num_bits(dh->p);
|
||||||
data=(unsigned char *)OPENSSL_malloc(len);
|
data = (unsigned char *)OPENSSL_malloc(len);
|
||||||
if (data == NULL)
|
if (data == NULL) {
|
||||||
{
|
perror("OPENSSL_malloc");
|
||||||
perror("OPENSSL_malloc");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
l = BN_bn2bin(dh->p, data);
|
||||||
l=BN_bn2bin(dh->p,data);
|
printf("static unsigned char dh%d_p[]={", bits);
|
||||||
printf("static unsigned char dh%d_p[]={",bits);
|
for (i = 0; i < l; i++) {
|
||||||
for (i=0; i<l; i++)
|
if ((i % 12) == 0)
|
||||||
{
|
printf("\n\t");
|
||||||
if ((i%12) == 0) printf("\n\t");
|
printf("0x%02X,", data[i]);
|
||||||
printf("0x%02X,",data[i]);
|
}
|
||||||
}
|
printf("\n\t};\n");
|
||||||
printf("\n\t};\n");
|
|
||||||
|
|
||||||
l=BN_bn2bin(dh->g,data);
|
l = BN_bn2bin(dh->g, data);
|
||||||
printf("static unsigned char dh%d_g[]={",bits);
|
printf("static unsigned char dh%d_g[]={", bits);
|
||||||
for (i=0; i<l; i++)
|
for (i = 0; i < l; i++) {
|
||||||
{
|
if ((i % 12) == 0)
|
||||||
if ((i%12) == 0) printf("\n\t");
|
printf("\n\t");
|
||||||
printf("0x%02X,",data[i]);
|
printf("0x%02X,", data[i]);
|
||||||
}
|
}
|
||||||
printf("\n\t};\n\n");
|
printf("\n\t};\n\n");
|
||||||
|
|
||||||
printf("DH *get_dh%d()\n\t{\n",bits);
|
printf("DH *get_dh%d()\n\t{\n", bits);
|
||||||
printf("\tDH *dh;\n\n");
|
printf("\tDH *dh;\n\n");
|
||||||
printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
|
printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
|
||||||
printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
|
printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
|
||||||
bits,bits);
|
bits, bits);
|
||||||
printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
|
printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
|
||||||
bits,bits);
|
bits, bits);
|
||||||
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
|
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
|
||||||
printf("\t\treturn(NULL);\n");
|
printf("\t\treturn(NULL);\n");
|
||||||
printf("\treturn(dh);\n\t}\n");
|
printf("\treturn(dh);\n\t}\n");
|
||||||
OPENSSL_free(data);
|
OPENSSL_free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!noout) {
|
||||||
if (!noout)
|
if (outformat == FORMAT_ASN1)
|
||||||
{
|
i = i2d_DHparams_bio(out, dh);
|
||||||
if (outformat == FORMAT_ASN1)
|
else if (outformat == FORMAT_PEM)
|
||||||
i=i2d_DHparams_bio(out,dh);
|
i = PEM_write_bio_DHparams(out, dh);
|
||||||
else if (outformat == FORMAT_PEM)
|
else {
|
||||||
i=PEM_write_bio_DHparams(out,dh);
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
else {
|
goto end;
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
}
|
||||||
goto end;
|
if (!i) {
|
||||||
}
|
BIO_printf(bio_err, "unable to write DH parameters\n");
|
||||||
if (!i)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,"unable to write DH parameters\n");
|
}
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
ret = 0;
|
||||||
}
|
end:
|
||||||
}
|
if (in != NULL)
|
||||||
ret=0;
|
BIO_free(in);
|
||||||
end:
|
if (out != NULL)
|
||||||
if (in != NULL) BIO_free(in);
|
BIO_free_all(out);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (dh != NULL)
|
||||||
if (dh != NULL) DH_free(dh);
|
DH_free(dh);
|
||||||
apps_shutdown();
|
apps_shutdown();
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
#else /* !OPENSSL_NO_DH */
|
#else /* !OPENSSL_NO_DH */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
792
apps/dhparam.c
792
apps/dhparam.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -109,35 +109,36 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
|
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DH */
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <time.h>
|
# include <time.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
#include <openssl/dh.h>
|
# include <openssl/dh.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
# ifndef OPENSSL_NO_DSA
|
||||||
#include <openssl/dsa.h>
|
# include <openssl/dsa.h>
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG dhparam_main
|
# define PROG dhparam_main
|
||||||
|
|
||||||
#define DEFBITS 512
|
# define DEFBITS 2048
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
* -dsaparam - read or generate DSA parameters, convert to DH
|
* -dsaparam - read or generate DSA parameters, convert to DH
|
||||||
* -check - check the parameters are ok
|
* -check - check the parameters are ok
|
||||||
* -noout
|
* -noout
|
||||||
* -text
|
* -text
|
||||||
* -C
|
* -C
|
||||||
@@ -148,413 +149,398 @@ static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
DH *dh=NULL;
|
DH *dh = NULL;
|
||||||
int i,badops=0,text=0;
|
int i, badops = 0, text = 0;
|
||||||
#ifndef OPENSSL_NO_DSA
|
# ifndef OPENSSL_NO_DSA
|
||||||
int dsaparam=0;
|
int dsaparam = 0;
|
||||||
#endif
|
# endif
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat,outformat,check=0,noout=0,C=0,ret=1;
|
int informat, outformat, check = 0, noout = 0, C = 0, ret = 1;
|
||||||
char *infile,*outfile,*prog;
|
char *infile, *outfile, *prog;
|
||||||
char *inrand=NULL;
|
char *inrand = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
int num = 0, g = 0;
|
int num = 0, g = 0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
}
|
||||||
{
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
outfile= *(++argv);
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
engine = *(++argv);
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
}
|
||||||
{
|
# endif
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-check") == 0)
|
||||||
engine= *(++argv);
|
check = 1;
|
||||||
}
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
#endif
|
text = 1;
|
||||||
else if (strcmp(*argv,"-check") == 0)
|
# ifndef OPENSSL_NO_DSA
|
||||||
check=1;
|
else if (strcmp(*argv, "-dsaparam") == 0)
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
dsaparam = 1;
|
||||||
text=1;
|
# endif
|
||||||
#ifndef OPENSSL_NO_DSA
|
else if (strcmp(*argv, "-C") == 0)
|
||||||
else if (strcmp(*argv,"-dsaparam") == 0)
|
C = 1;
|
||||||
dsaparam=1;
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
#endif
|
noout = 1;
|
||||||
else if (strcmp(*argv,"-C") == 0)
|
else if (strcmp(*argv, "-2") == 0)
|
||||||
C=1;
|
g = 2;
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv, "-5") == 0)
|
||||||
noout=1;
|
g = 5;
|
||||||
else if (strcmp(*argv,"-2") == 0)
|
else if (strcmp(*argv, "-rand") == 0) {
|
||||||
g=2;
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-5") == 0)
|
goto bad;
|
||||||
g=5;
|
inrand = *(++argv);
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
} else if (((sscanf(*argv, "%d", &num) == 0) || (num <= 0)))
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
argv++;
|
||||||
inrand= *(++argv);
|
argc--;
|
||||||
}
|
}
|
||||||
else if (((sscanf(*argv,"%d",&num) == 0) || (num <= 0)))
|
|
||||||
goto bad;
|
|
||||||
argv++;
|
|
||||||
argc--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] [numbits]\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] [numbits]\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - one of DER PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - one of DER PEM\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -outform arg output format - one of DER PEM\n");
|
" -outform arg output format - one of DER PEM\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
#ifndef OPENSSL_NO_DSA
|
# ifndef OPENSSL_NO_DSA
|
||||||
BIO_printf(bio_err," -dsaparam read or generate DSA parameters, convert to DH\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" -dsaparam read or generate DSA parameters, convert to DH\n");
|
||||||
BIO_printf(bio_err," -check check the DH parameters\n");
|
# endif
|
||||||
BIO_printf(bio_err," -text print a text form of the DH parameters\n");
|
BIO_printf(bio_err, " -check check the DH parameters\n");
|
||||||
BIO_printf(bio_err," -C Output C code\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -2 generate parameters using 2 as the generator value\n");
|
" -text print a text form of the DH parameters\n");
|
||||||
BIO_printf(bio_err," -5 generate parameters using 5 as the generator value\n");
|
BIO_printf(bio_err, " -C Output C code\n");
|
||||||
BIO_printf(bio_err," numbits number of bits in to generate (default 512)\n");
|
BIO_printf(bio_err,
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
" -2 generate parameters using 2 as the generator value\n");
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" -5 generate parameters using 5 as the generator value\n");
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
" numbits number of bits in to generate (default 2048)\n");
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err," -noout no output\n");
|
BIO_printf(bio_err,
|
||||||
goto end;
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
}
|
# endif
|
||||||
|
BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
|
||||||
|
LIST_SEPARATOR_CHAR);
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" - load the file (or the files in the directory) into\n");
|
||||||
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
|
BIO_printf(bio_err, " -noout no output\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
if (g && !num)
|
if (g && !num)
|
||||||
num = DEFBITS;
|
num = DEFBITS;
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
# ifndef OPENSSL_NO_DSA
|
||||||
if (dsaparam)
|
if (dsaparam) {
|
||||||
{
|
if (g) {
|
||||||
if (g)
|
BIO_printf(bio_err,
|
||||||
{
|
"generator may not be chosen for DSA parameters\n");
|
||||||
BIO_printf(bio_err, "generator may not be chosen for DSA parameters\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
} else
|
||||||
}
|
# endif
|
||||||
else
|
{
|
||||||
#endif
|
/* DH parameters */
|
||||||
{
|
if (num && !g)
|
||||||
/* DH parameters */
|
g = 2;
|
||||||
if (num && !g)
|
}
|
||||||
g = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(num) {
|
if (num) {
|
||||||
|
|
||||||
BN_GENCB cb;
|
BN_GENCB cb;
|
||||||
BN_GENCB_set(&cb, dh_cb, bio_err);
|
BN_GENCB_set(&cb, dh_cb, bio_err);
|
||||||
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
|
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
|
||||||
{
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
"warning, not much extra random data, consider using the -rand option\n");
|
||||||
}
|
}
|
||||||
if (inrand != NULL)
|
if (inrand != NULL)
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
|
||||||
app_RAND_load_files(inrand));
|
app_RAND_load_files(inrand));
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
# ifndef OPENSSL_NO_DSA
|
||||||
if (dsaparam)
|
if (dsaparam) {
|
||||||
{
|
DSA *dsa = DSA_new();
|
||||||
DSA *dsa = DSA_new();
|
|
||||||
|
|
||||||
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
|
|
||||||
if(!dsa || !DSA_generate_parameters_ex(dsa, num,
|
|
||||||
NULL, 0, NULL, NULL, &cb))
|
|
||||||
{
|
|
||||||
if(dsa) DSA_free(dsa);
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
dh = DSA_dup_DH(dsa);
|
BIO_printf(bio_err,
|
||||||
DSA_free(dsa);
|
"Generating DSA parameters, %d bit long prime\n", num);
|
||||||
if (dh == NULL)
|
if (!dsa
|
||||||
{
|
|| !DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL,
|
||||||
ERR_print_errors(bio_err);
|
&cb)) {
|
||||||
goto end;
|
if (dsa)
|
||||||
}
|
DSA_free(dsa);
|
||||||
}
|
ERR_print_errors(bio_err);
|
||||||
else
|
goto end;
|
||||||
#endif
|
}
|
||||||
{
|
|
||||||
dh = DH_new();
|
|
||||||
BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
|
|
||||||
BIO_printf(bio_err,"This is going to take a long time\n");
|
|
||||||
if(!dh || !DH_generate_parameters_ex(dh, num, g, &cb))
|
|
||||||
{
|
|
||||||
if(dh) DH_free(dh);
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
dh = DSA_dup_DH(dsa);
|
||||||
} else {
|
DSA_free(dsa);
|
||||||
|
if (dh == NULL) {
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
dh = DH_new();
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Generating DH parameters, %d bit long safe prime, generator %d\n",
|
||||||
|
num, g);
|
||||||
|
BIO_printf(bio_err, "This is going to take a long time\n");
|
||||||
|
if (!dh || !DH_generate_parameters_ex(dh, num, g, &cb)) {
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
app_RAND_write_file(NULL, bio_err);
|
||||||
if (in == NULL)
|
} else {
|
||||||
{
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (infile == NULL)
|
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
|
||||||
{
|
|
||||||
perror(infile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (informat != FORMAT_ASN1 && informat != FORMAT_PEM)
|
in = BIO_new(BIO_s_file());
|
||||||
{
|
if (in == NULL) {
|
||||||
BIO_printf(bio_err,"bad input format specified\n");
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
if (infile == NULL)
|
||||||
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
|
else {
|
||||||
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
|
perror(infile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
if (informat != FORMAT_ASN1 && informat != FORMAT_PEM) {
|
||||||
if (dsaparam)
|
BIO_printf(bio_err, "bad input format specified\n");
|
||||||
{
|
goto end;
|
||||||
DSA *dsa;
|
}
|
||||||
|
# ifndef OPENSSL_NO_DSA
|
||||||
if (informat == FORMAT_ASN1)
|
if (dsaparam) {
|
||||||
dsa=d2i_DSAparams_bio(in,NULL);
|
DSA *dsa;
|
||||||
else /* informat == FORMAT_PEM */
|
|
||||||
dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
|
|
||||||
|
|
||||||
if (dsa == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load DSA parameters\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
dh = DSA_dup_DH(dsa);
|
|
||||||
DSA_free(dsa);
|
|
||||||
if (dh == NULL)
|
|
||||||
{
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
if (informat == FORMAT_ASN1)
|
|
||||||
dh=d2i_DHparams_bio(in,NULL);
|
|
||||||
else /* informat == FORMAT_PEM */
|
|
||||||
dh=PEM_read_bio_DHparams(in,NULL,NULL,NULL);
|
|
||||||
|
|
||||||
if (dh == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load DH parameters\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* dh != NULL */
|
|
||||||
}
|
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
|
||||||
if (out == NULL)
|
|
||||||
{
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (outfile == NULL)
|
|
||||||
{
|
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
|
||||||
{
|
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (informat == FORMAT_ASN1)
|
||||||
|
dsa = d2i_DSAparams_bio(in, NULL);
|
||||||
|
else /* informat == FORMAT_PEM */
|
||||||
|
dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
|
||||||
|
|
||||||
if (text)
|
if (dsa == NULL) {
|
||||||
{
|
BIO_printf(bio_err, "unable to load DSA parameters\n");
|
||||||
DHparams_print(out,dh);
|
ERR_print_errors(bio_err);
|
||||||
}
|
goto end;
|
||||||
|
}
|
||||||
if (check)
|
|
||||||
{
|
|
||||||
if (!DH_check(dh,&i))
|
|
||||||
{
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (i & DH_CHECK_P_NOT_PRIME)
|
|
||||||
printf("p value is not prime\n");
|
|
||||||
if (i & DH_CHECK_P_NOT_SAFE_PRIME)
|
|
||||||
printf("p value is not a safe prime\n");
|
|
||||||
if (i & DH_UNABLE_TO_CHECK_GENERATOR)
|
|
||||||
printf("unable to check the generator value\n");
|
|
||||||
if (i & DH_NOT_SUITABLE_GENERATOR)
|
|
||||||
printf("the g value is not a generator\n");
|
|
||||||
if (i == 0)
|
|
||||||
printf("DH parameters appear to be ok.\n");
|
|
||||||
}
|
|
||||||
if (C)
|
|
||||||
{
|
|
||||||
unsigned char *data;
|
|
||||||
int len,l,bits;
|
|
||||||
|
|
||||||
len=BN_num_bytes(dh->p);
|
dh = DSA_dup_DH(dsa);
|
||||||
bits=BN_num_bits(dh->p);
|
DSA_free(dsa);
|
||||||
data=(unsigned char *)OPENSSL_malloc(len);
|
if (dh == NULL) {
|
||||||
if (data == NULL)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
perror("OPENSSL_malloc");
|
}
|
||||||
goto end;
|
} else
|
||||||
}
|
# endif
|
||||||
printf("#ifndef HEADER_DH_H\n"
|
{
|
||||||
"#include <openssl/dh.h>\n"
|
if (informat == FORMAT_ASN1)
|
||||||
"#endif\n");
|
dh = d2i_DHparams_bio(in, NULL);
|
||||||
printf("DH *get_dh%d()\n\t{\n",bits);
|
else /* informat == FORMAT_PEM */
|
||||||
|
dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
|
||||||
|
|
||||||
l=BN_bn2bin(dh->p,data);
|
if (dh == NULL) {
|
||||||
printf("\tstatic unsigned char dh%d_p[]={",bits);
|
BIO_printf(bio_err, "unable to load DH parameters\n");
|
||||||
for (i=0; i<l; i++)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
if ((i%12) == 0) printf("\n\t\t");
|
}
|
||||||
printf("0x%02X,",data[i]);
|
}
|
||||||
}
|
|
||||||
printf("\n\t\t};\n");
|
|
||||||
|
|
||||||
l=BN_bn2bin(dh->g,data);
|
/* dh != NULL */
|
||||||
printf("\tstatic unsigned char dh%d_g[]={",bits);
|
}
|
||||||
for (i=0; i<l; i++)
|
|
||||||
{
|
|
||||||
if ((i%12) == 0) printf("\n\t\t");
|
|
||||||
printf("0x%02X,",data[i]);
|
|
||||||
}
|
|
||||||
printf("\n\t\t};\n");
|
|
||||||
|
|
||||||
printf("\tDH *dh;\n\n");
|
out = BIO_new(BIO_s_file());
|
||||||
printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
|
if (out == NULL) {
|
||||||
printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
|
ERR_print_errors(bio_err);
|
||||||
bits,bits);
|
goto end;
|
||||||
printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
|
}
|
||||||
bits,bits);
|
if (outfile == NULL) {
|
||||||
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
printf("\t\t{ DH_free(dh); return(NULL); }\n");
|
# ifdef OPENSSL_SYS_VMS
|
||||||
if (dh->length)
|
{
|
||||||
printf("\tdh->length = %ld;\n", dh->length);
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
printf("\treturn(dh);\n\t}\n");
|
out = BIO_push(tmpbio, out);
|
||||||
OPENSSL_free(data);
|
}
|
||||||
}
|
# endif
|
||||||
|
} else {
|
||||||
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
|
perror(outfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text) {
|
||||||
|
DHparams_print(out, dh);
|
||||||
|
}
|
||||||
|
|
||||||
if (!noout)
|
if (check) {
|
||||||
{
|
if (!DH_check(dh, &i)) {
|
||||||
if (outformat == FORMAT_ASN1)
|
ERR_print_errors(bio_err);
|
||||||
i=i2d_DHparams_bio(out,dh);
|
goto end;
|
||||||
else if (outformat == FORMAT_PEM)
|
}
|
||||||
i=PEM_write_bio_DHparams(out,dh);
|
if (i & DH_CHECK_P_NOT_PRIME)
|
||||||
else {
|
printf("p value is not prime\n");
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
if (i & DH_CHECK_P_NOT_SAFE_PRIME)
|
||||||
goto end;
|
printf("p value is not a safe prime\n");
|
||||||
}
|
if (i & DH_UNABLE_TO_CHECK_GENERATOR)
|
||||||
if (!i)
|
printf("unable to check the generator value\n");
|
||||||
{
|
if (i & DH_NOT_SUITABLE_GENERATOR)
|
||||||
BIO_printf(bio_err,"unable to write DH parameters\n");
|
printf("the g value is not a generator\n");
|
||||||
ERR_print_errors(bio_err);
|
if (i == 0)
|
||||||
goto end;
|
printf("DH parameters appear to be ok.\n");
|
||||||
}
|
}
|
||||||
}
|
if (C) {
|
||||||
ret=0;
|
unsigned char *data;
|
||||||
end:
|
int len, l, bits;
|
||||||
if (in != NULL) BIO_free(in);
|
|
||||||
if (out != NULL) BIO_free_all(out);
|
len = BN_num_bytes(dh->p);
|
||||||
if (dh != NULL) DH_free(dh);
|
bits = BN_num_bits(dh->p);
|
||||||
apps_shutdown();
|
data = (unsigned char *)OPENSSL_malloc(len);
|
||||||
OPENSSL_EXIT(ret);
|
if (data == NULL) {
|
||||||
}
|
perror("OPENSSL_malloc");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
printf("#ifndef HEADER_DH_H\n"
|
||||||
|
"#include <openssl/dh.h>\n" "#endif\n");
|
||||||
|
printf("DH *get_dh%d()\n\t{\n", bits);
|
||||||
|
|
||||||
|
l = BN_bn2bin(dh->p, data);
|
||||||
|
printf("\tstatic unsigned char dh%d_p[]={", bits);
|
||||||
|
for (i = 0; i < l; i++) {
|
||||||
|
if ((i % 12) == 0)
|
||||||
|
printf("\n\t\t");
|
||||||
|
printf("0x%02X,", data[i]);
|
||||||
|
}
|
||||||
|
printf("\n\t\t};\n");
|
||||||
|
|
||||||
|
l = BN_bn2bin(dh->g, data);
|
||||||
|
printf("\tstatic unsigned char dh%d_g[]={", bits);
|
||||||
|
for (i = 0; i < l; i++) {
|
||||||
|
if ((i % 12) == 0)
|
||||||
|
printf("\n\t\t");
|
||||||
|
printf("0x%02X,", data[i]);
|
||||||
|
}
|
||||||
|
printf("\n\t\t};\n");
|
||||||
|
|
||||||
|
printf("\tDH *dh;\n\n");
|
||||||
|
printf("\tif ((dh=DH_new()) == NULL) return(NULL);\n");
|
||||||
|
printf("\tdh->p=BN_bin2bn(dh%d_p,sizeof(dh%d_p),NULL);\n",
|
||||||
|
bits, bits);
|
||||||
|
printf("\tdh->g=BN_bin2bn(dh%d_g,sizeof(dh%d_g),NULL);\n",
|
||||||
|
bits, bits);
|
||||||
|
printf("\tif ((dh->p == NULL) || (dh->g == NULL))\n");
|
||||||
|
printf("\t\t{ DH_free(dh); return(NULL); }\n");
|
||||||
|
if (dh->length)
|
||||||
|
printf("\tdh->length = %ld;\n", dh->length);
|
||||||
|
printf("\treturn(dh);\n\t}\n");
|
||||||
|
OPENSSL_free(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!noout) {
|
||||||
|
if (outformat == FORMAT_ASN1)
|
||||||
|
i = i2d_DHparams_bio(out, dh);
|
||||||
|
else if (outformat == FORMAT_PEM) {
|
||||||
|
if (dh->q)
|
||||||
|
i = PEM_write_bio_DHxparams(out, dh);
|
||||||
|
else
|
||||||
|
i = PEM_write_bio_DHparams(out, dh);
|
||||||
|
} else {
|
||||||
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (!i) {
|
||||||
|
BIO_printf(bio_err, "unable to write DH parameters\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
end:
|
||||||
|
if (in != NULL)
|
||||||
|
BIO_free(in);
|
||||||
|
if (out != NULL)
|
||||||
|
BIO_free_all(out);
|
||||||
|
if (dh != NULL)
|
||||||
|
DH_free(dh);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
|
/* dh_cb is identical to dsa_cb in apps/dsaparam.c */
|
||||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
|
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c = '*';
|
||||||
|
|
||||||
if (p == 0) c='.';
|
if (p == 0)
|
||||||
if (p == 1) c='+';
|
c = '.';
|
||||||
if (p == 2) c='*';
|
if (p == 1)
|
||||||
if (p == 3) c='\n';
|
c = '+';
|
||||||
BIO_write(cb->arg,&c,1);
|
if (p == 2)
|
||||||
(void)BIO_flush(cb->arg);
|
c = '*';
|
||||||
#ifdef LINT
|
if (p == 3)
|
||||||
p=n;
|
c = '\n';
|
||||||
#endif
|
BIO_write(cb->arg, &c, 1);
|
||||||
return 1;
|
(void)BIO_flush(cb->arg);
|
||||||
}
|
# ifdef LINT
|
||||||
|
p = n;
|
||||||
|
# endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#else /* !OPENSSL_NO_DH */
|
#else /* !OPENSSL_NO_DH */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
570
apps/dsa.c
570
apps/dsa.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,328 +49,326 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
|
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include <time.h>
|
# include <time.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/dsa.h>
|
# include <openssl/dsa.h>
|
||||||
#include <openssl/evp.h>
|
# include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG dsa_main
|
# define PROG dsa_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
* -des - encrypt output if PEM format with DES in cbc mode
|
* -des - encrypt output if PEM format with DES in cbc mode
|
||||||
* -des3 - encrypt output if PEM format
|
* -des3 - encrypt output if PEM format
|
||||||
* -idea - encrypt output if PEM format
|
* -idea - encrypt output if PEM format
|
||||||
* -aes128 - encrypt output if PEM format
|
* -aes128 - encrypt output if PEM format
|
||||||
* -aes192 - encrypt output if PEM format
|
* -aes192 - encrypt output if PEM format
|
||||||
* -aes256 - encrypt output if PEM format
|
* -aes256 - encrypt output if PEM format
|
||||||
* -camellia128 - encrypt output if PEM format
|
* -camellia128 - encrypt output if PEM format
|
||||||
* -camellia192 - encrypt output if PEM format
|
* -camellia192 - encrypt output if PEM format
|
||||||
* -camellia256 - encrypt output if PEM format
|
* -camellia256 - encrypt output if PEM format
|
||||||
* -seed - encrypt output if PEM format
|
* -seed - encrypt output if PEM format
|
||||||
* -text - print a text version
|
* -text - print a text version
|
||||||
* -modulus - print the DSA public key
|
* -modulus - print the DSA public key
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
int ret=1;
|
int ret = 1;
|
||||||
DSA *dsa=NULL;
|
DSA *dsa = NULL;
|
||||||
int i,badops=0;
|
int i, badops = 0;
|
||||||
const EVP_CIPHER *enc=NULL;
|
const EVP_CIPHER *enc = NULL;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat,outformat,text=0,noout=0;
|
int informat, outformat, text = 0, noout = 0;
|
||||||
int pubin = 0, pubout = 0;
|
int pubin = 0, pubout = 0;
|
||||||
char *infile,*outfile,*prog;
|
char *infile, *outfile, *prog;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine;
|
char *engine;
|
||||||
#endif
|
# endif
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
int modulus=0;
|
int modulus = 0;
|
||||||
|
|
||||||
int pvk_encr = 2;
|
int pvk_encr = 2;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
engine=NULL;
|
engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
} else if (strcmp(*argv, "-passin") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
outfile= *(++argv);
|
passargin = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-passout") == 0) {
|
||||||
else if (strcmp(*argv,"-passin") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
passargout = *(++argv);
|
||||||
passargin= *(++argv);
|
}
|
||||||
}
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*argv,"-passout") == 0)
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
passargout= *(++argv);
|
engine = *(++argv);
|
||||||
}
|
}
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# endif
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
else if (strcmp(*argv, "-pvk-strong") == 0)
|
||||||
{
|
pvk_encr = 2;
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-pvk-weak") == 0)
|
||||||
engine= *(++argv);
|
pvk_encr = 1;
|
||||||
}
|
else if (strcmp(*argv, "-pvk-none") == 0)
|
||||||
#endif
|
pvk_encr = 0;
|
||||||
else if (strcmp(*argv,"-pvk-strong") == 0)
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
pvk_encr=2;
|
noout = 1;
|
||||||
else if (strcmp(*argv,"-pvk-weak") == 0)
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
pvk_encr=1;
|
text = 1;
|
||||||
else if (strcmp(*argv,"-pvk-none") == 0)
|
else if (strcmp(*argv, "-modulus") == 0)
|
||||||
pvk_encr=0;
|
modulus = 1;
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv, "-pubin") == 0)
|
||||||
noout=1;
|
pubin = 1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv, "-pubout") == 0)
|
||||||
text=1;
|
pubout = 1;
|
||||||
else if (strcmp(*argv,"-modulus") == 0)
|
else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
|
||||||
modulus=1;
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
else if (strcmp(*argv,"-pubin") == 0)
|
badops = 1;
|
||||||
pubin=1;
|
break;
|
||||||
else if (strcmp(*argv,"-pubout") == 0)
|
}
|
||||||
pubout=1;
|
argc--;
|
||||||
else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
|
argv++;
|
||||||
{
|
}
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
|
||||||
badops=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
|
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -passin arg input file pass phrase source\n");
|
" -passin arg input file pass phrase source\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
BIO_printf(bio_err,
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
" -passout arg output file pass phrase source\n");
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
|
# endif
|
||||||
#ifndef OPENSSL_NO_IDEA
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
|
" -des encrypt PEM output with cbc des\n");
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
#ifndef OPENSSL_NO_AES
|
" -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
|
||||||
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
|
# ifndef OPENSSL_NO_IDEA
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" -idea encrypt PEM output with cbc idea\n");
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
# endif
|
||||||
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
# ifndef OPENSSL_NO_AES
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
#ifndef OPENSSL_NO_SEED
|
" encrypt PEM output with cbc aes\n");
|
||||||
BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_CAMELLIA
|
||||||
BIO_printf(bio_err," -text print the key in text\n");
|
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
|
||||||
BIO_printf(bio_err," -noout don't print key out\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -modulus print the DSA public value\n");
|
" encrypt PEM output with cbc camellia\n");
|
||||||
goto end;
|
# endif
|
||||||
}
|
# ifndef OPENSSL_NO_SEED
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" -seed encrypt PEM output with cbc seed\n");
|
||||||
|
# endif
|
||||||
|
BIO_printf(bio_err, " -text print the key in text\n");
|
||||||
|
BIO_printf(bio_err, " -noout don't print key out\n");
|
||||||
|
BIO_printf(bio_err, " -modulus print the DSA public value\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
e = setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
perror(infile);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BIO_printf(bio_err,"read DSA key\n");
|
BIO_printf(bio_err, "read DSA key\n");
|
||||||
|
|
||||||
{
|
{
|
||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
|
|
||||||
if (pubin)
|
if (pubin)
|
||||||
pkey = load_pubkey(bio_err, infile, informat, 1,
|
pkey = load_pubkey(bio_err, infile, informat, 1,
|
||||||
passin, e, "Public Key");
|
passin, e, "Public Key");
|
||||||
else
|
else
|
||||||
pkey = load_key(bio_err, infile, informat, 1,
|
pkey = load_key(bio_err, infile, informat, 1,
|
||||||
passin, e, "Private Key");
|
passin, e, "Private Key");
|
||||||
|
|
||||||
if (pkey)
|
if (pkey) {
|
||||||
{
|
dsa = EVP_PKEY_get1_DSA(pkey);
|
||||||
dsa = EVP_PKEY_get1_DSA(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
EVP_PKEY_free(pkey);
|
}
|
||||||
}
|
}
|
||||||
}
|
if (dsa == NULL) {
|
||||||
if (dsa == NULL)
|
BIO_printf(bio_err, "unable to load Key\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(bio_err,"unable to load Key\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
# ifdef OPENSSL_SYS_VMS
|
||||||
#ifdef OPENSSL_SYS_VMS
|
{
|
||||||
{
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
out = BIO_push(tmpbio, out);
|
||||||
out = BIO_push(tmpbio, out);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
} else {
|
||||||
}
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
else
|
perror(outfile);
|
||||||
{
|
goto end;
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
}
|
||||||
{
|
}
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text)
|
if (text)
|
||||||
if (!DSA_print(out,dsa,0))
|
if (!DSA_print(out, dsa, 0)) {
|
||||||
{
|
perror(outfile);
|
||||||
perror(outfile);
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (modulus)
|
if (modulus) {
|
||||||
{
|
fprintf(stdout, "Public Key=");
|
||||||
fprintf(stdout,"Public Key=");
|
BN_print(out, dsa->pub_key);
|
||||||
BN_print(out,dsa->pub_key);
|
fprintf(stdout, "\n");
|
||||||
fprintf(stdout,"\n");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (noout) goto end;
|
if (noout)
|
||||||
BIO_printf(bio_err,"writing DSA key\n");
|
goto end;
|
||||||
if (outformat == FORMAT_ASN1) {
|
BIO_printf(bio_err, "writing DSA key\n");
|
||||||
if(pubin || pubout) i=i2d_DSA_PUBKEY_bio(out,dsa);
|
if (outformat == FORMAT_ASN1) {
|
||||||
else i=i2d_DSAPrivateKey_bio(out,dsa);
|
if (pubin || pubout)
|
||||||
} else if (outformat == FORMAT_PEM) {
|
i = i2d_DSA_PUBKEY_bio(out, dsa);
|
||||||
if(pubin || pubout)
|
else
|
||||||
i=PEM_write_bio_DSA_PUBKEY(out,dsa);
|
i = i2d_DSAPrivateKey_bio(out, dsa);
|
||||||
else i=PEM_write_bio_DSAPrivateKey(out,dsa,enc,
|
} else if (outformat == FORMAT_PEM) {
|
||||||
NULL,0,NULL, passout);
|
if (pubin || pubout)
|
||||||
#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
|
i = PEM_write_bio_DSA_PUBKEY(out, dsa);
|
||||||
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
|
else
|
||||||
EVP_PKEY *pk;
|
i = PEM_write_bio_DSAPrivateKey(out, dsa, enc,
|
||||||
pk = EVP_PKEY_new();
|
NULL, 0, NULL, passout);
|
||||||
EVP_PKEY_set1_DSA(pk, dsa);
|
# if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_RC4)
|
||||||
if (outformat == FORMAT_PVK)
|
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
|
||||||
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
|
EVP_PKEY *pk;
|
||||||
else if (pubin || pubout)
|
pk = EVP_PKEY_new();
|
||||||
i = i2b_PublicKey_bio(out, pk);
|
EVP_PKEY_set1_DSA(pk, dsa);
|
||||||
else
|
if (outformat == FORMAT_PVK)
|
||||||
i = i2b_PrivateKey_bio(out, pk);
|
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
|
||||||
EVP_PKEY_free(pk);
|
else if (pubin || pubout)
|
||||||
#endif
|
i = i2b_PublicKey_bio(out, pk);
|
||||||
} else {
|
else
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
i = i2b_PrivateKey_bio(out, pk);
|
||||||
goto end;
|
EVP_PKEY_free(pk);
|
||||||
}
|
# endif
|
||||||
if (i <= 0)
|
} else {
|
||||||
{
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
BIO_printf(bio_err,"unable to write private key\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
}
|
if (i <= 0) {
|
||||||
else
|
BIO_printf(bio_err, "unable to write private key\n");
|
||||||
ret=0;
|
ERR_print_errors(bio_err);
|
||||||
end:
|
} else
|
||||||
if(in != NULL) BIO_free(in);
|
ret = 0;
|
||||||
if(out != NULL) BIO_free_all(out);
|
end:
|
||||||
if(dsa != NULL) DSA_free(dsa);
|
if (in != NULL)
|
||||||
if(passin) OPENSSL_free(passin);
|
BIO_free(in);
|
||||||
if(passout) OPENSSL_free(passout);
|
if (out != NULL)
|
||||||
apps_shutdown();
|
BIO_free_all(out);
|
||||||
OPENSSL_EXIT(ret);
|
if (dsa != NULL)
|
||||||
}
|
DSA_free(dsa);
|
||||||
#else /* !OPENSSL_NO_DSA */
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
if (passout)
|
||||||
|
OPENSSL_free(passout);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_DSA */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
746
apps/dsaparam.c
746
apps/dsaparam.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,41 +49,44 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
|
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
|
||||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
/*
|
||||||
* deprecated functions for openssl-internal code */
|
* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
||||||
|
* deprecated functions for openssl-internal code
|
||||||
|
*/
|
||||||
#ifdef OPENSSL_NO_DEPRECATED
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
#undef OPENSSL_NO_DEPRECATED
|
# undef OPENSSL_NO_DEPRECATED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
#include <assert.h>
|
# include <assert.h>
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <time.h>
|
# include <time.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
#include <openssl/dsa.h>
|
# include <openssl/dsa.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG dsaparam_main
|
# define PROG dsaparam_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
* -noout
|
* -noout
|
||||||
* -text
|
* -text
|
||||||
* -C
|
* -C
|
||||||
@@ -94,400 +97,373 @@
|
|||||||
* #endif
|
* #endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef GENCB_TEST
|
# ifdef GENCB_TEST
|
||||||
|
|
||||||
static int stop_keygen_flag = 0;
|
static int stop_keygen_flag = 0;
|
||||||
|
|
||||||
static void timebomb_sigalarm(int foo)
|
static void timebomb_sigalarm(int foo)
|
||||||
{
|
{
|
||||||
stop_keygen_flag = 1;
|
stop_keygen_flag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
|
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb);
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
DSA *dsa=NULL;
|
DSA *dsa = NULL;
|
||||||
int i,badops=0,text=0;
|
int i, badops = 0, text = 0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat,outformat,noout=0,C=0,ret=1;
|
int informat, outformat, noout = 0, C = 0, ret = 1;
|
||||||
char *infile,*outfile,*prog,*inrand=NULL;
|
char *infile, *outfile, *prog, *inrand = NULL;
|
||||||
int numbits= -1,num,genkey=0;
|
int numbits = -1, num, genkey = 0;
|
||||||
int need_rand=0;
|
int need_rand = 0;
|
||||||
int non_fips_allow = 0;
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
char *engine = NULL;
|
||||||
char *engine=NULL;
|
# endif
|
||||||
#endif
|
# ifdef GENCB_TEST
|
||||||
#ifdef GENCB_TEST
|
int timebomb = 0;
|
||||||
int timebomb=0;
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
}
|
||||||
{
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
outfile= *(++argv);
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
engine = *(++argv);
|
||||||
else if(strcmp(*argv, "-engine") == 0)
|
}
|
||||||
{
|
# endif
|
||||||
if (--argc < 1) goto bad;
|
# ifdef GENCB_TEST
|
||||||
engine = *(++argv);
|
else if (strcmp(*argv, "-timebomb") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
#endif
|
goto bad;
|
||||||
#ifdef GENCB_TEST
|
timebomb = atoi(*(++argv));
|
||||||
else if(strcmp(*argv, "-timebomb") == 0)
|
}
|
||||||
{
|
# endif
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
timebomb = atoi(*(++argv));
|
text = 1;
|
||||||
}
|
else if (strcmp(*argv, "-C") == 0)
|
||||||
#endif
|
C = 1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if (strcmp(*argv, "-genkey") == 0) {
|
||||||
text=1;
|
genkey = 1;
|
||||||
else if (strcmp(*argv,"-C") == 0)
|
need_rand = 1;
|
||||||
C=1;
|
} else if (strcmp(*argv, "-rand") == 0) {
|
||||||
else if (strcmp(*argv,"-genkey") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
genkey=1;
|
inrand = *(++argv);
|
||||||
need_rand=1;
|
need_rand = 1;
|
||||||
}
|
} else if (strcmp(*argv, "-noout") == 0)
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
noout = 1;
|
||||||
{
|
else if (sscanf(*argv, "%d", &num) == 1) {
|
||||||
if (--argc < 1) goto bad;
|
/* generate a key */
|
||||||
inrand= *(++argv);
|
numbits = num;
|
||||||
need_rand=1;
|
need_rand = 1;
|
||||||
}
|
} else {
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
noout=1;
|
badops = 1;
|
||||||
else if (strcmp(*argv,"-non-fips-allow") == 0)
|
break;
|
||||||
non_fips_allow = 1;
|
}
|
||||||
else if (sscanf(*argv,"%d",&num) == 1)
|
argc--;
|
||||||
{
|
argv++;
|
||||||
/* generate a key */
|
}
|
||||||
numbits=num;
|
|
||||||
need_rand=1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
|
||||||
badops=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] [bits] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] [bits] <infile >outfile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
|
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err, " -text print as text\n");
|
||||||
BIO_printf(bio_err," -text print as text\n");
|
BIO_printf(bio_err, " -C Output C code\n");
|
||||||
BIO_printf(bio_err," -C Output C code\n");
|
BIO_printf(bio_err, " -noout no output\n");
|
||||||
BIO_printf(bio_err," -noout no output\n");
|
BIO_printf(bio_err, " -genkey generate a DSA key\n");
|
||||||
BIO_printf(bio_err," -genkey generate a DSA key\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -rand files to use for random number input\n");
|
" -rand files to use for random number input\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
#ifdef GENCB_TEST
|
# endif
|
||||||
BIO_printf(bio_err," -timebomb n interrupt keygen after <n> seconds\n");
|
# ifdef GENCB_TEST
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," number number of bits to use for generating private key\n");
|
" -timebomb n interrupt keygen after <n> seconds\n");
|
||||||
goto end;
|
# endif
|
||||||
}
|
BIO_printf(bio_err,
|
||||||
|
" number number of bits to use for generating private key\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
perror(infile);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
if (outfile == NULL) {
|
||||||
}
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
if (outfile == NULL)
|
# ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
#ifdef OPENSSL_SYS_VMS
|
out = BIO_push(tmpbio, out);
|
||||||
{
|
}
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
# endif
|
||||||
out = BIO_push(tmpbio, out);
|
} else {
|
||||||
}
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
#endif
|
perror(outfile);
|
||||||
}
|
goto end;
|
||||||
else
|
}
|
||||||
{
|
}
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
|
||||||
{
|
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
if (need_rand)
|
if (need_rand) {
|
||||||
{
|
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
||||||
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
if (inrand != NULL)
|
||||||
if (inrand != NULL)
|
BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
app_RAND_load_files(inrand));
|
||||||
app_RAND_load_files(inrand));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (numbits > 0)
|
if (numbits > 0) {
|
||||||
{
|
BN_GENCB cb;
|
||||||
BN_GENCB cb;
|
BN_GENCB_set(&cb, dsa_cb, bio_err);
|
||||||
BN_GENCB_set(&cb, dsa_cb, bio_err);
|
assert(need_rand);
|
||||||
assert(need_rand);
|
dsa = DSA_new();
|
||||||
dsa = DSA_new();
|
if (!dsa) {
|
||||||
if(!dsa)
|
BIO_printf(bio_err, "Error allocating DSA object\n");
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,"Error allocating DSA object\n");
|
}
|
||||||
goto end;
|
BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n",
|
||||||
}
|
num);
|
||||||
if (non_fips_allow)
|
BIO_printf(bio_err, "This could take some time\n");
|
||||||
dsa->flags |= DSA_FLAG_NON_FIPS_ALLOW;
|
# ifdef GENCB_TEST
|
||||||
BIO_printf(bio_err,"Generating DSA parameters, %d bit long prime\n",num);
|
if (timebomb > 0) {
|
||||||
BIO_printf(bio_err,"This could take some time\n");
|
struct sigaction act;
|
||||||
#ifdef GENCB_TEST
|
act.sa_handler = timebomb_sigalarm;
|
||||||
if(timebomb > 0)
|
act.sa_flags = 0;
|
||||||
{
|
BIO_printf(bio_err,
|
||||||
struct sigaction act;
|
"(though I'll stop it if not done within %d secs)\n",
|
||||||
act.sa_handler = timebomb_sigalarm;
|
timebomb);
|
||||||
act.sa_flags = 0;
|
if (sigaction(SIGALRM, &act, NULL) != 0) {
|
||||||
BIO_printf(bio_err,"(though I'll stop it if not done within %d secs)\n",
|
BIO_printf(bio_err, "Error, couldn't set SIGALRM handler\n");
|
||||||
timebomb);
|
goto end;
|
||||||
if(sigaction(SIGALRM, &act, NULL) != 0)
|
}
|
||||||
{
|
alarm(timebomb);
|
||||||
BIO_printf(bio_err,"Error, couldn't set SIGALRM handler\n");
|
}
|
||||||
goto end;
|
# endif
|
||||||
}
|
if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, &cb)) {
|
||||||
alarm(timebomb);
|
# ifdef GENCB_TEST
|
||||||
}
|
if (stop_keygen_flag) {
|
||||||
#endif
|
BIO_printf(bio_err, "DSA key generation time-stopped\n");
|
||||||
if(!DSA_generate_parameters_ex(dsa,num,NULL,0,NULL,NULL, &cb))
|
/* This is an asked-for behaviour! */
|
||||||
{
|
ret = 0;
|
||||||
#ifdef GENCB_TEST
|
goto end;
|
||||||
if(stop_keygen_flag)
|
}
|
||||||
{
|
# endif
|
||||||
BIO_printf(bio_err,"DSA key generation time-stopped\n");
|
ERR_print_errors(bio_err);
|
||||||
/* This is an asked-for behaviour! */
|
BIO_printf(bio_err, "Error, DSA key generation failed\n");
|
||||||
ret = 0;
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
} else if (informat == FORMAT_ASN1)
|
||||||
#endif
|
dsa = d2i_DSAparams_bio(in, NULL);
|
||||||
ERR_print_errors(bio_err);
|
else if (informat == FORMAT_PEM)
|
||||||
BIO_printf(bio_err,"Error, DSA key generation failed\n");
|
dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL);
|
||||||
goto end;
|
else {
|
||||||
}
|
BIO_printf(bio_err, "bad input format specified\n");
|
||||||
}
|
goto end;
|
||||||
else if (informat == FORMAT_ASN1)
|
}
|
||||||
dsa=d2i_DSAparams_bio(in,NULL);
|
if (dsa == NULL) {
|
||||||
else if (informat == FORMAT_PEM)
|
BIO_printf(bio_err, "unable to load DSA parameters\n");
|
||||||
dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL);
|
ERR_print_errors(bio_err);
|
||||||
else
|
goto end;
|
||||||
{
|
}
|
||||||
BIO_printf(bio_err,"bad input format specified\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (dsa == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load DSA parameters\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text)
|
if (text) {
|
||||||
{
|
DSAparams_print(out, dsa);
|
||||||
DSAparams_print(out,dsa);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (C)
|
|
||||||
{
|
|
||||||
unsigned char *data;
|
|
||||||
int l,len,bits_p;
|
|
||||||
|
|
||||||
len=BN_num_bytes(dsa->p);
|
if (C) {
|
||||||
bits_p=BN_num_bits(dsa->p);
|
unsigned char *data;
|
||||||
data=(unsigned char *)OPENSSL_malloc(len+20);
|
int l, len, bits_p;
|
||||||
if (data == NULL)
|
|
||||||
{
|
|
||||||
perror("OPENSSL_malloc");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
l=BN_bn2bin(dsa->p,data);
|
|
||||||
printf("static unsigned char dsa%d_p[]={",bits_p);
|
|
||||||
for (i=0; i<l; i++)
|
|
||||||
{
|
|
||||||
if ((i%12) == 0) printf("\n\t");
|
|
||||||
printf("0x%02X,",data[i]);
|
|
||||||
}
|
|
||||||
printf("\n\t};\n");
|
|
||||||
|
|
||||||
l=BN_bn2bin(dsa->q,data);
|
len = BN_num_bytes(dsa->p);
|
||||||
printf("static unsigned char dsa%d_q[]={",bits_p);
|
bits_p = BN_num_bits(dsa->p);
|
||||||
for (i=0; i<l; i++)
|
data = (unsigned char *)OPENSSL_malloc(len + 20);
|
||||||
{
|
if (data == NULL) {
|
||||||
if ((i%12) == 0) printf("\n\t");
|
perror("OPENSSL_malloc");
|
||||||
printf("0x%02X,",data[i]);
|
goto end;
|
||||||
}
|
}
|
||||||
printf("\n\t};\n");
|
l = BN_bn2bin(dsa->p, data);
|
||||||
|
printf("static unsigned char dsa%d_p[]={", bits_p);
|
||||||
|
for (i = 0; i < l; i++) {
|
||||||
|
if ((i % 12) == 0)
|
||||||
|
printf("\n\t");
|
||||||
|
printf("0x%02X,", data[i]);
|
||||||
|
}
|
||||||
|
printf("\n\t};\n");
|
||||||
|
|
||||||
l=BN_bn2bin(dsa->g,data);
|
l = BN_bn2bin(dsa->q, data);
|
||||||
printf("static unsigned char dsa%d_g[]={",bits_p);
|
printf("static unsigned char dsa%d_q[]={", bits_p);
|
||||||
for (i=0; i<l; i++)
|
for (i = 0; i < l; i++) {
|
||||||
{
|
if ((i % 12) == 0)
|
||||||
if ((i%12) == 0) printf("\n\t");
|
printf("\n\t");
|
||||||
printf("0x%02X,",data[i]);
|
printf("0x%02X,", data[i]);
|
||||||
}
|
}
|
||||||
printf("\n\t};\n\n");
|
printf("\n\t};\n");
|
||||||
|
|
||||||
printf("DSA *get_dsa%d()\n\t{\n",bits_p);
|
l = BN_bn2bin(dsa->g, data);
|
||||||
printf("\tDSA *dsa;\n\n");
|
printf("static unsigned char dsa%d_g[]={", bits_p);
|
||||||
printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
|
for (i = 0; i < l; i++) {
|
||||||
printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
|
if ((i % 12) == 0)
|
||||||
bits_p,bits_p);
|
printf("\n\t");
|
||||||
printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
|
printf("0x%02X,", data[i]);
|
||||||
bits_p,bits_p);
|
}
|
||||||
printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
|
printf("\n\t};\n\n");
|
||||||
bits_p,bits_p);
|
|
||||||
printf("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
|
|
||||||
printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
|
|
||||||
printf("\treturn(dsa);\n\t}\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
printf("DSA *get_dsa%d()\n\t{\n", bits_p);
|
||||||
|
printf("\tDSA *dsa;\n\n");
|
||||||
|
printf("\tif ((dsa=DSA_new()) == NULL) return(NULL);\n");
|
||||||
|
printf("\tdsa->p=BN_bin2bn(dsa%d_p,sizeof(dsa%d_p),NULL);\n",
|
||||||
|
bits_p, bits_p);
|
||||||
|
printf("\tdsa->q=BN_bin2bn(dsa%d_q,sizeof(dsa%d_q),NULL);\n",
|
||||||
|
bits_p, bits_p);
|
||||||
|
printf("\tdsa->g=BN_bin2bn(dsa%d_g,sizeof(dsa%d_g),NULL);\n",
|
||||||
|
bits_p, bits_p);
|
||||||
|
printf
|
||||||
|
("\tif ((dsa->p == NULL) || (dsa->q == NULL) || (dsa->g == NULL))\n");
|
||||||
|
printf("\t\t{ DSA_free(dsa); return(NULL); }\n");
|
||||||
|
printf("\treturn(dsa);\n\t}\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (!noout)
|
if (!noout) {
|
||||||
{
|
if (outformat == FORMAT_ASN1)
|
||||||
if (outformat == FORMAT_ASN1)
|
i = i2d_DSAparams_bio(out, dsa);
|
||||||
i=i2d_DSAparams_bio(out,dsa);
|
else if (outformat == FORMAT_PEM)
|
||||||
else if (outformat == FORMAT_PEM)
|
i = PEM_write_bio_DSAparams(out, dsa);
|
||||||
i=PEM_write_bio_DSAparams(out,dsa);
|
else {
|
||||||
else {
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
if (!i) {
|
||||||
if (!i)
|
BIO_printf(bio_err, "unable to write DSA parameters\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(bio_err,"unable to write DSA parameters\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
if (genkey) {
|
||||||
}
|
DSA *dsakey;
|
||||||
if (genkey)
|
|
||||||
{
|
|
||||||
DSA *dsakey;
|
|
||||||
|
|
||||||
assert(need_rand);
|
assert(need_rand);
|
||||||
if ((dsakey=DSAparams_dup(dsa)) == NULL) goto end;
|
if ((dsakey = DSAparams_dup(dsa)) == NULL)
|
||||||
if (non_fips_allow)
|
goto end;
|
||||||
dsakey->flags |= DSA_FLAG_NON_FIPS_ALLOW;
|
if (!DSA_generate_key(dsakey)) {
|
||||||
if (!DSA_generate_key(dsakey))
|
ERR_print_errors(bio_err);
|
||||||
{
|
DSA_free(dsakey);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
DSA_free(dsakey);
|
}
|
||||||
goto end;
|
if (outformat == FORMAT_ASN1)
|
||||||
}
|
i = i2d_DSAPrivateKey_bio(out, dsakey);
|
||||||
if (outformat == FORMAT_ASN1)
|
else if (outformat == FORMAT_PEM)
|
||||||
i=i2d_DSAPrivateKey_bio(out,dsakey);
|
i = PEM_write_bio_DSAPrivateKey(out, dsakey, NULL, NULL, 0, NULL,
|
||||||
else if (outformat == FORMAT_PEM)
|
NULL);
|
||||||
i=PEM_write_bio_DSAPrivateKey(out,dsakey,NULL,NULL,0,NULL,NULL);
|
else {
|
||||||
else {
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
DSA_free(dsakey);
|
||||||
DSA_free(dsakey);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
DSA_free(dsakey);
|
||||||
DSA_free(dsakey);
|
}
|
||||||
}
|
if (need_rand)
|
||||||
if (need_rand)
|
app_RAND_write_file(NULL, bio_err);
|
||||||
app_RAND_write_file(NULL, bio_err);
|
ret = 0;
|
||||||
ret=0;
|
end:
|
||||||
end:
|
if (in != NULL)
|
||||||
if (in != NULL) BIO_free(in);
|
BIO_free(in);
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (out != NULL)
|
||||||
if (dsa != NULL) DSA_free(dsa);
|
BIO_free_all(out);
|
||||||
apps_shutdown();
|
if (dsa != NULL)
|
||||||
OPENSSL_EXIT(ret);
|
DSA_free(dsa);
|
||||||
}
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
|
static int MS_CALLBACK dsa_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c = '*';
|
||||||
|
|
||||||
if (p == 0) c='.';
|
if (p == 0)
|
||||||
if (p == 1) c='+';
|
c = '.';
|
||||||
if (p == 2) c='*';
|
if (p == 1)
|
||||||
if (p == 3) c='\n';
|
c = '+';
|
||||||
BIO_write(cb->arg,&c,1);
|
if (p == 2)
|
||||||
(void)BIO_flush(cb->arg);
|
c = '*';
|
||||||
#ifdef LINT
|
if (p == 3)
|
||||||
p=n;
|
c = '\n';
|
||||||
#endif
|
BIO_write(cb->arg, &c, 1);
|
||||||
#ifdef GENCB_TEST
|
(void)BIO_flush(cb->arg);
|
||||||
if(stop_keygen_flag)
|
# ifdef LINT
|
||||||
return 0;
|
p = n;
|
||||||
#endif
|
# endif
|
||||||
return 1;
|
# ifdef GENCB_TEST
|
||||||
}
|
if (stop_keygen_flag)
|
||||||
#else /* !OPENSSL_NO_DSA */
|
return 0;
|
||||||
|
# endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_DSA */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
569
apps/ec.c
569
apps/ec.c
@@ -10,7 +10,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -58,19 +58,20 @@
|
|||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
#ifndef OPENSSL_NO_EC
|
#ifndef OPENSSL_NO_EC
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/evp.h>
|
# include <openssl/evp.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG ec_main
|
# define PROG ec_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
@@ -85,322 +86,280 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
EC_KEY *eckey = NULL;
|
EC_KEY *eckey = NULL;
|
||||||
const EC_GROUP *group;
|
const EC_GROUP *group;
|
||||||
int i, badops = 0;
|
int i, badops = 0;
|
||||||
const EVP_CIPHER *enc = NULL;
|
const EVP_CIPHER *enc = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat, outformat, text=0, noout=0;
|
int informat, outformat, text = 0, noout = 0;
|
||||||
int pubin = 0, pubout = 0, param_out = 0;
|
int pubin = 0, pubout = 0, param_out = 0;
|
||||||
char *infile, *outfile, *prog, *engine;
|
char *infile, *outfile, *prog, *engine;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
|
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
|
||||||
int new_form = 0;
|
int new_form = 0;
|
||||||
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
int asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
||||||
int new_asn1_flag = 0;
|
int new_asn1_flag = 0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
engine = NULL;
|
engine = NULL;
|
||||||
infile = NULL;
|
infile = NULL;
|
||||||
outfile = NULL;
|
outfile = NULL;
|
||||||
informat = FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat = FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog = argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
} else if (strcmp(*argv, "-passin") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
outfile= *(++argv);
|
passargin = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-passout") == 0) {
|
||||||
else if (strcmp(*argv,"-passin") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
passargout = *(++argv);
|
||||||
passargin= *(++argv);
|
} else if (strcmp(*argv, "-engine") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-passout") == 0)
|
goto bad;
|
||||||
{
|
engine = *(++argv);
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-noout") == 0)
|
||||||
passargout= *(++argv);
|
noout = 1;
|
||||||
}
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
else if (strcmp(*argv, "-engine") == 0)
|
text = 1;
|
||||||
{
|
else if (strcmp(*argv, "-conv_form") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
engine= *(++argv);
|
goto bad;
|
||||||
}
|
++argv;
|
||||||
else if (strcmp(*argv, "-noout") == 0)
|
new_form = 1;
|
||||||
noout = 1;
|
if (strcmp(*argv, "compressed") == 0)
|
||||||
else if (strcmp(*argv, "-text") == 0)
|
form = POINT_CONVERSION_COMPRESSED;
|
||||||
text = 1;
|
else if (strcmp(*argv, "uncompressed") == 0)
|
||||||
else if (strcmp(*argv, "-conv_form") == 0)
|
form = POINT_CONVERSION_UNCOMPRESSED;
|
||||||
{
|
else if (strcmp(*argv, "hybrid") == 0)
|
||||||
if (--argc < 1)
|
form = POINT_CONVERSION_HYBRID;
|
||||||
goto bad;
|
else
|
||||||
++argv;
|
goto bad;
|
||||||
new_form = 1;
|
} else if (strcmp(*argv, "-param_enc") == 0) {
|
||||||
if (strcmp(*argv, "compressed") == 0)
|
if (--argc < 1)
|
||||||
form = POINT_CONVERSION_COMPRESSED;
|
goto bad;
|
||||||
else if (strcmp(*argv, "uncompressed") == 0)
|
++argv;
|
||||||
form = POINT_CONVERSION_UNCOMPRESSED;
|
new_asn1_flag = 1;
|
||||||
else if (strcmp(*argv, "hybrid") == 0)
|
if (strcmp(*argv, "named_curve") == 0)
|
||||||
form = POINT_CONVERSION_HYBRID;
|
asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
||||||
else
|
else if (strcmp(*argv, "explicit") == 0)
|
||||||
goto bad;
|
asn1_flag = 0;
|
||||||
}
|
else
|
||||||
else if (strcmp(*argv, "-param_enc") == 0)
|
goto bad;
|
||||||
{
|
} else if (strcmp(*argv, "-param_out") == 0)
|
||||||
if (--argc < 1)
|
param_out = 1;
|
||||||
goto bad;
|
else if (strcmp(*argv, "-pubin") == 0)
|
||||||
++argv;
|
pubin = 1;
|
||||||
new_asn1_flag = 1;
|
else if (strcmp(*argv, "-pubout") == 0)
|
||||||
if (strcmp(*argv, "named_curve") == 0)
|
pubout = 1;
|
||||||
asn1_flag = OPENSSL_EC_NAMED_CURVE;
|
else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
|
||||||
else if (strcmp(*argv, "explicit") == 0)
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
asn1_flag = 0;
|
badops = 1;
|
||||||
else
|
break;
|
||||||
goto bad;
|
}
|
||||||
}
|
argc--;
|
||||||
else if (strcmp(*argv, "-param_out") == 0)
|
argv++;
|
||||||
param_out = 1;
|
}
|
||||||
else if (strcmp(*argv, "-pubin") == 0)
|
|
||||||
pubin=1;
|
|
||||||
else if (strcmp(*argv, "-pubout") == 0)
|
|
||||||
pubout=1;
|
|
||||||
else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
|
||||||
badops=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - "
|
||||||
BIO_printf(bio_err, " -inform arg input format - "
|
"DER or PEM\n");
|
||||||
"DER or PEM\n");
|
BIO_printf(bio_err, " -outform arg output format - "
|
||||||
BIO_printf(bio_err, " -outform arg output format - "
|
"DER or PEM\n");
|
||||||
"DER or PEM\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err, " -in arg input file\n");
|
BIO_printf(bio_err, " -passin arg input file pass "
|
||||||
BIO_printf(bio_err, " -passin arg input file pass "
|
"phrase source\n");
|
||||||
"phrase source\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err, " -out arg output file\n");
|
BIO_printf(bio_err, " -passout arg output file pass "
|
||||||
BIO_printf(bio_err, " -passout arg output file pass "
|
"phrase source\n");
|
||||||
"phrase source\n");
|
BIO_printf(bio_err, " -engine e use engine e, "
|
||||||
BIO_printf(bio_err, " -engine e use engine e, "
|
"possibly a hardware device.\n");
|
||||||
"possibly a hardware device.\n");
|
BIO_printf(bio_err, " -des encrypt PEM output, "
|
||||||
BIO_printf(bio_err, " -des encrypt PEM output, "
|
"instead of 'des' every other \n"
|
||||||
"instead of 'des' every other \n"
|
" cipher "
|
||||||
" cipher "
|
"supported by OpenSSL can be used\n");
|
||||||
"supported by OpenSSL can be used\n");
|
BIO_printf(bio_err, " -text print the key\n");
|
||||||
BIO_printf(bio_err, " -text print the key\n");
|
BIO_printf(bio_err, " -noout don't print key out\n");
|
||||||
BIO_printf(bio_err, " -noout don't print key out\n");
|
BIO_printf(bio_err, " -param_out print the elliptic "
|
||||||
BIO_printf(bio_err, " -param_out print the elliptic "
|
"curve parameters\n");
|
||||||
"curve parameters\n");
|
BIO_printf(bio_err, " -conv_form arg specifies the "
|
||||||
BIO_printf(bio_err, " -conv_form arg specifies the "
|
"point conversion form \n");
|
||||||
"point conversion form \n");
|
BIO_printf(bio_err, " possible values:"
|
||||||
BIO_printf(bio_err, " possible values:"
|
" compressed\n");
|
||||||
" compressed\n");
|
BIO_printf(bio_err, " "
|
||||||
BIO_printf(bio_err, " "
|
" uncompressed (default)\n");
|
||||||
" uncompressed (default)\n");
|
BIO_printf(bio_err, " " " hybrid\n");
|
||||||
BIO_printf(bio_err, " "
|
BIO_printf(bio_err, " -param_enc arg specifies the way"
|
||||||
" hybrid\n");
|
" the ec parameters are encoded\n");
|
||||||
BIO_printf(bio_err, " -param_enc arg specifies the way"
|
BIO_printf(bio_err, " in the asn1 der " "encoding\n");
|
||||||
" the ec parameters are encoded\n");
|
BIO_printf(bio_err, " possible values:"
|
||||||
BIO_printf(bio_err, " in the asn1 der "
|
" named_curve (default)\n");
|
||||||
"encoding\n");
|
BIO_printf(bio_err, " "
|
||||||
BIO_printf(bio_err, " possible values:"
|
"explicit\n");
|
||||||
" named_curve (default)\n");
|
goto end;
|
||||||
BIO_printf(bio_err," "
|
}
|
||||||
"explicit\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout))
|
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
{
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
in = BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out = BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in, infile) <= 0)
|
perror(infile);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
BIO_printf(bio_err, "read EC key\n");
|
BIO_printf(bio_err, "read EC key\n");
|
||||||
if (informat == FORMAT_ASN1)
|
if (informat == FORMAT_ASN1) {
|
||||||
{
|
if (pubin)
|
||||||
if (pubin)
|
eckey = d2i_EC_PUBKEY_bio(in, NULL);
|
||||||
eckey = d2i_EC_PUBKEY_bio(in, NULL);
|
else
|
||||||
else
|
eckey = d2i_ECPrivateKey_bio(in, NULL);
|
||||||
eckey = d2i_ECPrivateKey_bio(in, NULL);
|
} else if (informat == FORMAT_PEM) {
|
||||||
}
|
if (pubin)
|
||||||
else if (informat == FORMAT_PEM)
|
eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL, NULL);
|
||||||
{
|
else
|
||||||
if (pubin)
|
eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL, passin);
|
||||||
eckey = PEM_read_bio_EC_PUBKEY(in, NULL, NULL,
|
} else {
|
||||||
NULL);
|
BIO_printf(bio_err, "bad input format specified for key\n");
|
||||||
else
|
goto end;
|
||||||
eckey = PEM_read_bio_ECPrivateKey(in, NULL, NULL,
|
}
|
||||||
passin);
|
if (eckey == NULL) {
|
||||||
}
|
BIO_printf(bio_err, "unable to load Key\n");
|
||||||
else
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err, "bad input format specified for key\n");
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (eckey == NULL)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"unable to load Key\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
# ifdef OPENSSL_SYS_VMS
|
||||||
#ifdef OPENSSL_SYS_VMS
|
{
|
||||||
{
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
out = BIO_push(tmpbio, out);
|
||||||
out = BIO_push(tmpbio, out);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
} else {
|
||||||
}
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
else
|
perror(outfile);
|
||||||
{
|
goto end;
|
||||||
if (BIO_write_filename(out, outfile) <= 0)
|
}
|
||||||
{
|
}
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
group = EC_KEY_get0_group(eckey);
|
group = EC_KEY_get0_group(eckey);
|
||||||
|
|
||||||
if (new_form)
|
if (new_form)
|
||||||
EC_KEY_set_conv_form(eckey, form);
|
EC_KEY_set_conv_form(eckey, form);
|
||||||
|
|
||||||
if (new_asn1_flag)
|
if (new_asn1_flag)
|
||||||
EC_KEY_set_asn1_flag(eckey, asn1_flag);
|
EC_KEY_set_asn1_flag(eckey, asn1_flag);
|
||||||
|
|
||||||
if (text)
|
if (text)
|
||||||
if (!EC_KEY_print(out, eckey, 0))
|
if (!EC_KEY_print(out, eckey, 0)) {
|
||||||
{
|
perror(outfile);
|
||||||
perror(outfile);
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (noout)
|
if (noout) {
|
||||||
{
|
ret = 0;
|
||||||
ret = 0;
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
BIO_printf(bio_err, "writing EC key\n");
|
BIO_printf(bio_err, "writing EC key\n");
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1) {
|
||||||
{
|
if (param_out)
|
||||||
if (param_out)
|
i = i2d_ECPKParameters_bio(out, group);
|
||||||
i = i2d_ECPKParameters_bio(out, group);
|
else if (pubin || pubout)
|
||||||
else if (pubin || pubout)
|
i = i2d_EC_PUBKEY_bio(out, eckey);
|
||||||
i = i2d_EC_PUBKEY_bio(out, eckey);
|
else
|
||||||
else
|
i = i2d_ECPrivateKey_bio(out, eckey);
|
||||||
i = i2d_ECPrivateKey_bio(out, eckey);
|
} else if (outformat == FORMAT_PEM) {
|
||||||
}
|
if (param_out)
|
||||||
else if (outformat == FORMAT_PEM)
|
i = PEM_write_bio_ECPKParameters(out, group);
|
||||||
{
|
else if (pubin || pubout)
|
||||||
if (param_out)
|
i = PEM_write_bio_EC_PUBKEY(out, eckey);
|
||||||
i = PEM_write_bio_ECPKParameters(out, group);
|
else
|
||||||
else if (pubin || pubout)
|
i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
|
||||||
i = PEM_write_bio_EC_PUBKEY(out, eckey);
|
NULL, 0, NULL, passout);
|
||||||
else
|
} else {
|
||||||
i = PEM_write_bio_ECPrivateKey(out, eckey, enc,
|
BIO_printf(bio_err, "bad output format specified for " "outfile\n");
|
||||||
NULL, 0, NULL, passout);
|
goto end;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "bad output format specified for "
|
|
||||||
"outfile\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!i)
|
if (!i) {
|
||||||
{
|
BIO_printf(bio_err, "unable to write private key\n");
|
||||||
BIO_printf(bio_err, "unable to write private key\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
} else
|
||||||
}
|
ret = 0;
|
||||||
else
|
end:
|
||||||
ret=0;
|
if (in)
|
||||||
end:
|
BIO_free(in);
|
||||||
if (in)
|
if (out)
|
||||||
BIO_free(in);
|
BIO_free_all(out);
|
||||||
if (out)
|
if (eckey)
|
||||||
BIO_free_all(out);
|
EC_KEY_free(eckey);
|
||||||
if (eckey)
|
if (passin)
|
||||||
EC_KEY_free(eckey);
|
OPENSSL_free(passin);
|
||||||
if (passin)
|
if (passout)
|
||||||
OPENSSL_free(passin);
|
OPENSSL_free(passout);
|
||||||
if (passout)
|
apps_shutdown();
|
||||||
OPENSSL_free(passout);
|
OPENSSL_EXIT(ret);
|
||||||
apps_shutdown();
|
|
||||||
OPENSSL_EXIT(ret);
|
|
||||||
}
|
}
|
||||||
#else /* !OPENSSL_NO_EC */
|
#else /* !OPENSSL_NO_EC */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
1084
apps/ecparam.c
1084
apps/ecparam.c
File diff suppressed because it is too large
Load Diff
1149
apps/enc.c
1149
apps/enc.c
File diff suppressed because it is too large
Load Diff
847
apps/engine.c
847
apps/engine.c
@@ -1,6 +1,7 @@
|
|||||||
/* apps/engine.c -*- mode: C; c-file-style: "eay" -*- */
|
/* apps/engine.c */
|
||||||
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
|
/*
|
||||||
* project 2000.
|
* Written by Richard Levitte <richard@levitte.org> for the OpenSSL project
|
||||||
|
* 2000.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2000 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2000 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -56,494 +57,456 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifdef OPENSSL_NO_STDIO
|
#ifdef OPENSSL_NO_STDIO
|
||||||
#define APPS_WIN16
|
# define APPS_WIN16
|
||||||
#endif
|
#endif
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
#include <openssl/engine.h>
|
# include <openssl/engine.h>
|
||||||
#include <openssl/ssl.h>
|
# include <openssl/ssl.h>
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG engine_main
|
# define PROG engine_main
|
||||||
|
|
||||||
static const char *engine_usage[]={
|
static const char *engine_usage[] = {
|
||||||
"usage: engine opts [engine ...]\n",
|
"usage: engine opts [engine ...]\n",
|
||||||
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
|
" -v[v[v[v]]] - verbose mode, for each engine, list its 'control commands'\n",
|
||||||
" -vv will additionally display each command's description\n",
|
" -vv will additionally display each command's description\n",
|
||||||
" -vvv will also add the input flags for each command\n",
|
" -vvv will also add the input flags for each command\n",
|
||||||
" -vvvv will also show internal input flags\n",
|
" -vvvv will also show internal input flags\n",
|
||||||
" -c - for each engine, also list the capabilities\n",
|
" -c - for each engine, also list the capabilities\n",
|
||||||
" -t[t] - for each engine, check that they are really available\n",
|
" -t[t] - for each engine, check that they are really available\n",
|
||||||
" -tt will display error trace for unavailable engines\n",
|
" -tt will display error trace for unavailable engines\n",
|
||||||
" -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n",
|
" -pre <cmd> - runs command 'cmd' against the ENGINE before any attempts\n",
|
||||||
" to load it (if -t is used)\n",
|
" to load it (if -t is used)\n",
|
||||||
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
|
" -post <cmd> - runs command 'cmd' against the ENGINE after loading it\n",
|
||||||
" (only used if -t is also provided)\n",
|
" (only used if -t is also provided)\n",
|
||||||
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
|
" NB: -pre and -post will be applied to all ENGINEs supplied on the command\n",
|
||||||
" line, or all supported ENGINEs if none are specified.\n",
|
" line, or all supported ENGINEs if none are specified.\n",
|
||||||
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
|
" Eg. '-pre \"SO_PATH:/lib/libdriver.so\"' calls command \"SO_PATH\" with\n",
|
||||||
" argument \"/lib/libdriver.so\".\n",
|
" argument \"/lib/libdriver.so\".\n",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static void identity(char *ptr)
|
static void identity(char *ptr)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int append_buf(char **buf, const char *s, int *size, int step)
|
static int append_buf(char **buf, const char *s, int *size, int step)
|
||||||
{
|
{
|
||||||
int l = strlen(s);
|
if (*buf == NULL) {
|
||||||
|
*size = step;
|
||||||
|
*buf = OPENSSL_malloc(*size);
|
||||||
|
if (*buf == NULL)
|
||||||
|
return 0;
|
||||||
|
**buf = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
if (*buf == NULL)
|
if (strlen(*buf) + strlen(s) >= (unsigned int)*size) {
|
||||||
{
|
*size += step;
|
||||||
*size = step;
|
*buf = OPENSSL_realloc(*buf, *size);
|
||||||
*buf = OPENSSL_malloc(*size);
|
}
|
||||||
if (*buf == NULL)
|
|
||||||
return 0;
|
|
||||||
**buf = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (**buf != '\0')
|
if (*buf == NULL)
|
||||||
l += 2; /* ", " */
|
return 0;
|
||||||
|
|
||||||
if (strlen(*buf) + strlen(s) >= (unsigned int)*size)
|
if (**buf != '\0')
|
||||||
{
|
BUF_strlcat(*buf, ", ", *size);
|
||||||
*size += step;
|
BUF_strlcat(*buf, s, *size);
|
||||||
*buf = OPENSSL_realloc(*buf, *size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*buf == NULL)
|
return 1;
|
||||||
return 0;
|
}
|
||||||
|
|
||||||
if (**buf != '\0')
|
|
||||||
BUF_strlcat(*buf, ", ", *size);
|
|
||||||
BUF_strlcat(*buf, s, *size);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
|
static int util_flags(BIO *bio_out, unsigned int flags, const char *indent)
|
||||||
{
|
{
|
||||||
int started = 0, err = 0;
|
int started = 0, err = 0;
|
||||||
/* Indent before displaying input flags */
|
/* Indent before displaying input flags */
|
||||||
BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
|
BIO_printf(bio_out, "%s%s(input flags): ", indent, indent);
|
||||||
if(flags == 0)
|
if (flags == 0) {
|
||||||
{
|
BIO_printf(bio_out, "<no flags>\n");
|
||||||
BIO_printf(bio_out, "<no flags>\n");
|
return 1;
|
||||||
return 1;
|
}
|
||||||
}
|
/*
|
||||||
/* If the object is internal, mark it in a way that shows instead of
|
* If the object is internal, mark it in a way that shows instead of
|
||||||
* having it part of all the other flags, even if it really is. */
|
* having it part of all the other flags, even if it really is.
|
||||||
if(flags & ENGINE_CMD_FLAG_INTERNAL)
|
*/
|
||||||
{
|
if (flags & ENGINE_CMD_FLAG_INTERNAL) {
|
||||||
BIO_printf(bio_out, "[Internal] ");
|
BIO_printf(bio_out, "[Internal] ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flags & ENGINE_CMD_FLAG_NUMERIC)
|
if (flags & ENGINE_CMD_FLAG_NUMERIC) {
|
||||||
{
|
BIO_printf(bio_out, "NUMERIC");
|
||||||
BIO_printf(bio_out, "NUMERIC");
|
started = 1;
|
||||||
started = 1;
|
}
|
||||||
}
|
/*
|
||||||
/* Now we check that no combinations of the mutually exclusive NUMERIC,
|
* Now we check that no combinations of the mutually exclusive NUMERIC,
|
||||||
* STRING, and NO_INPUT flags have been used. Future flags that can be
|
* STRING, and NO_INPUT flags have been used. Future flags that can be
|
||||||
* OR'd together with these would need to added after these to preserve
|
* OR'd together with these would need to added after these to preserve
|
||||||
* the testing logic. */
|
* the testing logic.
|
||||||
if(flags & ENGINE_CMD_FLAG_STRING)
|
*/
|
||||||
{
|
if (flags & ENGINE_CMD_FLAG_STRING) {
|
||||||
if(started)
|
if (started) {
|
||||||
{
|
BIO_printf(bio_out, "|");
|
||||||
BIO_printf(bio_out, "|");
|
err = 1;
|
||||||
err = 1;
|
}
|
||||||
}
|
BIO_printf(bio_out, "STRING");
|
||||||
BIO_printf(bio_out, "STRING");
|
started = 1;
|
||||||
started = 1;
|
}
|
||||||
}
|
if (flags & ENGINE_CMD_FLAG_NO_INPUT) {
|
||||||
if(flags & ENGINE_CMD_FLAG_NO_INPUT)
|
if (started) {
|
||||||
{
|
BIO_printf(bio_out, "|");
|
||||||
if(started)
|
err = 1;
|
||||||
{
|
}
|
||||||
BIO_printf(bio_out, "|");
|
BIO_printf(bio_out, "NO_INPUT");
|
||||||
err = 1;
|
started = 1;
|
||||||
}
|
}
|
||||||
BIO_printf(bio_out, "NO_INPUT");
|
/* Check for unknown flags */
|
||||||
started = 1;
|
flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
|
||||||
}
|
~ENGINE_CMD_FLAG_STRING &
|
||||||
/* Check for unknown flags */
|
~ENGINE_CMD_FLAG_NO_INPUT & ~ENGINE_CMD_FLAG_INTERNAL;
|
||||||
flags = flags & ~ENGINE_CMD_FLAG_NUMERIC &
|
if (flags) {
|
||||||
~ENGINE_CMD_FLAG_STRING &
|
if (started)
|
||||||
~ENGINE_CMD_FLAG_NO_INPUT &
|
BIO_printf(bio_out, "|");
|
||||||
~ENGINE_CMD_FLAG_INTERNAL;
|
BIO_printf(bio_out, "<0x%04X>", flags);
|
||||||
if(flags)
|
}
|
||||||
{
|
if (err)
|
||||||
if(started) BIO_printf(bio_out, "|");
|
BIO_printf(bio_out, " <illegal flags!>");
|
||||||
BIO_printf(bio_out, "<0x%04X>", flags);
|
BIO_printf(bio_out, "\n");
|
||||||
}
|
return 1;
|
||||||
if(err)
|
}
|
||||||
BIO_printf(bio_out, " <illegal flags!>");
|
|
||||||
BIO_printf(bio_out, "\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out, const char *indent)
|
static int util_verbose(ENGINE *e, int verbose, BIO *bio_out,
|
||||||
{
|
const char *indent)
|
||||||
static const int line_wrap = 78;
|
{
|
||||||
int num;
|
static const int line_wrap = 78;
|
||||||
int ret = 0;
|
int num;
|
||||||
char *name = NULL;
|
int ret = 0;
|
||||||
char *desc = NULL;
|
char *name = NULL;
|
||||||
int flags;
|
char *desc = NULL;
|
||||||
int xpos = 0;
|
int flags;
|
||||||
STACK_OF(OPENSSL_STRING) *cmds = NULL;
|
int xpos = 0;
|
||||||
if(!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
|
STACK_OF(OPENSSL_STRING) *cmds = NULL;
|
||||||
((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
|
if (!ENGINE_ctrl(e, ENGINE_CTRL_HAS_CTRL_FUNCTION, 0, NULL, NULL) ||
|
||||||
0, NULL, NULL)) <= 0))
|
((num = ENGINE_ctrl(e, ENGINE_CTRL_GET_FIRST_CMD_TYPE,
|
||||||
{
|
0, NULL, NULL)) <= 0)) {
|
||||||
#if 0
|
# if 0
|
||||||
BIO_printf(bio_out, "%s<no control commands>\n", indent);
|
BIO_printf(bio_out, "%s<no control commands>\n", indent);
|
||||||
#endif
|
# endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmds = sk_OPENSSL_STRING_new_null();
|
cmds = sk_OPENSSL_STRING_new_null();
|
||||||
|
|
||||||
if(!cmds)
|
if (!cmds)
|
||||||
goto err;
|
goto err;
|
||||||
do {
|
do {
|
||||||
int len;
|
int len;
|
||||||
/* Get the command input flags */
|
/* Get the command input flags */
|
||||||
if((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
|
if ((flags = ENGINE_ctrl(e, ENGINE_CTRL_GET_CMD_FLAGS, num,
|
||||||
NULL, NULL)) < 0)
|
NULL, NULL)) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4)
|
if (!(flags & ENGINE_CMD_FLAG_INTERNAL) || verbose >= 4) {
|
||||||
{
|
/* Get the command name */
|
||||||
/* Get the command name */
|
if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
|
||||||
if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_LEN_FROM_CMD, num,
|
NULL, NULL)) <= 0)
|
||||||
NULL, NULL)) <= 0)
|
goto err;
|
||||||
goto err;
|
if ((name = OPENSSL_malloc(len + 1)) == NULL)
|
||||||
if((name = OPENSSL_malloc(len + 1)) == NULL)
|
goto err;
|
||||||
goto err;
|
if (ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
|
||||||
if(ENGINE_ctrl(e, ENGINE_CTRL_GET_NAME_FROM_CMD, num, name,
|
NULL) <= 0)
|
||||||
|
goto err;
|
||||||
|
/* Get the command description */
|
||||||
|
if ((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
|
||||||
|
NULL, NULL)) < 0)
|
||||||
|
goto err;
|
||||||
|
if (len > 0) {
|
||||||
|
if ((desc = OPENSSL_malloc(len + 1)) == NULL)
|
||||||
|
goto err;
|
||||||
|
if (ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
|
||||||
NULL) <= 0)
|
NULL) <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
/* Get the command description */
|
}
|
||||||
if((len = ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_LEN_FROM_CMD, num,
|
/* Now decide on the output */
|
||||||
NULL, NULL)) < 0)
|
if (xpos == 0)
|
||||||
goto err;
|
/* Do an indent */
|
||||||
if(len > 0)
|
xpos = BIO_puts(bio_out, indent);
|
||||||
{
|
else
|
||||||
if((desc = OPENSSL_malloc(len + 1)) == NULL)
|
/* Otherwise prepend a ", " */
|
||||||
goto err;
|
xpos += BIO_printf(bio_out, ", ");
|
||||||
if(ENGINE_ctrl(e, ENGINE_CTRL_GET_DESC_FROM_CMD, num, desc,
|
if (verbose == 1) {
|
||||||
NULL) <= 0)
|
/*
|
||||||
goto err;
|
* We're just listing names, comma-delimited
|
||||||
}
|
*/
|
||||||
/* Now decide on the output */
|
if ((xpos > (int)strlen(indent)) &&
|
||||||
if(xpos == 0)
|
(xpos + (int)strlen(name) > line_wrap)) {
|
||||||
/* Do an indent */
|
BIO_printf(bio_out, "\n");
|
||||||
xpos = BIO_puts(bio_out, indent);
|
xpos = BIO_puts(bio_out, indent);
|
||||||
else
|
}
|
||||||
/* Otherwise prepend a ", " */
|
xpos += BIO_printf(bio_out, "%s", name);
|
||||||
xpos += BIO_printf(bio_out, ", ");
|
} else {
|
||||||
if(verbose == 1)
|
/* We're listing names plus descriptions */
|
||||||
{
|
BIO_printf(bio_out, "%s: %s\n", name,
|
||||||
/* We're just listing names, comma-delimited */
|
(desc == NULL) ? "<no description>" : desc);
|
||||||
if((xpos > (int)strlen(indent)) &&
|
/* ... and sometimes input flags */
|
||||||
(xpos + (int)strlen(name) > line_wrap))
|
if ((verbose >= 3) && !util_flags(bio_out, flags, indent))
|
||||||
{
|
goto err;
|
||||||
BIO_printf(bio_out, "\n");
|
xpos = 0;
|
||||||
xpos = BIO_puts(bio_out, indent);
|
}
|
||||||
}
|
}
|
||||||
xpos += BIO_printf(bio_out, "%s", name);
|
OPENSSL_free(name);
|
||||||
}
|
name = NULL;
|
||||||
else
|
if (desc) {
|
||||||
{
|
OPENSSL_free(desc);
|
||||||
/* We're listing names plus descriptions */
|
desc = NULL;
|
||||||
BIO_printf(bio_out, "%s: %s\n", name,
|
}
|
||||||
(desc == NULL) ? "<no description>" : desc);
|
/* Move to the next command */
|
||||||
/* ... and sometimes input flags */
|
num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, num, NULL, NULL);
|
||||||
if((verbose >= 3) && !util_flags(bio_out, flags,
|
} while (num > 0);
|
||||||
indent))
|
if (xpos > 0)
|
||||||
goto err;
|
BIO_printf(bio_out, "\n");
|
||||||
xpos = 0;
|
ret = 1;
|
||||||
}
|
err:
|
||||||
}
|
if (cmds)
|
||||||
OPENSSL_free(name); name = NULL;
|
sk_OPENSSL_STRING_pop_free(cmds, identity);
|
||||||
if(desc) { OPENSSL_free(desc); desc = NULL; }
|
if (name)
|
||||||
/* Move to the next command */
|
OPENSSL_free(name);
|
||||||
num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE,
|
if (desc)
|
||||||
num, NULL, NULL);
|
OPENSSL_free(desc);
|
||||||
} while(num > 0);
|
return ret;
|
||||||
if(xpos > 0)
|
}
|
||||||
BIO_printf(bio_out, "\n");
|
|
||||||
ret = 1;
|
|
||||||
err:
|
|
||||||
if(cmds) sk_OPENSSL_STRING_pop_free(cmds, identity);
|
|
||||||
if(name) OPENSSL_free(name);
|
|
||||||
if(desc) OPENSSL_free(desc);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds,
|
static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds,
|
||||||
BIO *bio_out, const char *indent)
|
BIO *bio_out, const char *indent)
|
||||||
{
|
{
|
||||||
int loop, res, num = sk_OPENSSL_STRING_num(cmds);
|
int loop, res, num = sk_OPENSSL_STRING_num(cmds);
|
||||||
|
|
||||||
if(num < 0)
|
if (num < 0) {
|
||||||
{
|
BIO_printf(bio_out, "[Error]: internal stack error\n");
|
||||||
BIO_printf(bio_out, "[Error]: internal stack error\n");
|
return;
|
||||||
return;
|
}
|
||||||
}
|
for (loop = 0; loop < num; loop++) {
|
||||||
for(loop = 0; loop < num; loop++)
|
char buf[256];
|
||||||
{
|
const char *cmd, *arg;
|
||||||
char buf[256];
|
cmd = sk_OPENSSL_STRING_value(cmds, loop);
|
||||||
const char *cmd, *arg;
|
res = 1; /* assume success */
|
||||||
cmd = sk_OPENSSL_STRING_value(cmds, loop);
|
/* Check if this command has no ":arg" */
|
||||||
res = 1; /* assume success */
|
if ((arg = strstr(cmd, ":")) == NULL) {
|
||||||
/* Check if this command has no ":arg" */
|
if (!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
|
||||||
if((arg = strstr(cmd, ":")) == NULL)
|
res = 0;
|
||||||
{
|
} else {
|
||||||
if(!ENGINE_ctrl_cmd_string(e, cmd, NULL, 0))
|
if ((int)(arg - cmd) > 254) {
|
||||||
res = 0;
|
BIO_printf(bio_out, "[Error]: command name too long\n");
|
||||||
}
|
return;
|
||||||
else
|
}
|
||||||
{
|
memcpy(buf, cmd, (int)(arg - cmd));
|
||||||
if((int)(arg - cmd) > 254)
|
buf[arg - cmd] = '\0';
|
||||||
{
|
arg++; /* Move past the ":" */
|
||||||
BIO_printf(bio_out,"[Error]: command name too long\n");
|
/* Call the command with the argument */
|
||||||
return;
|
if (!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
|
||||||
}
|
res = 0;
|
||||||
memcpy(buf, cmd, (int)(arg - cmd));
|
}
|
||||||
buf[arg-cmd] = '\0';
|
if (res)
|
||||||
arg++; /* Move past the ":" */
|
BIO_printf(bio_out, "[Success]: %s\n", cmd);
|
||||||
/* Call the command with the argument */
|
else {
|
||||||
if(!ENGINE_ctrl_cmd_string(e, buf, arg, 0))
|
BIO_printf(bio_out, "[Failure]: %s\n", cmd);
|
||||||
res = 0;
|
ERR_print_errors(bio_out);
|
||||||
}
|
}
|
||||||
if(res)
|
}
|
||||||
BIO_printf(bio_out, "[Success]: %s\n", cmd);
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_out, "[Failure]: %s\n", cmd);
|
|
||||||
ERR_print_errors(bio_out);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret=1,i;
|
int ret = 1, i;
|
||||||
const char **pp;
|
const char **pp;
|
||||||
int verbose=0, list_cap=0, test_avail=0, test_avail_noise = 0;
|
int verbose = 0, list_cap = 0, test_avail = 0, test_avail_noise = 0;
|
||||||
ENGINE *e;
|
ENGINE *e;
|
||||||
STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
|
STACK_OF(OPENSSL_STRING) *engines = sk_OPENSSL_STRING_new_null();
|
||||||
STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
|
STACK_OF(OPENSSL_STRING) *pre_cmds = sk_OPENSSL_STRING_new_null();
|
||||||
STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null();
|
STACK_OF(OPENSSL_STRING) *post_cmds = sk_OPENSSL_STRING_new_null();
|
||||||
int badops=1;
|
int badops = 1;
|
||||||
BIO *bio_out=NULL;
|
BIO *bio_out = NULL;
|
||||||
const char *indent = " ";
|
const char *indent = " ";
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
bio_out=BIO_new_fp(stdout,BIO_NOCLOSE);
|
bio_out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
#ifdef OPENSSL_SYS_VMS
|
# ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
bio_out = BIO_push(tmpbio, bio_out);
|
bio_out = BIO_push(tmpbio, bio_out);
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strncmp(*argv, "-v", 2) == 0) {
|
||||||
if (strncmp(*argv,"-v",2) == 0)
|
if (strspn(*argv + 1, "v") < strlen(*argv + 1))
|
||||||
{
|
goto skip_arg_loop;
|
||||||
if(strspn(*argv + 1, "v") < strlen(*argv + 1))
|
if ((verbose = strlen(*argv + 1)) > 4)
|
||||||
goto skip_arg_loop;
|
goto skip_arg_loop;
|
||||||
if((verbose=strlen(*argv + 1)) > 4)
|
} else if (strcmp(*argv, "-c") == 0)
|
||||||
goto skip_arg_loop;
|
list_cap = 1;
|
||||||
}
|
else if (strncmp(*argv, "-t", 2) == 0) {
|
||||||
else if (strcmp(*argv,"-c") == 0)
|
test_avail = 1;
|
||||||
list_cap=1;
|
if (strspn(*argv + 1, "t") < strlen(*argv + 1))
|
||||||
else if (strncmp(*argv,"-t",2) == 0)
|
goto skip_arg_loop;
|
||||||
{
|
if ((test_avail_noise = strlen(*argv + 1) - 1) > 1)
|
||||||
test_avail=1;
|
goto skip_arg_loop;
|
||||||
if(strspn(*argv + 1, "t") < strlen(*argv + 1))
|
} else if (strcmp(*argv, "-pre") == 0) {
|
||||||
goto skip_arg_loop;
|
argc--;
|
||||||
if((test_avail_noise = strlen(*argv + 1) - 1) > 1)
|
argv++;
|
||||||
goto skip_arg_loop;
|
if (argc == 0)
|
||||||
}
|
goto skip_arg_loop;
|
||||||
else if (strcmp(*argv,"-pre") == 0)
|
sk_OPENSSL_STRING_push(pre_cmds, *argv);
|
||||||
{
|
} else if (strcmp(*argv, "-post") == 0) {
|
||||||
argc--; argv++;
|
argc--;
|
||||||
if (argc == 0)
|
argv++;
|
||||||
goto skip_arg_loop;
|
if (argc == 0)
|
||||||
sk_OPENSSL_STRING_push(pre_cmds,*argv);
|
goto skip_arg_loop;
|
||||||
}
|
sk_OPENSSL_STRING_push(post_cmds, *argv);
|
||||||
else if (strcmp(*argv,"-post") == 0)
|
} else if ((strncmp(*argv, "-h", 2) == 0) ||
|
||||||
{
|
(strcmp(*argv, "-?") == 0))
|
||||||
argc--; argv++;
|
goto skip_arg_loop;
|
||||||
if (argc == 0)
|
else
|
||||||
goto skip_arg_loop;
|
sk_OPENSSL_STRING_push(engines, *argv);
|
||||||
sk_OPENSSL_STRING_push(post_cmds,*argv);
|
argc--;
|
||||||
}
|
argv++;
|
||||||
else if ((strncmp(*argv,"-h",2) == 0) ||
|
}
|
||||||
(strcmp(*argv,"-?") == 0))
|
/* Looks like everything went OK */
|
||||||
goto skip_arg_loop;
|
badops = 0;
|
||||||
else
|
skip_arg_loop:
|
||||||
sk_OPENSSL_STRING_push(engines,*argv);
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
/* Looks like everything went OK */
|
|
||||||
badops = 0;
|
|
||||||
skip_arg_loop:
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
for (pp = engine_usage; (*pp != NULL); pp++)
|
||||||
for (pp=engine_usage; (*pp != NULL); pp++)
|
BIO_printf(bio_err, "%s", *pp);
|
||||||
BIO_printf(bio_err,"%s",*pp);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (sk_OPENSSL_STRING_num(engines) == 0)
|
if (sk_OPENSSL_STRING_num(engines) == 0) {
|
||||||
{
|
for (e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e)) {
|
||||||
for(e = ENGINE_get_first(); e != NULL; e = ENGINE_get_next(e))
|
sk_OPENSSL_STRING_push(engines, (char *)ENGINE_get_id(e));
|
||||||
{
|
}
|
||||||
sk_OPENSSL_STRING_push(engines,(char *)ENGINE_get_id(e));
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<sk_OPENSSL_STRING_num(engines); i++)
|
for (i = 0; i < sk_OPENSSL_STRING_num(engines); i++) {
|
||||||
{
|
const char *id = sk_OPENSSL_STRING_value(engines, i);
|
||||||
const char *id = sk_OPENSSL_STRING_value(engines,i);
|
if ((e = ENGINE_by_id(id)) != NULL) {
|
||||||
if ((e = ENGINE_by_id(id)) != NULL)
|
const char *name = ENGINE_get_name(e);
|
||||||
{
|
/*
|
||||||
const char *name = ENGINE_get_name(e);
|
* Do "id" first, then "name". Easier to auto-parse.
|
||||||
/* Do "id" first, then "name". Easier to auto-parse. */
|
*/
|
||||||
BIO_printf(bio_out, "(%s) %s\n", id, name);
|
BIO_printf(bio_out, "(%s) %s\n", id, name);
|
||||||
util_do_cmds(e, pre_cmds, bio_out, indent);
|
util_do_cmds(e, pre_cmds, bio_out, indent);
|
||||||
if (strcmp(ENGINE_get_id(e), id) != 0)
|
if (strcmp(ENGINE_get_id(e), id) != 0) {
|
||||||
{
|
BIO_printf(bio_out, "Loaded: (%s) %s\n",
|
||||||
BIO_printf(bio_out, "Loaded: (%s) %s\n",
|
ENGINE_get_id(e), ENGINE_get_name(e));
|
||||||
ENGINE_get_id(e), ENGINE_get_name(e));
|
}
|
||||||
}
|
if (list_cap) {
|
||||||
if (list_cap)
|
int cap_size = 256;
|
||||||
{
|
char *cap_buf = NULL;
|
||||||
int cap_size = 256;
|
int k, n;
|
||||||
char *cap_buf = NULL;
|
const int *nids;
|
||||||
int k,n;
|
ENGINE_CIPHERS_PTR fn_c;
|
||||||
const int *nids;
|
ENGINE_DIGESTS_PTR fn_d;
|
||||||
ENGINE_CIPHERS_PTR fn_c;
|
ENGINE_PKEY_METHS_PTR fn_pk;
|
||||||
ENGINE_DIGESTS_PTR fn_d;
|
|
||||||
ENGINE_PKEY_METHS_PTR fn_pk;
|
|
||||||
|
|
||||||
if (ENGINE_get_RSA(e) != NULL
|
if (ENGINE_get_RSA(e) != NULL
|
||||||
&& !append_buf(&cap_buf, "RSA",
|
&& !append_buf(&cap_buf, "RSA", &cap_size, 256))
|
||||||
&cap_size, 256))
|
goto end;
|
||||||
goto end;
|
if (ENGINE_get_DSA(e) != NULL
|
||||||
if (ENGINE_get_DSA(e) != NULL
|
&& !append_buf(&cap_buf, "DSA", &cap_size, 256))
|
||||||
&& !append_buf(&cap_buf, "DSA",
|
goto end;
|
||||||
&cap_size, 256))
|
if (ENGINE_get_DH(e) != NULL
|
||||||
goto end;
|
&& !append_buf(&cap_buf, "DH", &cap_size, 256))
|
||||||
if (ENGINE_get_DH(e) != NULL
|
goto end;
|
||||||
&& !append_buf(&cap_buf, "DH",
|
if (ENGINE_get_RAND(e) != NULL
|
||||||
&cap_size, 256))
|
&& !append_buf(&cap_buf, "RAND", &cap_size, 256))
|
||||||
goto end;
|
goto end;
|
||||||
if (ENGINE_get_RAND(e) != NULL
|
|
||||||
&& !append_buf(&cap_buf, "RAND",
|
|
||||||
&cap_size, 256))
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
fn_c = ENGINE_get_ciphers(e);
|
fn_c = ENGINE_get_ciphers(e);
|
||||||
if(!fn_c) goto skip_ciphers;
|
if (!fn_c)
|
||||||
n = fn_c(e, NULL, &nids, 0);
|
goto skip_ciphers;
|
||||||
for(k=0 ; k < n ; ++k)
|
n = fn_c(e, NULL, &nids, 0);
|
||||||
if(!append_buf(&cap_buf,
|
for (k = 0; k < n; ++k)
|
||||||
OBJ_nid2sn(nids[k]),
|
if (!append_buf(&cap_buf,
|
||||||
&cap_size, 256))
|
OBJ_nid2sn(nids[k]), &cap_size, 256))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
skip_ciphers:
|
skip_ciphers:
|
||||||
fn_d = ENGINE_get_digests(e);
|
fn_d = ENGINE_get_digests(e);
|
||||||
if(!fn_d) goto skip_digests;
|
if (!fn_d)
|
||||||
n = fn_d(e, NULL, &nids, 0);
|
goto skip_digests;
|
||||||
for(k=0 ; k < n ; ++k)
|
n = fn_d(e, NULL, &nids, 0);
|
||||||
if(!append_buf(&cap_buf,
|
for (k = 0; k < n; ++k)
|
||||||
OBJ_nid2sn(nids[k]),
|
if (!append_buf(&cap_buf,
|
||||||
&cap_size, 256))
|
OBJ_nid2sn(nids[k]), &cap_size, 256))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
skip_digests:
|
skip_digests:
|
||||||
fn_pk = ENGINE_get_pkey_meths(e);
|
fn_pk = ENGINE_get_pkey_meths(e);
|
||||||
if(!fn_pk) goto skip_pmeths;
|
if (!fn_pk)
|
||||||
n = fn_pk(e, NULL, &nids, 0);
|
goto skip_pmeths;
|
||||||
for(k=0 ; k < n ; ++k)
|
n = fn_pk(e, NULL, &nids, 0);
|
||||||
if(!append_buf(&cap_buf,
|
for (k = 0; k < n; ++k)
|
||||||
OBJ_nid2sn(nids[k]),
|
if (!append_buf(&cap_buf,
|
||||||
&cap_size, 256))
|
OBJ_nid2sn(nids[k]), &cap_size, 256))
|
||||||
goto end;
|
goto end;
|
||||||
skip_pmeths:
|
skip_pmeths:
|
||||||
if (cap_buf && (*cap_buf != '\0'))
|
if (cap_buf && (*cap_buf != '\0'))
|
||||||
BIO_printf(bio_out, " [%s]\n", cap_buf);
|
BIO_printf(bio_out, " [%s]\n", cap_buf);
|
||||||
|
|
||||||
OPENSSL_free(cap_buf);
|
OPENSSL_free(cap_buf);
|
||||||
}
|
}
|
||||||
if(test_avail)
|
if (test_avail) {
|
||||||
{
|
BIO_printf(bio_out, "%s", indent);
|
||||||
BIO_printf(bio_out, "%s", indent);
|
if (ENGINE_init(e)) {
|
||||||
if (ENGINE_init(e))
|
BIO_printf(bio_out, "[ available ]\n");
|
||||||
{
|
util_do_cmds(e, post_cmds, bio_out, indent);
|
||||||
BIO_printf(bio_out, "[ available ]\n");
|
ENGINE_finish(e);
|
||||||
util_do_cmds(e, post_cmds, bio_out, indent);
|
} else {
|
||||||
ENGINE_finish(e);
|
BIO_printf(bio_out, "[ unavailable ]\n");
|
||||||
}
|
if (test_avail_noise)
|
||||||
else
|
ERR_print_errors_fp(stdout);
|
||||||
{
|
ERR_clear_error();
|
||||||
BIO_printf(bio_out, "[ unavailable ]\n");
|
}
|
||||||
if(test_avail_noise)
|
}
|
||||||
ERR_print_errors_fp(stdout);
|
if ((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
|
||||||
ERR_clear_error();
|
goto end;
|
||||||
}
|
ENGINE_free(e);
|
||||||
}
|
} else
|
||||||
if((verbose > 0) && !util_verbose(e, verbose, bio_out, indent))
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
}
|
||||||
ENGINE_free(e);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret=0;
|
ret = 0;
|
||||||
end:
|
end:
|
||||||
|
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
sk_OPENSSL_STRING_pop_free(engines, identity);
|
sk_OPENSSL_STRING_pop_free(engines, identity);
|
||||||
sk_OPENSSL_STRING_pop_free(pre_cmds, identity);
|
sk_OPENSSL_STRING_pop_free(pre_cmds, identity);
|
||||||
sk_OPENSSL_STRING_pop_free(post_cmds, identity);
|
sk_OPENSSL_STRING_pop_free(post_cmds, identity);
|
||||||
if (bio_out != NULL) BIO_free_all(bio_out);
|
if (bio_out != NULL)
|
||||||
apps_shutdown();
|
BIO_free_all(bio_out);
|
||||||
OPENSSL_EXIT(ret);
|
apps_shutdown();
|
||||||
}
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
101
apps/errstr.c
101
apps/errstr.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -66,63 +66,56 @@
|
|||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG errstr_main
|
#define PROG errstr_main
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i,ret=0;
|
int i, ret = 0;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
unsigned long l;
|
unsigned long l;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
|
|
||||||
if ((argc > 1) && (strcmp(argv[1],"-stats") == 0))
|
if ((argc > 1) && (strcmp(argv[1], "-stats") == 0)) {
|
||||||
{
|
BIO *out = NULL;
|
||||||
BIO *out=NULL;
|
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((out != NULL) && BIO_set_fp(out,stdout,BIO_NOCLOSE))
|
if ((out != NULL) && BIO_set_fp(out, stdout, BIO_NOCLOSE)) {
|
||||||
{
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
lh_ERR_STRING_DATA_node_stats_bio(
|
lh_ERR_STRING_DATA_node_stats_bio(ERR_get_string_table(), out);
|
||||||
ERR_get_string_table(), out);
|
lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(), out);
|
||||||
lh_ERR_STRING_DATA_stats_bio(ERR_get_string_table(),
|
lh_ERR_STRING_DATA_node_usage_stats_bio(ERR_get_string_table(),
|
||||||
out);
|
out);
|
||||||
lh_ERR_STRING_DATA_node_usage_stats_bio(
|
}
|
||||||
ERR_get_string_table(),out);
|
if (out != NULL)
|
||||||
}
|
BIO_free_all(out);
|
||||||
if (out != NULL) BIO_free_all(out);
|
argc--;
|
||||||
argc--;
|
argv++;
|
||||||
argv++;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (i=1; i<argc; i++)
|
for (i = 1; i < argc; i++) {
|
||||||
{
|
if (sscanf(argv[i], "%lx", &l)) {
|
||||||
if (sscanf(argv[i],"%lx",&l))
|
ERR_error_string_n(l, buf, sizeof buf);
|
||||||
{
|
printf("%s\n", buf);
|
||||||
ERR_error_string_n(l, buf, sizeof buf);
|
} else {
|
||||||
printf("%s\n",buf);
|
printf("%s: bad error code\n", argv[i]);
|
||||||
}
|
printf("usage: errstr [-stats] <errno> ...\n");
|
||||||
else
|
ret++;
|
||||||
{
|
}
|
||||||
printf("%s: bad error code\n",argv[i]);
|
}
|
||||||
printf("usage: errstr [-stats] <errno> ...\n");
|
apps_shutdown();
|
||||||
ret++;
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
apps_shutdown();
|
|
||||||
OPENSSL_EXIT(ret);
|
|
||||||
}
|
|
||||||
|
|||||||
323
apps/gendh.c
323
apps/gendh.c
@@ -6,21 +6,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -35,10 +35,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -58,184 +58,191 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
/*
|
||||||
* deprecated functions for openssl-internal code */
|
* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
||||||
|
* deprecated functions for openssl-internal code
|
||||||
|
*/
|
||||||
#ifdef OPENSSL_NO_DEPRECATED
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
#undef OPENSSL_NO_DEPRECATED
|
# undef OPENSSL_NO_DEPRECATED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include <sys/types.h>
|
# include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/rand.h>
|
# include <openssl/rand.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
#include <openssl/dh.h>
|
# include <openssl/dh.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
# define DEFBITS 2048
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG gendh_main
|
# define PROG gendh_main
|
||||||
|
|
||||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
|
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb);
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
BN_GENCB cb;
|
BN_GENCB cb;
|
||||||
DH *dh=NULL;
|
DH *dh = NULL;
|
||||||
int ret=1,num=DEFBITS;
|
int ret = 1, num = DEFBITS;
|
||||||
int g=2;
|
int g = 2;
|
||||||
char *outfile=NULL;
|
char *outfile = NULL;
|
||||||
char *inrand=NULL;
|
char *inrand = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
BIO *out=NULL;
|
BIO *out = NULL;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
BN_GENCB_set(&cb, dh_cb, bio_err);
|
BN_GENCB_set(&cb, dh_cb, bio_err);
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
argv++;
|
argv++;
|
||||||
argc--;
|
argc--;
|
||||||
for (;;)
|
for (;;) {
|
||||||
{
|
if (argc <= 0)
|
||||||
if (argc <= 0) break;
|
break;
|
||||||
if (strcmp(*argv,"-out") == 0)
|
if (strcmp(*argv, "-out") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
outfile= *(++argv);
|
outfile = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-2") == 0)
|
||||||
else if (strcmp(*argv,"-2") == 0)
|
g = 2;
|
||||||
g=2;
|
/*- else if (strcmp(*argv,"-3") == 0)
|
||||||
/* else if (strcmp(*argv,"-3") == 0)
|
g=3; */
|
||||||
g=3; */
|
else if (strcmp(*argv, "-5") == 0)
|
||||||
else if (strcmp(*argv,"-5") == 0)
|
g = 5;
|
||||||
g=5;
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
engine = *(++argv);
|
||||||
engine= *(++argv);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
else if (strcmp(*argv, "-rand") == 0) {
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
inrand = *(++argv);
|
||||||
inrand= *(++argv);
|
} else
|
||||||
}
|
break;
|
||||||
else
|
argv++;
|
||||||
break;
|
argc--;
|
||||||
argv++;
|
}
|
||||||
argc--;
|
if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) {
|
||||||
}
|
bad:
|
||||||
if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
|
BIO_printf(bio_err, "usage: gendh [args] [numbits]\n");
|
||||||
{
|
BIO_printf(bio_err, " -out file - output the key to 'file\n");
|
||||||
bad:
|
BIO_printf(bio_err, " -2 - use 2 as the generator value\n");
|
||||||
BIO_printf(bio_err,"usage: gendh [args] [numbits]\n");
|
/*
|
||||||
BIO_printf(bio_err," -out file - output the key to 'file\n");
|
* BIO_printf(bio_err," -3 - use 3 as the generator value\n");
|
||||||
BIO_printf(bio_err," -2 - use 2 as the generator value\n");
|
*/
|
||||||
/* BIO_printf(bio_err," -3 - use 3 as the generator value\n"); */
|
BIO_printf(bio_err, " -5 - use 5 as the generator value\n");
|
||||||
BIO_printf(bio_err," -5 - use 5 as the generator value\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
|
" -engine e - use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
# endif
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
|
||||||
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
BIO_printf(bio_err,
|
||||||
goto end;
|
" - load the file (or the files in the directory) into\n");
|
||||||
}
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
|
goto end;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
}
|
||||||
setup_engine(bio_err, engine, 0);
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#endif
|
setup_engine(bio_err, engine, 0);
|
||||||
|
# endif
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if (out == NULL)
|
if (out == NULL) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
# ifdef OPENSSL_SYS_VMS
|
||||||
#ifdef OPENSSL_SYS_VMS
|
{
|
||||||
{
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
out = BIO_push(tmpbio, out);
|
||||||
out = BIO_push(tmpbio, out);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
} else {
|
||||||
}
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
else
|
perror(outfile);
|
||||||
{
|
goto end;
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
}
|
||||||
{
|
}
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
|
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
|
||||||
{
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
"warning, not much extra random data, consider using the -rand option\n");
|
||||||
}
|
}
|
||||||
if (inrand != NULL)
|
if (inrand != NULL)
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
|
||||||
app_RAND_load_files(inrand));
|
app_RAND_load_files(inrand));
|
||||||
|
|
||||||
BIO_printf(bio_err,"Generating DH parameters, %d bit long safe prime, generator %d\n",num,g);
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err,"This is going to take a long time\n");
|
"Generating DH parameters, %d bit long safe prime, generator %d\n",
|
||||||
|
num, g);
|
||||||
|
BIO_printf(bio_err, "This is going to take a long time\n");
|
||||||
|
|
||||||
if(((dh = DH_new()) == NULL) || !DH_generate_parameters_ex(dh, num, g, &cb))
|
if (((dh = DH_new()) == NULL)
|
||||||
goto end;
|
|| !DH_generate_parameters_ex(dh, num, g, &cb))
|
||||||
|
goto end;
|
||||||
app_RAND_write_file(NULL, bio_err);
|
|
||||||
|
|
||||||
if (!PEM_write_bio_DHparams(out,dh))
|
app_RAND_write_file(NULL, bio_err);
|
||||||
goto end;
|
|
||||||
ret=0;
|
if (!PEM_write_bio_DHparams(out, dh))
|
||||||
end:
|
goto end;
|
||||||
if (ret != 0)
|
ret = 0;
|
||||||
ERR_print_errors(bio_err);
|
end:
|
||||||
if (out != NULL) BIO_free_all(out);
|
if (ret != 0)
|
||||||
if (dh != NULL) DH_free(dh);
|
ERR_print_errors(bio_err);
|
||||||
apps_shutdown();
|
if (out != NULL)
|
||||||
OPENSSL_EXIT(ret);
|
BIO_free_all(out);
|
||||||
}
|
if (dh != NULL)
|
||||||
|
DH_free(dh);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
|
static int MS_CALLBACK dh_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c = '*';
|
||||||
|
|
||||||
if (p == 0) c='.';
|
if (p == 0)
|
||||||
if (p == 1) c='+';
|
c = '.';
|
||||||
if (p == 2) c='*';
|
if (p == 1)
|
||||||
if (p == 3) c='\n';
|
c = '+';
|
||||||
BIO_write(cb->arg,&c,1);
|
if (p == 2)
|
||||||
(void)BIO_flush(cb->arg);
|
c = '*';
|
||||||
#ifdef LINT
|
if (p == 3)
|
||||||
p=n;
|
c = '\n';
|
||||||
#endif
|
BIO_write(cb->arg, &c, 1);
|
||||||
return 1;
|
(void)BIO_flush(cb->arg);
|
||||||
}
|
# ifdef LINT
|
||||||
#else /* !OPENSSL_NO_DH */
|
p = n;
|
||||||
|
# endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_DH */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
418
apps/gendsa.c
418
apps/gendsa.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,237 +49,239 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
* [including the GNU Public Licence.]
|
* [including the GNU Public Licence.]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
|
#include <openssl/opensslconf.h> /* for OPENSSL_NO_DSA */
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include <sys/types.h>
|
# include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
#include <openssl/dsa.h>
|
# include <openssl/dsa.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
# define DEFBITS 512
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG gendsa_main
|
# define PROG gendsa_main
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
DSA *dsa=NULL;
|
DSA *dsa = NULL;
|
||||||
int ret=1;
|
int ret = 1;
|
||||||
char *outfile=NULL;
|
char *outfile = NULL;
|
||||||
char *inrand=NULL,*dsaparams=NULL;
|
char *inrand = NULL, *dsaparams = NULL;
|
||||||
char *passargout = NULL, *passout = NULL;
|
char *passargout = NULL, *passout = NULL;
|
||||||
BIO *out=NULL,*in=NULL;
|
BIO *out = NULL, *in = NULL;
|
||||||
const EVP_CIPHER *enc=NULL;
|
const EVP_CIPHER *enc = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
argv++;
|
argv++;
|
||||||
argc--;
|
argc--;
|
||||||
for (;;)
|
for (;;) {
|
||||||
{
|
if (argc <= 0)
|
||||||
if (argc <= 0) break;
|
break;
|
||||||
if (strcmp(*argv,"-out") == 0)
|
if (strcmp(*argv, "-out") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
outfile= *(++argv);
|
outfile = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-passout") == 0) {
|
||||||
else if (strcmp(*argv,"-passout") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
passargout = *(++argv);
|
||||||
passargout= *(++argv);
|
}
|
||||||
}
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
engine = *(++argv);
|
||||||
engine= *(++argv);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
else if (strcmp(*argv, "-rand") == 0) {
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
inrand = *(++argv);
|
||||||
inrand= *(++argv);
|
} else if (strcmp(*argv, "-") == 0)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-") == 0)
|
# ifndef OPENSSL_NO_DES
|
||||||
goto bad;
|
else if (strcmp(*argv, "-des") == 0)
|
||||||
#ifndef OPENSSL_NO_DES
|
enc = EVP_des_cbc();
|
||||||
else if (strcmp(*argv,"-des") == 0)
|
else if (strcmp(*argv, "-des3") == 0)
|
||||||
enc=EVP_des_cbc();
|
enc = EVP_des_ede3_cbc();
|
||||||
else if (strcmp(*argv,"-des3") == 0)
|
# endif
|
||||||
enc=EVP_des_ede3_cbc();
|
# ifndef OPENSSL_NO_IDEA
|
||||||
#endif
|
else if (strcmp(*argv, "-idea") == 0)
|
||||||
#ifndef OPENSSL_NO_IDEA
|
enc = EVP_idea_cbc();
|
||||||
else if (strcmp(*argv,"-idea") == 0)
|
# endif
|
||||||
enc=EVP_idea_cbc();
|
# ifndef OPENSSL_NO_SEED
|
||||||
#endif
|
else if (strcmp(*argv, "-seed") == 0)
|
||||||
#ifndef OPENSSL_NO_SEED
|
enc = EVP_seed_cbc();
|
||||||
else if (strcmp(*argv,"-seed") == 0)
|
# endif
|
||||||
enc=EVP_seed_cbc();
|
# ifndef OPENSSL_NO_AES
|
||||||
#endif
|
else if (strcmp(*argv, "-aes128") == 0)
|
||||||
#ifndef OPENSSL_NO_AES
|
enc = EVP_aes_128_cbc();
|
||||||
else if (strcmp(*argv,"-aes128") == 0)
|
else if (strcmp(*argv, "-aes192") == 0)
|
||||||
enc=EVP_aes_128_cbc();
|
enc = EVP_aes_192_cbc();
|
||||||
else if (strcmp(*argv,"-aes192") == 0)
|
else if (strcmp(*argv, "-aes256") == 0)
|
||||||
enc=EVP_aes_192_cbc();
|
enc = EVP_aes_256_cbc();
|
||||||
else if (strcmp(*argv,"-aes256") == 0)
|
# endif
|
||||||
enc=EVP_aes_256_cbc();
|
# ifndef OPENSSL_NO_CAMELLIA
|
||||||
#endif
|
else if (strcmp(*argv, "-camellia128") == 0)
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
enc = EVP_camellia_128_cbc();
|
||||||
else if (strcmp(*argv,"-camellia128") == 0)
|
else if (strcmp(*argv, "-camellia192") == 0)
|
||||||
enc=EVP_camellia_128_cbc();
|
enc = EVP_camellia_192_cbc();
|
||||||
else if (strcmp(*argv,"-camellia192") == 0)
|
else if (strcmp(*argv, "-camellia256") == 0)
|
||||||
enc=EVP_camellia_192_cbc();
|
enc = EVP_camellia_256_cbc();
|
||||||
else if (strcmp(*argv,"-camellia256") == 0)
|
# endif
|
||||||
enc=EVP_camellia_256_cbc();
|
else if (**argv != '-' && dsaparams == NULL) {
|
||||||
#endif
|
dsaparams = *argv;
|
||||||
else if (**argv != '-' && dsaparams == NULL)
|
} else
|
||||||
{
|
goto bad;
|
||||||
dsaparams = *argv;
|
argv++;
|
||||||
}
|
argc--;
|
||||||
else
|
}
|
||||||
goto bad;
|
|
||||||
argv++;
|
|
||||||
argc--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dsaparams == NULL)
|
if (dsaparams == NULL) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "usage: gendsa [args] dsaparam-file\n");
|
||||||
BIO_printf(bio_err,"usage: gendsa [args] dsaparam-file\n");
|
BIO_printf(bio_err, " -out file - output the key to 'file'\n");
|
||||||
BIO_printf(bio_err," -out file - output the key to 'file'\n");
|
# ifndef OPENSSL_NO_DES
|
||||||
#ifndef OPENSSL_NO_DES
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -des - encrypt the generated key with DES in cbc mode\n");
|
" -des - encrypt the generated key with DES in cbc mode\n");
|
||||||
BIO_printf(bio_err," -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" -des3 - encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
|
||||||
#ifndef OPENSSL_NO_IDEA
|
# endif
|
||||||
BIO_printf(bio_err," -idea - encrypt the generated key with IDEA in cbc mode\n");
|
# ifndef OPENSSL_NO_IDEA
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
#ifndef OPENSSL_NO_SEED
|
" -idea - encrypt the generated key with IDEA in cbc mode\n");
|
||||||
BIO_printf(bio_err," -seed\n");
|
# endif
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
|
# ifndef OPENSSL_NO_SEED
|
||||||
#endif
|
BIO_printf(bio_err, " -seed\n");
|
||||||
#ifndef OPENSSL_NO_AES
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
|
" encrypt PEM output with cbc seed\n");
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_AES
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
|
||||||
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
" encrypt PEM output with cbc aes\n");
|
||||||
#endif
|
# endif
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_CAMELLIA
|
||||||
BIO_printf(bio_err," -engine e - use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
" encrypt PEM output with cbc camellia\n");
|
||||||
BIO_printf(bio_err," - load the file (or the files in the directory) into\n");
|
# endif
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err," dsaparam-file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," - a DSA parameter file as generated by the dsaparam command\n");
|
" -engine e - use engine e, possibly a hardware device.\n");
|
||||||
goto end;
|
# endif
|
||||||
}
|
BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
|
||||||
|
LIST_SEPARATOR_CHAR);
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" - load the file (or the files in the directory) into\n");
|
||||||
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
|
BIO_printf(bio_err, " dsaparam-file\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" - a DSA parameter file as generated by the dsaparam command\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
|
setup_engine(bio_err, engine, 0);
|
||||||
|
# endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
||||||
setup_engine(bio_err, engine, 0);
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
#endif
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
in = BIO_new(BIO_s_file());
|
||||||
BIO_printf(bio_err, "Error getting password\n");
|
if (!(BIO_read_filename(in, dsaparams))) {
|
||||||
goto end;
|
perror(dsaparams);
|
||||||
}
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL)) == NULL) {
|
||||||
|
BIO_printf(bio_err, "unable to load DSA parameter file\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
BIO_free(in);
|
||||||
|
in = NULL;
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if (!(BIO_read_filename(in,dsaparams)))
|
if (out == NULL)
|
||||||
{
|
goto end;
|
||||||
perror(dsaparams);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((dsa=PEM_read_bio_DSAparams(in,NULL,NULL,NULL)) == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_printf(bio_err,"unable to load DSA parameter file\n");
|
# ifdef OPENSSL_SYS_VMS
|
||||||
goto end;
|
{
|
||||||
}
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
BIO_free(in);
|
out = BIO_push(tmpbio, out);
|
||||||
in = NULL;
|
}
|
||||||
|
# endif
|
||||||
out=BIO_new(BIO_s_file());
|
} else {
|
||||||
if (out == NULL) goto end;
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
|
perror(outfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL) {
|
||||||
{
|
BIO_printf(bio_err,
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
"warning, not much extra random data, consider using the -rand option\n");
|
||||||
#ifdef OPENSSL_SYS_VMS
|
}
|
||||||
{
|
if (inrand != NULL)
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
|
||||||
out = BIO_push(tmpbio, out);
|
app_RAND_load_files(inrand));
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
|
||||||
{
|
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL)
|
BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(dsa->p));
|
||||||
{
|
if (!DSA_generate_key(dsa))
|
||||||
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
goto end;
|
||||||
}
|
|
||||||
if (inrand != NULL)
|
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
|
||||||
app_RAND_load_files(inrand));
|
|
||||||
|
|
||||||
BIO_printf(bio_err,"Generating DSA key, %d bits\n",
|
app_RAND_write_file(NULL, bio_err);
|
||||||
BN_num_bits(dsa->p));
|
|
||||||
if (!DSA_generate_key(dsa)) goto end;
|
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout))
|
||||||
|
goto end;
|
||||||
if (!PEM_write_bio_DSAPrivateKey(out,dsa,enc,NULL,0,NULL, passout))
|
ret = 0;
|
||||||
goto end;
|
end:
|
||||||
ret=0;
|
if (ret != 0)
|
||||||
end:
|
ERR_print_errors(bio_err);
|
||||||
if (ret != 0)
|
if (in != NULL)
|
||||||
ERR_print_errors(bio_err);
|
BIO_free(in);
|
||||||
if (in != NULL) BIO_free(in);
|
if (out != NULL)
|
||||||
if (out != NULL) BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
if (dsa != NULL) DSA_free(dsa);
|
if (dsa != NULL)
|
||||||
if(passout) OPENSSL_free(passout);
|
DSA_free(dsa);
|
||||||
apps_shutdown();
|
if (passout)
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_free(passout);
|
||||||
}
|
apps_shutdown();
|
||||||
#else /* !OPENSSL_NO_DSA */
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_DSA */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
599
apps/genpkey.c
599
apps/genpkey.c
@@ -1,6 +1,7 @@
|
|||||||
/* apps/genpkey.c */
|
/* apps/genpkey.c */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 2006
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 2006
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -62,11 +63,11 @@
|
|||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
#include <openssl/engine.h>
|
# include <openssl/engine.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
|
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
const char *file, ENGINE *e);
|
const char *file, ENGINE *e);
|
||||||
static int genpkey_cb(EVP_PKEY_CTX *ctx);
|
static int genpkey_cb(EVP_PKEY_CTX *ctx);
|
||||||
|
|
||||||
#define PROG genpkey_main
|
#define PROG genpkey_main
|
||||||
@@ -74,367 +75,331 @@ static int genpkey_cb(EVP_PKEY_CTX *ctx);
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
char **args, *outfile = NULL;
|
char **args, *outfile = NULL;
|
||||||
char *passarg = NULL;
|
char *passarg = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
const EVP_CIPHER *cipher = NULL;
|
const EVP_CIPHER *cipher = NULL;
|
||||||
int outformat;
|
int outformat;
|
||||||
int text = 0;
|
int text = 0;
|
||||||
EVP_PKEY *pkey=NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
EVP_PKEY_CTX *ctx = NULL;
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
char *pass = NULL;
|
char *pass = NULL;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
int ret = 1, rv;
|
int ret = 1, rv;
|
||||||
|
|
||||||
int do_param = 0;
|
int do_param = 0;
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
while (!badarg && *args && *args[0] == '-')
|
while (!badarg && *args && *args[0] == '-') {
|
||||||
{
|
if (!strcmp(*args, "-outform")) {
|
||||||
if (!strcmp(*args,"-outform"))
|
if (args[1]) {
|
||||||
{
|
args++;
|
||||||
if (args[1])
|
outformat = str2fmt(*args);
|
||||||
{
|
} else
|
||||||
args++;
|
badarg = 1;
|
||||||
outformat=str2fmt(*args);
|
} else if (!strcmp(*args, "-pass")) {
|
||||||
}
|
if (!args[1])
|
||||||
else badarg = 1;
|
goto bad;
|
||||||
}
|
passarg = *(++args);
|
||||||
else if (!strcmp(*args,"-pass"))
|
}
|
||||||
{
|
|
||||||
if (!args[1]) goto bad;
|
|
||||||
passarg= *(++args);
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*args,"-engine") == 0)
|
else if (strcmp(*args, "-engine") == 0) {
|
||||||
{
|
if (!args[1])
|
||||||
if (!args[1])
|
goto bad;
|
||||||
goto bad;
|
e = setup_engine(bio_err, *(++args), 0);
|
||||||
e = setup_engine(bio_err, *(++args), 0);
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-paramfile"))
|
else if (!strcmp(*args, "-paramfile")) {
|
||||||
{
|
if (!args[1])
|
||||||
if (!args[1])
|
goto bad;
|
||||||
goto bad;
|
args++;
|
||||||
args++;
|
if (do_param == 1)
|
||||||
if (do_param == 1)
|
goto bad;
|
||||||
goto bad;
|
if (!init_keygen_file(bio_err, &ctx, *args, e))
|
||||||
if (!init_keygen_file(bio_err, &ctx, *args, e))
|
goto end;
|
||||||
goto end;
|
} else if (!strcmp(*args, "-out")) {
|
||||||
}
|
if (args[1]) {
|
||||||
else if (!strcmp (*args, "-out"))
|
args++;
|
||||||
{
|
outfile = *args;
|
||||||
if (args[1])
|
} else
|
||||||
{
|
badarg = 1;
|
||||||
args++;
|
} else if (strcmp(*args, "-algorithm") == 0) {
|
||||||
outfile = *args;
|
if (!args[1])
|
||||||
}
|
goto bad;
|
||||||
else badarg = 1;
|
if (!init_gen_str(bio_err, &ctx, *(++args), e, do_param))
|
||||||
}
|
goto end;
|
||||||
else if (strcmp(*args,"-algorithm") == 0)
|
} else if (strcmp(*args, "-pkeyopt") == 0) {
|
||||||
{
|
if (!args[1])
|
||||||
if (!args[1])
|
goto bad;
|
||||||
goto bad;
|
if (!ctx) {
|
||||||
if (!init_gen_str(bio_err, &ctx, *(++args),e, do_param))
|
BIO_puts(bio_err, "No keytype specified\n");
|
||||||
goto end;
|
goto bad;
|
||||||
}
|
} else if (pkey_ctrl_string(ctx, *(++args)) <= 0) {
|
||||||
else if (strcmp(*args,"-pkeyopt") == 0)
|
BIO_puts(bio_err, "parameter setting error\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
if (!args[1])
|
goto end;
|
||||||
goto bad;
|
}
|
||||||
if (!ctx)
|
} else if (strcmp(*args, "-genparam") == 0) {
|
||||||
{
|
if (ctx)
|
||||||
BIO_puts(bio_err, "No keytype specified\n");
|
goto bad;
|
||||||
goto bad;
|
do_param = 1;
|
||||||
}
|
} else if (strcmp(*args, "-text") == 0)
|
||||||
else if (pkey_ctrl_string(ctx, *(++args)) <= 0)
|
text = 1;
|
||||||
{
|
else {
|
||||||
BIO_puts(bio_err, "parameter setting error\n");
|
cipher = EVP_get_cipherbyname(*args + 1);
|
||||||
ERR_print_errors(bio_err);
|
if (!cipher) {
|
||||||
goto end;
|
BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
|
||||||
}
|
badarg = 1;
|
||||||
}
|
}
|
||||||
else if (strcmp(*args,"-genparam") == 0)
|
if (do_param == 1)
|
||||||
{
|
badarg = 1;
|
||||||
if (ctx)
|
}
|
||||||
goto bad;
|
args++;
|
||||||
do_param = 1;
|
}
|
||||||
}
|
|
||||||
else if (strcmp(*args,"-text") == 0)
|
|
||||||
text=1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cipher = EVP_get_cipherbyname(*args + 1);
|
|
||||||
if (!cipher)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Unknown cipher %s\n",
|
|
||||||
*args + 1);
|
|
||||||
badarg = 1;
|
|
||||||
}
|
|
||||||
if (do_param == 1)
|
|
||||||
badarg = 1;
|
|
||||||
}
|
|
||||||
args++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx)
|
if (!ctx)
|
||||||
badarg = 1;
|
badarg = 1;
|
||||||
|
|
||||||
if (badarg)
|
if (badarg) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "Usage: genpkey [options]\n");
|
||||||
BIO_printf(bio_err, "Usage: genpkey [options]\n");
|
BIO_printf(bio_err, "where options may be\n");
|
||||||
BIO_printf(bio_err, "where options may be\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf(bio_err, "-out file output file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
|
"-outform X output format (DER or PEM)\n");
|
||||||
BIO_printf(bio_err, "-pass arg output file pass phrase source\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-<cipher> use cipher <cipher> to encrypt the key\n");
|
"-pass arg output file pass phrase source\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"-<cipher> use cipher <cipher> to encrypt the key\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
"-engine e use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err, "-paramfile file parameters file\n");
|
BIO_printf(bio_err, "-paramfile file parameters file\n");
|
||||||
BIO_printf(bio_err, "-algorithm alg the public key algorithm\n");
|
BIO_printf(bio_err, "-algorithm alg the public key algorithm\n");
|
||||||
BIO_printf(bio_err, "-pkeyopt opt:value set the public key algorithm option <opt>\n"
|
BIO_printf(bio_err,
|
||||||
" to value <value>\n");
|
"-pkeyopt opt:value set the public key algorithm option <opt>\n"
|
||||||
BIO_printf(bio_err, "-genparam generate parameters, not key\n");
|
" to value <value>\n");
|
||||||
BIO_printf(bio_err, "-text print the in text\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "NB: options order may be important! See the manual page.\n");
|
"-genparam generate parameters, not key\n");
|
||||||
goto end;
|
BIO_printf(bio_err, "-text print the in text\n");
|
||||||
}
|
BIO_printf(bio_err,
|
||||||
|
"NB: options order may be important! See the manual page.\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if (!app_passwd(bio_err, passarg, NULL, &pass, NULL))
|
if (!app_passwd(bio_err, passarg, NULL, &pass, NULL)) {
|
||||||
{
|
BIO_puts(bio_err, "Error getting password\n");
|
||||||
BIO_puts(bio_err, "Error getting password\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile)
|
if (outfile) {
|
||||||
{
|
if (!(out = BIO_new_file(outfile, "wb"))) {
|
||||||
if (!(out = BIO_new_file (outfile, "wb")))
|
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Can't open output file %s\n", outfile);
|
} else {
|
||||||
goto end;
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
|
EVP_PKEY_CTX_set_cb(ctx, genpkey_cb);
|
||||||
EVP_PKEY_CTX_set_app_data(ctx, bio_err);
|
EVP_PKEY_CTX_set_app_data(ctx, bio_err);
|
||||||
|
|
||||||
if (do_param)
|
if (do_param) {
|
||||||
{
|
if (EVP_PKEY_paramgen(ctx, &pkey) <= 0) {
|
||||||
if (EVP_PKEY_paramgen(ctx, &pkey) <= 0)
|
BIO_puts(bio_err, "Error generating parameters\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_puts(bio_err, "Error generating parameters\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
} else {
|
||||||
}
|
if (EVP_PKEY_keygen(ctx, &pkey) <= 0) {
|
||||||
}
|
BIO_puts(bio_err, "Error generating key\n");
|
||||||
else
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
if (EVP_PKEY_keygen(ctx, &pkey) <= 0)
|
}
|
||||||
{
|
}
|
||||||
BIO_puts(bio_err, "Error generating key\n");
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (do_param)
|
if (do_param)
|
||||||
rv = PEM_write_bio_Parameters(out, pkey);
|
rv = PEM_write_bio_Parameters(out, pkey);
|
||||||
else if (outformat == FORMAT_PEM)
|
else if (outformat == FORMAT_PEM)
|
||||||
rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0,
|
rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, pass);
|
||||||
NULL, pass);
|
else if (outformat == FORMAT_ASN1)
|
||||||
else if (outformat == FORMAT_ASN1)
|
rv = i2d_PrivateKey_bio(out, pkey);
|
||||||
rv = i2d_PrivateKey_bio(out, pkey);
|
else {
|
||||||
else
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rv <= 0)
|
if (rv <= 0) {
|
||||||
{
|
BIO_puts(bio_err, "Error writing key\n");
|
||||||
BIO_puts(bio_err, "Error writing key\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (text)
|
if (text) {
|
||||||
{
|
if (do_param)
|
||||||
if (do_param)
|
rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
|
||||||
rv = EVP_PKEY_print_params(out, pkey, 0, NULL);
|
else
|
||||||
else
|
rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
|
||||||
rv = EVP_PKEY_print_private(out, pkey, 0, NULL);
|
|
||||||
|
|
||||||
if (rv <= 0)
|
if (rv <= 0) {
|
||||||
{
|
BIO_puts(bio_err, "Error printing key\n");
|
||||||
BIO_puts(bio_err, "Error printing key\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (pkey)
|
if (pkey)
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
if (ctx)
|
if (ctx)
|
||||||
EVP_PKEY_CTX_free(ctx);
|
EVP_PKEY_CTX_free(ctx);
|
||||||
if (out)
|
if (out)
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
if (pass)
|
if (pass)
|
||||||
OPENSSL_free(pass);
|
OPENSSL_free(pass);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
|
static int init_keygen_file(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
const char *file, ENGINE *e)
|
const char *file, ENGINE *e)
|
||||||
{
|
{
|
||||||
BIO *pbio;
|
BIO *pbio;
|
||||||
EVP_PKEY *pkey = NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
EVP_PKEY_CTX *ctx = NULL;
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
if (*pctx)
|
if (*pctx) {
|
||||||
{
|
BIO_puts(err, "Parameters already set!\n");
|
||||||
BIO_puts(err, "Parameters already set!\n");
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pbio = BIO_new_file(file, "r");
|
pbio = BIO_new_file(file, "r");
|
||||||
if (!pbio)
|
if (!pbio) {
|
||||||
{
|
BIO_printf(err, "Can't open parameter file %s\n", file);
|
||||||
BIO_printf(err, "Can't open parameter file %s\n", file);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
pkey = PEM_read_bio_Parameters(pbio, NULL);
|
pkey = PEM_read_bio_Parameters(pbio, NULL);
|
||||||
BIO_free(pbio);
|
BIO_free(pbio);
|
||||||
|
|
||||||
if (!pkey)
|
if (!pkey) {
|
||||||
{
|
BIO_printf(bio_err, "Error reading parameter file %s\n", file);
|
||||||
BIO_printf(bio_err, "Error reading parameter file %s\n", file);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ctx = EVP_PKEY_CTX_new(pkey, e);
|
ctx = EVP_PKEY_CTX_new(pkey, e);
|
||||||
if (!ctx)
|
if (!ctx)
|
||||||
goto err;
|
goto err;
|
||||||
if (EVP_PKEY_keygen_init(ctx) <= 0)
|
if (EVP_PKEY_keygen_init(ctx) <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
*pctx = ctx;
|
*pctx = ctx;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
BIO_puts(err, "Error initializing context\n");
|
BIO_puts(err, "Error initializing context\n");
|
||||||
ERR_print_errors(err);
|
ERR_print_errors(err);
|
||||||
if (ctx)
|
if (ctx)
|
||||||
EVP_PKEY_CTX_free(ctx);
|
EVP_PKEY_CTX_free(ctx);
|
||||||
if (pkey)
|
if (pkey)
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
int init_gen_str(BIO *err, EVP_PKEY_CTX **pctx,
|
||||||
const char *algname, ENGINE *e, int do_param)
|
const char *algname, ENGINE *e, int do_param)
|
||||||
{
|
{
|
||||||
EVP_PKEY_CTX *ctx = NULL;
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
const EVP_PKEY_ASN1_METHOD *ameth;
|
const EVP_PKEY_ASN1_METHOD *ameth;
|
||||||
ENGINE *tmpeng = NULL;
|
ENGINE *tmpeng = NULL;
|
||||||
int pkey_id;
|
int pkey_id;
|
||||||
|
|
||||||
if (*pctx)
|
if (*pctx) {
|
||||||
{
|
BIO_puts(err, "Algorithm already set!\n");
|
||||||
BIO_puts(err, "Algorithm already set!\n");
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
|
ameth = EVP_PKEY_asn1_find_str(&tmpeng, algname, -1);
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
if (!ameth && e)
|
if (!ameth && e)
|
||||||
ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
|
ameth = ENGINE_get_pkey_asn1_meth_str(e, algname, -1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!ameth)
|
if (!ameth) {
|
||||||
{
|
BIO_printf(bio_err, "Algorithm %s not found\n", algname);
|
||||||
BIO_printf(bio_err, "Algorithm %s not found\n", algname);
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ERR_clear_error();
|
ERR_clear_error();
|
||||||
|
|
||||||
EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
|
EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth);
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
if (tmpeng)
|
if (tmpeng)
|
||||||
ENGINE_finish(tmpeng);
|
ENGINE_finish(tmpeng);
|
||||||
#endif
|
#endif
|
||||||
ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
|
ctx = EVP_PKEY_CTX_new_id(pkey_id, e);
|
||||||
|
|
||||||
if (!ctx)
|
if (!ctx)
|
||||||
goto err;
|
goto err;
|
||||||
if (do_param)
|
if (do_param) {
|
||||||
{
|
if (EVP_PKEY_paramgen_init(ctx) <= 0)
|
||||||
if (EVP_PKEY_paramgen_init(ctx) <= 0)
|
goto err;
|
||||||
goto err;
|
} else {
|
||||||
}
|
if (EVP_PKEY_keygen_init(ctx) <= 0)
|
||||||
else
|
goto err;
|
||||||
{
|
}
|
||||||
if (EVP_PKEY_keygen_init(ctx) <= 0)
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
*pctx = ctx;
|
*pctx = ctx;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
BIO_printf(err, "Error initializing %s context\n", algname);
|
BIO_printf(err, "Error initializing %s context\n", algname);
|
||||||
ERR_print_errors(err);
|
ERR_print_errors(err);
|
||||||
if (ctx)
|
if (ctx)
|
||||||
EVP_PKEY_CTX_free(ctx);
|
EVP_PKEY_CTX_free(ctx);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int genpkey_cb(EVP_PKEY_CTX *ctx)
|
static int genpkey_cb(EVP_PKEY_CTX *ctx)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c = '*';
|
||||||
BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
|
BIO *b = EVP_PKEY_CTX_get_app_data(ctx);
|
||||||
int p;
|
int p;
|
||||||
p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
|
p = EVP_PKEY_CTX_get_keygen_info(ctx, 0);
|
||||||
if (p == 0) c='.';
|
if (p == 0)
|
||||||
if (p == 1) c='+';
|
c = '.';
|
||||||
if (p == 2) c='*';
|
if (p == 1)
|
||||||
if (p == 3) c='\n';
|
c = '+';
|
||||||
BIO_write(b,&c,1);
|
if (p == 2)
|
||||||
(void)BIO_flush(b);
|
c = '*';
|
||||||
|
if (p == 3)
|
||||||
|
c = '\n';
|
||||||
|
BIO_write(b, &c, 1);
|
||||||
|
(void)BIO_flush(b);
|
||||||
#ifdef LINT
|
#ifdef LINT
|
||||||
p=n;
|
p = n;
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
519
apps/genrsa.c
519
apps/genrsa.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -57,285 +57,294 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
/* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
/*
|
||||||
* deprecated functions for openssl-internal code */
|
* Until the key-gen callbacks are modified to use newer prototypes, we allow
|
||||||
|
* deprecated functions for openssl-internal code
|
||||||
|
*/
|
||||||
#ifdef OPENSSL_NO_DEPRECATED
|
#ifdef OPENSSL_NO_DEPRECATED
|
||||||
#undef OPENSSL_NO_DEPRECATED
|
# undef OPENSSL_NO_DEPRECATED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include <sys/types.h>
|
# include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
#include <openssl/rsa.h>
|
# include <openssl/rsa.h>
|
||||||
#include <openssl/evp.h>
|
# include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
#include <openssl/rand.h>
|
# include <openssl/rand.h>
|
||||||
|
|
||||||
#define DEFBITS 512
|
# define DEFBITS 2048
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG genrsa_main
|
# define PROG genrsa_main
|
||||||
|
|
||||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb);
|
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb);
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
BN_GENCB cb;
|
BN_GENCB cb;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
#endif
|
# endif
|
||||||
int ret=1;
|
int ret = 1;
|
||||||
int non_fips_allow = 0;
|
int i, num = DEFBITS;
|
||||||
int i,num=DEFBITS;
|
long l;
|
||||||
long l;
|
const EVP_CIPHER *enc = NULL;
|
||||||
const EVP_CIPHER *enc=NULL;
|
unsigned long f4 = RSA_F4;
|
||||||
unsigned long f4=RSA_F4;
|
char *outfile = NULL;
|
||||||
char *outfile=NULL;
|
char *passargout = NULL, *passout = NULL;
|
||||||
char *passargout = NULL, *passout = NULL;
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
char *engine = NULL;
|
||||||
char *engine=NULL;
|
# endif
|
||||||
#endif
|
char *inrand = NULL;
|
||||||
char *inrand=NULL;
|
BIO *out = NULL;
|
||||||
BIO *out=NULL;
|
BIGNUM *bn = BN_new();
|
||||||
BIGNUM *bn = BN_new();
|
RSA *rsa = NULL;
|
||||||
RSA *rsa = NULL;
|
|
||||||
|
|
||||||
if(!bn) goto err;
|
if (!bn)
|
||||||
|
goto err;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
BN_GENCB_set(&cb, genrsa_cb, bio_err);
|
BN_GENCB_set(&cb, genrsa_cb, bio_err);
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto err;
|
goto err;
|
||||||
if ((out=BIO_new(BIO_s_file())) == NULL)
|
if ((out = BIO_new(BIO_s_file())) == NULL) {
|
||||||
{
|
BIO_printf(bio_err, "unable to create BIO for output\n");
|
||||||
BIO_printf(bio_err,"unable to create BIO for output\n");
|
goto err;
|
||||||
goto err;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
argv++;
|
argv++;
|
||||||
argc--;
|
argc--;
|
||||||
for (;;)
|
for (;;) {
|
||||||
{
|
if (argc <= 0)
|
||||||
if (argc <= 0) break;
|
break;
|
||||||
if (strcmp(*argv,"-out") == 0)
|
if (strcmp(*argv, "-out") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
outfile= *(++argv);
|
outfile = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-3") == 0)
|
||||||
else if (strcmp(*argv,"-3") == 0)
|
f4 = 3;
|
||||||
f4=3;
|
else if (strcmp(*argv, "-F4") == 0 || strcmp(*argv, "-f4") == 0)
|
||||||
else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
|
f4 = RSA_F4;
|
||||||
f4=RSA_F4;
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
engine = *(++argv);
|
||||||
engine= *(++argv);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
else if (strcmp(*argv, "-rand") == 0) {
|
||||||
else if (strcmp(*argv,"-rand") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
inrand = *(++argv);
|
||||||
inrand= *(++argv);
|
}
|
||||||
}
|
# ifndef OPENSSL_NO_DES
|
||||||
#ifndef OPENSSL_NO_DES
|
else if (strcmp(*argv, "-des") == 0)
|
||||||
else if (strcmp(*argv,"-des") == 0)
|
enc = EVP_des_cbc();
|
||||||
enc=EVP_des_cbc();
|
else if (strcmp(*argv, "-des3") == 0)
|
||||||
else if (strcmp(*argv,"-des3") == 0)
|
enc = EVP_des_ede3_cbc();
|
||||||
enc=EVP_des_ede3_cbc();
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_IDEA
|
||||||
#ifndef OPENSSL_NO_IDEA
|
else if (strcmp(*argv, "-idea") == 0)
|
||||||
else if (strcmp(*argv,"-idea") == 0)
|
enc = EVP_idea_cbc();
|
||||||
enc=EVP_idea_cbc();
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_SEED
|
||||||
#ifndef OPENSSL_NO_SEED
|
else if (strcmp(*argv, "-seed") == 0)
|
||||||
else if (strcmp(*argv,"-seed") == 0)
|
enc = EVP_seed_cbc();
|
||||||
enc=EVP_seed_cbc();
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_AES
|
||||||
#ifndef OPENSSL_NO_AES
|
else if (strcmp(*argv, "-aes128") == 0)
|
||||||
else if (strcmp(*argv,"-aes128") == 0)
|
enc = EVP_aes_128_cbc();
|
||||||
enc=EVP_aes_128_cbc();
|
else if (strcmp(*argv, "-aes192") == 0)
|
||||||
else if (strcmp(*argv,"-aes192") == 0)
|
enc = EVP_aes_192_cbc();
|
||||||
enc=EVP_aes_192_cbc();
|
else if (strcmp(*argv, "-aes256") == 0)
|
||||||
else if (strcmp(*argv,"-aes256") == 0)
|
enc = EVP_aes_256_cbc();
|
||||||
enc=EVP_aes_256_cbc();
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_CAMELLIA
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
else if (strcmp(*argv, "-camellia128") == 0)
|
||||||
else if (strcmp(*argv,"-camellia128") == 0)
|
enc = EVP_camellia_128_cbc();
|
||||||
enc=EVP_camellia_128_cbc();
|
else if (strcmp(*argv, "-camellia192") == 0)
|
||||||
else if (strcmp(*argv,"-camellia192") == 0)
|
enc = EVP_camellia_192_cbc();
|
||||||
enc=EVP_camellia_192_cbc();
|
else if (strcmp(*argv, "-camellia256") == 0)
|
||||||
else if (strcmp(*argv,"-camellia256") == 0)
|
enc = EVP_camellia_256_cbc();
|
||||||
enc=EVP_camellia_256_cbc();
|
# endif
|
||||||
#endif
|
else if (strcmp(*argv, "-passout") == 0) {
|
||||||
else if (strcmp(*argv,"-passout") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
passargout = *(++argv);
|
||||||
passargout= *(++argv);
|
} else
|
||||||
}
|
break;
|
||||||
else if (strcmp(*argv,"-non-fips-allow") == 0)
|
argv++;
|
||||||
non_fips_allow = 1;
|
argc--;
|
||||||
else
|
}
|
||||||
break;
|
if ((argc >= 1) && ((sscanf(*argv, "%d", &num) == 0) || (num < 0))) {
|
||||||
argv++;
|
bad:
|
||||||
argc--;
|
BIO_printf(bio_err, "usage: genrsa [args] [numbits]\n");
|
||||||
}
|
BIO_printf(bio_err,
|
||||||
if ((argc >= 1) && ((sscanf(*argv,"%d",&num) == 0) || (num < 0)))
|
" -des encrypt the generated key with DES in cbc mode\n");
|
||||||
{
|
BIO_printf(bio_err,
|
||||||
bad:
|
" -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
|
||||||
BIO_printf(bio_err,"usage: genrsa [args] [numbits]\n");
|
# ifndef OPENSSL_NO_IDEA
|
||||||
BIO_printf(bio_err," -des encrypt the generated key with DES in cbc mode\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)\n");
|
" -idea encrypt the generated key with IDEA in cbc mode\n");
|
||||||
#ifndef OPENSSL_NO_IDEA
|
# endif
|
||||||
BIO_printf(bio_err," -idea encrypt the generated key with IDEA in cbc mode\n");
|
# ifndef OPENSSL_NO_SEED
|
||||||
#endif
|
BIO_printf(bio_err, " -seed\n");
|
||||||
#ifndef OPENSSL_NO_SEED
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -seed\n");
|
" encrypt PEM output with cbc seed\n");
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc seed\n");
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_AES
|
||||||
#ifndef OPENSSL_NO_AES
|
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
|
||||||
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
" encrypt PEM output with cbc aes\n");
|
||||||
#endif
|
# endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
# ifndef OPENSSL_NO_CAMELLIA
|
||||||
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" encrypt PEM output with cbc camellia\n");
|
||||||
BIO_printf(bio_err," -out file output the key to 'file\n");
|
# endif
|
||||||
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
BIO_printf(bio_err, " -out file output the key to 'file\n");
|
||||||
BIO_printf(bio_err," -f4 use F4 (0x10001) for the E value\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -3 use 3 for the E value\n");
|
" -passout arg output file pass phrase source\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
" -f4 use F4 (0x10001) for the E value\n");
|
||||||
#endif
|
BIO_printf(bio_err, " -3 use 3 for the E value\n");
|
||||||
BIO_printf(bio_err," -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err," load the file (or the files in the directory) into\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," the random number generator\n");
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
goto err;
|
# endif
|
||||||
}
|
BIO_printf(bio_err, " -rand file%cfile%c...\n", LIST_SEPARATOR_CHAR,
|
||||||
|
LIST_SEPARATOR_CHAR);
|
||||||
ERR_load_crypto_strings();
|
BIO_printf(bio_err,
|
||||||
|
" load the file (or the files in the directory) into\n");
|
||||||
|
BIO_printf(bio_err, " the random number generator\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
if(!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
ERR_load_crypto_strings();
|
||||||
BIO_printf(bio_err, "Error getting password\n");
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
if (!app_passwd(bio_err, NULL, passargout, NULL, &passout)) {
|
||||||
e = setup_engine(bio_err, engine, 0);
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
#endif
|
goto err;
|
||||||
|
}
|
||||||
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
|
e = setup_engine(bio_err, engine, 0);
|
||||||
|
# endif
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
# ifdef OPENSSL_SYS_VMS
|
||||||
#ifdef OPENSSL_SYS_VMS
|
{
|
||||||
{
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
out = BIO_push(tmpbio, out);
|
||||||
out = BIO_push(tmpbio, out);
|
}
|
||||||
}
|
# endif
|
||||||
#endif
|
} else {
|
||||||
}
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
else
|
perror(outfile);
|
||||||
{
|
goto err;
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
}
|
||||||
{
|
}
|
||||||
perror(outfile);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
|
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
|
||||||
&& !RAND_status())
|
&& !RAND_status()) {
|
||||||
{
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err,"warning, not much extra random data, consider using the -rand option\n");
|
"warning, not much extra random data, consider using the -rand option\n");
|
||||||
}
|
}
|
||||||
if (inrand != NULL)
|
if (inrand != NULL)
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
|
||||||
app_RAND_load_files(inrand));
|
app_RAND_load_files(inrand));
|
||||||
|
|
||||||
BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
|
BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus\n",
|
||||||
num);
|
num);
|
||||||
#ifdef OPENSSL_NO_ENGINE
|
# ifdef OPENSSL_NO_ENGINE
|
||||||
rsa = RSA_new();
|
rsa = RSA_new();
|
||||||
#else
|
# else
|
||||||
rsa = RSA_new_method(e);
|
rsa = RSA_new_method(e);
|
||||||
#endif
|
# endif
|
||||||
if (!rsa)
|
if (!rsa)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (non_fips_allow)
|
if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
|
||||||
rsa->flags |= RSA_FLAG_NON_FIPS_ALLOW;
|
goto err;
|
||||||
|
|
||||||
if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
|
app_RAND_write_file(NULL, bio_err);
|
||||||
goto err;
|
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
|
||||||
|
|
||||||
/* We need to do the following for when the base number size is <
|
/*
|
||||||
* long, esp windows 3.1 :-(. */
|
* We need to do the following for when the base number size is < long,
|
||||||
l=0L;
|
* esp windows 3.1 :-(.
|
||||||
for (i=0; i<rsa->e->top; i++)
|
*/
|
||||||
{
|
l = 0L;
|
||||||
#ifndef SIXTY_FOUR_BIT
|
for (i = 0; i < rsa->e->top; i++) {
|
||||||
l<<=BN_BITS4;
|
# ifndef SIXTY_FOUR_BIT
|
||||||
l<<=BN_BITS4;
|
l <<= BN_BITS4;
|
||||||
#endif
|
l <<= BN_BITS4;
|
||||||
l+=rsa->e->d[i];
|
# endif
|
||||||
}
|
l += rsa->e->d[i];
|
||||||
BIO_printf(bio_err,"e is %ld (0x%lX)\n",l,l);
|
}
|
||||||
{
|
BIO_printf(bio_err, "e is %ld (0x%lX)\n", l, l);
|
||||||
PW_CB_DATA cb_data;
|
{
|
||||||
cb_data.password = passout;
|
PW_CB_DATA cb_data;
|
||||||
cb_data.prompt_info = outfile;
|
cb_data.password = passout;
|
||||||
if (!PEM_write_bio_RSAPrivateKey(out,rsa,enc,NULL,0,
|
cb_data.prompt_info = outfile;
|
||||||
(pem_password_cb *)password_callback,&cb_data))
|
if (!PEM_write_bio_RSAPrivateKey(out, rsa, enc, NULL, 0,
|
||||||
goto err;
|
(pem_password_cb *)password_callback,
|
||||||
}
|
&cb_data))
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
ret=0;
|
ret = 0;
|
||||||
err:
|
err:
|
||||||
if (bn) BN_free(bn);
|
if (bn)
|
||||||
if (rsa) RSA_free(rsa);
|
BN_free(bn);
|
||||||
if (out) BIO_free_all(out);
|
if (rsa)
|
||||||
if(passout) OPENSSL_free(passout);
|
RSA_free(rsa);
|
||||||
if (ret != 0)
|
if (out)
|
||||||
ERR_print_errors(bio_err);
|
BIO_free_all(out);
|
||||||
apps_shutdown();
|
if (passout)
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_free(passout);
|
||||||
}
|
if (ret != 0)
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
|
static int MS_CALLBACK genrsa_cb(int p, int n, BN_GENCB *cb)
|
||||||
{
|
{
|
||||||
char c='*';
|
char c = '*';
|
||||||
|
|
||||||
if (p == 0) c='.';
|
if (p == 0)
|
||||||
if (p == 1) c='+';
|
c = '.';
|
||||||
if (p == 2) c='*';
|
if (p == 1)
|
||||||
if (p == 3) c='\n';
|
c = '+';
|
||||||
BIO_write(cb->arg,&c,1);
|
if (p == 2)
|
||||||
(void)BIO_flush(cb->arg);
|
c = '*';
|
||||||
#ifdef LINT
|
if (p == 3)
|
||||||
p=n;
|
c = '\n';
|
||||||
#endif
|
BIO_write(cb->arg, &c, 1);
|
||||||
return 1;
|
(void)BIO_flush(cb->arg);
|
||||||
}
|
# ifdef LINT
|
||||||
#else /* !OPENSSL_NO_RSA */
|
p = n;
|
||||||
|
# endif
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_RSA */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -773,9 +773,12 @@ $ CCDEFS = "MONOLITH"
|
|||||||
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
|
$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
|
||||||
$ CCEXTRAFLAGS = ""
|
$ CCEXTRAFLAGS = ""
|
||||||
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
|
$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
|
||||||
$ CCDISABLEWARNINGS = "" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
$ CCDISABLEWARNINGS = "" !!! "MAYLOSEDATA3" !!! "LONGLONGTYPE,LONGLONGSUFX,FOUNDCR"
|
||||||
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
|
$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. ""
|
||||||
CCDISABLEWARNINGS = CCDISABLEWARNINGS + "," + USER_CCDISABLEWARNINGS
|
$ THEN
|
||||||
|
$ IF CCDISABLEWARNINGS .NES. THEN CCDISABLEWARNINGS = CCDISABLEWARNINGS + ","
|
||||||
|
$ CCDISABLEWARNINGS = CCDISABLEWARNINGS + USER_CCDISABLEWARNINGS
|
||||||
|
$ ENDIF
|
||||||
$!
|
$!
|
||||||
$! Check To See If We Have A ZLIB Option.
|
$! Check To See If We Have A ZLIB Option.
|
||||||
$!
|
$!
|
||||||
@@ -1064,6 +1067,18 @@ $! Finish up the definition of CC.
|
|||||||
$!
|
$!
|
||||||
$ IF COMPILER .EQS. "DECC"
|
$ IF COMPILER .EQS. "DECC"
|
||||||
$ THEN
|
$ THEN
|
||||||
|
$! Not all compiler versions support MAYLOSEDATA3.
|
||||||
|
$ OPT_TEST = "MAYLOSEDATA3"
|
||||||
|
$ DEFINE /USER_MODE SYS$ERROR NL:
|
||||||
|
$ DEFINE /USER_MODE SYS$OUTPUT NL:
|
||||||
|
$ 'CC' /NOCROSS_REFERENCE /NOLIST /NOOBJECT -
|
||||||
|
/WARNINGS = DISABLE = ('OPT_TEST', EMPTYFILE) NL:
|
||||||
|
$ IF ($SEVERITY)
|
||||||
|
$ THEN
|
||||||
|
$ IF CCDISABLEWARNINGS .NES. "" THEN -
|
||||||
|
CCDISABLEWARNINGS = CCDISABLEWARNINGS+ ","
|
||||||
|
$ CCDISABLEWARNINGS = CCDISABLEWARNINGS+ OPT_TEST
|
||||||
|
$ ENDIF
|
||||||
$ IF CCDISABLEWARNINGS .NES. ""
|
$ IF CCDISABLEWARNINGS .NES. ""
|
||||||
$ THEN
|
$ THEN
|
||||||
$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
$ CCDISABLEWARNINGS = " /WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
|
||||||
|
|||||||
181
apps/nseq.c
181
apps/nseq.c
@@ -1,6 +1,7 @@
|
|||||||
/* nseq.c */
|
/* nseq.c */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 1999.
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 1999.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -69,99 +70,101 @@ int MAIN(int, char **);
|
|||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char **args, *infile = NULL, *outfile = NULL;
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int toseq = 0;
|
int toseq = 0;
|
||||||
X509 *x509 = NULL;
|
X509 *x509 = NULL;
|
||||||
NETSCAPE_CERT_SEQUENCE *seq = NULL;
|
NETSCAPE_CERT_SEQUENCE *seq = NULL;
|
||||||
int i, ret = 1;
|
int i, ret = 1;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
if (bio_err == NULL)
|
||||||
ERR_load_crypto_strings();
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
args = argv + 1;
|
ERR_load_crypto_strings();
|
||||||
while (!badarg && *args && *args[0] == '-') {
|
args = argv + 1;
|
||||||
if (!strcmp (*args, "-toseq")) toseq = 1;
|
while (!badarg && *args && *args[0] == '-') {
|
||||||
else if (!strcmp (*args, "-in")) {
|
if (!strcmp(*args, "-toseq"))
|
||||||
if (args[1]) {
|
toseq = 1;
|
||||||
args++;
|
else if (!strcmp(*args, "-in")) {
|
||||||
infile = *args;
|
if (args[1]) {
|
||||||
} else badarg = 1;
|
args++;
|
||||||
} else if (!strcmp (*args, "-out")) {
|
infile = *args;
|
||||||
if (args[1]) {
|
} else
|
||||||
args++;
|
badarg = 1;
|
||||||
outfile = *args;
|
} else if (!strcmp(*args, "-out")) {
|
||||||
} else badarg = 1;
|
if (args[1]) {
|
||||||
} else badarg = 1;
|
args++;
|
||||||
args++;
|
outfile = *args;
|
||||||
}
|
} else
|
||||||
|
badarg = 1;
|
||||||
|
} else
|
||||||
|
badarg = 1;
|
||||||
|
args++;
|
||||||
|
}
|
||||||
|
|
||||||
if (badarg) {
|
if (badarg) {
|
||||||
BIO_printf (bio_err, "Netscape certificate sequence utility\n");
|
BIO_printf(bio_err, "Netscape certificate sequence utility\n");
|
||||||
BIO_printf (bio_err, "Usage nseq [options]\n");
|
BIO_printf(bio_err, "Usage nseq [options]\n");
|
||||||
BIO_printf (bio_err, "where options are\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf (bio_err, "-in file input file\n");
|
BIO_printf(bio_err, "-in file input file\n");
|
||||||
BIO_printf (bio_err, "-out file output file\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf (bio_err, "-toseq output NS Sequence file\n");
|
BIO_printf(bio_err, "-toseq output NS Sequence file\n");
|
||||||
OPENSSL_EXIT(1);
|
OPENSSL_EXIT(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (infile) {
|
if (infile) {
|
||||||
if (!(in = BIO_new_file (infile, "r"))) {
|
if (!(in = BIO_new_file(infile, "r"))) {
|
||||||
BIO_printf (bio_err,
|
BIO_printf(bio_err, "Can't open input file %s\n", infile);
|
||||||
"Can't open input file %s\n", infile);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
} else
|
||||||
} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (outfile) {
|
if (outfile) {
|
||||||
if (!(out = BIO_new_file (outfile, "w"))) {
|
if (!(out = BIO_new_file(outfile, "w"))) {
|
||||||
BIO_printf (bio_err,
|
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
|
||||||
"Can't open output file %s\n", outfile);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
} else {
|
||||||
} else {
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (toseq) {
|
if (toseq) {
|
||||||
seq = NETSCAPE_CERT_SEQUENCE_new();
|
seq = NETSCAPE_CERT_SEQUENCE_new();
|
||||||
seq->certs = sk_X509_new_null();
|
seq->certs = sk_X509_new_null();
|
||||||
while((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
|
while ((x509 = PEM_read_bio_X509(in, NULL, NULL, NULL)))
|
||||||
sk_X509_push(seq->certs,x509);
|
sk_X509_push(seq->certs, x509);
|
||||||
|
|
||||||
if(!sk_X509_num(seq->certs))
|
if (!sk_X509_num(seq->certs)) {
|
||||||
{
|
BIO_printf(bio_err, "Error reading certs file %s\n", infile);
|
||||||
BIO_printf (bio_err, "Error reading certs file %s\n", infile);
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
|
||||||
PEM_write_bio_NETSCAPE_CERT_SEQUENCE(out, seq);
|
ret = 0;
|
||||||
ret = 0;
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
|
if (!(seq = PEM_read_bio_NETSCAPE_CERT_SEQUENCE(in, NULL, NULL, NULL))) {
|
||||||
BIO_printf (bio_err, "Error reading sequence file %s\n", infile);
|
BIO_printf(bio_err, "Error reading sequence file %s\n", infile);
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < sk_X509_num(seq->certs); i++) {
|
for (i = 0; i < sk_X509_num(seq->certs); i++) {
|
||||||
x509 = sk_X509_value(seq->certs, i);
|
x509 = sk_X509_value(seq->certs, i);
|
||||||
dump_cert_text(out, x509);
|
dump_cert_text(out, x509);
|
||||||
PEM_write_bio_X509(out, x509);
|
PEM_write_bio_X509(out, x509);
|
||||||
}
|
}
|
||||||
ret = 0;
|
ret = 0;
|
||||||
end:
|
end:
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
NETSCAPE_CERT_SEQUENCE_free(seq);
|
NETSCAPE_CERT_SEQUENCE_free(seq);
|
||||||
|
|
||||||
OPENSSL_EXIT(ret);
|
OPENSSL_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2416
apps/ocsp.c
2416
apps/ocsp.c
File diff suppressed because it is too large
Load Diff
@@ -103,7 +103,7 @@ emailAddress = optional
|
|||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
[ req ]
|
[ req ]
|
||||||
default_bits = 1024
|
default_bits = 2048
|
||||||
default_keyfile = privkey.pem
|
default_keyfile = privkey.pem
|
||||||
distinguished_name = req_distinguished_name
|
distinguished_name = req_distinguished_name
|
||||||
attributes = req_attributes
|
attributes = req_attributes
|
||||||
@@ -145,7 +145,7 @@ localityName = Locality Name (eg, city)
|
|||||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
organizationalUnitName = Organizational Unit Name (eg, section)
|
||||||
#organizationalUnitName_default =
|
#organizationalUnitName_default =
|
||||||
|
|
||||||
commonName = Common Name (eg, YOUR name)
|
commonName = Common Name (e.g. server FQDN or YOUR name)
|
||||||
commonName_max = 64
|
commonName_max = 64
|
||||||
|
|
||||||
emailAddress = Email Address
|
emailAddress = Email Address
|
||||||
|
|||||||
1012
apps/openssl.c
1012
apps/openssl.c
File diff suppressed because it is too large
Load Diff
@@ -103,7 +103,7 @@ emailAddress = optional
|
|||||||
|
|
||||||
####################################################################
|
####################################################################
|
||||||
[ req ]
|
[ req ]
|
||||||
default_bits = 1024
|
default_bits = 2048
|
||||||
default_keyfile = privkey.pem
|
default_keyfile = privkey.pem
|
||||||
distinguished_name = req_distinguished_name
|
distinguished_name = req_distinguished_name
|
||||||
attributes = req_attributes
|
attributes = req_attributes
|
||||||
@@ -145,7 +145,7 @@ localityName = Locality Name (eg, city)
|
|||||||
organizationalUnitName = Organizational Unit Name (eg, section)
|
organizationalUnitName = Organizational Unit Name (eg, section)
|
||||||
#organizationalUnitName_default =
|
#organizationalUnitName_default =
|
||||||
|
|
||||||
commonName = Common Name (eg, YOUR name)
|
commonName = Common Name (e.g. server FQDN or YOUR name)
|
||||||
commonName_max = 64
|
commonName_max = 64
|
||||||
|
|
||||||
emailAddress = Email Address
|
emailAddress = Email Address
|
||||||
|
|||||||
876
apps/passwd.c
876
apps/passwd.c
@@ -6,44 +6,44 @@
|
|||||||
|
|
||||||
#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1)
|
#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1)
|
||||||
|
|
||||||
#include <assert.h>
|
# include <assert.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
|
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
|
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/evp.h>
|
# include <openssl/evp.h>
|
||||||
#include <openssl/rand.h>
|
# include <openssl/rand.h>
|
||||||
#ifndef OPENSSL_NO_DES
|
# ifndef OPENSSL_NO_DES
|
||||||
# include <openssl/des.h>
|
# include <openssl/des.h>
|
||||||
#endif
|
# endif
|
||||||
#ifndef NO_MD5CRYPT_1
|
# ifndef NO_MD5CRYPT_1
|
||||||
# include <openssl/md5.h>
|
# include <openssl/md5.h>
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
|
# undef PROG
|
||||||
|
# define PROG passwd_main
|
||||||
|
|
||||||
#undef PROG
|
static unsigned const char cov_2char[64] = {
|
||||||
#define PROG passwd_main
|
/* from crypto/des/fcrypt.c */
|
||||||
|
0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
|
||||||
|
0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44,
|
||||||
static unsigned const char cov_2char[64]={
|
0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
|
||||||
/* from crypto/des/fcrypt.c */
|
0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
|
||||||
0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,
|
0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62,
|
||||||
0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,
|
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A,
|
||||||
0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,
|
0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72,
|
||||||
0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
|
0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A
|
||||||
0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62,
|
|
||||||
0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,
|
|
||||||
0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,
|
|
||||||
0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
||||||
char *passwd, BIO *out, int quiet, int table, int reverse,
|
char *passwd, BIO *out, int quiet, int table,
|
||||||
size_t pw_maxlen, int usecrypt, int use1, int useapr1);
|
int reverse, size_t pw_maxlen, int usecrypt, int use1,
|
||||||
|
int useapr1);
|
||||||
|
|
||||||
/* -crypt - standard Unix password algorithm (default)
|
/*-
|
||||||
|
* -crypt - standard Unix password algorithm (default)
|
||||||
* -1 - MD5-based password algorithm
|
* -1 - MD5-based password algorithm
|
||||||
* -apr1 - MD5-based password algorithm, Apache variant
|
* -apr1 - MD5-based password algorithm, Apache variant
|
||||||
* -salt string - salt
|
* -salt string - salt
|
||||||
@@ -58,455 +58,437 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
char *infile = NULL;
|
char *infile = NULL;
|
||||||
int in_stdin = 0;
|
int in_stdin = 0;
|
||||||
int in_noverify = 0;
|
int in_noverify = 0;
|
||||||
char *salt = NULL, *passwd = NULL, **passwds = NULL;
|
char *salt = NULL, *passwd = NULL, **passwds = NULL;
|
||||||
char *salt_malloc = NULL, *passwd_malloc = NULL;
|
char *salt_malloc = NULL, *passwd_malloc = NULL;
|
||||||
size_t passwd_malloc_size = 0;
|
size_t passwd_malloc_size = 0;
|
||||||
int pw_source_defined = 0;
|
int pw_source_defined = 0;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int i, badopt, opt_done;
|
int i, badopt, opt_done;
|
||||||
int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
|
int passed_salt = 0, quiet = 0, table = 0, reverse = 0;
|
||||||
int usecrypt = 0, use1 = 0, useapr1 = 0;
|
int usecrypt = 0, use1 = 0, useapr1 = 0;
|
||||||
size_t pw_maxlen = 0;
|
size_t pw_maxlen = 0;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto err;
|
goto err;
|
||||||
out = BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if (out == NULL)
|
if (out == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
#ifdef OPENSSL_SYS_VMS
|
# ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
badopt = 0, opt_done = 0;
|
badopt = 0, opt_done = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
while (!badopt && !opt_done && argv[++i] != NULL)
|
while (!badopt && !opt_done && argv[++i] != NULL) {
|
||||||
{
|
if (strcmp(argv[i], "-crypt") == 0)
|
||||||
if (strcmp(argv[i], "-crypt") == 0)
|
usecrypt = 1;
|
||||||
usecrypt = 1;
|
else if (strcmp(argv[i], "-1") == 0)
|
||||||
else if (strcmp(argv[i], "-1") == 0)
|
use1 = 1;
|
||||||
use1 = 1;
|
else if (strcmp(argv[i], "-apr1") == 0)
|
||||||
else if (strcmp(argv[i], "-apr1") == 0)
|
useapr1 = 1;
|
||||||
useapr1 = 1;
|
else if (strcmp(argv[i], "-salt") == 0) {
|
||||||
else if (strcmp(argv[i], "-salt") == 0)
|
if ((argv[i + 1] != NULL) && (salt == NULL)) {
|
||||||
{
|
passed_salt = 1;
|
||||||
if ((argv[i+1] != NULL) && (salt == NULL))
|
salt = argv[++i];
|
||||||
{
|
} else
|
||||||
passed_salt = 1;
|
badopt = 1;
|
||||||
salt = argv[++i];
|
} else if (strcmp(argv[i], "-in") == 0) {
|
||||||
}
|
if ((argv[i + 1] != NULL) && !pw_source_defined) {
|
||||||
else
|
pw_source_defined = 1;
|
||||||
badopt = 1;
|
infile = argv[++i];
|
||||||
}
|
} else
|
||||||
else if (strcmp(argv[i], "-in") == 0)
|
badopt = 1;
|
||||||
{
|
} else if (strcmp(argv[i], "-stdin") == 0) {
|
||||||
if ((argv[i+1] != NULL) && !pw_source_defined)
|
if (!pw_source_defined) {
|
||||||
{
|
pw_source_defined = 1;
|
||||||
pw_source_defined = 1;
|
in_stdin = 1;
|
||||||
infile = argv[++i];
|
} else
|
||||||
}
|
badopt = 1;
|
||||||
else
|
} else if (strcmp(argv[i], "-noverify") == 0)
|
||||||
badopt = 1;
|
in_noverify = 1;
|
||||||
}
|
else if (strcmp(argv[i], "-quiet") == 0)
|
||||||
else if (strcmp(argv[i], "-stdin") == 0)
|
quiet = 1;
|
||||||
{
|
else if (strcmp(argv[i], "-table") == 0)
|
||||||
if (!pw_source_defined)
|
table = 1;
|
||||||
{
|
else if (strcmp(argv[i], "-reverse") == 0)
|
||||||
pw_source_defined = 1;
|
reverse = 1;
|
||||||
in_stdin = 1;
|
else if (argv[i][0] == '-')
|
||||||
}
|
badopt = 1;
|
||||||
else
|
else if (!pw_source_defined)
|
||||||
badopt = 1;
|
/* non-option arguments, use as passwords */
|
||||||
}
|
{
|
||||||
else if (strcmp(argv[i], "-noverify") == 0)
|
pw_source_defined = 1;
|
||||||
in_noverify = 1;
|
passwds = &argv[i];
|
||||||
else if (strcmp(argv[i], "-quiet") == 0)
|
opt_done = 1;
|
||||||
quiet = 1;
|
} else
|
||||||
else if (strcmp(argv[i], "-table") == 0)
|
badopt = 1;
|
||||||
table = 1;
|
}
|
||||||
else if (strcmp(argv[i], "-reverse") == 0)
|
|
||||||
reverse = 1;
|
|
||||||
else if (argv[i][0] == '-')
|
|
||||||
badopt = 1;
|
|
||||||
else if (!pw_source_defined)
|
|
||||||
/* non-option arguments, use as passwords */
|
|
||||||
{
|
|
||||||
pw_source_defined = 1;
|
|
||||||
passwds = &argv[i];
|
|
||||||
opt_done = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
badopt = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!usecrypt && !use1 && !useapr1) /* use default */
|
if (!usecrypt && !use1 && !useapr1) /* use default */
|
||||||
usecrypt = 1;
|
usecrypt = 1;
|
||||||
if (usecrypt + use1 + useapr1 > 1) /* conflict */
|
if (usecrypt + use1 + useapr1 > 1) /* conflict */
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
|
|
||||||
/* reject unsupported algorithms */
|
/* reject unsupported algorithms */
|
||||||
#ifdef OPENSSL_NO_DES
|
# ifdef OPENSSL_NO_DES
|
||||||
if (usecrypt) badopt = 1;
|
if (usecrypt)
|
||||||
#endif
|
badopt = 1;
|
||||||
#ifdef NO_MD5CRYPT_1
|
# endif
|
||||||
if (use1 || useapr1) badopt = 1;
|
# ifdef NO_MD5CRYPT_1
|
||||||
#endif
|
if (use1 || useapr1)
|
||||||
|
badopt = 1;
|
||||||
|
# endif
|
||||||
|
|
||||||
if (badopt)
|
if (badopt) {
|
||||||
{
|
BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
|
||||||
BIO_printf(bio_err, "Usage: passwd [options] [passwords]\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
# ifndef OPENSSL_NO_DES
|
||||||
#ifndef OPENSSL_NO_DES
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-crypt standard Unix password algorithm (default)\n");
|
"-crypt standard Unix password algorithm (default)\n");
|
||||||
#endif
|
# endif
|
||||||
#ifndef NO_MD5CRYPT_1
|
# ifndef NO_MD5CRYPT_1
|
||||||
BIO_printf(bio_err, "-1 MD5-based password algorithm\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-apr1 MD5-based password algorithm, Apache variant\n");
|
"-1 MD5-based password algorithm\n");
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-salt string use provided salt\n");
|
"-apr1 MD5-based password algorithm, Apache variant\n");
|
||||||
BIO_printf(bio_err, "-in file read passwords from file\n");
|
# endif
|
||||||
BIO_printf(bio_err, "-stdin read passwords from stdin\n");
|
BIO_printf(bio_err, "-salt string use provided salt\n");
|
||||||
BIO_printf(bio_err, "-noverify never verify when reading password from terminal\n");
|
BIO_printf(bio_err, "-in file read passwords from file\n");
|
||||||
BIO_printf(bio_err, "-quiet no warnings\n");
|
BIO_printf(bio_err, "-stdin read passwords from stdin\n");
|
||||||
BIO_printf(bio_err, "-table format output as table\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-reverse switch table columns\n");
|
"-noverify never verify when reading password from terminal\n");
|
||||||
|
BIO_printf(bio_err, "-quiet no warnings\n");
|
||||||
goto err;
|
BIO_printf(bio_err, "-table format output as table\n");
|
||||||
}
|
BIO_printf(bio_err, "-reverse switch table columns\n");
|
||||||
|
|
||||||
if ((infile != NULL) || in_stdin)
|
goto err;
|
||||||
{
|
}
|
||||||
in = BIO_new(BIO_s_file());
|
|
||||||
if (in == NULL)
|
|
||||||
goto err;
|
|
||||||
if (infile != NULL)
|
|
||||||
{
|
|
||||||
assert(in_stdin == 0);
|
|
||||||
if (BIO_read_filename(in, infile) <= 0)
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
assert(in_stdin);
|
|
||||||
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (usecrypt)
|
|
||||||
pw_maxlen = 8;
|
|
||||||
else if (use1 || useapr1)
|
|
||||||
pw_maxlen = 256; /* arbitrary limit, should be enough for most passwords */
|
|
||||||
|
|
||||||
if (passwds == NULL)
|
if ((infile != NULL) || in_stdin) {
|
||||||
{
|
in = BIO_new(BIO_s_file());
|
||||||
/* no passwords on the command line */
|
if (in == NULL)
|
||||||
|
goto err;
|
||||||
|
if (infile != NULL) {
|
||||||
|
assert(in_stdin == 0);
|
||||||
|
if (BIO_read_filename(in, infile) <= 0)
|
||||||
|
goto err;
|
||||||
|
} else {
|
||||||
|
assert(in_stdin);
|
||||||
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
passwd_malloc_size = pw_maxlen + 2;
|
if (usecrypt)
|
||||||
/* longer than necessary so that we can warn about truncation */
|
pw_maxlen = 8;
|
||||||
passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
|
else if (use1 || useapr1)
|
||||||
if (passwd_malloc == NULL)
|
pw_maxlen = 256; /* arbitrary limit, should be enough for most
|
||||||
goto err;
|
* passwords */
|
||||||
}
|
|
||||||
|
|
||||||
if ((in == NULL) && (passwds == NULL))
|
if (passwds == NULL) {
|
||||||
{
|
/* no passwords on the command line */
|
||||||
/* build a null-terminated list */
|
|
||||||
static char *passwds_static[2] = {NULL, NULL};
|
|
||||||
|
|
||||||
passwds = passwds_static;
|
|
||||||
if (in == NULL)
|
|
||||||
if (EVP_read_pw_string(passwd_malloc, passwd_malloc_size, "Password: ", !(passed_salt || in_noverify)) != 0)
|
|
||||||
goto err;
|
|
||||||
passwds[0] = passwd_malloc;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in == NULL)
|
passwd_malloc_size = pw_maxlen + 2;
|
||||||
{
|
/*
|
||||||
assert(passwds != NULL);
|
* longer than necessary so that we can warn about truncation
|
||||||
assert(*passwds != NULL);
|
*/
|
||||||
|
passwd = passwd_malloc = OPENSSL_malloc(passwd_malloc_size);
|
||||||
do /* loop over list of passwords */
|
if (passwd_malloc == NULL)
|
||||||
{
|
goto err;
|
||||||
passwd = *passwds++;
|
}
|
||||||
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
|
|
||||||
quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
while (*passwds != NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
/* in != NULL */
|
|
||||||
{
|
|
||||||
int done;
|
|
||||||
|
|
||||||
assert (passwd != NULL);
|
if ((in == NULL) && (passwds == NULL)) {
|
||||||
do
|
/* build a null-terminated list */
|
||||||
{
|
static char *passwds_static[2] = { NULL, NULL };
|
||||||
int r = BIO_gets(in, passwd, pw_maxlen + 1);
|
|
||||||
if (r > 0)
|
|
||||||
{
|
|
||||||
char *c = (strchr(passwd, '\n')) ;
|
|
||||||
if (c != NULL)
|
|
||||||
*c = 0; /* truncate at newline */
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* ignore rest of line */
|
|
||||||
char trash[BUFSIZ];
|
|
||||||
do
|
|
||||||
r = BIO_gets(in, trash, sizeof trash);
|
|
||||||
while ((r > 0) && (!strchr(trash, '\n')));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
|
|
||||||
quiet, table, reverse, pw_maxlen, usecrypt, use1, useapr1))
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
done = (r <= 0);
|
|
||||||
}
|
|
||||||
while (!done);
|
|
||||||
}
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
err:
|
passwds = passwds_static;
|
||||||
ERR_print_errors(bio_err);
|
if (in == NULL)
|
||||||
if (salt_malloc)
|
if (EVP_read_pw_string
|
||||||
OPENSSL_free(salt_malloc);
|
(passwd_malloc, passwd_malloc_size, "Password: ",
|
||||||
if (passwd_malloc)
|
!(passed_salt || in_noverify)) != 0)
|
||||||
OPENSSL_free(passwd_malloc);
|
goto err;
|
||||||
if (in)
|
passwds[0] = passwd_malloc;
|
||||||
BIO_free(in);
|
}
|
||||||
if (out)
|
|
||||||
BIO_free_all(out);
|
|
||||||
apps_shutdown();
|
|
||||||
OPENSSL_EXIT(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (in == NULL) {
|
||||||
|
assert(passwds != NULL);
|
||||||
|
assert(*passwds != NULL);
|
||||||
|
|
||||||
#ifndef NO_MD5CRYPT_1
|
do { /* loop over list of passwords */
|
||||||
/* MD5-based password algorithm (should probably be available as a library
|
passwd = *passwds++;
|
||||||
* function; then the static buffer would not be acceptable).
|
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
|
||||||
* For magic string "1", this should be compatible to the MD5-based BSD
|
quiet, table, reverse, pw_maxlen, usecrypt, use1,
|
||||||
* password algorithm.
|
useapr1))
|
||||||
* For 'magic' string "apr1", this is compatible to the MD5-based Apache
|
goto err;
|
||||||
* password algorithm.
|
}
|
||||||
* (Apparently, the Apache password algorithm is identical except that the
|
while (*passwds != NULL);
|
||||||
* 'magic' string was changed -- the laziest application of the NIH principle
|
} else
|
||||||
* I've ever encountered.)
|
/* in != NULL */
|
||||||
|
{
|
||||||
|
int done;
|
||||||
|
|
||||||
|
assert(passwd != NULL);
|
||||||
|
do {
|
||||||
|
int r = BIO_gets(in, passwd, pw_maxlen + 1);
|
||||||
|
if (r > 0) {
|
||||||
|
char *c = (strchr(passwd, '\n'));
|
||||||
|
if (c != NULL)
|
||||||
|
*c = 0; /* truncate at newline */
|
||||||
|
else {
|
||||||
|
/* ignore rest of line */
|
||||||
|
char trash[BUFSIZ];
|
||||||
|
do
|
||||||
|
r = BIO_gets(in, trash, sizeof trash);
|
||||||
|
while ((r > 0) && (!strchr(trash, '\n')));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, out,
|
||||||
|
quiet, table, reverse, pw_maxlen, usecrypt,
|
||||||
|
use1, useapr1))
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
done = (r <= 0);
|
||||||
|
}
|
||||||
|
while (!done);
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
err:
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
if (salt_malloc)
|
||||||
|
OPENSSL_free(salt_malloc);
|
||||||
|
if (passwd_malloc)
|
||||||
|
OPENSSL_free(passwd_malloc);
|
||||||
|
if (in)
|
||||||
|
BIO_free(in);
|
||||||
|
if (out)
|
||||||
|
BIO_free_all(out);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
# ifndef NO_MD5CRYPT_1
|
||||||
|
/*
|
||||||
|
* MD5-based password algorithm (should probably be available as a library
|
||||||
|
* function; then the static buffer would not be acceptable). For magic
|
||||||
|
* string "1", this should be compatible to the MD5-based BSD password
|
||||||
|
* algorithm. For 'magic' string "apr1", this is compatible to the MD5-based
|
||||||
|
* Apache password algorithm. (Apparently, the Apache password algorithm is
|
||||||
|
* identical except that the 'magic' string was changed -- the laziest
|
||||||
|
* application of the NIH principle I've ever encountered.)
|
||||||
*/
|
*/
|
||||||
static char *md5crypt(const char *passwd, const char *magic, const char *salt)
|
static char *md5crypt(const char *passwd, const char *magic, const char *salt)
|
||||||
{
|
{
|
||||||
static char out_buf[6 + 9 + 24 + 2]; /* "$apr1$..salt..$.......md5hash..........\0" */
|
/* "$apr1$..salt..$.......md5hash..........\0" */
|
||||||
unsigned char buf[MD5_DIGEST_LENGTH];
|
static char out_buf[6 + 9 + 24 + 2];
|
||||||
char *salt_out;
|
unsigned char buf[MD5_DIGEST_LENGTH];
|
||||||
int n;
|
char *salt_out;
|
||||||
unsigned int i;
|
int n;
|
||||||
EVP_MD_CTX md,md2;
|
unsigned int i;
|
||||||
size_t passwd_len, salt_len;
|
EVP_MD_CTX md, md2;
|
||||||
|
size_t passwd_len, salt_len;
|
||||||
|
|
||||||
passwd_len = strlen(passwd);
|
passwd_len = strlen(passwd);
|
||||||
out_buf[0] = '$';
|
out_buf[0] = '$';
|
||||||
out_buf[1] = 0;
|
out_buf[1] = 0;
|
||||||
assert(strlen(magic) <= 4); /* "1" or "apr1" */
|
assert(strlen(magic) <= 4); /* "1" or "apr1" */
|
||||||
strncat(out_buf, magic, 4);
|
strncat(out_buf, magic, 4);
|
||||||
strncat(out_buf, "$", 1);
|
strncat(out_buf, "$", 1);
|
||||||
strncat(out_buf, salt, 8);
|
strncat(out_buf, salt, 8);
|
||||||
assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
|
assert(strlen(out_buf) <= 6 + 8); /* "$apr1$..salt.." */
|
||||||
salt_out = out_buf + 2 + strlen(magic);
|
salt_out = out_buf + 2 + strlen(magic);
|
||||||
salt_len = strlen(salt_out);
|
salt_len = strlen(salt_out);
|
||||||
assert(salt_len <= 8);
|
assert(salt_len <= 8);
|
||||||
|
|
||||||
EVP_MD_CTX_init(&md);
|
|
||||||
EVP_DigestInit_ex(&md,EVP_md5(), NULL);
|
|
||||||
EVP_DigestUpdate(&md, passwd, passwd_len);
|
|
||||||
EVP_DigestUpdate(&md, "$", 1);
|
|
||||||
EVP_DigestUpdate(&md, magic, strlen(magic));
|
|
||||||
EVP_DigestUpdate(&md, "$", 1);
|
|
||||||
EVP_DigestUpdate(&md, salt_out, salt_len);
|
|
||||||
|
|
||||||
EVP_MD_CTX_init(&md2);
|
|
||||||
EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
|
|
||||||
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
|
||||||
EVP_DigestUpdate(&md2, salt_out, salt_len);
|
|
||||||
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
|
||||||
EVP_DigestFinal_ex(&md2, buf, NULL);
|
|
||||||
|
|
||||||
for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
|
EVP_MD_CTX_init(&md);
|
||||||
EVP_DigestUpdate(&md, buf, sizeof buf);
|
EVP_DigestInit_ex(&md, EVP_md5(), NULL);
|
||||||
EVP_DigestUpdate(&md, buf, i);
|
EVP_DigestUpdate(&md, passwd, passwd_len);
|
||||||
|
EVP_DigestUpdate(&md, "$", 1);
|
||||||
n = passwd_len;
|
EVP_DigestUpdate(&md, magic, strlen(magic));
|
||||||
while (n)
|
EVP_DigestUpdate(&md, "$", 1);
|
||||||
{
|
EVP_DigestUpdate(&md, salt_out, salt_len);
|
||||||
EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
|
|
||||||
n >>= 1;
|
|
||||||
}
|
|
||||||
EVP_DigestFinal_ex(&md, buf, NULL);
|
|
||||||
|
|
||||||
for (i = 0; i < 1000; i++)
|
EVP_MD_CTX_init(&md2);
|
||||||
{
|
EVP_DigestInit_ex(&md2, EVP_md5(), NULL);
|
||||||
EVP_DigestInit_ex(&md2,EVP_md5(), NULL);
|
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
||||||
EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *) passwd : buf,
|
EVP_DigestUpdate(&md2, salt_out, salt_len);
|
||||||
(i & 1) ? passwd_len : sizeof buf);
|
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
||||||
if (i % 3)
|
EVP_DigestFinal_ex(&md2, buf, NULL);
|
||||||
EVP_DigestUpdate(&md2, salt_out, salt_len);
|
|
||||||
if (i % 7)
|
|
||||||
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
|
||||||
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *) passwd,
|
|
||||||
(i & 1) ? sizeof buf : passwd_len);
|
|
||||||
EVP_DigestFinal_ex(&md2, buf, NULL);
|
|
||||||
}
|
|
||||||
EVP_MD_CTX_cleanup(&md2);
|
|
||||||
|
|
||||||
{
|
|
||||||
/* transform buf into output string */
|
|
||||||
|
|
||||||
unsigned char buf_perm[sizeof buf];
|
|
||||||
int dest, source;
|
|
||||||
char *output;
|
|
||||||
|
|
||||||
/* silly output permutation */
|
for (i = passwd_len; i > sizeof buf; i -= sizeof buf)
|
||||||
for (dest = 0, source = 0; dest < 14; dest++, source = (source + 6) % 17)
|
EVP_DigestUpdate(&md, buf, sizeof buf);
|
||||||
buf_perm[dest] = buf[source];
|
EVP_DigestUpdate(&md, buf, i);
|
||||||
buf_perm[14] = buf[5];
|
|
||||||
buf_perm[15] = buf[11];
|
|
||||||
#ifndef PEDANTIC /* Unfortunately, this generates a "no effect" warning */
|
|
||||||
assert(16 == sizeof buf_perm);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
output = salt_out + salt_len;
|
|
||||||
assert(output == out_buf + strlen(out_buf));
|
|
||||||
|
|
||||||
*output++ = '$';
|
|
||||||
|
|
||||||
for (i = 0; i < 15; i += 3)
|
n = passwd_len;
|
||||||
{
|
while (n) {
|
||||||
*output++ = cov_2char[buf_perm[i+2] & 0x3f];
|
EVP_DigestUpdate(&md, (n & 1) ? "\0" : passwd, 1);
|
||||||
*output++ = cov_2char[((buf_perm[i+1] & 0xf) << 2) |
|
n >>= 1;
|
||||||
(buf_perm[i+2] >> 6)];
|
}
|
||||||
*output++ = cov_2char[((buf_perm[i] & 3) << 4) |
|
EVP_DigestFinal_ex(&md, buf, NULL);
|
||||||
(buf_perm[i+1] >> 4)];
|
|
||||||
*output++ = cov_2char[buf_perm[i] >> 2];
|
|
||||||
}
|
|
||||||
assert(i == 15);
|
|
||||||
*output++ = cov_2char[buf_perm[i] & 0x3f];
|
|
||||||
*output++ = cov_2char[buf_perm[i] >> 6];
|
|
||||||
*output = 0;
|
|
||||||
assert(strlen(out_buf) < sizeof(out_buf));
|
|
||||||
}
|
|
||||||
EVP_MD_CTX_cleanup(&md);
|
|
||||||
|
|
||||||
return out_buf;
|
for (i = 0; i < 1000; i++) {
|
||||||
}
|
EVP_DigestInit_ex(&md2, EVP_md5(), NULL);
|
||||||
#endif
|
EVP_DigestUpdate(&md2, (i & 1) ? (unsigned const char *)passwd : buf,
|
||||||
|
(i & 1) ? passwd_len : sizeof buf);
|
||||||
|
if (i % 3)
|
||||||
|
EVP_DigestUpdate(&md2, salt_out, salt_len);
|
||||||
|
if (i % 7)
|
||||||
|
EVP_DigestUpdate(&md2, passwd, passwd_len);
|
||||||
|
EVP_DigestUpdate(&md2, (i & 1) ? buf : (unsigned const char *)passwd,
|
||||||
|
(i & 1) ? sizeof buf : passwd_len);
|
||||||
|
EVP_DigestFinal_ex(&md2, buf, NULL);
|
||||||
|
}
|
||||||
|
EVP_MD_CTX_cleanup(&md2);
|
||||||
|
|
||||||
|
{
|
||||||
|
/* transform buf into output string */
|
||||||
|
|
||||||
|
unsigned char buf_perm[sizeof buf];
|
||||||
|
int dest, source;
|
||||||
|
char *output;
|
||||||
|
|
||||||
|
/* silly output permutation */
|
||||||
|
for (dest = 0, source = 0; dest < 14;
|
||||||
|
dest++, source = (source + 6) % 17)
|
||||||
|
buf_perm[dest] = buf[source];
|
||||||
|
buf_perm[14] = buf[5];
|
||||||
|
buf_perm[15] = buf[11];
|
||||||
|
# ifndef PEDANTIC /* Unfortunately, this generates a "no
|
||||||
|
* effect" warning */
|
||||||
|
assert(16 == sizeof buf_perm);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
output = salt_out + salt_len;
|
||||||
|
assert(output == out_buf + strlen(out_buf));
|
||||||
|
|
||||||
|
*output++ = '$';
|
||||||
|
|
||||||
|
for (i = 0; i < 15; i += 3) {
|
||||||
|
*output++ = cov_2char[buf_perm[i + 2] & 0x3f];
|
||||||
|
*output++ = cov_2char[((buf_perm[i + 1] & 0xf) << 2) |
|
||||||
|
(buf_perm[i + 2] >> 6)];
|
||||||
|
*output++ = cov_2char[((buf_perm[i] & 3) << 4) |
|
||||||
|
(buf_perm[i + 1] >> 4)];
|
||||||
|
*output++ = cov_2char[buf_perm[i] >> 2];
|
||||||
|
}
|
||||||
|
assert(i == 15);
|
||||||
|
*output++ = cov_2char[buf_perm[i] & 0x3f];
|
||||||
|
*output++ = cov_2char[buf_perm[i] >> 6];
|
||||||
|
*output = 0;
|
||||||
|
assert(strlen(out_buf) < sizeof(out_buf));
|
||||||
|
}
|
||||||
|
EVP_MD_CTX_cleanup(&md);
|
||||||
|
|
||||||
|
return out_buf;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p,
|
||||||
char *passwd, BIO *out, int quiet, int table, int reverse,
|
char *passwd, BIO *out, int quiet, int table,
|
||||||
size_t pw_maxlen, int usecrypt, int use1, int useapr1)
|
int reverse, size_t pw_maxlen, int usecrypt, int use1,
|
||||||
{
|
int useapr1)
|
||||||
char *hash = NULL;
|
{
|
||||||
|
char *hash = NULL;
|
||||||
|
|
||||||
assert(salt_p != NULL);
|
assert(salt_p != NULL);
|
||||||
assert(salt_malloc_p != NULL);
|
assert(salt_malloc_p != NULL);
|
||||||
|
|
||||||
/* first make sure we have a salt */
|
/* first make sure we have a salt */
|
||||||
if (!passed_salt)
|
if (!passed_salt) {
|
||||||
{
|
# ifndef OPENSSL_NO_DES
|
||||||
#ifndef OPENSSL_NO_DES
|
if (usecrypt) {
|
||||||
if (usecrypt)
|
if (*salt_malloc_p == NULL) {
|
||||||
{
|
*salt_p = *salt_malloc_p = OPENSSL_malloc(3);
|
||||||
if (*salt_malloc_p == NULL)
|
if (*salt_malloc_p == NULL)
|
||||||
{
|
goto err;
|
||||||
*salt_p = *salt_malloc_p = OPENSSL_malloc(3);
|
}
|
||||||
if (*salt_malloc_p == NULL)
|
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
(*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
|
||||||
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 2) < 0)
|
(*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */
|
||||||
goto err;
|
(*salt_p)[2] = 0;
|
||||||
(*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */
|
# ifdef CHARSET_EBCDIC
|
||||||
(*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */
|
ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert back
|
||||||
(*salt_p)[2] = 0;
|
* to ASCII */
|
||||||
#ifdef CHARSET_EBCDIC
|
# endif
|
||||||
ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert
|
}
|
||||||
* back to ASCII */
|
# endif /* !OPENSSL_NO_DES */
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif /* !OPENSSL_NO_DES */
|
|
||||||
|
|
||||||
#ifndef NO_MD5CRYPT_1
|
# ifndef NO_MD5CRYPT_1
|
||||||
if (use1 || useapr1)
|
if (use1 || useapr1) {
|
||||||
{
|
int i;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (*salt_malloc_p == NULL)
|
|
||||||
{
|
|
||||||
*salt_p = *salt_malloc_p = OPENSSL_malloc(9);
|
|
||||||
if (*salt_malloc_p == NULL)
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
|
||||||
(*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
|
|
||||||
(*salt_p)[8] = 0;
|
|
||||||
}
|
|
||||||
#endif /* !NO_MD5CRYPT_1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(*salt_p != NULL);
|
|
||||||
|
|
||||||
/* truncate password if necessary */
|
|
||||||
if ((strlen(passwd) > pw_maxlen))
|
|
||||||
{
|
|
||||||
if (!quiet)
|
|
||||||
/* XXX: really we should know how to print a size_t, not cast it */
|
|
||||||
BIO_printf(bio_err, "Warning: truncating password to %u characters\n", (unsigned)pw_maxlen);
|
|
||||||
passwd[pw_maxlen] = 0;
|
|
||||||
}
|
|
||||||
assert(strlen(passwd) <= pw_maxlen);
|
|
||||||
|
|
||||||
/* now compute password hash */
|
|
||||||
#ifndef OPENSSL_NO_DES
|
|
||||||
if (usecrypt)
|
|
||||||
hash = DES_crypt(passwd, *salt_p);
|
|
||||||
#endif
|
|
||||||
#ifndef NO_MD5CRYPT_1
|
|
||||||
if (use1 || useapr1)
|
|
||||||
hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
|
|
||||||
#endif
|
|
||||||
assert(hash != NULL);
|
|
||||||
|
|
||||||
if (table && !reverse)
|
if (*salt_malloc_p == NULL) {
|
||||||
BIO_printf(out, "%s\t%s\n", passwd, hash);
|
*salt_p = *salt_malloc_p = OPENSSL_malloc(9);
|
||||||
else if (table && reverse)
|
if (*salt_malloc_p == NULL)
|
||||||
BIO_printf(out, "%s\t%s\n", hash, passwd);
|
goto err;
|
||||||
else
|
}
|
||||||
BIO_printf(out, "%s\n", hash);
|
if (RAND_pseudo_bytes((unsigned char *)*salt_p, 8) < 0)
|
||||||
return 1;
|
goto err;
|
||||||
|
|
||||||
err:
|
for (i = 0; i < 8; i++)
|
||||||
return 0;
|
(*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */
|
||||||
}
|
(*salt_p)[8] = 0;
|
||||||
|
}
|
||||||
|
# endif /* !NO_MD5CRYPT_1 */
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(*salt_p != NULL);
|
||||||
|
|
||||||
|
/* truncate password if necessary */
|
||||||
|
if ((strlen(passwd) > pw_maxlen)) {
|
||||||
|
if (!quiet)
|
||||||
|
/*
|
||||||
|
* XXX: really we should know how to print a size_t, not cast it
|
||||||
|
*/
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"Warning: truncating password to %u characters\n",
|
||||||
|
(unsigned)pw_maxlen);
|
||||||
|
passwd[pw_maxlen] = 0;
|
||||||
|
}
|
||||||
|
assert(strlen(passwd) <= pw_maxlen);
|
||||||
|
|
||||||
|
/* now compute password hash */
|
||||||
|
# ifndef OPENSSL_NO_DES
|
||||||
|
if (usecrypt)
|
||||||
|
hash = DES_crypt(passwd, *salt_p);
|
||||||
|
# endif
|
||||||
|
# ifndef NO_MD5CRYPT_1
|
||||||
|
if (use1 || useapr1)
|
||||||
|
hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p);
|
||||||
|
# endif
|
||||||
|
assert(hash != NULL);
|
||||||
|
|
||||||
|
if (table && !reverse)
|
||||||
|
BIO_printf(out, "%s\t%s\n", passwd, hash);
|
||||||
|
else if (table && reverse)
|
||||||
|
BIO_printf(out, "%s\t%s\n", hash, passwd);
|
||||||
|
else
|
||||||
|
BIO_printf(out, "%s\n", hash);
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
err:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
fputs("Program not available.\n", stderr)
|
fputs("Program not available.\n", stderr)
|
||||||
OPENSSL_EXIT(1);
|
OPENSSL_EXIT(1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
1565
apps/pkcs12.c
1565
apps/pkcs12.c
File diff suppressed because it is too large
Load Diff
414
apps/pkcs7.c
414
apps/pkcs7.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -69,252 +69,240 @@
|
|||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG pkcs7_main
|
#define PROG pkcs7_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (DER or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (DER or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
* -print_certs
|
* -print_certs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
PKCS7 *p7=NULL;
|
PKCS7 *p7 = NULL;
|
||||||
int i,badops=0;
|
int i, badops = 0;
|
||||||
BIO *in=NULL,*out=NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int informat,outformat;
|
int informat, outformat;
|
||||||
char *infile,*outfile,*prog;
|
char *infile, *outfile, *prog;
|
||||||
int print_certs=0,text=0,noout=0,p7_print=0;
|
int print_certs = 0, text = 0, noout = 0, p7_print = 0;
|
||||||
int ret=1;
|
int ret = 1;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
} else if (strcmp(*argv, "-noout") == 0)
|
||||||
{
|
noout = 1;
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
outfile= *(++argv);
|
text = 1;
|
||||||
}
|
else if (strcmp(*argv, "-print") == 0)
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
p7_print = 1;
|
||||||
noout=1;
|
else if (strcmp(*argv, "-print_certs") == 0)
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
print_certs = 1;
|
||||||
text=1;
|
|
||||||
else if (strcmp(*argv,"-print") == 0)
|
|
||||||
p7_print=1;
|
|
||||||
else if (strcmp(*argv,"-print_certs") == 0)
|
|
||||||
print_certs=1;
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
engine= *(++argv);
|
engine = *(++argv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else {
|
||||||
{
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
badops = 1;
|
||||||
badops=1;
|
break;
|
||||||
break;
|
}
|
||||||
}
|
argc--;
|
||||||
argc--;
|
argv++;
|
||||||
argv++;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err, " -inform arg input format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -inform arg input format - DER or PEM\n");
|
BIO_printf(bio_err, " -outform arg output format - DER or PEM\n");
|
||||||
BIO_printf(bio_err," -outform arg output format - DER or PEM\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -print_certs print any certs or crl in the input\n");
|
" -print_certs print any certs or crl in the input\n");
|
||||||
BIO_printf(bio_err," -text print full details of certificates\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -noout don't output encoded data\n");
|
" -text print full details of certificates\n");
|
||||||
|
BIO_printf(bio_err, " -noout don't output encoded data\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
#endif
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if ((in == NULL) || (out == NULL))
|
if ((in == NULL) || (out == NULL)) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
BIO_printf(bio_err, "unable to load input file\n");
|
||||||
if (in == NULL)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (informat == FORMAT_ASN1)
|
if (informat == FORMAT_ASN1)
|
||||||
p7=d2i_PKCS7_bio(in,NULL);
|
p7 = d2i_PKCS7_bio(in, NULL);
|
||||||
else if (informat == FORMAT_PEM)
|
else if (informat == FORMAT_PEM)
|
||||||
p7=PEM_read_bio_PKCS7(in,NULL,NULL,NULL);
|
p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL);
|
||||||
else
|
else {
|
||||||
{
|
BIO_printf(bio_err, "bad input format specified for pkcs7 object\n");
|
||||||
BIO_printf(bio_err,"bad input format specified for pkcs7 object\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
if (p7 == NULL) {
|
||||||
if (p7 == NULL)
|
BIO_printf(bio_err, "unable to load PKCS7 object\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(bio_err,"unable to load PKCS7 object\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
{
|
perror(outfile);
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
goto end;
|
||||||
{
|
}
|
||||||
perror(outfile);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p7_print)
|
if (p7_print)
|
||||||
PKCS7_print_ctx(out, p7, 0, NULL);
|
PKCS7_print_ctx(out, p7, 0, NULL);
|
||||||
|
|
||||||
if (print_certs)
|
if (print_certs) {
|
||||||
{
|
STACK_OF(X509) *certs = NULL;
|
||||||
STACK_OF(X509) *certs=NULL;
|
STACK_OF(X509_CRL) *crls = NULL;
|
||||||
STACK_OF(X509_CRL) *crls=NULL;
|
|
||||||
|
|
||||||
i=OBJ_obj2nid(p7->type);
|
i = OBJ_obj2nid(p7->type);
|
||||||
switch (i)
|
switch (i) {
|
||||||
{
|
case NID_pkcs7_signed:
|
||||||
case NID_pkcs7_signed:
|
certs = p7->d.sign->cert;
|
||||||
certs=p7->d.sign->cert;
|
crls = p7->d.sign->crl;
|
||||||
crls=p7->d.sign->crl;
|
break;
|
||||||
break;
|
case NID_pkcs7_signedAndEnveloped:
|
||||||
case NID_pkcs7_signedAndEnveloped:
|
certs = p7->d.signed_and_enveloped->cert;
|
||||||
certs=p7->d.signed_and_enveloped->cert;
|
crls = p7->d.signed_and_enveloped->crl;
|
||||||
crls=p7->d.signed_and_enveloped->crl;
|
break;
|
||||||
break;
|
default:
|
||||||
default:
|
break;
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (certs != NULL)
|
if (certs != NULL) {
|
||||||
{
|
X509 *x;
|
||||||
X509 *x;
|
|
||||||
|
|
||||||
for (i=0; i<sk_X509_num(certs); i++)
|
for (i = 0; i < sk_X509_num(certs); i++) {
|
||||||
{
|
x = sk_X509_value(certs, i);
|
||||||
x=sk_X509_value(certs,i);
|
if (text)
|
||||||
if(text) X509_print(out, x);
|
X509_print(out, x);
|
||||||
else dump_cert_text(out, x);
|
else
|
||||||
|
dump_cert_text(out, x);
|
||||||
|
|
||||||
if(!noout) PEM_write_bio_X509(out,x);
|
if (!noout)
|
||||||
BIO_puts(out,"\n");
|
PEM_write_bio_X509(out, x);
|
||||||
}
|
BIO_puts(out, "\n");
|
||||||
}
|
}
|
||||||
if (crls != NULL)
|
}
|
||||||
{
|
if (crls != NULL) {
|
||||||
X509_CRL *crl;
|
X509_CRL *crl;
|
||||||
|
|
||||||
for (i=0; i<sk_X509_CRL_num(crls); i++)
|
for (i = 0; i < sk_X509_CRL_num(crls); i++) {
|
||||||
{
|
crl = sk_X509_CRL_value(crls, i);
|
||||||
crl=sk_X509_CRL_value(crls,i);
|
|
||||||
|
|
||||||
X509_CRL_print(out, crl);
|
X509_CRL_print(out, crl);
|
||||||
|
|
||||||
if(!noout)PEM_write_bio_X509_CRL(out,crl);
|
if (!noout)
|
||||||
BIO_puts(out,"\n");
|
PEM_write_bio_X509_CRL(out, crl);
|
||||||
}
|
BIO_puts(out, "\n");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret=0;
|
ret = 0;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!noout) {
|
if (!noout) {
|
||||||
if (outformat == FORMAT_ASN1)
|
if (outformat == FORMAT_ASN1)
|
||||||
i=i2d_PKCS7_bio(out,p7);
|
i = i2d_PKCS7_bio(out, p7);
|
||||||
else if (outformat == FORMAT_PEM)
|
else if (outformat == FORMAT_PEM)
|
||||||
i=PEM_write_bio_PKCS7(out,p7);
|
i = PEM_write_bio_PKCS7(out, p7);
|
||||||
else {
|
else {
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!i)
|
if (!i) {
|
||||||
{
|
BIO_printf(bio_err, "unable to write pkcs7 object\n");
|
||||||
BIO_printf(bio_err,"unable to write pkcs7 object\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
}
|
||||||
}
|
ret = 0;
|
||||||
ret=0;
|
end:
|
||||||
end:
|
if (p7 != NULL)
|
||||||
if (p7 != NULL) PKCS7_free(p7);
|
PKCS7_free(p7);
|
||||||
if (in != NULL) BIO_free(in);
|
if (in != NULL)
|
||||||
if (out != NULL) BIO_free_all(out);
|
BIO_free(in);
|
||||||
apps_shutdown();
|
if (out != NULL)
|
||||||
OPENSSL_EXIT(ret);
|
BIO_free_all(out);
|
||||||
}
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|||||||
647
apps/pkcs8.c
647
apps/pkcs8.c
@@ -1,6 +1,7 @@
|
|||||||
/* pkcs8.c */
|
/* pkcs8.c */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 1999-2004.
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 1999-2004.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -68,372 +69,334 @@
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
char **args, *infile = NULL, *outfile = NULL;
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int topk8 = 0;
|
int topk8 = 0;
|
||||||
int pbe_nid = -1;
|
int pbe_nid = -1;
|
||||||
const EVP_CIPHER *cipher = NULL;
|
const EVP_CIPHER *cipher = NULL;
|
||||||
int iter = PKCS12_DEFAULT_ITER;
|
int iter = PKCS12_DEFAULT_ITER;
|
||||||
int informat, outformat;
|
int informat, outformat;
|
||||||
int p8_broken = PKCS8_OK;
|
int p8_broken = PKCS8_OK;
|
||||||
int nocrypt = 0;
|
int nocrypt = 0;
|
||||||
X509_SIG *p8 = NULL;
|
X509_SIG *p8 = NULL;
|
||||||
PKCS8_PRIV_KEY_INFO *p8inf = NULL;
|
PKCS8_PRIV_KEY_INFO *p8inf = NULL;
|
||||||
EVP_PKEY *pkey=NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
|
char pass[50], *passin = NULL, *passout = NULL, *p8pass = NULL;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (bio_err == NULL) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
if (bio_err == NULL)
|
||||||
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
while (!badarg && *args && *args[0] == '-')
|
while (!badarg && *args && *args[0] == '-') {
|
||||||
{
|
if (!strcmp(*args, "-v2")) {
|
||||||
if (!strcmp(*args,"-v2"))
|
if (args[1]) {
|
||||||
{
|
args++;
|
||||||
if (args[1])
|
cipher = EVP_get_cipherbyname(*args);
|
||||||
{
|
if (!cipher) {
|
||||||
args++;
|
BIO_printf(bio_err, "Unknown cipher %s\n", *args);
|
||||||
cipher=EVP_get_cipherbyname(*args);
|
badarg = 1;
|
||||||
if (!cipher)
|
}
|
||||||
{
|
} else
|
||||||
BIO_printf(bio_err,
|
badarg = 1;
|
||||||
"Unknown cipher %s\n", *args);
|
} else if (!strcmp(*args, "-v1")) {
|
||||||
badarg = 1;
|
if (args[1]) {
|
||||||
}
|
args++;
|
||||||
}
|
pbe_nid = OBJ_txt2nid(*args);
|
||||||
else
|
if (pbe_nid == NID_undef) {
|
||||||
badarg = 1;
|
BIO_printf(bio_err, "Unknown PBE algorithm %s\n", *args);
|
||||||
}
|
badarg = 1;
|
||||||
else if (!strcmp(*args,"-v1"))
|
}
|
||||||
{
|
} else
|
||||||
if (args[1])
|
badarg = 1;
|
||||||
{
|
} else if (!strcmp(*args, "-v2prf")) {
|
||||||
args++;
|
if (args[1]) {
|
||||||
pbe_nid=OBJ_txt2nid(*args);
|
args++;
|
||||||
if (pbe_nid == NID_undef)
|
pbe_nid = OBJ_txt2nid(*args);
|
||||||
{
|
if (!EVP_PBE_find(EVP_PBE_TYPE_PRF, pbe_nid, NULL, NULL, 0)) {
|
||||||
BIO_printf(bio_err,
|
BIO_printf(bio_err, "Unknown PRF algorithm %s\n", *args);
|
||||||
"Unknown PBE algorithm %s\n", *args);
|
badarg = 1;
|
||||||
badarg = 1;
|
}
|
||||||
}
|
} else
|
||||||
}
|
badarg = 1;
|
||||||
else
|
} else if (!strcmp(*args, "-inform")) {
|
||||||
badarg = 1;
|
if (args[1]) {
|
||||||
}
|
args++;
|
||||||
else if (!strcmp(*args,"-inform"))
|
informat = str2fmt(*args);
|
||||||
{
|
} else
|
||||||
if (args[1])
|
badarg = 1;
|
||||||
{
|
} else if (!strcmp(*args, "-outform")) {
|
||||||
args++;
|
if (args[1]) {
|
||||||
informat=str2fmt(*args);
|
args++;
|
||||||
}
|
outformat = str2fmt(*args);
|
||||||
else badarg = 1;
|
} else
|
||||||
}
|
badarg = 1;
|
||||||
else if (!strcmp(*args,"-outform"))
|
} else if (!strcmp(*args, "-topk8"))
|
||||||
{
|
topk8 = 1;
|
||||||
if (args[1])
|
else if (!strcmp(*args, "-noiter"))
|
||||||
{
|
iter = 1;
|
||||||
args++;
|
else if (!strcmp(*args, "-nocrypt"))
|
||||||
outformat=str2fmt(*args);
|
nocrypt = 1;
|
||||||
}
|
else if (!strcmp(*args, "-nooct"))
|
||||||
else badarg = 1;
|
p8_broken = PKCS8_NO_OCTET;
|
||||||
}
|
else if (!strcmp(*args, "-nsdb"))
|
||||||
else if (!strcmp (*args, "-topk8"))
|
p8_broken = PKCS8_NS_DB;
|
||||||
topk8 = 1;
|
else if (!strcmp(*args, "-embed"))
|
||||||
else if (!strcmp (*args, "-noiter"))
|
p8_broken = PKCS8_EMBEDDED_PARAM;
|
||||||
iter = 1;
|
else if (!strcmp(*args, "-passin")) {
|
||||||
else if (!strcmp (*args, "-nocrypt"))
|
if (!args[1])
|
||||||
nocrypt = 1;
|
goto bad;
|
||||||
else if (!strcmp (*args, "-nooct"))
|
passargin = *(++args);
|
||||||
p8_broken = PKCS8_NO_OCTET;
|
} else if (!strcmp(*args, "-passout")) {
|
||||||
else if (!strcmp (*args, "-nsdb"))
|
if (!args[1])
|
||||||
p8_broken = PKCS8_NS_DB;
|
goto bad;
|
||||||
else if (!strcmp (*args, "-embed"))
|
passargout = *(++args);
|
||||||
p8_broken = PKCS8_EMBEDDED_PARAM;
|
}
|
||||||
else if (!strcmp(*args,"-passin"))
|
|
||||||
{
|
|
||||||
if (!args[1]) goto bad;
|
|
||||||
passargin= *(++args);
|
|
||||||
}
|
|
||||||
else if (!strcmp(*args,"-passout"))
|
|
||||||
{
|
|
||||||
if (!args[1]) goto bad;
|
|
||||||
passargout= *(++args);
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*args,"-engine") == 0)
|
else if (strcmp(*args, "-engine") == 0) {
|
||||||
{
|
if (!args[1])
|
||||||
if (!args[1]) goto bad;
|
goto bad;
|
||||||
engine= *(++args);
|
engine = *(++args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-in"))
|
else if (!strcmp(*args, "-in")) {
|
||||||
{
|
if (args[1]) {
|
||||||
if (args[1])
|
args++;
|
||||||
{
|
infile = *args;
|
||||||
args++;
|
} else
|
||||||
infile = *args;
|
badarg = 1;
|
||||||
}
|
} else if (!strcmp(*args, "-out")) {
|
||||||
else badarg = 1;
|
if (args[1]) {
|
||||||
}
|
args++;
|
||||||
else if (!strcmp (*args, "-out"))
|
outfile = *args;
|
||||||
{
|
} else
|
||||||
if (args[1])
|
badarg = 1;
|
||||||
{
|
} else
|
||||||
args++;
|
badarg = 1;
|
||||||
outfile = *args;
|
args++;
|
||||||
}
|
}
|
||||||
else badarg = 1;
|
|
||||||
}
|
|
||||||
else badarg = 1;
|
|
||||||
args++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badarg)
|
if (badarg) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "Usage pkcs8 [options]\n");
|
||||||
BIO_printf(bio_err, "Usage pkcs8 [options]\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
BIO_printf(bio_err, "-in file input file\n");
|
||||||
BIO_printf(bio_err, "-in file input file\n");
|
BIO_printf(bio_err, "-inform X input format (DER or PEM)\n");
|
||||||
BIO_printf(bio_err, "-inform X input format (DER or PEM)\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-passin arg input file pass phrase source\n");
|
"-passin arg input file pass phrase source\n");
|
||||||
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
|
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
|
||||||
BIO_printf(bio_err, "-out file output file\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf(bio_err, "-passout arg output file pass phrase source\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-topk8 output PKCS8 file\n");
|
"-passout arg output file pass phrase source\n");
|
||||||
BIO_printf(bio_err, "-nooct use (nonstandard) no octet format\n");
|
BIO_printf(bio_err, "-topk8 output PKCS8 file\n");
|
||||||
BIO_printf(bio_err, "-embed use (nonstandard) embedded DSA parameters format\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-nsdb use (nonstandard) DSA Netscape DB format\n");
|
"-nooct use (nonstandard) no octet format\n");
|
||||||
BIO_printf(bio_err, "-noiter use 1 as iteration count\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-nocrypt use or expect unencrypted private key\n");
|
"-embed use (nonstandard) embedded DSA parameters format\n");
|
||||||
BIO_printf(bio_err, "-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
|
"-nsdb use (nonstandard) DSA Netscape DB format\n");
|
||||||
|
BIO_printf(bio_err, "-noiter use 1 as iteration count\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"-nocrypt use or expect unencrypted private key\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"-v2 alg use PKCS#5 v2.0 and cipher \"alg\"\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
"-v1 obj use PKCS#5 v1.5 and cipher \"alg\"\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
#endif
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
e = setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
|
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
{
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((pbe_nid == -1) && !cipher)
|
if ((pbe_nid == -1) && !cipher)
|
||||||
pbe_nid = NID_pbeWithMD5AndDES_CBC;
|
pbe_nid = NID_pbeWithMD5AndDES_CBC;
|
||||||
|
|
||||||
if (infile)
|
if (infile) {
|
||||||
{
|
if (!(in = BIO_new_file(infile, "rb"))) {
|
||||||
if (!(in = BIO_new_file(infile, "rb")))
|
BIO_printf(bio_err, "Can't open input file %s\n", infile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Can't open input file %s\n", infile);
|
} else
|
||||||
goto end;
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
in = BIO_new_fp (stdin, BIO_NOCLOSE);
|
|
||||||
|
|
||||||
if (outfile)
|
if (outfile) {
|
||||||
{
|
if (!(out = BIO_new_file(outfile, "wb"))) {
|
||||||
if (!(out = BIO_new_file (outfile, "wb")))
|
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Can't open output file %s\n", outfile);
|
} else {
|
||||||
goto end;
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (topk8)
|
if (topk8) {
|
||||||
{
|
pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
|
||||||
pkey = load_key(bio_err, infile, informat, 1,
|
if (!pkey)
|
||||||
passin, e, "key");
|
goto end;
|
||||||
if (!pkey)
|
if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken))) {
|
||||||
goto end;
|
BIO_printf(bio_err, "Error converting key\n");
|
||||||
if (!(p8inf = EVP_PKEY2PKCS8_broken(pkey, p8_broken)))
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err, "Error converting key\n");
|
}
|
||||||
ERR_print_errors(bio_err);
|
if (nocrypt) {
|
||||||
goto end;
|
if (outformat == FORMAT_PEM)
|
||||||
}
|
PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
|
||||||
if (nocrypt)
|
else if (outformat == FORMAT_ASN1)
|
||||||
{
|
i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
|
||||||
if (outformat == FORMAT_PEM)
|
else {
|
||||||
PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf);
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
else if (outformat == FORMAT_ASN1)
|
goto end;
|
||||||
i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf);
|
}
|
||||||
else
|
} else {
|
||||||
{
|
if (passout)
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
p8pass = passout;
|
||||||
goto end;
|
else {
|
||||||
}
|
p8pass = pass;
|
||||||
}
|
if (EVP_read_pw_string
|
||||||
else
|
(pass, sizeof pass, "Enter Encryption Password:", 1))
|
||||||
{
|
goto end;
|
||||||
if (passout)
|
}
|
||||||
p8pass = passout;
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
else
|
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
|
||||||
{
|
p8pass, strlen(p8pass),
|
||||||
p8pass = pass;
|
NULL, 0, iter, p8inf))) {
|
||||||
if (EVP_read_pw_string(pass, sizeof pass, "Enter Encryption Password:", 1))
|
BIO_printf(bio_err, "Error encrypting key\n");
|
||||||
goto end;
|
ERR_print_errors(bio_err);
|
||||||
}
|
goto end;
|
||||||
app_RAND_load_file(NULL, bio_err, 0);
|
}
|
||||||
if (!(p8 = PKCS8_encrypt(pbe_nid, cipher,
|
app_RAND_write_file(NULL, bio_err);
|
||||||
p8pass, strlen(p8pass),
|
if (outformat == FORMAT_PEM)
|
||||||
NULL, 0, iter, p8inf)))
|
PEM_write_bio_PKCS8(out, p8);
|
||||||
{
|
else if (outformat == FORMAT_ASN1)
|
||||||
BIO_printf(bio_err, "Error encrypting key\n");
|
i2d_PKCS8_bio(out, p8);
|
||||||
ERR_print_errors(bio_err);
|
else {
|
||||||
goto end;
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
}
|
goto end;
|
||||||
app_RAND_write_file(NULL, bio_err);
|
}
|
||||||
if (outformat == FORMAT_PEM)
|
}
|
||||||
PEM_write_bio_PKCS8(out, p8);
|
|
||||||
else if (outformat == FORMAT_ASN1)
|
|
||||||
i2d_PKCS8_bio(out, p8);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nocrypt)
|
if (nocrypt) {
|
||||||
{
|
if (informat == FORMAT_PEM)
|
||||||
if (informat == FORMAT_PEM)
|
p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, NULL, NULL);
|
||||||
p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in,NULL,NULL, NULL);
|
else if (informat == FORMAT_ASN1)
|
||||||
else if (informat == FORMAT_ASN1)
|
p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
|
||||||
p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL);
|
else {
|
||||||
else
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
}
|
||||||
goto end;
|
} else {
|
||||||
}
|
if (informat == FORMAT_PEM)
|
||||||
}
|
p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
|
||||||
else
|
else if (informat == FORMAT_ASN1)
|
||||||
{
|
p8 = d2i_PKCS8_bio(in, NULL);
|
||||||
if (informat == FORMAT_PEM)
|
else {
|
||||||
p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL);
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
else if (informat == FORMAT_ASN1)
|
goto end;
|
||||||
p8 = d2i_PKCS8_bio(in, NULL);
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!p8)
|
if (!p8) {
|
||||||
{
|
BIO_printf(bio_err, "Error reading key\n");
|
||||||
BIO_printf (bio_err, "Error reading key\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
if (passin)
|
||||||
if (passin)
|
p8pass = passin;
|
||||||
p8pass = passin;
|
else {
|
||||||
else
|
p8pass = pass;
|
||||||
{
|
EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
|
||||||
p8pass = pass;
|
}
|
||||||
EVP_read_pw_string(pass, sizeof pass, "Enter Password:", 0);
|
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
|
||||||
}
|
}
|
||||||
p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!p8inf)
|
if (!p8inf) {
|
||||||
{
|
BIO_printf(bio_err, "Error decrypting key\n");
|
||||||
BIO_printf(bio_err, "Error decrypting key\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!(pkey = EVP_PKCS82PKEY(p8inf)))
|
if (!(pkey = EVP_PKCS82PKEY(p8inf))) {
|
||||||
{
|
BIO_printf(bio_err, "Error converting key\n");
|
||||||
BIO_printf(bio_err, "Error converting key\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (p8inf->broken)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Warning: broken key encoding: ");
|
|
||||||
switch (p8inf->broken)
|
|
||||||
{
|
|
||||||
case PKCS8_NO_OCTET:
|
|
||||||
BIO_printf(bio_err, "No Octet String in PrivateKey\n");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PKCS8_EMBEDDED_PARAM:
|
if (p8inf->broken) {
|
||||||
BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
|
BIO_printf(bio_err, "Warning: broken key encoding: ");
|
||||||
break;
|
switch (p8inf->broken) {
|
||||||
|
case PKCS8_NO_OCTET:
|
||||||
|
BIO_printf(bio_err, "No Octet String in PrivateKey\n");
|
||||||
|
break;
|
||||||
|
|
||||||
case PKCS8_NS_DB:
|
case PKCS8_EMBEDDED_PARAM:
|
||||||
BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
|
BIO_printf(bio_err, "DSA parameters included in PrivateKey\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PKCS8_NEG_PRIVKEY:
|
case PKCS8_NS_DB:
|
||||||
BIO_printf(bio_err, "DSA private key value is negative\n");
|
BIO_printf(bio_err, "DSA public key include in PrivateKey\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case PKCS8_NEG_PRIVKEY:
|
||||||
BIO_printf(bio_err, "Unknown broken type\n");
|
BIO_printf(bio_err, "DSA private key value is negative\n");
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outformat == FORMAT_PEM)
|
|
||||||
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
|
|
||||||
else if (outformat == FORMAT_ASN1)
|
|
||||||
i2d_PrivateKey_bio(out, pkey);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
end:
|
default:
|
||||||
X509_SIG_free(p8);
|
BIO_printf(bio_err, "Unknown broken type\n");
|
||||||
PKCS8_PRIV_KEY_INFO_free(p8inf);
|
break;
|
||||||
EVP_PKEY_free(pkey);
|
}
|
||||||
BIO_free_all(out);
|
}
|
||||||
BIO_free(in);
|
|
||||||
if (passin)
|
|
||||||
OPENSSL_free(passin);
|
|
||||||
if (passout)
|
|
||||||
OPENSSL_free(passout);
|
|
||||||
|
|
||||||
return ret;
|
if (outformat == FORMAT_PEM)
|
||||||
}
|
PEM_write_bio_PrivateKey(out, pkey, NULL, NULL, 0, NULL, passout);
|
||||||
|
else if (outformat == FORMAT_ASN1)
|
||||||
|
i2d_PrivateKey_bio(out, pkey);
|
||||||
|
else {
|
||||||
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
end:
|
||||||
|
X509_SIG_free(p8);
|
||||||
|
PKCS8_PRIV_KEY_INFO_free(p8inf);
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
BIO_free_all(out);
|
||||||
|
BIO_free(in);
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
if (passout)
|
||||||
|
OPENSSL_free(passout);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|||||||
355
apps/pkey.c
355
apps/pkey.c
@@ -1,6 +1,7 @@
|
|||||||
/* apps/pkey.c */
|
/* apps/pkey.c */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 2006
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 2006
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -67,218 +68,184 @@
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
char **args, *infile = NULL, *outfile = NULL;
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
const EVP_CIPHER *cipher = NULL;
|
const EVP_CIPHER *cipher = NULL;
|
||||||
int informat, outformat;
|
int informat, outformat;
|
||||||
int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
|
int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0;
|
||||||
EVP_PKEY *pkey=NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
#endif
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
while (!badarg && *args && *args[0] == '-')
|
while (!badarg && *args && *args[0] == '-') {
|
||||||
{
|
if (!strcmp(*args, "-inform")) {
|
||||||
if (!strcmp(*args,"-inform"))
|
if (args[1]) {
|
||||||
{
|
args++;
|
||||||
if (args[1])
|
informat = str2fmt(*args);
|
||||||
{
|
} else
|
||||||
args++;
|
badarg = 1;
|
||||||
informat=str2fmt(*args);
|
} else if (!strcmp(*args, "-outform")) {
|
||||||
}
|
if (args[1]) {
|
||||||
else badarg = 1;
|
args++;
|
||||||
}
|
outformat = str2fmt(*args);
|
||||||
else if (!strcmp(*args,"-outform"))
|
} else
|
||||||
{
|
badarg = 1;
|
||||||
if (args[1])
|
} else if (!strcmp(*args, "-passin")) {
|
||||||
{
|
if (!args[1])
|
||||||
args++;
|
goto bad;
|
||||||
outformat=str2fmt(*args);
|
passargin = *(++args);
|
||||||
}
|
} else if (!strcmp(*args, "-passout")) {
|
||||||
else badarg = 1;
|
if (!args[1])
|
||||||
}
|
goto bad;
|
||||||
else if (!strcmp(*args,"-passin"))
|
passargout = *(++args);
|
||||||
{
|
}
|
||||||
if (!args[1]) goto bad;
|
|
||||||
passargin= *(++args);
|
|
||||||
}
|
|
||||||
else if (!strcmp(*args,"-passout"))
|
|
||||||
{
|
|
||||||
if (!args[1]) goto bad;
|
|
||||||
passargout= *(++args);
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*args,"-engine") == 0)
|
else if (strcmp(*args, "-engine") == 0) {
|
||||||
{
|
if (!args[1])
|
||||||
if (!args[1]) goto bad;
|
goto bad;
|
||||||
engine= *(++args);
|
engine = *(++args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (!strcmp (*args, "-in"))
|
else if (!strcmp(*args, "-in")) {
|
||||||
{
|
if (args[1]) {
|
||||||
if (args[1])
|
args++;
|
||||||
{
|
infile = *args;
|
||||||
args++;
|
} else
|
||||||
infile = *args;
|
badarg = 1;
|
||||||
}
|
} else if (!strcmp(*args, "-out")) {
|
||||||
else badarg = 1;
|
if (args[1]) {
|
||||||
}
|
args++;
|
||||||
else if (!strcmp (*args, "-out"))
|
outfile = *args;
|
||||||
{
|
} else
|
||||||
if (args[1])
|
badarg = 1;
|
||||||
{
|
} else if (strcmp(*args, "-pubin") == 0) {
|
||||||
args++;
|
pubin = 1;
|
||||||
outfile = *args;
|
pubout = 1;
|
||||||
}
|
pubtext = 1;
|
||||||
else badarg = 1;
|
} else if (strcmp(*args, "-pubout") == 0)
|
||||||
}
|
pubout = 1;
|
||||||
else if (strcmp(*args,"-pubin") == 0)
|
else if (strcmp(*args, "-text_pub") == 0) {
|
||||||
{
|
pubtext = 1;
|
||||||
pubin=1;
|
text = 1;
|
||||||
pubout=1;
|
} else if (strcmp(*args, "-text") == 0)
|
||||||
pubtext=1;
|
text = 1;
|
||||||
}
|
else if (strcmp(*args, "-noout") == 0)
|
||||||
else if (strcmp(*args,"-pubout") == 0)
|
noout = 1;
|
||||||
pubout=1;
|
else {
|
||||||
else if (strcmp(*args,"-text_pub") == 0)
|
cipher = EVP_get_cipherbyname(*args + 1);
|
||||||
{
|
if (!cipher) {
|
||||||
pubtext=1;
|
BIO_printf(bio_err, "Unknown cipher %s\n", *args + 1);
|
||||||
text=1;
|
badarg = 1;
|
||||||
}
|
}
|
||||||
else if (strcmp(*args,"-text") == 0)
|
}
|
||||||
text=1;
|
args++;
|
||||||
else if (strcmp(*args,"-noout") == 0)
|
}
|
||||||
noout=1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cipher = EVP_get_cipherbyname(*args + 1);
|
|
||||||
if (!cipher)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Unknown cipher %s\n",
|
|
||||||
*args + 1);
|
|
||||||
badarg = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
args++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badarg)
|
if (badarg) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "Usage pkey [options]\n");
|
||||||
BIO_printf(bio_err, "Usage pkey [options]\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
BIO_printf(bio_err, "-in file input file\n");
|
||||||
BIO_printf(bio_err, "-in file input file\n");
|
BIO_printf(bio_err, "-inform X input format (DER or PEM)\n");
|
||||||
BIO_printf(bio_err, "-inform X input format (DER or PEM)\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-passin arg input file pass phrase source\n");
|
"-passin arg input file pass phrase source\n");
|
||||||
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
|
BIO_printf(bio_err, "-outform X output format (DER or PEM)\n");
|
||||||
BIO_printf(bio_err, "-out file output file\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf(bio_err, "-passout arg output file pass phrase source\n");
|
BIO_printf(bio_err,
|
||||||
|
"-passout arg output file pass phrase source\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
"-engine e use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
e = setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout))
|
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
{
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile)
|
if (outfile) {
|
||||||
{
|
if (!(out = BIO_new_file(outfile, "wb"))) {
|
||||||
if (!(out = BIO_new_file (outfile, "wb")))
|
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Can't open output file %s\n", outfile);
|
} else {
|
||||||
goto end;
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pubin)
|
if (pubin)
|
||||||
pkey = load_pubkey(bio_err, infile, informat, 1,
|
pkey = load_pubkey(bio_err, infile, informat, 1,
|
||||||
passin, e, "Public Key");
|
passin, e, "Public Key");
|
||||||
else
|
else
|
||||||
pkey = load_key(bio_err, infile, informat, 1,
|
pkey = load_key(bio_err, infile, informat, 1, passin, e, "key");
|
||||||
passin, e, "key");
|
if (!pkey)
|
||||||
if (!pkey)
|
goto end;
|
||||||
goto end;
|
|
||||||
|
|
||||||
if (!noout)
|
if (!noout) {
|
||||||
{
|
if (outformat == FORMAT_PEM) {
|
||||||
if (outformat == FORMAT_PEM)
|
if (pubout)
|
||||||
{
|
PEM_write_bio_PUBKEY(out, pkey);
|
||||||
if (pubout)
|
else
|
||||||
PEM_write_bio_PUBKEY(out,pkey);
|
PEM_write_bio_PrivateKey(out, pkey, cipher,
|
||||||
else
|
NULL, 0, NULL, passout);
|
||||||
PEM_write_bio_PrivateKey(out, pkey, cipher,
|
} else if (outformat == FORMAT_ASN1) {
|
||||||
NULL, 0, NULL, passout);
|
if (pubout)
|
||||||
}
|
i2d_PUBKEY_bio(out, pkey);
|
||||||
else if (outformat == FORMAT_ASN1)
|
else
|
||||||
{
|
i2d_PrivateKey_bio(out, pkey);
|
||||||
if (pubout)
|
} else {
|
||||||
i2d_PUBKEY_bio(out, pkey);
|
BIO_printf(bio_err, "Bad format specified for key\n");
|
||||||
else
|
goto end;
|
||||||
i2d_PrivateKey_bio(out, pkey);
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Bad format specified for key\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (text)
|
if (text) {
|
||||||
{
|
if (pubtext)
|
||||||
if (pubtext)
|
EVP_PKEY_print_public(out, pkey, 0, NULL);
|
||||||
EVP_PKEY_print_public(out, pkey, 0, NULL);
|
else
|
||||||
else
|
EVP_PKEY_print_private(out, pkey, 0, NULL);
|
||||||
EVP_PKEY_print_private(out, pkey, 0, NULL);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
if (passin)
|
if (passin)
|
||||||
OPENSSL_free(passin);
|
OPENSSL_free(passin);
|
||||||
if (passout)
|
if (passout)
|
||||||
OPENSSL_free(passout);
|
OPENSSL_free(passout);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
203
apps/pkeyparam.c
203
apps/pkeyparam.c
@@ -1,6 +1,7 @@
|
|||||||
/* apps/pkeyparam.c */
|
/* apps/pkeyparam.c */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 2006
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 2006
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -67,134 +68,118 @@
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char **args, *infile = NULL, *outfile = NULL;
|
char **args, *infile = NULL, *outfile = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
int text = 0, noout = 0;
|
int text = 0, noout = 0;
|
||||||
EVP_PKEY *pkey=NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
int badarg = 0;
|
int badarg = 0;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
#endif
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
args = argv + 1;
|
args = argv + 1;
|
||||||
while (!badarg && *args && *args[0] == '-')
|
while (!badarg && *args && *args[0] == '-') {
|
||||||
{
|
if (!strcmp(*args, "-in")) {
|
||||||
if (!strcmp (*args, "-in"))
|
if (args[1]) {
|
||||||
{
|
args++;
|
||||||
if (args[1])
|
infile = *args;
|
||||||
{
|
} else
|
||||||
args++;
|
badarg = 1;
|
||||||
infile = *args;
|
} else if (!strcmp(*args, "-out")) {
|
||||||
}
|
if (args[1]) {
|
||||||
else badarg = 1;
|
args++;
|
||||||
}
|
outfile = *args;
|
||||||
else if (!strcmp (*args, "-out"))
|
} else
|
||||||
{
|
badarg = 1;
|
||||||
if (args[1])
|
}
|
||||||
{
|
|
||||||
args++;
|
|
||||||
outfile = *args;
|
|
||||||
}
|
|
||||||
else badarg = 1;
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*args,"-engine") == 0)
|
else if (strcmp(*args, "-engine") == 0) {
|
||||||
{
|
if (!args[1])
|
||||||
if (!args[1]) goto bad;
|
goto bad;
|
||||||
engine= *(++args);
|
engine = *(++args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
else if (strcmp(*args,"-text") == 0)
|
else if (strcmp(*args, "-text") == 0)
|
||||||
text=1;
|
text = 1;
|
||||||
else if (strcmp(*args,"-noout") == 0)
|
else if (strcmp(*args, "-noout") == 0)
|
||||||
noout=1;
|
noout = 1;
|
||||||
args++;
|
args++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (badarg)
|
if (badarg) {
|
||||||
{
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
bad:
|
bad:
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err, "Usage pkeyparam [options]\n");
|
BIO_printf(bio_err, "Usage pkeyparam [options]\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "-in file input file\n");
|
BIO_printf(bio_err, "-in file input file\n");
|
||||||
BIO_printf(bio_err, "-out file output file\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf(bio_err, "-text print parameters as text\n");
|
BIO_printf(bio_err, "-text print parameters as text\n");
|
||||||
BIO_printf(bio_err, "-noout don't output encoded parameters\n");
|
BIO_printf(bio_err,
|
||||||
|
"-noout don't output encoded parameters\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
"-engine e use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (infile)
|
if (infile) {
|
||||||
{
|
if (!(in = BIO_new_file(infile, "r"))) {
|
||||||
if (!(in = BIO_new_file (infile, "r")))
|
BIO_printf(bio_err, "Can't open input file %s\n", infile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Can't open input file %s\n", infile);
|
} else
|
||||||
goto end;
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
in = BIO_new_fp (stdin, BIO_NOCLOSE);
|
|
||||||
|
|
||||||
if (outfile)
|
if (outfile) {
|
||||||
{
|
if (!(out = BIO_new_file(outfile, "w"))) {
|
||||||
if (!(out = BIO_new_file (outfile, "w")))
|
BIO_printf(bio_err, "Can't open output file %s\n", outfile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,
|
}
|
||||||
"Can't open output file %s\n", outfile);
|
} else {
|
||||||
goto end;
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out = BIO_new_fp (stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
pkey = PEM_read_bio_Parameters(in, NULL);
|
pkey = PEM_read_bio_Parameters(in, NULL);
|
||||||
if (!pkey)
|
if (!pkey) {
|
||||||
{
|
BIO_printf(bio_err, "Error reading parameters\n");
|
||||||
BIO_printf(bio_err, "Error reading parameters\n");
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!noout)
|
if (!noout)
|
||||||
PEM_write_bio_Parameters(out,pkey);
|
PEM_write_bio_Parameters(out, pkey);
|
||||||
|
|
||||||
if (text)
|
if (text)
|
||||||
EVP_PKEY_print_params(out, pkey, 0, NULL);
|
EVP_PKEY_print_params(out, pkey, 0, NULL);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
EVP_PKEY_free(pkey);
|
EVP_PKEY_free(pkey);
|
||||||
BIO_free_all(out);
|
BIO_free_all(out);
|
||||||
BIO_free(in);
|
BIO_free(in);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
853
apps/pkeyutl.c
853
apps/pkeyutl.c
@@ -1,5 +1,6 @@
|
|||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 2006.
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 2006.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2006 The OpenSSL Project. All rights reserved.
|
||||||
@@ -9,7 +10,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -55,16 +56,15 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
|
|
||||||
#define KEY_PRIVKEY 1
|
#define KEY_PRIVKEY 1
|
||||||
#define KEY_PUBKEY 2
|
#define KEY_PUBKEY 2
|
||||||
#define KEY_CERT 3
|
#define KEY_CERT 3
|
||||||
|
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
|
||||||
@@ -73,498 +73,483 @@ static void usage(void);
|
|||||||
#define PROG pkeyutl_main
|
#define PROG pkeyutl_main
|
||||||
|
|
||||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||||
char *keyfile, int keyform, int key_type,
|
const char *keyfile, int keyform, int key_type,
|
||||||
char *passargin, int pkey_op, ENGINE *e);
|
char *passargin, int pkey_op, ENGINE *e,
|
||||||
|
int impl);
|
||||||
|
|
||||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||||
const char *file);
|
const char *file, ENGINE* e);
|
||||||
|
|
||||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
||||||
unsigned char *out, size_t *poutlen,
|
unsigned char *out, size_t *poutlen,
|
||||||
unsigned char *in, size_t inlen);
|
unsigned char *in, size_t inlen);
|
||||||
|
|
||||||
int MAIN(int argc, char **);
|
int MAIN(int argc, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
char *infile = NULL, *outfile = NULL, *sigfile = NULL;
|
char *infile = NULL, *outfile = NULL, *sigfile = NULL;
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
|
int pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY;
|
||||||
int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
|
int keyform = FORMAT_PEM, peerform = FORMAT_PEM;
|
||||||
char badarg = 0, rev = 0;
|
char badarg = 0, rev = 0;
|
||||||
char hexdump = 0, asn1parse = 0;
|
char hexdump = 0, asn1parse = 0;
|
||||||
EVP_PKEY_CTX *ctx = NULL;
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
char *passargin = NULL;
|
char *passargin = NULL;
|
||||||
int keysize = -1;
|
int keysize = -1;
|
||||||
|
int engine_impl = 0;
|
||||||
|
unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
|
||||||
|
size_t buf_outlen = 0;
|
||||||
|
int buf_inlen = 0, siglen = -1;
|
||||||
|
const char *inkey = NULL;
|
||||||
|
const char *peerkey = NULL;
|
||||||
|
STACK_OF(OPENSSL_STRING) *pkeyopts = NULL;
|
||||||
|
|
||||||
unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL;
|
int ret = 1, rv = -1;
|
||||||
size_t buf_outlen;
|
|
||||||
int buf_inlen = 0, siglen = -1;
|
|
||||||
|
|
||||||
int ret = 1, rv = -1;
|
argc--;
|
||||||
|
argv++;
|
||||||
|
|
||||||
argc--;
|
if (!bio_err)
|
||||||
argv++;
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
if (!load_config(bio_err, NULL))
|
||||||
|
goto end;
|
||||||
|
ERR_load_crypto_strings();
|
||||||
|
OpenSSL_add_all_algorithms();
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
while (argc >= 1) {
|
||||||
goto end;
|
if (!strcmp(*argv, "-in")) {
|
||||||
ERR_load_crypto_strings();
|
if (--argc < 1)
|
||||||
OpenSSL_add_all_algorithms();
|
badarg = 1;
|
||||||
|
else
|
||||||
while(argc >= 1)
|
infile = *(++argv);
|
||||||
{
|
} else if (!strcmp(*argv, "-out")) {
|
||||||
if (!strcmp(*argv,"-in"))
|
if (--argc < 1)
|
||||||
{
|
badarg = 1;
|
||||||
if (--argc < 1) badarg = 1;
|
else
|
||||||
else infile= *(++argv);
|
outfile = *(++argv);
|
||||||
}
|
} else if (!strcmp(*argv, "-sigfile")) {
|
||||||
else if (!strcmp(*argv,"-out"))
|
if (--argc < 1)
|
||||||
{
|
badarg = 1;
|
||||||
if (--argc < 1) badarg = 1;
|
else
|
||||||
else outfile= *(++argv);
|
sigfile = *(++argv);
|
||||||
}
|
} else if (!strcmp(*argv, "-inkey")) {
|
||||||
else if (!strcmp(*argv,"-sigfile"))
|
if (--argc < 1)
|
||||||
{
|
badarg = 1;
|
||||||
if (--argc < 1) badarg = 1;
|
else
|
||||||
else sigfile= *(++argv);
|
inkey = *++argv;
|
||||||
}
|
} else if (!strcmp(*argv, "-peerkey")) {
|
||||||
else if(!strcmp(*argv, "-inkey"))
|
if (--argc < 1)
|
||||||
{
|
badarg = 1;
|
||||||
if (--argc < 1)
|
else
|
||||||
badarg = 1;
|
peerkey = *++argv;
|
||||||
else
|
} else if (!strcmp(*argv, "-passin")) {
|
||||||
{
|
if (--argc < 1)
|
||||||
ctx = init_ctx(&keysize,
|
badarg = 1;
|
||||||
*(++argv), keyform, key_type,
|
else
|
||||||
passargin, pkey_op, e);
|
passargin = *(++argv);
|
||||||
if (!ctx)
|
} else if (strcmp(*argv, "-peerform") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
BIO_puts(bio_err,
|
badarg = 1;
|
||||||
"Error initializing context\n");
|
else
|
||||||
ERR_print_errors(bio_err);
|
peerform = str2fmt(*(++argv));
|
||||||
badarg = 1;
|
} else if (strcmp(*argv, "-keyform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
}
|
badarg = 1;
|
||||||
}
|
else
|
||||||
else if (!strcmp(*argv,"-peerkey"))
|
keyform = str2fmt(*(++argv));
|
||||||
{
|
}
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else if (!setup_peer(bio_err, ctx, peerform, *(++argv)))
|
|
||||||
badarg = 1;
|
|
||||||
}
|
|
||||||
else if (!strcmp(*argv,"-passin"))
|
|
||||||
{
|
|
||||||
if (--argc < 1) badarg = 1;
|
|
||||||
else passargin= *(++argv);
|
|
||||||
}
|
|
||||||
else if (strcmp(*argv,"-peerform") == 0)
|
|
||||||
{
|
|
||||||
if (--argc < 1) badarg = 1;
|
|
||||||
else peerform=str2fmt(*(++argv));
|
|
||||||
}
|
|
||||||
else if (strcmp(*argv,"-keyform") == 0)
|
|
||||||
{
|
|
||||||
if (--argc < 1) badarg = 1;
|
|
||||||
else keyform=str2fmt(*(++argv));
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if(!strcmp(*argv, "-engine"))
|
else if (!strcmp(*argv, "-engine")) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1)
|
badarg = 1;
|
||||||
badarg = 1;
|
else
|
||||||
else
|
e = setup_engine(bio_err, *(++argv), 0);
|
||||||
e = setup_engine(bio_err, *(++argv), 0);
|
} else if (!strcmp(*argv, "-engine_impl")) {
|
||||||
}
|
engine_impl = 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else if(!strcmp(*argv, "-pubin"))
|
else if (!strcmp(*argv, "-pubin"))
|
||||||
key_type = KEY_PUBKEY;
|
key_type = KEY_PUBKEY;
|
||||||
else if(!strcmp(*argv, "-certin"))
|
else if (!strcmp(*argv, "-certin"))
|
||||||
key_type = KEY_CERT;
|
key_type = KEY_CERT;
|
||||||
else if(!strcmp(*argv, "-asn1parse"))
|
else if (!strcmp(*argv, "-asn1parse"))
|
||||||
asn1parse = 1;
|
asn1parse = 1;
|
||||||
else if(!strcmp(*argv, "-hexdump"))
|
else if (!strcmp(*argv, "-hexdump"))
|
||||||
hexdump = 1;
|
hexdump = 1;
|
||||||
else if(!strcmp(*argv, "-sign"))
|
else if (!strcmp(*argv, "-sign"))
|
||||||
pkey_op = EVP_PKEY_OP_SIGN;
|
pkey_op = EVP_PKEY_OP_SIGN;
|
||||||
else if(!strcmp(*argv, "-verify"))
|
else if (!strcmp(*argv, "-verify"))
|
||||||
pkey_op = EVP_PKEY_OP_VERIFY;
|
pkey_op = EVP_PKEY_OP_VERIFY;
|
||||||
else if(!strcmp(*argv, "-verifyrecover"))
|
else if (!strcmp(*argv, "-verifyrecover"))
|
||||||
pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
|
pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
|
||||||
else if(!strcmp(*argv, "-rev"))
|
else if (!strcmp(*argv, "-encrypt"))
|
||||||
rev = 1;
|
pkey_op = EVP_PKEY_OP_ENCRYPT;
|
||||||
else if(!strcmp(*argv, "-encrypt"))
|
else if (!strcmp(*argv, "-decrypt"))
|
||||||
pkey_op = EVP_PKEY_OP_ENCRYPT;
|
pkey_op = EVP_PKEY_OP_DECRYPT;
|
||||||
else if(!strcmp(*argv, "-decrypt"))
|
else if (!strcmp(*argv, "-derive"))
|
||||||
pkey_op = EVP_PKEY_OP_DECRYPT;
|
pkey_op = EVP_PKEY_OP_DERIVE;
|
||||||
else if(!strcmp(*argv, "-derive"))
|
else if (!strcmp(*argv, "-rev"))
|
||||||
pkey_op = EVP_PKEY_OP_DERIVE;
|
rev = 1;
|
||||||
else if (strcmp(*argv,"-pkeyopt") == 0)
|
else if (strcmp(*argv, "-pkeyopt") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1)
|
badarg = 1;
|
||||||
badarg = 1;
|
else if ((pkeyopts == NULL &&
|
||||||
else if (!ctx)
|
(pkeyopts = sk_OPENSSL_STRING_new_null()) == NULL) ||
|
||||||
{
|
sk_OPENSSL_STRING_push(pkeyopts, *++argv) == 0) {
|
||||||
BIO_puts(bio_err,
|
BIO_puts(bio_err, "out of memory\n");
|
||||||
"-pkeyopt command before -inkey\n");
|
goto end;
|
||||||
badarg = 1;
|
}
|
||||||
}
|
} else
|
||||||
else if (pkey_ctrl_string(ctx, *(++argv)) <= 0)
|
badarg = 1;
|
||||||
{
|
if (badarg) {
|
||||||
BIO_puts(bio_err, "parameter setting error\n");
|
usage();
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
argc--;
|
||||||
}
|
argv++;
|
||||||
else badarg = 1;
|
}
|
||||||
if(badarg)
|
|
||||||
{
|
|
||||||
usage();
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx)
|
if (inkey == NULL ||
|
||||||
{
|
(peerkey != NULL && pkey_op != EVP_PKEY_OP_DERIVE)) {
|
||||||
usage();
|
usage();
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
ctx = init_ctx(&keysize, inkey, keyform, key_type,
|
||||||
|
passargin, pkey_op, e, engine_impl);
|
||||||
|
if (!ctx) {
|
||||||
|
BIO_puts(bio_err, "Error initializing context\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (peerkey != NULL && !setup_peer(bio_err, ctx, peerform, peerkey, e)) {
|
||||||
|
BIO_puts(bio_err, "Error setting up peer key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (pkeyopts != NULL) {
|
||||||
|
int num = sk_OPENSSL_STRING_num(pkeyopts);
|
||||||
|
int i;
|
||||||
|
|
||||||
if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY))
|
for (i = 0; i < num; ++i) {
|
||||||
{
|
const char *opt = sk_OPENSSL_STRING_value(pkeyopts, i);
|
||||||
BIO_puts(bio_err, "Signature file specified for non verify\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY))
|
if (pkey_ctrl_string(ctx, opt) <= 0) {
|
||||||
{
|
BIO_puts(bio_err, "parameter setting error\n");
|
||||||
BIO_puts(bio_err, "No signature file specified for verify\n");
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) {
|
||||||
|
BIO_puts(bio_err, "Signature file specified for non verify\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) {
|
||||||
|
BIO_puts(bio_err, "No signature file specified for verify\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: seed PRNG only if needed */
|
/* FIXME: seed PRNG only if needed */
|
||||||
app_RAND_load_file(NULL, bio_err, 0);
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
|
|
||||||
if (pkey_op != EVP_PKEY_OP_DERIVE)
|
if (pkey_op != EVP_PKEY_OP_DERIVE) {
|
||||||
{
|
if (infile) {
|
||||||
if(infile)
|
if (!(in = BIO_new_file(infile, "rb"))) {
|
||||||
{
|
BIO_puts(bio_err, "Error Opening Input File\n");
|
||||||
if(!(in = BIO_new_file(infile, "rb")))
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_puts(bio_err,
|
}
|
||||||
"Error Opening Input File\n");
|
} else
|
||||||
ERR_print_errors(bio_err);
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(outfile)
|
if (outfile) {
|
||||||
{
|
if (!(out = BIO_new_file(outfile, "wb"))) {
|
||||||
if(!(out = BIO_new_file(outfile, "wb")))
|
BIO_printf(bio_err, "Error Creating Output File\n");
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(bio_err, "Error Creating Output File\n");
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
} else {
|
||||||
}
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sigfile)
|
if (sigfile) {
|
||||||
{
|
BIO *sigbio = BIO_new_file(sigfile, "rb");
|
||||||
BIO *sigbio = BIO_new_file(sigfile, "rb");
|
if (!sigbio) {
|
||||||
if (!sigbio)
|
BIO_printf(bio_err, "Can't open signature file %s\n", sigfile);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err, "Can't open signature file %s\n",
|
}
|
||||||
sigfile);
|
siglen = bio_to_mem(&sig, keysize * 10, sigbio);
|
||||||
goto end;
|
BIO_free(sigbio);
|
||||||
}
|
if (siglen < 0) {
|
||||||
siglen = bio_to_mem(&sig, keysize * 10, sigbio);
|
BIO_printf(bio_err, "Error reading signature data\n");
|
||||||
BIO_free(sigbio);
|
goto end;
|
||||||
if (siglen <= 0)
|
}
|
||||||
{
|
}
|
||||||
BIO_printf(bio_err, "Error reading signature data\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (in)
|
|
||||||
{
|
|
||||||
/* Read the input data */
|
|
||||||
buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
|
|
||||||
if(buf_inlen <= 0)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err, "Error reading input Data\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if(rev)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
unsigned char ctmp;
|
|
||||||
size_t l = (size_t)buf_inlen;
|
|
||||||
for(i = 0; i < l/2; i++)
|
|
||||||
{
|
|
||||||
ctmp = buf_in[i];
|
|
||||||
buf_in[i] = buf_in[l - 1 - i];
|
|
||||||
buf_in[l - 1 - i] = ctmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pkey_op == EVP_PKEY_OP_VERIFY)
|
if (in) {
|
||||||
{
|
/* Read the input data */
|
||||||
rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
|
buf_inlen = bio_to_mem(&buf_in, keysize * 10, in);
|
||||||
buf_in, (size_t)buf_inlen);
|
if (buf_inlen < 0) {
|
||||||
if (rv == 0)
|
BIO_printf(bio_err, "Error reading input Data\n");
|
||||||
BIO_puts(out, "Signature Verification Failure\n");
|
exit(1);
|
||||||
else if (rv == 1)
|
}
|
||||||
BIO_puts(out, "Signature Verified Successfully\n");
|
if (rev) {
|
||||||
if (rv >= 0)
|
size_t i;
|
||||||
goto end;
|
unsigned char ctmp;
|
||||||
}
|
size_t l = (size_t)buf_inlen;
|
||||||
else
|
for (i = 0; i < l / 2; i++) {
|
||||||
{
|
ctmp = buf_in[i];
|
||||||
rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
|
buf_in[i] = buf_in[l - 1 - i];
|
||||||
buf_in, (size_t)buf_inlen);
|
buf_in[l - 1 - i] = ctmp;
|
||||||
if (rv > 0)
|
}
|
||||||
{
|
}
|
||||||
buf_out = OPENSSL_malloc(buf_outlen);
|
}
|
||||||
if (!buf_out)
|
|
||||||
rv = -1;
|
|
||||||
else
|
|
||||||
rv = do_keyop(ctx, pkey_op,
|
|
||||||
buf_out, (size_t *)&buf_outlen,
|
|
||||||
buf_in, (size_t)buf_inlen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(rv <= 0)
|
if (pkey_op == EVP_PKEY_OP_VERIFY) {
|
||||||
{
|
rv = EVP_PKEY_verify(ctx, sig, (size_t)siglen,
|
||||||
BIO_printf(bio_err, "Public Key operation error\n");
|
buf_in, (size_t)buf_inlen);
|
||||||
ERR_print_errors(bio_err);
|
if (rv == 0)
|
||||||
goto end;
|
BIO_puts(out, "Signature Verification Failure\n");
|
||||||
}
|
else if (rv == 1)
|
||||||
ret = 0;
|
BIO_puts(out, "Signature Verified Successfully\n");
|
||||||
if(asn1parse)
|
if (rv >= 0)
|
||||||
{
|
goto end;
|
||||||
if(!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
|
} else {
|
||||||
ERR_print_errors(bio_err);
|
rv = do_keyop(ctx, pkey_op, NULL, (size_t *)&buf_outlen,
|
||||||
}
|
buf_in, (size_t)buf_inlen);
|
||||||
else if(hexdump)
|
if (rv > 0 && buf_outlen != 0) {
|
||||||
BIO_dump(out, (char *)buf_out, buf_outlen);
|
buf_out = OPENSSL_malloc(buf_outlen);
|
||||||
else
|
if (!buf_out)
|
||||||
BIO_write(out, buf_out, buf_outlen);
|
rv = -1;
|
||||||
|
else
|
||||||
|
rv = do_keyop(ctx, pkey_op,
|
||||||
|
buf_out, (size_t *)&buf_outlen,
|
||||||
|
buf_in, (size_t)buf_inlen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
end:
|
if (rv <= 0) {
|
||||||
if (ctx)
|
BIO_printf(bio_err, "Public Key operation error\n");
|
||||||
EVP_PKEY_CTX_free(ctx);
|
ERR_print_errors(bio_err);
|
||||||
BIO_free(in);
|
goto end;
|
||||||
BIO_free_all(out);
|
}
|
||||||
if (buf_in)
|
ret = 0;
|
||||||
OPENSSL_free(buf_in);
|
if (asn1parse) {
|
||||||
if (buf_out)
|
if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1))
|
||||||
OPENSSL_free(buf_out);
|
ERR_print_errors(bio_err);
|
||||||
if (sig)
|
} else if (hexdump)
|
||||||
OPENSSL_free(sig);
|
BIO_dump(out, (char *)buf_out, buf_outlen);
|
||||||
return ret;
|
else
|
||||||
|
BIO_write(out, buf_out, buf_outlen);
|
||||||
|
|
||||||
|
end:
|
||||||
|
if (ctx)
|
||||||
|
EVP_PKEY_CTX_free(ctx);
|
||||||
|
BIO_free(in);
|
||||||
|
BIO_free_all(out);
|
||||||
|
if (buf_in != NULL)
|
||||||
|
OPENSSL_free(buf_in);
|
||||||
|
if (buf_out != NULL)
|
||||||
|
OPENSSL_free(buf_out);
|
||||||
|
if (sig != NULL)
|
||||||
|
OPENSSL_free(sig);
|
||||||
|
if (pkeyopts != NULL)
|
||||||
|
sk_OPENSSL_STRING_free(pkeyopts);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage()
|
static void usage()
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
|
BIO_printf(bio_err, "Usage: pkeyutl [options]\n");
|
||||||
BIO_printf(bio_err, "-in file input file\n");
|
BIO_printf(bio_err, "-in file input file\n");
|
||||||
BIO_printf(bio_err, "-out file output file\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf(bio_err, "-sigfile file signature file (verify operation only)\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-inkey file input key\n");
|
"-sigfile file signature file (verify operation only)\n");
|
||||||
BIO_printf(bio_err, "-keyform arg private key format - default PEM\n");
|
BIO_printf(bio_err, "-inkey file input key\n");
|
||||||
BIO_printf(bio_err, "-pubin input is a public key\n");
|
BIO_printf(bio_err, "-keyform arg private key format - default PEM\n");
|
||||||
BIO_printf(bio_err, "-certin input is a certificate carrying a public key\n");
|
BIO_printf(bio_err, "-pubin input is a public key\n");
|
||||||
BIO_printf(bio_err, "-pkeyopt X:Y public key options\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-sign sign with private key\n");
|
"-certin input is a certificate carrying a public key\n");
|
||||||
BIO_printf(bio_err, "-verify verify with public key\n");
|
BIO_printf(bio_err, "-pkeyopt X:Y public key options\n");
|
||||||
BIO_printf(bio_err, "-verifyrecover verify with public key, recover original data\n");
|
BIO_printf(bio_err, "-sign sign with private key\n");
|
||||||
BIO_printf(bio_err, "-encrypt encrypt with public key\n");
|
BIO_printf(bio_err, "-verify verify with public key\n");
|
||||||
BIO_printf(bio_err, "-decrypt decrypt with private key\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-derive derive shared secret\n");
|
"-verifyrecover verify with public key, recover original data\n");
|
||||||
BIO_printf(bio_err, "-hexdump hex dump output\n");
|
BIO_printf(bio_err, "-encrypt encrypt with public key\n");
|
||||||
|
BIO_printf(bio_err, "-decrypt decrypt with private key\n");
|
||||||
|
BIO_printf(bio_err, "-derive derive shared secret\n");
|
||||||
|
BIO_printf(bio_err, "-hexdump hex dump output\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
"-engine e use engine e, maybe a hardware device, for loading keys.\n");
|
||||||
|
BIO_printf(bio_err, "-engine_impl also use engine given by -engine for crypto operations\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err, "-passin arg pass phrase source\n");
|
BIO_printf(bio_err, "-passin arg pass phrase source\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
static EVP_PKEY_CTX *init_ctx(int *pkeysize,
|
||||||
char *keyfile, int keyform, int key_type,
|
const char *keyfile, int keyform, int key_type,
|
||||||
char *passargin, int pkey_op, ENGINE *e)
|
char *passargin, int pkey_op, ENGINE *e,
|
||||||
{
|
int engine_impl)
|
||||||
EVP_PKEY *pkey = NULL;
|
{
|
||||||
EVP_PKEY_CTX *ctx = NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
char *passin = NULL;
|
EVP_PKEY_CTX *ctx = NULL;
|
||||||
int rv = -1;
|
ENGINE *impl = NULL;
|
||||||
X509 *x;
|
char *passin = NULL;
|
||||||
if(((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT)
|
int rv = -1;
|
||||||
|| (pkey_op == EVP_PKEY_OP_DERIVE))
|
X509 *x;
|
||||||
&& (key_type != KEY_PRIVKEY))
|
if (((pkey_op == EVP_PKEY_OP_SIGN) || (pkey_op == EVP_PKEY_OP_DECRYPT)
|
||||||
{
|
|| (pkey_op == EVP_PKEY_OP_DERIVE))
|
||||||
BIO_printf(bio_err, "A private key is needed for this operation\n");
|
&& (key_type != KEY_PRIVKEY)) {
|
||||||
goto end;
|
BIO_printf(bio_err, "A private key is needed for this operation\n");
|
||||||
}
|
goto end;
|
||||||
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL))
|
}
|
||||||
{
|
if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
|
||||||
BIO_printf(bio_err, "Error getting password\n");
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
switch(key_type)
|
switch (key_type) {
|
||||||
{
|
case KEY_PRIVKEY:
|
||||||
case KEY_PRIVKEY:
|
pkey = load_key(bio_err, keyfile, keyform, 0,
|
||||||
pkey = load_key(bio_err, keyfile, keyform, 0,
|
passin, e, "Private Key");
|
||||||
passin, e, "Private Key");
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_PUBKEY:
|
case KEY_PUBKEY:
|
||||||
pkey = load_pubkey(bio_err, keyfile, keyform, 0,
|
pkey = load_pubkey(bio_err, keyfile, keyform, 0,
|
||||||
NULL, e, "Public Key");
|
NULL, e, "Public Key");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_CERT:
|
case KEY_CERT:
|
||||||
x = load_cert(bio_err, keyfile, keyform,
|
x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
|
||||||
NULL, e, "Certificate");
|
if (x) {
|
||||||
if(x)
|
pkey = X509_get_pubkey(x);
|
||||||
{
|
X509_free(x);
|
||||||
pkey = X509_get_pubkey(x);
|
}
|
||||||
X509_free(x);
|
break;
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*pkeysize = EVP_PKEY_size(pkey);
|
*pkeysize = EVP_PKEY_size(pkey);
|
||||||
|
|
||||||
if (!pkey)
|
if (!pkey)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
|
if (engine_impl)
|
||||||
|
impl = e;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ctx = EVP_PKEY_CTX_new(pkey, impl);
|
||||||
|
|
||||||
|
EVP_PKEY_free(pkey);
|
||||||
|
|
||||||
ctx = EVP_PKEY_CTX_new(pkey, e);
|
if (!ctx)
|
||||||
|
goto end;
|
||||||
|
|
||||||
EVP_PKEY_free(pkey);
|
switch (pkey_op) {
|
||||||
|
case EVP_PKEY_OP_SIGN:
|
||||||
|
rv = EVP_PKEY_sign_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
if (!ctx)
|
case EVP_PKEY_OP_VERIFY:
|
||||||
goto end;
|
rv = EVP_PKEY_verify_init(ctx);
|
||||||
|
break;
|
||||||
|
|
||||||
switch(pkey_op)
|
case EVP_PKEY_OP_VERIFYRECOVER:
|
||||||
{
|
rv = EVP_PKEY_verify_recover_init(ctx);
|
||||||
case EVP_PKEY_OP_SIGN:
|
break;
|
||||||
rv = EVP_PKEY_sign_init(ctx);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EVP_PKEY_OP_VERIFY:
|
case EVP_PKEY_OP_ENCRYPT:
|
||||||
rv = EVP_PKEY_verify_init(ctx);
|
rv = EVP_PKEY_encrypt_init(ctx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVP_PKEY_OP_VERIFYRECOVER:
|
case EVP_PKEY_OP_DECRYPT:
|
||||||
rv = EVP_PKEY_verify_recover_init(ctx);
|
rv = EVP_PKEY_decrypt_init(ctx);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVP_PKEY_OP_ENCRYPT:
|
case EVP_PKEY_OP_DERIVE:
|
||||||
rv = EVP_PKEY_encrypt_init(ctx);
|
rv = EVP_PKEY_derive_init(ctx);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case EVP_PKEY_OP_DECRYPT:
|
if (rv <= 0) {
|
||||||
rv = EVP_PKEY_decrypt_init(ctx);
|
EVP_PKEY_CTX_free(ctx);
|
||||||
break;
|
ctx = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
case EVP_PKEY_OP_DERIVE:
|
end:
|
||||||
rv = EVP_PKEY_derive_init(ctx);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rv <= 0)
|
if (passin)
|
||||||
{
|
OPENSSL_free(passin);
|
||||||
EVP_PKEY_CTX_free(ctx);
|
|
||||||
ctx = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
return ctx;
|
||||||
|
|
||||||
if (passin)
|
}
|
||||||
OPENSSL_free(passin);
|
|
||||||
|
|
||||||
return ctx;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
static int setup_peer(BIO *err, EVP_PKEY_CTX *ctx, int peerform,
|
||||||
const char *file)
|
const char *file, ENGINE* e)
|
||||||
{
|
{
|
||||||
EVP_PKEY *peer = NULL;
|
EVP_PKEY *peer = NULL;
|
||||||
int ret;
|
ENGINE* engine = NULL;
|
||||||
if (!ctx)
|
int ret;
|
||||||
{
|
|
||||||
BIO_puts(err, "-peerkey command before -inkey\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
peer = load_pubkey(bio_err, file, peerform, 0, NULL, NULL, "Peer Key");
|
|
||||||
|
|
||||||
if (!peer)
|
if (peerform == FORMAT_ENGINE)
|
||||||
{
|
engine = e;
|
||||||
BIO_printf(bio_err, "Error reading peer key %s\n", file);
|
peer = load_pubkey(bio_err, file, peerform, 0, NULL, engine, "Peer Key");
|
||||||
ERR_print_errors(err);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = EVP_PKEY_derive_set_peer(ctx, peer);
|
if (!peer) {
|
||||||
|
BIO_printf(bio_err, "Error reading peer key %s\n", file);
|
||||||
|
ERR_print_errors(err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
EVP_PKEY_free(peer);
|
ret = EVP_PKEY_derive_set_peer(ctx, peer);
|
||||||
if (ret <= 0)
|
|
||||||
ERR_print_errors(err);
|
EVP_PKEY_free(peer);
|
||||||
return ret;
|
if (ret <= 0)
|
||||||
}
|
ERR_print_errors(err);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
static int do_keyop(EVP_PKEY_CTX *ctx, int pkey_op,
|
||||||
unsigned char *out, size_t *poutlen,
|
unsigned char *out, size_t *poutlen,
|
||||||
unsigned char *in, size_t inlen)
|
unsigned char *in, size_t inlen)
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
switch(pkey_op)
|
switch (pkey_op) {
|
||||||
{
|
case EVP_PKEY_OP_VERIFYRECOVER:
|
||||||
case EVP_PKEY_OP_VERIFYRECOVER:
|
rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
|
||||||
rv = EVP_PKEY_verify_recover(ctx, out, poutlen, in, inlen);
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case EVP_PKEY_OP_SIGN:
|
case EVP_PKEY_OP_SIGN:
|
||||||
rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
|
rv = EVP_PKEY_sign(ctx, out, poutlen, in, inlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVP_PKEY_OP_ENCRYPT:
|
case EVP_PKEY_OP_ENCRYPT:
|
||||||
rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
|
rv = EVP_PKEY_encrypt(ctx, out, poutlen, in, inlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVP_PKEY_OP_DECRYPT:
|
case EVP_PKEY_OP_DECRYPT:
|
||||||
rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
|
rv = EVP_PKEY_decrypt(ctx, out, poutlen, in, inlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVP_PKEY_OP_DERIVE:
|
case EVP_PKEY_OP_DERIVE:
|
||||||
rv = EVP_PKEY_derive(ctx, out, poutlen);
|
rv = EVP_PKEY_derive(ctx, out, poutlen);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|||||||
149
apps/prime.c
149
apps/prime.c
@@ -6,7 +6,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -52,109 +52,100 @@
|
|||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#include <openssl/bn.h>
|
#include <openssl/bn.h>
|
||||||
|
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG prime_main
|
#define PROG prime_main
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int hex=0;
|
int hex = 0;
|
||||||
int checks=20;
|
int checks = 20;
|
||||||
int generate=0;
|
int generate = 0;
|
||||||
int bits=0;
|
int bits = 0;
|
||||||
int safe=0;
|
int safe = 0;
|
||||||
BIGNUM *bn=NULL;
|
BIGNUM *bn = NULL;
|
||||||
BIO *bio_out;
|
BIO *bio_out;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
--argc;
|
--argc;
|
||||||
++argv;
|
++argv;
|
||||||
while (argc >= 1 && **argv == '-')
|
while (argc >= 1 && **argv == '-') {
|
||||||
{
|
if (!strcmp(*argv, "-hex"))
|
||||||
if(!strcmp(*argv,"-hex"))
|
hex = 1;
|
||||||
hex=1;
|
else if (!strcmp(*argv, "-generate"))
|
||||||
else if(!strcmp(*argv,"-generate"))
|
generate = 1;
|
||||||
generate=1;
|
else if (!strcmp(*argv, "-bits"))
|
||||||
else if(!strcmp(*argv,"-bits"))
|
if (--argc < 1)
|
||||||
if(--argc < 1)
|
goto bad;
|
||||||
goto bad;
|
else
|
||||||
else
|
bits = atoi(*++argv);
|
||||||
bits=atoi(*++argv);
|
else if (!strcmp(*argv, "-safe"))
|
||||||
else if(!strcmp(*argv,"-safe"))
|
safe = 1;
|
||||||
safe=1;
|
else if (!strcmp(*argv, "-checks"))
|
||||||
else if(!strcmp(*argv,"-checks"))
|
if (--argc < 1)
|
||||||
if(--argc < 1)
|
goto bad;
|
||||||
goto bad;
|
else
|
||||||
else
|
checks = atoi(*++argv);
|
||||||
checks=atoi(*++argv);
|
else {
|
||||||
else
|
BIO_printf(bio_err, "Unknown option '%s'\n", *argv);
|
||||||
{
|
goto bad;
|
||||||
BIO_printf(bio_err,"Unknown option '%s'\n",*argv);
|
}
|
||||||
goto bad;
|
--argc;
|
||||||
}
|
++argv;
|
||||||
--argc;
|
}
|
||||||
++argv;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (argv[0] == NULL && !generate)
|
if (argv[0] == NULL && !generate) {
|
||||||
{
|
BIO_printf(bio_err, "No prime specified\n");
|
||||||
BIO_printf(bio_err,"No prime specified\n");
|
goto bad;
|
||||||
goto bad;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ((bio_out=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_out = BIO_new(BIO_s_file())) != NULL) {
|
||||||
{
|
BIO_set_fp(bio_out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(bio_out,stdout,BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
bio_out = BIO_push(tmpbio, bio_out);
|
bio_out = BIO_push(tmpbio, bio_out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(generate)
|
if (generate) {
|
||||||
{
|
char *s;
|
||||||
char *s;
|
|
||||||
|
|
||||||
if(!bits)
|
if (!bits) {
|
||||||
{
|
BIO_printf(bio_err, "Specifiy the number of bits.\n");
|
||||||
BIO_printf(bio_err,"Specifiy the number of bits.\n");
|
return 1;
|
||||||
return 1;
|
}
|
||||||
}
|
bn = BN_new();
|
||||||
bn=BN_new();
|
BN_generate_prime_ex(bn, bits, safe, NULL, NULL, NULL);
|
||||||
BN_generate_prime_ex(bn,bits,safe,NULL,NULL,NULL);
|
s = hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
|
||||||
s=hex ? BN_bn2hex(bn) : BN_bn2dec(bn);
|
BIO_printf(bio_out, "%s\n", s);
|
||||||
BIO_printf(bio_out,"%s\n",s);
|
OPENSSL_free(s);
|
||||||
OPENSSL_free(s);
|
} else {
|
||||||
}
|
if (hex)
|
||||||
else
|
BN_hex2bn(&bn, argv[0]);
|
||||||
{
|
else
|
||||||
if(hex)
|
BN_dec2bn(&bn, argv[0]);
|
||||||
BN_hex2bn(&bn,argv[0]);
|
|
||||||
else
|
|
||||||
BN_dec2bn(&bn,argv[0]);
|
|
||||||
|
|
||||||
BN_print(bio_out,bn);
|
BN_print(bio_out, bn);
|
||||||
BIO_printf(bio_out," is %sprime\n",
|
BIO_printf(bio_out, " is %sprime\n",
|
||||||
BN_is_prime_ex(bn,checks,NULL,NULL) ? "" : "not ");
|
BN_is_prime_ex(bn, checks, NULL, NULL) ? "" : "not ");
|
||||||
}
|
}
|
||||||
|
|
||||||
BN_free(bn);
|
BN_free(bn);
|
||||||
BIO_free_all(bio_out);
|
BIO_free_all(bio_out);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
BIO_printf(bio_err,"options are\n");
|
BIO_printf(bio_err, "options are\n");
|
||||||
BIO_printf(bio_err,"%-14s hex\n","-hex");
|
BIO_printf(bio_err, "%-14s hex\n", "-hex");
|
||||||
BIO_printf(bio_err,"%-14s number of checks\n","-checks <n>");
|
BIO_printf(bio_err, "%-14s number of checks\n", "-checks <n>");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,18 @@
|
|||||||
-----BEGIN PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMo7DFNMqywUA1O/
|
Proc-Type: 4,ENCRYPTED
|
||||||
qvWqCOm6rGrUAcR+dKsSXw6y2qiKO7APDDyotc0b4Mxwqjga98npex2RBIwUoCGJ
|
DEK-Info: DES-EDE3-CBC,BA26229A1653B7FF
|
||||||
iEmMXo/a8RbXVUZ+ZwcAX7PC+XeXVC5qoajaBBkd2MvYmib/2PqnNrgvhHsUL5dO
|
|
||||||
xhC7cRqxLM/g45k3Yyw+nGa+WkTdAgMBAAECgYBMBT5w4dVG0I8foGFnz+9hzWab
|
6nhWG8PKhTPO/s3ZvjUa6226NlKdvPDZFsNXOOoSUs9ejxpb/aj5huhs6qRYzsz9
|
||||||
Ee9IKjE5TcKmB93ilXQyjrWO5+zPmbc7ou6aAKk9IaPCTY1kCyzW7pho7Xdt+RFq
|
Year47uaAZYhGD0vAagnNiBnYmjWEpN9G/wQxG7pgZThK1ZxDi63qn8aQ8UjuGHo
|
||||||
TgVXGZZfqtixO7f2/5oqZAkd00eOn9ZrhBpVMu4yXbbDvhDyFe4/oy0HGDjRUhxa
|
F6RpnnBQIAnWTWqr/Qsybtc5EoNkrj/Cpx0OfbSr6gZsFBCxwX1R1hT3/mhJ45f3
|
||||||
Lf6ZlBuTherxm4eFkQJBAPBQwRs9UtqaMAQlagA9pV5UsQjV1WT4IxDURMPfXgCd
|
XMofY32Vdfx9/vtw1O7HmlHXQnXaqnbd9/nn1EpvFJG9+UjPoW7gV4jCOLuR4deE
|
||||||
ETNkB6pP0SmxQm5xhv9N2HY1UtoWpug9s0OU5IJB15sCQQDXbfbjiujNbuOxCFNw
|
jS8hm+cpkwXmFtk3VGjT9tQXPpMv3JpYfBqgGQoMAJ5Toq0DWcHi6Wg08PsD8lgy
|
||||||
68JZaCFVdNovyOWORkpenQLNEjVkmTCS9OayK09ADEYtsdpUGKeF+2EYBNkFr5px
|
vmTioPsRg+JGkJkJ8GnusgLpQdlQJbjzd7wGE6ElUFLfOxLo8bLlRHoriHNdWYhh
|
||||||
CajnAkBMYI4PNz1HBuwt1SpMa0tMoMQnV7bbwVV7usskKbC5pzHZUHhzM6z5gEHp
|
JjY0LyeTkovcmWxVjImc6ZyBz5Ly4t0BYf1gq3OkjsV91Q1taBxnhiavfizqMCAf
|
||||||
0iEisT4Ty7zKXZqsgzefSgoaMAzzAkEAoCIaUhtwXzwdPfvNYnOs3J6doJMimECB
|
PPB3sLQnlXG77TOXkNxpqbZfEYrVZW2Nsqqdn8s07Uj4IMONZyq2odYKWFPMJBiM
|
||||||
+lbfcyLM8TimvadtRt+KGEg/OYGmLNM2UiqdY+duzdbUpvhYGcwvYwJAQvaoi9z2
|
POYwXjMAOcmFMTHYsVlhcUJuV6LOuipw/FEbTtPH/MYMxLe4zx65dYo1rb4iLKLS
|
||||||
CkiwSs/PFrLaNlfLJmXRsUBzmiWYoh6+IQJJorEXz7ewI72ee9RBO4s746cgUFwH
|
gMtB0o/Wl4Xno3ZXh1ucicYnV2J7NpVcjVq+3SFiCRu2SrSkZHZ23EPS13Ec6fcz
|
||||||
Ri+qO+HhZFUBqQ==
|
8X/YGA2vTJ8MAOozAzQUwHQYvLk7bIoQVekqDq4p0AZQbhdspHpArCk0Ifqqzg/v
|
||||||
-----END PRIVATE KEY-----
|
Uyky/zZiQYanzDenTSRVI/8wac3olxpU8QvbySxYqmbkgq6bTpXJfYFQfnAttEsC
|
||||||
|
dA4S5UFgyOPZluxCAM4yaJF3Ft6neutNwftuJQMbgCUi9vYg2tGdSw==
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
|
|||||||
358
apps/progs.h
358
apps/progs.h
@@ -1,366 +1,366 @@
|
|||||||
/* apps/progs.h */
|
/* apps/progs.h */
|
||||||
/* automatically generated by progs.pl for openssl.c */
|
/* automatically generated by progs.pl for openssl.c */
|
||||||
|
|
||||||
extern int verify_main(int argc,char *argv[]);
|
extern int verify_main(int argc, char *argv[]);
|
||||||
extern int asn1parse_main(int argc,char *argv[]);
|
extern int asn1parse_main(int argc, char *argv[]);
|
||||||
extern int req_main(int argc,char *argv[]);
|
extern int req_main(int argc, char *argv[]);
|
||||||
extern int dgst_main(int argc,char *argv[]);
|
extern int dgst_main(int argc, char *argv[]);
|
||||||
extern int dh_main(int argc,char *argv[]);
|
extern int dh_main(int argc, char *argv[]);
|
||||||
extern int dhparam_main(int argc,char *argv[]);
|
extern int dhparam_main(int argc, char *argv[]);
|
||||||
extern int enc_main(int argc,char *argv[]);
|
extern int enc_main(int argc, char *argv[]);
|
||||||
extern int passwd_main(int argc,char *argv[]);
|
extern int passwd_main(int argc, char *argv[]);
|
||||||
extern int gendh_main(int argc,char *argv[]);
|
extern int gendh_main(int argc, char *argv[]);
|
||||||
extern int errstr_main(int argc,char *argv[]);
|
extern int errstr_main(int argc, char *argv[]);
|
||||||
extern int ca_main(int argc,char *argv[]);
|
extern int ca_main(int argc, char *argv[]);
|
||||||
extern int crl_main(int argc,char *argv[]);
|
extern int crl_main(int argc, char *argv[]);
|
||||||
extern int rsa_main(int argc,char *argv[]);
|
extern int rsa_main(int argc, char *argv[]);
|
||||||
extern int rsautl_main(int argc,char *argv[]);
|
extern int rsautl_main(int argc, char *argv[]);
|
||||||
extern int dsa_main(int argc,char *argv[]);
|
extern int dsa_main(int argc, char *argv[]);
|
||||||
extern int dsaparam_main(int argc,char *argv[]);
|
extern int dsaparam_main(int argc, char *argv[]);
|
||||||
extern int ec_main(int argc,char *argv[]);
|
extern int ec_main(int argc, char *argv[]);
|
||||||
extern int ecparam_main(int argc,char *argv[]);
|
extern int ecparam_main(int argc, char *argv[]);
|
||||||
extern int x509_main(int argc,char *argv[]);
|
extern int x509_main(int argc, char *argv[]);
|
||||||
extern int genrsa_main(int argc,char *argv[]);
|
extern int genrsa_main(int argc, char *argv[]);
|
||||||
extern int gendsa_main(int argc,char *argv[]);
|
extern int gendsa_main(int argc, char *argv[]);
|
||||||
extern int genpkey_main(int argc,char *argv[]);
|
extern int genpkey_main(int argc, char *argv[]);
|
||||||
extern int s_server_main(int argc,char *argv[]);
|
extern int s_server_main(int argc, char *argv[]);
|
||||||
extern int s_client_main(int argc,char *argv[]);
|
extern int s_client_main(int argc, char *argv[]);
|
||||||
extern int speed_main(int argc,char *argv[]);
|
extern int speed_main(int argc, char *argv[]);
|
||||||
extern int s_time_main(int argc,char *argv[]);
|
extern int s_time_main(int argc, char *argv[]);
|
||||||
extern int version_main(int argc,char *argv[]);
|
extern int version_main(int argc, char *argv[]);
|
||||||
extern int pkcs7_main(int argc,char *argv[]);
|
extern int pkcs7_main(int argc, char *argv[]);
|
||||||
extern int cms_main(int argc,char *argv[]);
|
extern int cms_main(int argc, char *argv[]);
|
||||||
extern int crl2pkcs7_main(int argc,char *argv[]);
|
extern int crl2pkcs7_main(int argc, char *argv[]);
|
||||||
extern int sess_id_main(int argc,char *argv[]);
|
extern int sess_id_main(int argc, char *argv[]);
|
||||||
extern int ciphers_main(int argc,char *argv[]);
|
extern int ciphers_main(int argc, char *argv[]);
|
||||||
extern int nseq_main(int argc,char *argv[]);
|
extern int nseq_main(int argc, char *argv[]);
|
||||||
extern int pkcs12_main(int argc,char *argv[]);
|
extern int pkcs12_main(int argc, char *argv[]);
|
||||||
extern int pkcs8_main(int argc,char *argv[]);
|
extern int pkcs8_main(int argc, char *argv[]);
|
||||||
extern int pkey_main(int argc,char *argv[]);
|
extern int pkey_main(int argc, char *argv[]);
|
||||||
extern int pkeyparam_main(int argc,char *argv[]);
|
extern int pkeyparam_main(int argc, char *argv[]);
|
||||||
extern int pkeyutl_main(int argc,char *argv[]);
|
extern int pkeyutl_main(int argc, char *argv[]);
|
||||||
extern int spkac_main(int argc,char *argv[]);
|
extern int spkac_main(int argc, char *argv[]);
|
||||||
extern int smime_main(int argc,char *argv[]);
|
extern int smime_main(int argc, char *argv[]);
|
||||||
extern int rand_main(int argc,char *argv[]);
|
extern int rand_main(int argc, char *argv[]);
|
||||||
extern int engine_main(int argc,char *argv[]);
|
extern int engine_main(int argc, char *argv[]);
|
||||||
extern int ocsp_main(int argc,char *argv[]);
|
extern int ocsp_main(int argc, char *argv[]);
|
||||||
extern int srp_main(int argc,char *argv[]);
|
extern int prime_main(int argc, char *argv[]);
|
||||||
extern int prime_main(int argc,char *argv[]);
|
extern int ts_main(int argc, char *argv[]);
|
||||||
extern int ts_main(int argc,char *argv[]);
|
extern int srp_main(int argc, char *argv[]);
|
||||||
|
|
||||||
#define FUNC_TYPE_GENERAL 1
|
#define FUNC_TYPE_GENERAL 1
|
||||||
#define FUNC_TYPE_MD 2
|
#define FUNC_TYPE_MD 2
|
||||||
#define FUNC_TYPE_CIPHER 3
|
#define FUNC_TYPE_CIPHER 3
|
||||||
#define FUNC_TYPE_PKEY 4
|
#define FUNC_TYPE_PKEY 4
|
||||||
#define FUNC_TYPE_MD_ALG 5
|
#define FUNC_TYPE_MD_ALG 5
|
||||||
#define FUNC_TYPE_CIPHER_ALG 6
|
#define FUNC_TYPE_CIPHER_ALG 6
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int type;
|
int type;
|
||||||
const char *name;
|
const char *name;
|
||||||
int (*func)(int argc,char *argv[]);
|
int (*func) (int argc, char *argv[]);
|
||||||
} FUNCTION;
|
} FUNCTION;
|
||||||
DECLARE_LHASH_OF(FUNCTION);
|
DECLARE_LHASH_OF(FUNCTION);
|
||||||
|
|
||||||
FUNCTION functions[] = {
|
FUNCTION functions[] = {
|
||||||
{FUNC_TYPE_GENERAL,"verify",verify_main},
|
{FUNC_TYPE_GENERAL, "verify", verify_main},
|
||||||
{FUNC_TYPE_GENERAL,"asn1parse",asn1parse_main},
|
{FUNC_TYPE_GENERAL, "asn1parse", asn1parse_main},
|
||||||
{FUNC_TYPE_GENERAL,"req",req_main},
|
{FUNC_TYPE_GENERAL, "req", req_main},
|
||||||
{FUNC_TYPE_GENERAL,"dgst",dgst_main},
|
{FUNC_TYPE_GENERAL, "dgst", dgst_main},
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
{FUNC_TYPE_GENERAL,"dh",dh_main},
|
{FUNC_TYPE_GENERAL, "dh", dh_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
{FUNC_TYPE_GENERAL,"dhparam",dhparam_main},
|
{FUNC_TYPE_GENERAL, "dhparam", dhparam_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"enc",enc_main},
|
{FUNC_TYPE_GENERAL, "enc", enc_main},
|
||||||
{FUNC_TYPE_GENERAL,"passwd",passwd_main},
|
{FUNC_TYPE_GENERAL, "passwd", passwd_main},
|
||||||
#ifndef OPENSSL_NO_DH
|
#ifndef OPENSSL_NO_DH
|
||||||
{FUNC_TYPE_GENERAL,"gendh",gendh_main},
|
{FUNC_TYPE_GENERAL, "gendh", gendh_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"errstr",errstr_main},
|
{FUNC_TYPE_GENERAL, "errstr", errstr_main},
|
||||||
{FUNC_TYPE_GENERAL,"ca",ca_main},
|
{FUNC_TYPE_GENERAL, "ca", ca_main},
|
||||||
{FUNC_TYPE_GENERAL,"crl",crl_main},
|
{FUNC_TYPE_GENERAL, "crl", crl_main},
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
{FUNC_TYPE_GENERAL,"rsa",rsa_main},
|
{FUNC_TYPE_GENERAL, "rsa", rsa_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
{FUNC_TYPE_GENERAL,"rsautl",rsautl_main},
|
{FUNC_TYPE_GENERAL, "rsautl", rsautl_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
{FUNC_TYPE_GENERAL,"dsa",dsa_main},
|
{FUNC_TYPE_GENERAL, "dsa", dsa_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
{FUNC_TYPE_GENERAL,"dsaparam",dsaparam_main},
|
{FUNC_TYPE_GENERAL, "dsaparam", dsaparam_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_EC
|
#ifndef OPENSSL_NO_EC
|
||||||
{FUNC_TYPE_GENERAL,"ec",ec_main},
|
{FUNC_TYPE_GENERAL, "ec", ec_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_EC
|
#ifndef OPENSSL_NO_EC
|
||||||
{FUNC_TYPE_GENERAL,"ecparam",ecparam_main},
|
{FUNC_TYPE_GENERAL, "ecparam", ecparam_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"x509",x509_main},
|
{FUNC_TYPE_GENERAL, "x509", x509_main},
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
{FUNC_TYPE_GENERAL,"genrsa",genrsa_main},
|
{FUNC_TYPE_GENERAL, "genrsa", genrsa_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DSA
|
#ifndef OPENSSL_NO_DSA
|
||||||
{FUNC_TYPE_GENERAL,"gendsa",gendsa_main},
|
{FUNC_TYPE_GENERAL, "gendsa", gendsa_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"genpkey",genpkey_main},
|
{FUNC_TYPE_GENERAL, "genpkey", genpkey_main},
|
||||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
#if !defined(OPENSSL_NO_SOCK)
|
||||||
{FUNC_TYPE_GENERAL,"s_server",s_server_main},
|
{FUNC_TYPE_GENERAL, "s_server", s_server_main},
|
||||||
#endif
|
#endif
|
||||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
#if !defined(OPENSSL_NO_SOCK)
|
||||||
{FUNC_TYPE_GENERAL,"s_client",s_client_main},
|
{FUNC_TYPE_GENERAL, "s_client", s_client_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SPEED
|
#ifndef OPENSSL_NO_SPEED
|
||||||
{FUNC_TYPE_GENERAL,"speed",speed_main},
|
{FUNC_TYPE_GENERAL, "speed", speed_main},
|
||||||
#endif
|
#endif
|
||||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
#if !defined(OPENSSL_NO_SOCK)
|
||||||
{FUNC_TYPE_GENERAL,"s_time",s_time_main},
|
{FUNC_TYPE_GENERAL, "s_time", s_time_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"version",version_main},
|
{FUNC_TYPE_GENERAL, "version", version_main},
|
||||||
{FUNC_TYPE_GENERAL,"pkcs7",pkcs7_main},
|
{FUNC_TYPE_GENERAL, "pkcs7", pkcs7_main},
|
||||||
#ifndef OPENSSL_NO_CMS
|
#ifndef OPENSSL_NO_CMS
|
||||||
{FUNC_TYPE_GENERAL,"cms",cms_main},
|
{FUNC_TYPE_GENERAL, "cms", cms_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"crl2pkcs7",crl2pkcs7_main},
|
{FUNC_TYPE_GENERAL, "crl2pkcs7", crl2pkcs7_main},
|
||||||
{FUNC_TYPE_GENERAL,"sess_id",sess_id_main},
|
{FUNC_TYPE_GENERAL, "sess_id", sess_id_main},
|
||||||
#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))
|
#if !defined(OPENSSL_NO_SOCK)
|
||||||
{FUNC_TYPE_GENERAL,"ciphers",ciphers_main},
|
{FUNC_TYPE_GENERAL, "ciphers", ciphers_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"nseq",nseq_main},
|
{FUNC_TYPE_GENERAL, "nseq", nseq_main},
|
||||||
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
|
#if !defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_SHA1)
|
||||||
{FUNC_TYPE_GENERAL,"pkcs12",pkcs12_main},
|
{FUNC_TYPE_GENERAL, "pkcs12", pkcs12_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"pkcs8",pkcs8_main},
|
{FUNC_TYPE_GENERAL, "pkcs8", pkcs8_main},
|
||||||
{FUNC_TYPE_GENERAL,"pkey",pkey_main},
|
{FUNC_TYPE_GENERAL, "pkey", pkey_main},
|
||||||
{FUNC_TYPE_GENERAL,"pkeyparam",pkeyparam_main},
|
{FUNC_TYPE_GENERAL, "pkeyparam", pkeyparam_main},
|
||||||
{FUNC_TYPE_GENERAL,"pkeyutl",pkeyutl_main},
|
{FUNC_TYPE_GENERAL, "pkeyutl", pkeyutl_main},
|
||||||
{FUNC_TYPE_GENERAL,"spkac",spkac_main},
|
{FUNC_TYPE_GENERAL, "spkac", spkac_main},
|
||||||
{FUNC_TYPE_GENERAL,"smime",smime_main},
|
{FUNC_TYPE_GENERAL, "smime", smime_main},
|
||||||
{FUNC_TYPE_GENERAL,"rand",rand_main},
|
{FUNC_TYPE_GENERAL, "rand", rand_main},
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
{FUNC_TYPE_GENERAL,"engine",engine_main},
|
{FUNC_TYPE_GENERAL, "engine", engine_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_OCSP
|
#ifndef OPENSSL_NO_OCSP
|
||||||
{FUNC_TYPE_GENERAL,"ocsp",ocsp_main},
|
{FUNC_TYPE_GENERAL, "ocsp", ocsp_main},
|
||||||
#endif
|
#endif
|
||||||
|
{FUNC_TYPE_GENERAL, "prime", prime_main},
|
||||||
|
{FUNC_TYPE_GENERAL, "ts", ts_main},
|
||||||
#ifndef OPENSSL_NO_SRP
|
#ifndef OPENSSL_NO_SRP
|
||||||
{FUNC_TYPE_GENERAL,"srp",srp_main},
|
{FUNC_TYPE_GENERAL, "srp", srp_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_GENERAL,"prime",prime_main},
|
|
||||||
{FUNC_TYPE_GENERAL,"ts",ts_main},
|
|
||||||
#ifndef OPENSSL_NO_MD2
|
#ifndef OPENSSL_NO_MD2
|
||||||
{FUNC_TYPE_MD,"md2",dgst_main},
|
{FUNC_TYPE_MD, "md2", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_MD4
|
#ifndef OPENSSL_NO_MD4
|
||||||
{FUNC_TYPE_MD,"md4",dgst_main},
|
{FUNC_TYPE_MD, "md4", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_MD5
|
#ifndef OPENSSL_NO_MD5
|
||||||
{FUNC_TYPE_MD,"md5",dgst_main},
|
{FUNC_TYPE_MD, "md5", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SHA
|
#ifndef OPENSSL_NO_SHA
|
||||||
{FUNC_TYPE_MD,"sha",dgst_main},
|
{FUNC_TYPE_MD, "sha", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SHA1
|
#ifndef OPENSSL_NO_SHA1
|
||||||
{FUNC_TYPE_MD,"sha1",dgst_main},
|
{FUNC_TYPE_MD, "sha1", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_MDC2
|
#ifndef OPENSSL_NO_MDC2
|
||||||
{FUNC_TYPE_MD,"mdc2",dgst_main},
|
{FUNC_TYPE_MD, "mdc2", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RMD160
|
#ifndef OPENSSL_NO_RMD160
|
||||||
{FUNC_TYPE_MD,"rmd160",dgst_main},
|
{FUNC_TYPE_MD, "rmd160", dgst_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
{FUNC_TYPE_CIPHER,"aes-128-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "aes-128-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
{FUNC_TYPE_CIPHER,"aes-128-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "aes-128-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
{FUNC_TYPE_CIPHER,"aes-192-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "aes-192-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
{FUNC_TYPE_CIPHER,"aes-192-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "aes-192-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
{FUNC_TYPE_CIPHER,"aes-256-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "aes-256-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_AES
|
#ifndef OPENSSL_NO_AES
|
||||||
{FUNC_TYPE_CIPHER,"aes-256-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "aes-256-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
{FUNC_TYPE_CIPHER,"camellia-128-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "camellia-128-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
{FUNC_TYPE_CIPHER,"camellia-128-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "camellia-128-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
{FUNC_TYPE_CIPHER,"camellia-192-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "camellia-192-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
{FUNC_TYPE_CIPHER,"camellia-192-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "camellia-192-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
{FUNC_TYPE_CIPHER,"camellia-256-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "camellia-256-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
#ifndef OPENSSL_NO_CAMELLIA
|
||||||
{FUNC_TYPE_CIPHER,"camellia-256-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "camellia-256-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
{FUNC_TYPE_CIPHER,"base64",enc_main},
|
{FUNC_TYPE_CIPHER, "base64", enc_main},
|
||||||
#ifdef ZLIB
|
#ifdef ZLIB
|
||||||
{FUNC_TYPE_CIPHER,"zlib",enc_main},
|
{FUNC_TYPE_CIPHER, "zlib", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des",enc_main},
|
{FUNC_TYPE_CIPHER, "des", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des3",enc_main},
|
{FUNC_TYPE_CIPHER, "des3", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"desx",enc_main},
|
{FUNC_TYPE_CIPHER, "desx", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
{FUNC_TYPE_CIPHER,"idea",enc_main},
|
{FUNC_TYPE_CIPHER, "idea", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SEED
|
#ifndef OPENSSL_NO_SEED
|
||||||
{FUNC_TYPE_CIPHER,"seed",enc_main},
|
{FUNC_TYPE_CIPHER, "seed", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC4
|
#ifndef OPENSSL_NO_RC4
|
||||||
{FUNC_TYPE_CIPHER,"rc4",enc_main},
|
{FUNC_TYPE_CIPHER, "rc4", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC4
|
#ifndef OPENSSL_NO_RC4
|
||||||
{FUNC_TYPE_CIPHER,"rc4-40",enc_main},
|
{FUNC_TYPE_CIPHER, "rc4-40", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_BF
|
#ifndef OPENSSL_NO_BF
|
||||||
{FUNC_TYPE_CIPHER,"bf",enc_main},
|
{FUNC_TYPE_CIPHER, "bf", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAST
|
#ifndef OPENSSL_NO_CAST
|
||||||
{FUNC_TYPE_CIPHER,"cast",enc_main},
|
{FUNC_TYPE_CIPHER, "cast", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC5
|
#ifndef OPENSSL_NO_RC5
|
||||||
{FUNC_TYPE_CIPHER,"rc5",enc_main},
|
{FUNC_TYPE_CIPHER, "rc5", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede3",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede3", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "des-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede3-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede3-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede3-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede3-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_DES
|
#ifndef OPENSSL_NO_DES
|
||||||
{FUNC_TYPE_CIPHER,"des-ede3-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "des-ede3-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
{FUNC_TYPE_CIPHER,"idea-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "idea-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
{FUNC_TYPE_CIPHER,"idea-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "idea-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
{FUNC_TYPE_CIPHER,"idea-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "idea-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_IDEA
|
#ifndef OPENSSL_NO_IDEA
|
||||||
{FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "idea-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SEED
|
#ifndef OPENSSL_NO_SEED
|
||||||
{FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "seed-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SEED
|
#ifndef OPENSSL_NO_SEED
|
||||||
{FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "seed-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SEED
|
#ifndef OPENSSL_NO_SEED
|
||||||
{FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "seed-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SEED
|
#ifndef OPENSSL_NO_SEED
|
||||||
{FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "seed-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2-64-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2-64-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC2
|
#ifndef OPENSSL_NO_RC2
|
||||||
{FUNC_TYPE_CIPHER,"rc2-40-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "rc2-40-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_BF
|
#ifndef OPENSSL_NO_BF
|
||||||
{FUNC_TYPE_CIPHER,"bf-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "bf-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_BF
|
#ifndef OPENSSL_NO_BF
|
||||||
{FUNC_TYPE_CIPHER,"bf-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "bf-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_BF
|
#ifndef OPENSSL_NO_BF
|
||||||
{FUNC_TYPE_CIPHER,"bf-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "bf-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_BF
|
#ifndef OPENSSL_NO_BF
|
||||||
{FUNC_TYPE_CIPHER,"bf-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "bf-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAST
|
#ifndef OPENSSL_NO_CAST
|
||||||
{FUNC_TYPE_CIPHER,"cast5-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "cast5-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAST
|
#ifndef OPENSSL_NO_CAST
|
||||||
{FUNC_TYPE_CIPHER,"cast5-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "cast5-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAST
|
#ifndef OPENSSL_NO_CAST
|
||||||
{FUNC_TYPE_CIPHER,"cast5-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "cast5-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAST
|
#ifndef OPENSSL_NO_CAST
|
||||||
{FUNC_TYPE_CIPHER,"cast5-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "cast5-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_CAST
|
#ifndef OPENSSL_NO_CAST
|
||||||
{FUNC_TYPE_CIPHER,"cast-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "cast-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC5
|
#ifndef OPENSSL_NO_RC5
|
||||||
{FUNC_TYPE_CIPHER,"rc5-cbc",enc_main},
|
{FUNC_TYPE_CIPHER, "rc5-cbc", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC5
|
#ifndef OPENSSL_NO_RC5
|
||||||
{FUNC_TYPE_CIPHER,"rc5-ecb",enc_main},
|
{FUNC_TYPE_CIPHER, "rc5-ecb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC5
|
#ifndef OPENSSL_NO_RC5
|
||||||
{FUNC_TYPE_CIPHER,"rc5-cfb",enc_main},
|
{FUNC_TYPE_CIPHER, "rc5-cfb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_RC5
|
#ifndef OPENSSL_NO_RC5
|
||||||
{FUNC_TYPE_CIPHER,"rc5-ofb",enc_main},
|
{FUNC_TYPE_CIPHER, "rc5-ofb", enc_main},
|
||||||
#endif
|
#endif
|
||||||
{0,NULL,NULL}
|
{0, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ foreach (@ARGV)
|
|||||||
push(@files,$_);
|
push(@files,$_);
|
||||||
$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
|
$str="\t{FUNC_TYPE_GENERAL,\"$_\",${_}_main},\n";
|
||||||
if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
|
if (($_ =~ /^s_/) || ($_ =~ /^ciphers$/))
|
||||||
{ print "#if !defined(OPENSSL_NO_SOCK) && !(defined(OPENSSL_NO_SSL2) && defined(OPENSSL_NO_SSL3))\n${str}#endif\n"; }
|
{ print "#if !defined(OPENSSL_NO_SOCK)\n${str}#endif\n"; }
|
||||||
elsif ( ($_ =~ /^speed$/))
|
elsif ( ($_ =~ /^speed$/))
|
||||||
{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
|
{ print "#ifndef OPENSSL_NO_SPEED\n${str}#endif\n"; }
|
||||||
elsif ( ($_ =~ /^engine$/))
|
elsif ( ($_ =~ /^engine$/))
|
||||||
@@ -51,6 +51,8 @@ foreach (@ARGV)
|
|||||||
{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
|
{ print "#ifndef OPENSSL_NO_CMS\n${str}#endif\n"; }
|
||||||
elsif ( ($_ =~ /^ocsp$/))
|
elsif ( ($_ =~ /^ocsp$/))
|
||||||
{ print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n"; }
|
{ print "#ifndef OPENSSL_NO_OCSP\n${str}#endif\n"; }
|
||||||
|
elsif ( ($_ =~ /^srp$/))
|
||||||
|
{ print "#ifndef OPENSSL_NO_SRP\n${str}#endif\n"; }
|
||||||
else
|
else
|
||||||
{ print $str; }
|
{ print $str; }
|
||||||
}
|
}
|
||||||
|
|||||||
280
apps/rand.c
280
apps/rand.c
@@ -7,7 +7,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -66,7 +66,8 @@
|
|||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG rand_main
|
#define PROG rand_main
|
||||||
|
|
||||||
/* -out file - write to file
|
/*-
|
||||||
|
* -out file - write to file
|
||||||
* -rand file:file - PRNG seed files
|
* -rand file:file - PRNG seed files
|
||||||
* -base64 - base64 encode output
|
* -base64 - base64 encode output
|
||||||
* -hex - hex encode output
|
* -hex - hex encode output
|
||||||
@@ -76,170 +77,153 @@
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i, r, ret = 1;
|
int i, r, ret = 1;
|
||||||
int badopt;
|
int badopt;
|
||||||
char *outfile = NULL;
|
char *outfile = NULL;
|
||||||
char *inrand = NULL;
|
char *inrand = NULL;
|
||||||
int base64 = 0;
|
int base64 = 0;
|
||||||
int hex = 0;
|
int hex = 0;
|
||||||
BIO *out = NULL;
|
BIO *out = NULL;
|
||||||
int num = -1;
|
int num = -1;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
badopt = 0;
|
badopt = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
while (!badopt && argv[++i] != NULL)
|
while (!badopt && argv[++i] != NULL) {
|
||||||
{
|
if (strcmp(argv[i], "-out") == 0) {
|
||||||
if (strcmp(argv[i], "-out") == 0)
|
if ((argv[i + 1] != NULL) && (outfile == NULL))
|
||||||
{
|
outfile = argv[++i];
|
||||||
if ((argv[i+1] != NULL) && (outfile == NULL))
|
else
|
||||||
outfile = argv[++i];
|
badopt = 1;
|
||||||
else
|
}
|
||||||
badopt = 1;
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(argv[i], "-engine") == 0)
|
else if (strcmp(argv[i], "-engine") == 0) {
|
||||||
{
|
if ((argv[i + 1] != NULL) && (engine == NULL))
|
||||||
if ((argv[i+1] != NULL) && (engine == NULL))
|
engine = argv[++i];
|
||||||
engine = argv[++i];
|
else
|
||||||
else
|
badopt = 1;
|
||||||
badopt = 1;
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
else if (strcmp(argv[i], "-rand") == 0)
|
else if (strcmp(argv[i], "-rand") == 0) {
|
||||||
{
|
if ((argv[i + 1] != NULL) && (inrand == NULL))
|
||||||
if ((argv[i+1] != NULL) && (inrand == NULL))
|
inrand = argv[++i];
|
||||||
inrand = argv[++i];
|
else
|
||||||
else
|
badopt = 1;
|
||||||
badopt = 1;
|
} else if (strcmp(argv[i], "-base64") == 0) {
|
||||||
}
|
if (!base64)
|
||||||
else if (strcmp(argv[i], "-base64") == 0)
|
base64 = 1;
|
||||||
{
|
else
|
||||||
if (!base64)
|
badopt = 1;
|
||||||
base64 = 1;
|
} else if (strcmp(argv[i], "-hex") == 0) {
|
||||||
else
|
if (!hex)
|
||||||
badopt = 1;
|
hex = 1;
|
||||||
}
|
else
|
||||||
else if (strcmp(argv[i], "-hex") == 0)
|
badopt = 1;
|
||||||
{
|
} else if (isdigit((unsigned char)argv[i][0])) {
|
||||||
if (!hex)
|
if (num < 0) {
|
||||||
hex = 1;
|
r = sscanf(argv[i], "%d", &num);
|
||||||
else
|
if (r == 0 || num < 0)
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
}
|
} else
|
||||||
else if (isdigit((unsigned char)argv[i][0]))
|
badopt = 1;
|
||||||
{
|
} else
|
||||||
if (num < 0)
|
badopt = 1;
|
||||||
{
|
}
|
||||||
r = sscanf(argv[i], "%d", &num);
|
|
||||||
if (r == 0 || num < 0)
|
|
||||||
badopt = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
badopt = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
badopt = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hex && base64)
|
if (hex && base64)
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
|
|
||||||
if (num < 0)
|
if (num < 0)
|
||||||
badopt = 1;
|
badopt = 1;
|
||||||
|
|
||||||
if (badopt)
|
if (badopt) {
|
||||||
{
|
BIO_printf(bio_err, "Usage: rand [options] num\n");
|
||||||
BIO_printf(bio_err, "Usage: rand [options] num\n");
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err, "where options are\n");
|
BIO_printf(bio_err, "-out file - write to file\n");
|
||||||
BIO_printf(bio_err, "-out file - write to file\n");
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
BIO_printf(bio_err, "-engine e - use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err,
|
||||||
|
"-engine e - use engine e, possibly a hardware device.\n");
|
||||||
#endif
|
#endif
|
||||||
BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n", LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
BIO_printf(bio_err, "-rand file%cfile%c... - seed PRNG from files\n",
|
||||||
BIO_printf(bio_err, "-base64 - base64 encode output\n");
|
LIST_SEPARATOR_CHAR, LIST_SEPARATOR_CHAR);
|
||||||
BIO_printf(bio_err, "-hex - hex encode output\n");
|
BIO_printf(bio_err, "-base64 - base64 encode output\n");
|
||||||
goto err;
|
BIO_printf(bio_err, "-hex - hex encode output\n");
|
||||||
}
|
goto err;
|
||||||
|
}
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
setup_engine(bio_err, engine, 0);
|
setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
app_RAND_load_file(NULL, bio_err, (inrand != NULL));
|
||||||
if (inrand != NULL)
|
if (inrand != NULL)
|
||||||
BIO_printf(bio_err,"%ld semi-random bytes loaded\n",
|
BIO_printf(bio_err, "%ld semi-random bytes loaded\n",
|
||||||
app_RAND_load_files(inrand));
|
app_RAND_load_files(inrand));
|
||||||
|
|
||||||
out = BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
if (out == NULL)
|
if (out == NULL)
|
||||||
goto err;
|
goto err;
|
||||||
if (outfile != NULL)
|
if (outfile != NULL)
|
||||||
r = BIO_write_filename(out, outfile);
|
r = BIO_write_filename(out, outfile);
|
||||||
else
|
else {
|
||||||
{
|
r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
r = BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (r <= 0)
|
if (r <= 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (base64)
|
if (base64) {
|
||||||
{
|
BIO *b64 = BIO_new(BIO_f_base64());
|
||||||
BIO *b64 = BIO_new(BIO_f_base64());
|
if (b64 == NULL)
|
||||||
if (b64 == NULL)
|
goto err;
|
||||||
goto err;
|
out = BIO_push(b64, out);
|
||||||
out = BIO_push(b64, out);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
while (num > 0)
|
|
||||||
{
|
|
||||||
unsigned char buf[4096];
|
|
||||||
int chunk;
|
|
||||||
|
|
||||||
chunk = num;
|
while (num > 0) {
|
||||||
if (chunk > (int)sizeof(buf))
|
unsigned char buf[4096];
|
||||||
chunk = sizeof buf;
|
int chunk;
|
||||||
r = RAND_bytes(buf, chunk);
|
|
||||||
if (r <= 0)
|
|
||||||
goto err;
|
|
||||||
if (!hex)
|
|
||||||
BIO_write(out, buf, chunk);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < chunk; i++)
|
|
||||||
BIO_printf(out, "%02x", buf[i]);
|
|
||||||
}
|
|
||||||
num -= chunk;
|
|
||||||
}
|
|
||||||
if (hex)
|
|
||||||
BIO_puts(out, "\n");
|
|
||||||
(void)BIO_flush(out);
|
|
||||||
|
|
||||||
app_RAND_write_file(NULL, bio_err);
|
chunk = num;
|
||||||
ret = 0;
|
if (chunk > (int)sizeof(buf))
|
||||||
|
chunk = sizeof buf;
|
||||||
err:
|
r = RAND_bytes(buf, chunk);
|
||||||
ERR_print_errors(bio_err);
|
if (r <= 0)
|
||||||
if (out)
|
goto err;
|
||||||
BIO_free_all(out);
|
if (!hex)
|
||||||
apps_shutdown();
|
BIO_write(out, buf, chunk);
|
||||||
OPENSSL_EXIT(ret);
|
else {
|
||||||
}
|
for (i = 0; i < chunk; i++)
|
||||||
|
BIO_printf(out, "%02x", buf[i]);
|
||||||
|
}
|
||||||
|
num -= chunk;
|
||||||
|
}
|
||||||
|
if (hex)
|
||||||
|
BIO_puts(out, "\n");
|
||||||
|
(void)BIO_flush(out);
|
||||||
|
|
||||||
|
app_RAND_write_file(NULL, bio_err);
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
err:
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
if (out)
|
||||||
|
BIO_free_all(out);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
|||||||
2986
apps/req.c
2986
apps/req.c
File diff suppressed because it is too large
Load Diff
703
apps/rsa.c
703
apps/rsa.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -58,393 +58,382 @@
|
|||||||
|
|
||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
#include <stdio.h>
|
# include <stdio.h>
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include <time.h>
|
# include <time.h>
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <openssl/bio.h>
|
# include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/rsa.h>
|
# include <openssl/rsa.h>
|
||||||
#include <openssl/evp.h>
|
# include <openssl/evp.h>
|
||||||
#include <openssl/x509.h>
|
# include <openssl/x509.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
#include <openssl/bn.h>
|
# include <openssl/bn.h>
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
#define PROG rsa_main
|
# define PROG rsa_main
|
||||||
|
|
||||||
/* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
/*-
|
||||||
|
* -inform arg - input format - default PEM (one of DER, NET or PEM)
|
||||||
* -outform arg - output format - default PEM
|
* -outform arg - output format - default PEM
|
||||||
* -in arg - input file - default stdin
|
* -in arg - input file - default stdin
|
||||||
* -out arg - output file - default stdout
|
* -out arg - output file - default stdout
|
||||||
* -des - encrypt output if PEM format with DES in cbc mode
|
* -des - encrypt output if PEM format with DES in cbc mode
|
||||||
* -des3 - encrypt output if PEM format
|
* -des3 - encrypt output if PEM format
|
||||||
* -idea - encrypt output if PEM format
|
* -idea - encrypt output if PEM format
|
||||||
* -seed - encrypt output if PEM format
|
* -seed - encrypt output if PEM format
|
||||||
* -aes128 - encrypt output if PEM format
|
* -aes128 - encrypt output if PEM format
|
||||||
* -aes192 - encrypt output if PEM format
|
* -aes192 - encrypt output if PEM format
|
||||||
* -aes256 - encrypt output if PEM format
|
* -aes256 - encrypt output if PEM format
|
||||||
* -camellia128 - encrypt output if PEM format
|
* -camellia128 - encrypt output if PEM format
|
||||||
* -camellia192 - encrypt output if PEM format
|
* -camellia192 - encrypt output if PEM format
|
||||||
* -camellia256 - encrypt output if PEM format
|
* -camellia256 - encrypt output if PEM format
|
||||||
* -text - print a text version
|
* -text - print a text version
|
||||||
* -modulus - print the RSA key modulus
|
* -modulus - print the RSA key modulus
|
||||||
* -check - verify key consistency
|
* -check - verify key consistency
|
||||||
* -pubin - Expect a public key in input file.
|
* -pubin - Expect a public key in input file.
|
||||||
* -pubout - Output a public key.
|
* -pubout - Output a public key.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
int ret=1;
|
int ret = 1;
|
||||||
RSA *rsa=NULL;
|
RSA *rsa = NULL;
|
||||||
int i,badops=0, sgckey=0;
|
int i, badops = 0, sgckey = 0;
|
||||||
const EVP_CIPHER *enc=NULL;
|
const EVP_CIPHER *enc = NULL;
|
||||||
BIO *out=NULL;
|
BIO *out = NULL;
|
||||||
int informat,outformat,text=0,check=0,noout=0;
|
int informat, outformat, text = 0, check = 0, noout = 0;
|
||||||
int pubin = 0, pubout = 0;
|
int pubin = 0, pubout = 0;
|
||||||
char *infile,*outfile,*prog;
|
char *infile, *outfile, *prog;
|
||||||
char *passargin = NULL, *passargout = NULL;
|
char *passargin = NULL, *passargout = NULL;
|
||||||
char *passin = NULL, *passout = NULL;
|
char *passin = NULL, *passout = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine=NULL;
|
char *engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
int modulus=0;
|
int modulus = 0;
|
||||||
|
|
||||||
int pvk_encr = 2;
|
int pvk_encr = 2;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
infile=NULL;
|
infile = NULL;
|
||||||
outfile=NULL;
|
outfile = NULL;
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
prog=argv[0];
|
prog = argv[0];
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
} else if (strcmp(*argv, "-passin") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
outfile= *(++argv);
|
passargin = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-passout") == 0) {
|
||||||
else if (strcmp(*argv,"-passin") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
passargout = *(++argv);
|
||||||
passargin= *(++argv);
|
}
|
||||||
}
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
else if (strcmp(*argv,"-passout") == 0)
|
else if (strcmp(*argv, "-engine") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
passargout= *(++argv);
|
engine = *(++argv);
|
||||||
}
|
}
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# endif
|
||||||
else if (strcmp(*argv,"-engine") == 0)
|
else if (strcmp(*argv, "-sgckey") == 0)
|
||||||
{
|
sgckey = 1;
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-pubin") == 0)
|
||||||
engine= *(++argv);
|
pubin = 1;
|
||||||
}
|
else if (strcmp(*argv, "-pubout") == 0)
|
||||||
#endif
|
pubout = 1;
|
||||||
else if (strcmp(*argv,"-sgckey") == 0)
|
else if (strcmp(*argv, "-RSAPublicKey_in") == 0)
|
||||||
sgckey=1;
|
pubin = 2;
|
||||||
else if (strcmp(*argv,"-pubin") == 0)
|
else if (strcmp(*argv, "-RSAPublicKey_out") == 0)
|
||||||
pubin=1;
|
pubout = 2;
|
||||||
else if (strcmp(*argv,"-pubout") == 0)
|
else if (strcmp(*argv, "-pvk-strong") == 0)
|
||||||
pubout=1;
|
pvk_encr = 2;
|
||||||
else if (strcmp(*argv,"-RSAPublicKey_in") == 0)
|
else if (strcmp(*argv, "-pvk-weak") == 0)
|
||||||
pubin = 2;
|
pvk_encr = 1;
|
||||||
else if (strcmp(*argv,"-RSAPublicKey_out") == 0)
|
else if (strcmp(*argv, "-pvk-none") == 0)
|
||||||
pubout = 2;
|
pvk_encr = 0;
|
||||||
else if (strcmp(*argv,"-pvk-strong") == 0)
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
pvk_encr=2;
|
noout = 1;
|
||||||
else if (strcmp(*argv,"-pvk-weak") == 0)
|
else if (strcmp(*argv, "-text") == 0)
|
||||||
pvk_encr=1;
|
text = 1;
|
||||||
else if (strcmp(*argv,"-pvk-none") == 0)
|
else if (strcmp(*argv, "-modulus") == 0)
|
||||||
pvk_encr=0;
|
modulus = 1;
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
else if (strcmp(*argv, "-check") == 0)
|
||||||
noout=1;
|
check = 1;
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
else if ((enc = EVP_get_cipherbyname(&(argv[0][1]))) == NULL) {
|
||||||
text=1;
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
else if (strcmp(*argv,"-modulus") == 0)
|
badops = 1;
|
||||||
modulus=1;
|
break;
|
||||||
else if (strcmp(*argv,"-check") == 0)
|
}
|
||||||
check=1;
|
argc--;
|
||||||
else if ((enc=EVP_get_cipherbyname(&(argv[0][1]))) == NULL)
|
argv++;
|
||||||
{
|
}
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
|
||||||
badops=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
BIO_printf(bio_err, "%s [options] <infile >outfile\n", prog);
|
||||||
BIO_printf(bio_err,"%s [options] <infile >outfile\n",prog);
|
BIO_printf(bio_err, "where options are\n");
|
||||||
BIO_printf(bio_err,"where options are\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -inform arg input format - one of DER NET PEM\n");
|
" -inform arg input format - one of DER NET PEM\n");
|
||||||
BIO_printf(bio_err," -outform arg output format - one of DER NET PEM\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -in arg input file\n");
|
" -outform arg output format - one of DER NET PEM\n");
|
||||||
BIO_printf(bio_err," -sgckey Use IIS SGC key format\n");
|
BIO_printf(bio_err, " -in arg input file\n");
|
||||||
BIO_printf(bio_err," -passin arg input file pass phrase source\n");
|
BIO_printf(bio_err, " -sgckey Use IIS SGC key format\n");
|
||||||
BIO_printf(bio_err," -out arg output file\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -passout arg output file pass phrase source\n");
|
" -passin arg input file pass phrase source\n");
|
||||||
BIO_printf(bio_err," -des encrypt PEM output with cbc des\n");
|
BIO_printf(bio_err, " -out arg output file\n");
|
||||||
BIO_printf(bio_err," -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
|
BIO_printf(bio_err,
|
||||||
#ifndef OPENSSL_NO_IDEA
|
" -passout arg output file pass phrase source\n");
|
||||||
BIO_printf(bio_err," -idea encrypt PEM output with cbc idea\n");
|
BIO_printf(bio_err,
|
||||||
#endif
|
" -des encrypt PEM output with cbc des\n");
|
||||||
#ifndef OPENSSL_NO_SEED
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -seed encrypt PEM output with cbc seed\n");
|
" -des3 encrypt PEM output with ede cbc des using 168 bit key\n");
|
||||||
#endif
|
# ifndef OPENSSL_NO_IDEA
|
||||||
#ifndef OPENSSL_NO_AES
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
|
" -idea encrypt PEM output with cbc idea\n");
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc aes\n");
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_SEED
|
||||||
#ifndef OPENSSL_NO_CAMELLIA
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
|
" -seed encrypt PEM output with cbc seed\n");
|
||||||
BIO_printf(bio_err," encrypt PEM output with cbc camellia\n");
|
# endif
|
||||||
#endif
|
# ifndef OPENSSL_NO_AES
|
||||||
BIO_printf(bio_err," -text print the key in text\n");
|
BIO_printf(bio_err, " -aes128, -aes192, -aes256\n");
|
||||||
BIO_printf(bio_err," -noout don't print key out\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -modulus print the RSA key modulus\n");
|
" encrypt PEM output with cbc aes\n");
|
||||||
BIO_printf(bio_err," -check verify key consistency\n");
|
# endif
|
||||||
BIO_printf(bio_err," -pubin expect a public key in input file\n");
|
# ifndef OPENSSL_NO_CAMELLIA
|
||||||
BIO_printf(bio_err," -pubout output a public key\n");
|
BIO_printf(bio_err, " -camellia128, -camellia192, -camellia256\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err," -engine e use engine e, possibly a hardware device.\n");
|
" encrypt PEM output with cbc camellia\n");
|
||||||
#endif
|
# endif
|
||||||
goto end;
|
BIO_printf(bio_err, " -text print the key in text\n");
|
||||||
}
|
BIO_printf(bio_err, " -noout don't print key out\n");
|
||||||
|
BIO_printf(bio_err, " -modulus print the RSA key modulus\n");
|
||||||
|
BIO_printf(bio_err, " -check verify key consistency\n");
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" -pubin expect a public key in input file\n");
|
||||||
|
BIO_printf(bio_err, " -pubout output a public key\n");
|
||||||
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
|
BIO_printf(bio_err,
|
||||||
|
" -engine e use engine e, possibly a hardware device.\n");
|
||||||
|
# endif
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
e = setup_engine(bio_err, engine, 0);
|
e = setup_engine(bio_err, engine, 0);
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
if(!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
if (!app_passwd(bio_err, passargin, passargout, &passin, &passout)) {
|
||||||
BIO_printf(bio_err, "Error getting passwords\n");
|
BIO_printf(bio_err, "Error getting passwords\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(check && pubin) {
|
if (check && pubin) {
|
||||||
BIO_printf(bio_err, "Only private keys can be checked\n");
|
BIO_printf(bio_err, "Only private keys can be checked\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
out=BIO_new(BIO_s_file());
|
out = BIO_new(BIO_s_file());
|
||||||
|
|
||||||
{
|
{
|
||||||
EVP_PKEY *pkey;
|
EVP_PKEY *pkey;
|
||||||
|
|
||||||
if (pubin)
|
if (pubin) {
|
||||||
{
|
int tmpformat = -1;
|
||||||
int tmpformat=-1;
|
if (pubin == 2) {
|
||||||
if (pubin == 2)
|
if (informat == FORMAT_PEM)
|
||||||
{
|
tmpformat = FORMAT_PEMRSA;
|
||||||
if (informat == FORMAT_PEM)
|
else if (informat == FORMAT_ASN1)
|
||||||
tmpformat = FORMAT_PEMRSA;
|
tmpformat = FORMAT_ASN1RSA;
|
||||||
else if (informat == FORMAT_ASN1)
|
} else if (informat == FORMAT_NETSCAPE && sgckey)
|
||||||
tmpformat = FORMAT_ASN1RSA;
|
tmpformat = FORMAT_IISSGC;
|
||||||
}
|
else
|
||||||
else if (informat == FORMAT_NETSCAPE && sgckey)
|
tmpformat = informat;
|
||||||
tmpformat = FORMAT_IISSGC;
|
|
||||||
else
|
|
||||||
tmpformat = informat;
|
|
||||||
|
|
||||||
pkey = load_pubkey(bio_err, infile, tmpformat, 1,
|
|
||||||
passin, e, "Public Key");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pkey = load_key(bio_err, infile,
|
|
||||||
(informat == FORMAT_NETSCAPE && sgckey ?
|
|
||||||
FORMAT_IISSGC : informat), 1,
|
|
||||||
passin, e, "Private Key");
|
|
||||||
|
|
||||||
if (pkey != NULL)
|
pkey = load_pubkey(bio_err, infile, tmpformat, 1,
|
||||||
rsa = EVP_PKEY_get1_RSA(pkey);
|
passin, e, "Public Key");
|
||||||
EVP_PKEY_free(pkey);
|
} else
|
||||||
}
|
pkey = load_key(bio_err, infile,
|
||||||
|
(informat == FORMAT_NETSCAPE && sgckey ?
|
||||||
|
FORMAT_IISSGC : informat), 1,
|
||||||
|
passin, e, "Private Key");
|
||||||
|
|
||||||
if (rsa == NULL)
|
if (pkey != NULL)
|
||||||
{
|
rsa = EVP_PKEY_get1_RSA(pkey);
|
||||||
ERR_print_errors(bio_err);
|
EVP_PKEY_free(pkey);
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (rsa == NULL) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
goto end;
|
||||||
#ifdef OPENSSL_SYS_VMS
|
}
|
||||||
{
|
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
|
||||||
out = BIO_push(tmpbio, out);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
|
||||||
{
|
|
||||||
perror(outfile);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text)
|
if (outfile == NULL) {
|
||||||
if (!RSA_print(out,rsa,0))
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
{
|
# ifdef OPENSSL_SYS_VMS
|
||||||
perror(outfile);
|
{
|
||||||
ERR_print_errors(bio_err);
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
goto end;
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
} else {
|
||||||
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
|
perror(outfile);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (modulus)
|
if (text)
|
||||||
{
|
if (!RSA_print(out, rsa, 0)) {
|
||||||
BIO_printf(out,"Modulus=");
|
perror(outfile);
|
||||||
BN_print(out,rsa->n);
|
ERR_print_errors(bio_err);
|
||||||
BIO_printf(out,"\n");
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check)
|
if (modulus) {
|
||||||
{
|
BIO_printf(out, "Modulus=");
|
||||||
int r = RSA_check_key(rsa);
|
BN_print(out, rsa->n);
|
||||||
|
BIO_printf(out, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (r == 1)
|
if (check) {
|
||||||
BIO_printf(out,"RSA key ok\n");
|
int r = RSA_check_key(rsa);
|
||||||
else if (r == 0)
|
|
||||||
{
|
|
||||||
unsigned long err;
|
|
||||||
|
|
||||||
while ((err = ERR_peek_error()) != 0 &&
|
if (r == 1)
|
||||||
ERR_GET_LIB(err) == ERR_LIB_RSA &&
|
BIO_printf(out, "RSA key ok\n");
|
||||||
ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
|
else if (r == 0) {
|
||||||
ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE)
|
unsigned long err;
|
||||||
{
|
|
||||||
BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err));
|
|
||||||
ERR_get_error(); /* remove e from error stack */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r == -1 || ERR_peek_error() != 0) /* should happen only if r == -1 */
|
|
||||||
{
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (noout)
|
|
||||||
{
|
|
||||||
ret = 0;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
BIO_printf(bio_err,"writing RSA key\n");
|
|
||||||
if (outformat == FORMAT_ASN1) {
|
|
||||||
if(pubout || pubin)
|
|
||||||
{
|
|
||||||
if (pubout == 2)
|
|
||||||
i=i2d_RSAPublicKey_bio(out,rsa);
|
|
||||||
else
|
|
||||||
i=i2d_RSA_PUBKEY_bio(out,rsa);
|
|
||||||
}
|
|
||||||
else i=i2d_RSAPrivateKey_bio(out,rsa);
|
|
||||||
}
|
|
||||||
#ifndef OPENSSL_NO_RC4
|
|
||||||
else if (outformat == FORMAT_NETSCAPE)
|
|
||||||
{
|
|
||||||
unsigned char *p,*pp;
|
|
||||||
int size;
|
|
||||||
|
|
||||||
i=1;
|
while ((err = ERR_peek_error()) != 0 &&
|
||||||
size=i2d_RSA_NET(rsa,NULL,NULL, sgckey);
|
ERR_GET_LIB(err) == ERR_LIB_RSA &&
|
||||||
if ((p=(unsigned char *)OPENSSL_malloc(size)) == NULL)
|
ERR_GET_FUNC(err) == RSA_F_RSA_CHECK_KEY &&
|
||||||
{
|
ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) {
|
||||||
BIO_printf(bio_err,"Memory allocation failure\n");
|
BIO_printf(out, "RSA key error: %s\n",
|
||||||
goto end;
|
ERR_reason_error_string(err));
|
||||||
}
|
ERR_get_error(); /* remove e from error stack */
|
||||||
pp=p;
|
}
|
||||||
i2d_RSA_NET(rsa,&p,NULL, sgckey);
|
}
|
||||||
BIO_write(out,(char *)pp,size);
|
|
||||||
OPENSSL_free(pp);
|
if (r == -1 || ERR_peek_error() != 0) { /* should happen only if r ==
|
||||||
}
|
* -1 */
|
||||||
#endif
|
ERR_print_errors(bio_err);
|
||||||
else if (outformat == FORMAT_PEM) {
|
goto end;
|
||||||
if(pubout || pubin)
|
}
|
||||||
{
|
}
|
||||||
if (pubout == 2)
|
|
||||||
i=PEM_write_bio_RSAPublicKey(out,rsa);
|
if (noout) {
|
||||||
else
|
ret = 0;
|
||||||
i=PEM_write_bio_RSA_PUBKEY(out,rsa);
|
goto end;
|
||||||
}
|
}
|
||||||
else i=PEM_write_bio_RSAPrivateKey(out,rsa,
|
BIO_printf(bio_err, "writing RSA key\n");
|
||||||
enc,NULL,0,NULL,passout);
|
if (outformat == FORMAT_ASN1) {
|
||||||
#if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
|
if (pubout || pubin) {
|
||||||
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
|
if (pubout == 2)
|
||||||
EVP_PKEY *pk;
|
i = i2d_RSAPublicKey_bio(out, rsa);
|
||||||
pk = EVP_PKEY_new();
|
else
|
||||||
EVP_PKEY_set1_RSA(pk, rsa);
|
i = i2d_RSA_PUBKEY_bio(out, rsa);
|
||||||
if (outformat == FORMAT_PVK)
|
} else
|
||||||
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
|
i = i2d_RSAPrivateKey_bio(out, rsa);
|
||||||
else if (pubin || pubout)
|
}
|
||||||
i = i2b_PublicKey_bio(out, pk);
|
# ifndef OPENSSL_NO_RC4
|
||||||
else
|
else if (outformat == FORMAT_NETSCAPE) {
|
||||||
i = i2b_PrivateKey_bio(out, pk);
|
unsigned char *p, *pp;
|
||||||
EVP_PKEY_free(pk);
|
int size;
|
||||||
#endif
|
|
||||||
} else {
|
i = 1;
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
size = i2d_RSA_NET(rsa, NULL, NULL, sgckey);
|
||||||
goto end;
|
if ((p = (unsigned char *)OPENSSL_malloc(size)) == NULL) {
|
||||||
}
|
BIO_printf(bio_err, "Memory allocation failure\n");
|
||||||
if (i <= 0)
|
goto end;
|
||||||
{
|
}
|
||||||
BIO_printf(bio_err,"unable to write key\n");
|
pp = p;
|
||||||
ERR_print_errors(bio_err);
|
i2d_RSA_NET(rsa, &p, NULL, sgckey);
|
||||||
}
|
BIO_write(out, (char *)pp, size);
|
||||||
else
|
OPENSSL_free(pp);
|
||||||
ret=0;
|
}
|
||||||
end:
|
# endif
|
||||||
if(out != NULL) BIO_free_all(out);
|
else if (outformat == FORMAT_PEM) {
|
||||||
if(rsa != NULL) RSA_free(rsa);
|
if (pubout || pubin) {
|
||||||
if(passin) OPENSSL_free(passin);
|
if (pubout == 2)
|
||||||
if(passout) OPENSSL_free(passout);
|
i = PEM_write_bio_RSAPublicKey(out, rsa);
|
||||||
apps_shutdown();
|
else
|
||||||
OPENSSL_EXIT(ret);
|
i = PEM_write_bio_RSA_PUBKEY(out, rsa);
|
||||||
}
|
} else
|
||||||
#else /* !OPENSSL_NO_RSA */
|
i = PEM_write_bio_RSAPrivateKey(out, rsa,
|
||||||
|
enc, NULL, 0, NULL, passout);
|
||||||
|
# if !defined(OPENSSL_NO_DSA) && !defined(OPENSSL_NO_RC4)
|
||||||
|
} else if (outformat == FORMAT_MSBLOB || outformat == FORMAT_PVK) {
|
||||||
|
EVP_PKEY *pk;
|
||||||
|
pk = EVP_PKEY_new();
|
||||||
|
EVP_PKEY_set1_RSA(pk, rsa);
|
||||||
|
if (outformat == FORMAT_PVK)
|
||||||
|
i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout);
|
||||||
|
else if (pubin || pubout)
|
||||||
|
i = i2b_PublicKey_bio(out, pk);
|
||||||
|
else
|
||||||
|
i = i2b_PrivateKey_bio(out, pk);
|
||||||
|
EVP_PKEY_free(pk);
|
||||||
|
# endif
|
||||||
|
} else {
|
||||||
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
if (i <= 0) {
|
||||||
|
BIO_printf(bio_err, "unable to write key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
} else
|
||||||
|
ret = 0;
|
||||||
|
end:
|
||||||
|
if (out != NULL)
|
||||||
|
BIO_free_all(out);
|
||||||
|
if (rsa != NULL)
|
||||||
|
RSA_free(rsa);
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
if (passout)
|
||||||
|
OPENSSL_free(passout);
|
||||||
|
apps_shutdown();
|
||||||
|
OPENSSL_EXIT(ret);
|
||||||
|
}
|
||||||
|
#else /* !OPENSSL_NO_RSA */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
514
apps/rsautl.c
514
apps/rsautl.c
@@ -1,6 +1,7 @@
|
|||||||
/* rsautl.c */
|
/* rsautl.c */
|
||||||
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
|
/*
|
||||||
* project 2000.
|
* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
|
||||||
|
* 2000.
|
||||||
*/
|
*/
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
* Copyright (c) 2000 The OpenSSL Project. All rights reserved.
|
* Copyright (c) 2000 The OpenSSL Project. All rights reserved.
|
||||||
@@ -10,7 +11,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -59,293 +60,316 @@
|
|||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
#ifndef OPENSSL_NO_RSA
|
#ifndef OPENSSL_NO_RSA
|
||||||
|
|
||||||
#include "apps.h"
|
# include "apps.h"
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
#include <openssl/err.h>
|
# include <openssl/err.h>
|
||||||
#include <openssl/pem.h>
|
# include <openssl/pem.h>
|
||||||
#include <openssl/rsa.h>
|
# include <openssl/rsa.h>
|
||||||
|
|
||||||
#define RSA_SIGN 1
|
# define RSA_SIGN 1
|
||||||
#define RSA_VERIFY 2
|
# define RSA_VERIFY 2
|
||||||
#define RSA_ENCRYPT 3
|
# define RSA_ENCRYPT 3
|
||||||
#define RSA_DECRYPT 4
|
# define RSA_DECRYPT 4
|
||||||
|
|
||||||
#define KEY_PRIVKEY 1
|
# define KEY_PRIVKEY 1
|
||||||
#define KEY_PUBKEY 2
|
# define KEY_PUBKEY 2
|
||||||
#define KEY_CERT 3
|
# define KEY_CERT 3
|
||||||
|
|
||||||
static void usage(void);
|
static void usage(void);
|
||||||
|
|
||||||
#undef PROG
|
# undef PROG
|
||||||
|
|
||||||
#define PROG rsautl_main
|
# define PROG rsautl_main
|
||||||
|
|
||||||
int MAIN(int argc, char **);
|
int MAIN(int argc, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
ENGINE *e = NULL;
|
ENGINE *e = NULL;
|
||||||
BIO *in = NULL, *out = NULL;
|
BIO *in = NULL, *out = NULL;
|
||||||
char *infile = NULL, *outfile = NULL;
|
char *infile = NULL, *outfile = NULL;
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
char *engine = NULL;
|
char *engine = NULL;
|
||||||
#endif
|
# endif
|
||||||
char *keyfile = NULL;
|
char *keyfile = NULL;
|
||||||
char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
|
char rsa_mode = RSA_VERIFY, key_type = KEY_PRIVKEY;
|
||||||
int keyform = FORMAT_PEM;
|
int keyform = FORMAT_PEM;
|
||||||
char need_priv = 0, badarg = 0, rev = 0;
|
char need_priv = 0, badarg = 0, rev = 0;
|
||||||
char hexdump = 0, asn1parse = 0;
|
char hexdump = 0, asn1parse = 0;
|
||||||
X509 *x;
|
X509 *x;
|
||||||
EVP_PKEY *pkey = NULL;
|
EVP_PKEY *pkey = NULL;
|
||||||
RSA *rsa = NULL;
|
RSA *rsa = NULL;
|
||||||
unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
|
unsigned char *rsa_in = NULL, *rsa_out = NULL, pad;
|
||||||
char *passargin = NULL, *passin = NULL;
|
char *passargin = NULL, *passin = NULL;
|
||||||
int rsa_inlen, rsa_outlen = 0;
|
int rsa_inlen, rsa_outlen = 0;
|
||||||
int keysize;
|
int keysize;
|
||||||
|
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
|
|
||||||
if(!bio_err) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
if (!bio_err)
|
||||||
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
if (!load_config(bio_err, NULL))
|
if (!load_config(bio_err, NULL))
|
||||||
goto end;
|
goto end;
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
OpenSSL_add_all_algorithms();
|
OpenSSL_add_all_algorithms();
|
||||||
pad = RSA_PKCS1_PADDING;
|
pad = RSA_PKCS1_PADDING;
|
||||||
|
|
||||||
while(argc >= 1)
|
|
||||||
{
|
|
||||||
if (!strcmp(*argv,"-in")) {
|
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else
|
|
||||||
infile= *(++argv);
|
|
||||||
} else if (!strcmp(*argv,"-out")) {
|
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else
|
|
||||||
outfile= *(++argv);
|
|
||||||
} else if(!strcmp(*argv, "-inkey")) {
|
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else
|
|
||||||
keyfile = *(++argv);
|
|
||||||
} else if (!strcmp(*argv,"-passin")) {
|
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else
|
|
||||||
passargin= *(++argv);
|
|
||||||
} else if (strcmp(*argv,"-keyform") == 0) {
|
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else
|
|
||||||
keyform=str2fmt(*(++argv));
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
|
||||||
} else if(!strcmp(*argv, "-engine")) {
|
|
||||||
if (--argc < 1)
|
|
||||||
badarg = 1;
|
|
||||||
else
|
|
||||||
engine = *(++argv);
|
|
||||||
#endif
|
|
||||||
} else if(!strcmp(*argv, "-pubin")) {
|
|
||||||
key_type = KEY_PUBKEY;
|
|
||||||
} else if(!strcmp(*argv, "-certin")) {
|
|
||||||
key_type = KEY_CERT;
|
|
||||||
}
|
|
||||||
else if(!strcmp(*argv, "-asn1parse")) asn1parse = 1;
|
|
||||||
else if(!strcmp(*argv, "-hexdump")) hexdump = 1;
|
|
||||||
else if(!strcmp(*argv, "-raw")) pad = RSA_NO_PADDING;
|
|
||||||
else if(!strcmp(*argv, "-oaep")) pad = RSA_PKCS1_OAEP_PADDING;
|
|
||||||
else if(!strcmp(*argv, "-ssl")) pad = RSA_SSLV23_PADDING;
|
|
||||||
else if(!strcmp(*argv, "-pkcs")) pad = RSA_PKCS1_PADDING;
|
|
||||||
else if(!strcmp(*argv, "-x931")) pad = RSA_X931_PADDING;
|
|
||||||
else if(!strcmp(*argv, "-sign")) {
|
|
||||||
rsa_mode = RSA_SIGN;
|
|
||||||
need_priv = 1;
|
|
||||||
} else if(!strcmp(*argv, "-verify")) rsa_mode = RSA_VERIFY;
|
|
||||||
else if(!strcmp(*argv, "-rev")) rev = 1;
|
|
||||||
else if(!strcmp(*argv, "-encrypt")) rsa_mode = RSA_ENCRYPT;
|
|
||||||
else if(!strcmp(*argv, "-decrypt")) {
|
|
||||||
rsa_mode = RSA_DECRYPT;
|
|
||||||
need_priv = 1;
|
|
||||||
} else badarg = 1;
|
|
||||||
if(badarg) {
|
|
||||||
usage();
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(need_priv && (key_type != KEY_PRIVKEY)) {
|
while (argc >= 1) {
|
||||||
BIO_printf(bio_err, "A private key is needed for this operation\n");
|
if (!strcmp(*argv, "-in")) {
|
||||||
goto end;
|
if (--argc < 1)
|
||||||
}
|
badarg = 1;
|
||||||
|
else
|
||||||
|
infile = *(++argv);
|
||||||
|
} else if (!strcmp(*argv, "-out")) {
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
outfile = *(++argv);
|
||||||
|
} else if (!strcmp(*argv, "-inkey")) {
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
keyfile = *(++argv);
|
||||||
|
} else if (!strcmp(*argv, "-passin")) {
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
passargin = *(++argv);
|
||||||
|
} else if (strcmp(*argv, "-keyform") == 0) {
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
keyform = str2fmt(*(++argv));
|
||||||
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
|
} else if (!strcmp(*argv, "-engine")) {
|
||||||
|
if (--argc < 1)
|
||||||
|
badarg = 1;
|
||||||
|
else
|
||||||
|
engine = *(++argv);
|
||||||
|
# endif
|
||||||
|
} else if (!strcmp(*argv, "-pubin")) {
|
||||||
|
key_type = KEY_PUBKEY;
|
||||||
|
} else if (!strcmp(*argv, "-certin")) {
|
||||||
|
key_type = KEY_CERT;
|
||||||
|
} else if (!strcmp(*argv, "-asn1parse"))
|
||||||
|
asn1parse = 1;
|
||||||
|
else if (!strcmp(*argv, "-hexdump"))
|
||||||
|
hexdump = 1;
|
||||||
|
else if (!strcmp(*argv, "-raw"))
|
||||||
|
pad = RSA_NO_PADDING;
|
||||||
|
else if (!strcmp(*argv, "-oaep"))
|
||||||
|
pad = RSA_PKCS1_OAEP_PADDING;
|
||||||
|
else if (!strcmp(*argv, "-ssl"))
|
||||||
|
pad = RSA_SSLV23_PADDING;
|
||||||
|
else if (!strcmp(*argv, "-pkcs"))
|
||||||
|
pad = RSA_PKCS1_PADDING;
|
||||||
|
else if (!strcmp(*argv, "-x931"))
|
||||||
|
pad = RSA_X931_PADDING;
|
||||||
|
else if (!strcmp(*argv, "-sign")) {
|
||||||
|
rsa_mode = RSA_SIGN;
|
||||||
|
need_priv = 1;
|
||||||
|
} else if (!strcmp(*argv, "-verify"))
|
||||||
|
rsa_mode = RSA_VERIFY;
|
||||||
|
else if (!strcmp(*argv, "-rev"))
|
||||||
|
rev = 1;
|
||||||
|
else if (!strcmp(*argv, "-encrypt"))
|
||||||
|
rsa_mode = RSA_ENCRYPT;
|
||||||
|
else if (!strcmp(*argv, "-decrypt")) {
|
||||||
|
rsa_mode = RSA_DECRYPT;
|
||||||
|
need_priv = 1;
|
||||||
|
} else
|
||||||
|
badarg = 1;
|
||||||
|
if (badarg) {
|
||||||
|
usage();
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
if (need_priv && (key_type != KEY_PRIVKEY)) {
|
||||||
e = setup_engine(bio_err, engine, 0);
|
BIO_printf(bio_err, "A private key is needed for this operation\n");
|
||||||
#endif
|
goto end;
|
||||||
if(!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
|
}
|
||||||
BIO_printf(bio_err, "Error getting password\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
goto end;
|
e = setup_engine(bio_err, engine, 0);
|
||||||
}
|
# endif
|
||||||
|
if (!app_passwd(bio_err, passargin, NULL, &passin, NULL)) {
|
||||||
|
BIO_printf(bio_err, "Error getting password\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: seed PRNG only if needed */
|
/* FIXME: seed PRNG only if needed */
|
||||||
app_RAND_load_file(NULL, bio_err, 0);
|
app_RAND_load_file(NULL, bio_err, 0);
|
||||||
|
|
||||||
switch(key_type) {
|
|
||||||
case KEY_PRIVKEY:
|
|
||||||
pkey = load_key(bio_err, keyfile, keyform, 0,
|
|
||||||
passin, e, "Private Key");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_PUBKEY:
|
switch (key_type) {
|
||||||
pkey = load_pubkey(bio_err, keyfile, keyform, 0,
|
case KEY_PRIVKEY:
|
||||||
NULL, e, "Public Key");
|
pkey = load_key(bio_err, keyfile, keyform, 0,
|
||||||
break;
|
passin, e, "Private Key");
|
||||||
|
break;
|
||||||
|
|
||||||
case KEY_CERT:
|
case KEY_PUBKEY:
|
||||||
x = load_cert(bio_err, keyfile, keyform,
|
pkey = load_pubkey(bio_err, keyfile, keyform, 0,
|
||||||
NULL, e, "Certificate");
|
NULL, e, "Public Key");
|
||||||
if(x) {
|
break;
|
||||||
pkey = X509_get_pubkey(x);
|
|
||||||
X509_free(x);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!pkey) {
|
case KEY_CERT:
|
||||||
return 1;
|
x = load_cert(bio_err, keyfile, keyform, NULL, e, "Certificate");
|
||||||
}
|
if (x) {
|
||||||
|
pkey = X509_get_pubkey(x);
|
||||||
|
X509_free(x);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
rsa = EVP_PKEY_get1_RSA(pkey);
|
if (!pkey) {
|
||||||
EVP_PKEY_free(pkey);
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if(!rsa) {
|
rsa = EVP_PKEY_get1_RSA(pkey);
|
||||||
BIO_printf(bio_err, "Error getting RSA key\n");
|
EVP_PKEY_free(pkey);
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!rsa) {
|
||||||
|
BIO_printf(bio_err, "Error getting RSA key\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if(infile) {
|
if (infile) {
|
||||||
if(!(in = BIO_new_file(infile, "rb"))) {
|
if (!(in = BIO_new_file(infile, "rb"))) {
|
||||||
BIO_printf(bio_err, "Error Reading Input File\n");
|
BIO_printf(bio_err, "Error Reading Input File\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
} else
|
||||||
|
in = BIO_new_fp(stdin, BIO_NOCLOSE);
|
||||||
|
|
||||||
if(outfile) {
|
if (outfile) {
|
||||||
if(!(out = BIO_new_file(outfile, "wb"))) {
|
if (!(out = BIO_new_file(outfile, "wb"))) {
|
||||||
BIO_printf(bio_err, "Error Reading Output File\n");
|
BIO_printf(bio_err, "Error Writing Output File\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
out = BIO_new_fp(stdout, BIO_NOCLOSE);
|
||||||
#ifdef OPENSSL_SYS_VMS
|
# ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
keysize = RSA_size(rsa);
|
keysize = RSA_size(rsa);
|
||||||
|
|
||||||
rsa_in = OPENSSL_malloc(keysize * 2);
|
rsa_in = OPENSSL_malloc(keysize * 2);
|
||||||
rsa_out = OPENSSL_malloc(keysize);
|
rsa_out = OPENSSL_malloc(keysize);
|
||||||
|
if (!rsa_in || !rsa_out) {
|
||||||
|
BIO_printf(bio_err, "Out of memory\n");
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
/* Read the input data */
|
/* Read the input data */
|
||||||
rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
|
rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
|
||||||
if(rsa_inlen <= 0) {
|
if (rsa_inlen < 0) {
|
||||||
BIO_printf(bio_err, "Error reading input Data\n");
|
BIO_printf(bio_err, "Error reading input Data\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if(rev) {
|
if (rev) {
|
||||||
int i;
|
int i;
|
||||||
unsigned char ctmp;
|
unsigned char ctmp;
|
||||||
for(i = 0; i < rsa_inlen/2; i++) {
|
for (i = 0; i < rsa_inlen / 2; i++) {
|
||||||
ctmp = rsa_in[i];
|
ctmp = rsa_in[i];
|
||||||
rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
|
rsa_in[i] = rsa_in[rsa_inlen - 1 - i];
|
||||||
rsa_in[rsa_inlen - 1 - i] = ctmp;
|
rsa_in[rsa_inlen - 1 - i] = ctmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch(rsa_mode) {
|
switch (rsa_mode) {
|
||||||
|
|
||||||
case RSA_VERIFY:
|
case RSA_VERIFY:
|
||||||
rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
rsa_outlen = RSA_public_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RSA_SIGN:
|
case RSA_SIGN:
|
||||||
rsa_outlen = RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
rsa_outlen =
|
||||||
break;
|
RSA_private_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
||||||
|
break;
|
||||||
|
|
||||||
case RSA_ENCRYPT:
|
case RSA_ENCRYPT:
|
||||||
rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
rsa_outlen = RSA_public_encrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RSA_DECRYPT:
|
case RSA_DECRYPT:
|
||||||
rsa_outlen = RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
rsa_outlen =
|
||||||
break;
|
RSA_private_decrypt(rsa_inlen, rsa_in, rsa_out, rsa, pad);
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rsa_outlen <= 0) {
|
if (rsa_outlen < 0) {
|
||||||
BIO_printf(bio_err, "RSA operation error\n");
|
BIO_printf(bio_err, "RSA operation error\n");
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
ret = 0;
|
ret = 0;
|
||||||
if(asn1parse) {
|
if (asn1parse) {
|
||||||
if(!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) {
|
if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) {
|
||||||
ERR_print_errors(bio_err);
|
ERR_print_errors(bio_err);
|
||||||
}
|
}
|
||||||
} else if(hexdump) BIO_dump(out, (char *)rsa_out, rsa_outlen);
|
} else if (hexdump)
|
||||||
else BIO_write(out, rsa_out, rsa_outlen);
|
BIO_dump(out, (char *)rsa_out, rsa_outlen);
|
||||||
end:
|
else
|
||||||
RSA_free(rsa);
|
BIO_write(out, rsa_out, rsa_outlen);
|
||||||
BIO_free(in);
|
end:
|
||||||
BIO_free_all(out);
|
RSA_free(rsa);
|
||||||
if(rsa_in) OPENSSL_free(rsa_in);
|
BIO_free(in);
|
||||||
if(rsa_out) OPENSSL_free(rsa_out);
|
BIO_free_all(out);
|
||||||
if(passin) OPENSSL_free(passin);
|
if (rsa_in)
|
||||||
return ret;
|
OPENSSL_free(rsa_in);
|
||||||
|
if (rsa_out)
|
||||||
|
OPENSSL_free(rsa_out);
|
||||||
|
if (passin)
|
||||||
|
OPENSSL_free(passin);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usage()
|
static void usage()
|
||||||
{
|
{
|
||||||
BIO_printf(bio_err, "Usage: rsautl [options]\n");
|
BIO_printf(bio_err, "Usage: rsautl [options]\n");
|
||||||
BIO_printf(bio_err, "-in file input file\n");
|
BIO_printf(bio_err, "-in file input file\n");
|
||||||
BIO_printf(bio_err, "-out file output file\n");
|
BIO_printf(bio_err, "-out file output file\n");
|
||||||
BIO_printf(bio_err, "-inkey file input key\n");
|
BIO_printf(bio_err, "-inkey file input key\n");
|
||||||
BIO_printf(bio_err, "-keyform arg private key format - default PEM\n");
|
BIO_printf(bio_err, "-keyform arg private key format - default PEM\n");
|
||||||
BIO_printf(bio_err, "-pubin input is an RSA public\n");
|
BIO_printf(bio_err, "-pubin input is an RSA public\n");
|
||||||
BIO_printf(bio_err, "-certin input is a certificate carrying an RSA public key\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-ssl use SSL v2 padding\n");
|
"-certin input is a certificate carrying an RSA public key\n");
|
||||||
BIO_printf(bio_err, "-raw use no padding\n");
|
BIO_printf(bio_err, "-ssl use SSL v2 padding\n");
|
||||||
BIO_printf(bio_err, "-pkcs use PKCS#1 v1.5 padding (default)\n");
|
BIO_printf(bio_err, "-raw use no padding\n");
|
||||||
BIO_printf(bio_err, "-oaep use PKCS#1 OAEP\n");
|
BIO_printf(bio_err,
|
||||||
BIO_printf(bio_err, "-sign sign with private key\n");
|
"-pkcs use PKCS#1 v1.5 padding (default)\n");
|
||||||
BIO_printf(bio_err, "-verify verify with public key\n");
|
BIO_printf(bio_err, "-oaep use PKCS#1 OAEP\n");
|
||||||
BIO_printf(bio_err, "-encrypt encrypt with public key\n");
|
BIO_printf(bio_err, "-sign sign with private key\n");
|
||||||
BIO_printf(bio_err, "-decrypt decrypt with private key\n");
|
BIO_printf(bio_err, "-verify verify with public key\n");
|
||||||
BIO_printf(bio_err, "-hexdump hex dump output\n");
|
BIO_printf(bio_err, "-encrypt encrypt with public key\n");
|
||||||
#ifndef OPENSSL_NO_ENGINE
|
BIO_printf(bio_err, "-decrypt decrypt with private key\n");
|
||||||
BIO_printf(bio_err, "-engine e use engine e, possibly a hardware device.\n");
|
BIO_printf(bio_err, "-hexdump hex dump output\n");
|
||||||
BIO_printf (bio_err, "-passin arg pass phrase source\n");
|
# ifndef OPENSSL_NO_ENGINE
|
||||||
#endif
|
BIO_printf(bio_err,
|
||||||
|
"-engine e use engine e, possibly a hardware device.\n");
|
||||||
|
BIO_printf(bio_err, "-passin arg pass phrase source\n");
|
||||||
|
# endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !OPENSSL_NO_RSA */
|
#else /* !OPENSSL_NO_RSA */
|
||||||
|
|
||||||
# if PEDANTIC
|
# if PEDANTIC
|
||||||
static void *dummy=&dummy;
|
static void *dummy = &dummy;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
105
apps/s_apps.h
105
apps/s_apps.h
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
*
|
*
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer in
|
||||||
@@ -108,69 +108,104 @@
|
|||||||
* Hudson (tjh@cryptsoft.com).
|
* Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#if !defined(OPENSSL_SYS_NETWARE) /* conflicts with winsock2 stuff on netware */
|
/* conflicts with winsock2 stuff on netware */
|
||||||
#include <sys/types.h>
|
#if !defined(OPENSSL_SYS_NETWARE)
|
||||||
|
# include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#include <openssl/opensslconf.h>
|
#include <openssl/opensslconf.h>
|
||||||
|
|
||||||
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
|
#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS)
|
||||||
#include <conio.h>
|
# include <conio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32)
|
#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32)
|
||||||
#define _kbhit kbhit
|
# define _kbhit kbhit
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
|
#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET)
|
||||||
/* VAX C does not defined fd_set and friends, but it's actually quite simple */
|
/*
|
||||||
/* These definitions are borrowed from SOCKETSHR. /Richard Levitte */
|
* VAX C does not defined fd_set and friends, but it's actually quite simple
|
||||||
#define MAX_NOFILE 32
|
*/
|
||||||
#define NBBY 8 /* number of bits in a byte */
|
/* These definitions are borrowed from SOCKETSHR. /Richard Levitte */
|
||||||
|
# define MAX_NOFILE 32
|
||||||
|
# define NBBY 8 /* number of bits in a byte */
|
||||||
|
|
||||||
#ifndef FD_SETSIZE
|
# ifndef FD_SETSIZE
|
||||||
#define FD_SETSIZE MAX_NOFILE
|
# define FD_SETSIZE MAX_NOFILE
|
||||||
#endif /* FD_SETSIZE */
|
# endif /* FD_SETSIZE */
|
||||||
|
|
||||||
/* How many things we'll allow select to use. 0 if unlimited */
|
/* How many things we'll allow select to use. 0 if unlimited */
|
||||||
#define MAXSELFD MAX_NOFILE
|
# define MAXSELFD MAX_NOFILE
|
||||||
typedef int fd_mask; /* int here! VMS prototypes int, not long */
|
typedef int fd_mask; /* int here! VMS prototypes int, not long */
|
||||||
#define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask (power of 2!)*/
|
# define NFDBITS (sizeof(fd_mask) * NBBY)/* bits per mask (power of 2!) */
|
||||||
#define NFDSHIFT 5 /* Shift based on above */
|
# define NFDSHIFT 5 /* Shift based on above */
|
||||||
|
|
||||||
typedef fd_mask fd_set;
|
typedef fd_mask fd_set;
|
||||||
#define FD_SET(n, p) (*(p) |= (1 << ((n) % NFDBITS)))
|
# define FD_SET(n, p) (*(p) |= (1 << ((n) % NFDBITS)))
|
||||||
#define FD_CLR(n, p) (*(p) &= ~(1 << ((n) % NFDBITS)))
|
# define FD_CLR(n, p) (*(p) &= ~(1 << ((n) % NFDBITS)))
|
||||||
#define FD_ISSET(n, p) (*(p) & (1 << ((n) % NFDBITS)))
|
# define FD_ISSET(n, p) (*(p) & (1 << ((n) % NFDBITS)))
|
||||||
#define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
|
# define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PORT 4433
|
#define PORT 4433
|
||||||
#define PORT_STR "4433"
|
#define PORT_STR "4433"
|
||||||
#define PROTOCOL "tcp"
|
#define PROTOCOL "tcp"
|
||||||
|
|
||||||
int do_server(int port, int type, int *ret, int (*cb) (char *hostname, int s, unsigned char *context), unsigned char *context);
|
int do_server(int port, int type, int *ret,
|
||||||
|
int (*cb) (char *hostname, int s, int stype,
|
||||||
|
unsigned char *context), unsigned char *context,
|
||||||
|
int naccept);
|
||||||
#ifdef HEADER_X509_H
|
#ifdef HEADER_X509_H
|
||||||
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
|
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HEADER_SSL_H
|
#ifdef HEADER_SSL_H
|
||||||
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
|
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
|
||||||
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
|
int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key,
|
||||||
|
STACK_OF(X509) *chain, int build_chain);
|
||||||
|
int ssl_print_sigalgs(BIO *out, SSL *s);
|
||||||
|
int ssl_print_point_formats(BIO *out, SSL *s);
|
||||||
|
int ssl_print_curves(BIO *out, SSL *s, int noshared);
|
||||||
#endif
|
#endif
|
||||||
|
int ssl_print_tmp_key(BIO *out, SSL *s);
|
||||||
int init_client(int *sock, char *server, int port, int type);
|
int init_client(int *sock, char *server, int port, int type);
|
||||||
int should_retry(int i);
|
int should_retry(int i);
|
||||||
int extract_port(char *str, short *port_ptr);
|
int extract_port(char *str, short *port_ptr);
|
||||||
int extract_host_port(char *str,char **host_ptr,unsigned char *ip,short *p);
|
int extract_host_port(char *str, char **host_ptr, unsigned char *ip,
|
||||||
|
short *p);
|
||||||
|
|
||||||
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
|
long MS_CALLBACK bio_dump_callback(BIO *bio, int cmd, const char *argp,
|
||||||
int argi, long argl, long ret);
|
int argi, long argl, long ret);
|
||||||
|
|
||||||
#ifdef HEADER_SSL_H
|
#ifdef HEADER_SSL_H
|
||||||
void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret);
|
void MS_CALLBACK apps_ssl_info_callback(const SSL *s, int where, int ret);
|
||||||
void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg);
|
void MS_CALLBACK msg_cb(int write_p, int version, int content_type,
|
||||||
|
const void *buf, size_t len, SSL *ssl, void *arg);
|
||||||
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
|
void MS_CALLBACK tlsext_cb(SSL *s, int client_server, int type,
|
||||||
unsigned char *data, int len,
|
unsigned char *data, int len, void *arg);
|
||||||
void *arg);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len);
|
int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
|
||||||
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int cookie_len);
|
unsigned int *cookie_len);
|
||||||
|
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
|
||||||
|
unsigned int cookie_len);
|
||||||
|
|
||||||
|
typedef struct ssl_excert_st SSL_EXCERT;
|
||||||
|
|
||||||
|
void ssl_ctx_set_excert(SSL_CTX *ctx, SSL_EXCERT *exc);
|
||||||
|
void ssl_excert_free(SSL_EXCERT *exc);
|
||||||
|
int args_excert(char ***pargs, int *pargc,
|
||||||
|
int *badarg, BIO *err, SSL_EXCERT **pexc);
|
||||||
|
int load_excert(SSL_EXCERT **pexc, BIO *err);
|
||||||
|
void print_ssl_summary(BIO *bio, SSL *s);
|
||||||
|
#ifdef HEADER_SSL_H
|
||||||
|
int args_ssl(char ***pargs, int *pargc, SSL_CONF_CTX *cctx,
|
||||||
|
int *badarg, BIO *err, STACK_OF(OPENSSL_STRING) **pstr);
|
||||||
|
int args_ssl_call(SSL_CTX *ctx, BIO *err, SSL_CONF_CTX *cctx,
|
||||||
|
STACK_OF(OPENSSL_STRING) *str, int no_ecdhe, int no_jpake);
|
||||||
|
int ssl_ctx_add_crls(SSL_CTX *ctx, STACK_OF(X509_CRL) *crls,
|
||||||
|
int crl_download);
|
||||||
|
int ssl_load_stores(SSL_CTX *ctx, const char *vfyCApath,
|
||||||
|
const char *vfyCAfile, const char *chCApath,
|
||||||
|
const char *chCAfile, STACK_OF(X509_CRL) *crls,
|
||||||
|
int crl_download);
|
||||||
|
#endif
|
||||||
|
|||||||
2126
apps/s_cb.c
2126
apps/s_cb.c
File diff suppressed because it is too large
Load Diff
3539
apps/s_client.c
3539
apps/s_client.c
File diff suppressed because it is too large
Load Diff
5224
apps/s_server.c
5224
apps/s_server.c
File diff suppressed because it is too large
Load Diff
962
apps/s_socket.c
962
apps/s_socket.c
File diff suppressed because it is too large
Load Diff
757
apps/s_time.c
757
apps/s_time.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
|
|
||||||
#define NO_SHUTDOWN
|
#define NO_SHUTDOWN
|
||||||
|
|
||||||
/*-----------------------------------------
|
/* ----------------------------------------
|
||||||
s_time - SSL client connection timer program
|
s_time - SSL client connection timer program
|
||||||
Written and donated by Larry Streepy <streepy@healthcare.com>
|
Written and donated by Larry Streepy <streepy@healthcare.com>
|
||||||
-----------------------------------------*/
|
-----------------------------------------*/
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
#define USE_SOCKETS
|
#define USE_SOCKETS
|
||||||
#include "apps.h"
|
#include "apps.h"
|
||||||
#ifdef OPENSSL_NO_STDIO
|
#ifdef OPENSSL_NO_STDIO
|
||||||
#define APPS_WIN16
|
# define APPS_WIN16
|
||||||
#endif
|
#endif
|
||||||
#include <openssl/x509.h>
|
#include <openssl/x509.h>
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
@@ -78,11 +78,11 @@
|
|||||||
#include "s_apps.h"
|
#include "s_apps.h"
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#ifdef WIN32_STUFF
|
#ifdef WIN32_STUFF
|
||||||
#include "winmain.h"
|
# include "winmain.h"
|
||||||
#include "wintext.h"
|
# include "wintext.h"
|
||||||
#endif
|
#endif
|
||||||
#if !defined(OPENSSL_SYS_MSDOS)
|
#if !defined(OPENSSL_SYS_MSDOS)
|
||||||
#include OPENSSL_UNISTD
|
# include OPENSSL_UNISTD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
@@ -91,9 +91,12 @@
|
|||||||
#undef ioctl
|
#undef ioctl
|
||||||
#define ioctl ioctlsocket
|
#define ioctl ioctlsocket
|
||||||
|
|
||||||
#define SSL_CONNECT_NAME "localhost:4433"
|
#define SSL_CONNECT_NAME "localhost:4433"
|
||||||
|
|
||||||
/*#define TEST_CERT "client.pem" */ /* no default cert. */
|
/* no default cert. */
|
||||||
|
/*
|
||||||
|
* #define TEST_CERT "client.pem"
|
||||||
|
*/
|
||||||
|
|
||||||
#undef BUFSIZZ
|
#undef BUFSIZZ
|
||||||
#define BUFSIZZ 1024*10
|
#define BUFSIZZ 1024*10
|
||||||
@@ -106,13 +109,13 @@
|
|||||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||||
|
|
||||||
#undef SECONDS
|
#undef SECONDS
|
||||||
#define SECONDS 30
|
#define SECONDS 30
|
||||||
extern int verify_depth;
|
extern int verify_depth;
|
||||||
extern int verify_error;
|
extern int verify_error;
|
||||||
|
|
||||||
static void s_time_usage(void);
|
static void s_time_usage(void);
|
||||||
static int parseArgs( int argc, char **argv );
|
static int parseArgs(int argc, char **argv);
|
||||||
static SSL *doConnection( SSL *scon );
|
static SSL *doConnection(SSL *scon);
|
||||||
static void s_time_init(void);
|
static void s_time_init(void);
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
@@ -120,58 +123,58 @@ static void s_time_init(void);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* static char *port=PORT_STR;*/
|
/* static char *port=PORT_STR;*/
|
||||||
static char *host=SSL_CONNECT_NAME;
|
static char *host = SSL_CONNECT_NAME;
|
||||||
static char *t_cert_file=NULL;
|
static char *t_cert_file = NULL;
|
||||||
static char *t_key_file=NULL;
|
static char *t_key_file = NULL;
|
||||||
static char *CApath=NULL;
|
static char *CApath = NULL;
|
||||||
static char *CAfile=NULL;
|
static char *CAfile = NULL;
|
||||||
static char *tm_cipher=NULL;
|
static char *tm_cipher = NULL;
|
||||||
static int tm_verify = SSL_VERIFY_NONE;
|
static int tm_verify = SSL_VERIFY_NONE;
|
||||||
static int maxTime = SECONDS;
|
static int maxTime = SECONDS;
|
||||||
static SSL_CTX *tm_ctx=NULL;
|
static SSL_CTX *tm_ctx = NULL;
|
||||||
static const SSL_METHOD *s_time_meth=NULL;
|
static const SSL_METHOD *s_time_meth = NULL;
|
||||||
static char *s_www_path=NULL;
|
static char *s_www_path = NULL;
|
||||||
static long bytes_read=0;
|
static long bytes_read = 0;
|
||||||
static int st_bugs=0;
|
static int st_bugs = 0;
|
||||||
static int perform=0;
|
static int perform = 0;
|
||||||
#ifdef FIONBIO
|
#ifdef FIONBIO
|
||||||
static int t_nbio=0;
|
static int t_nbio = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef OPENSSL_SYS_WIN32
|
#ifdef OPENSSL_SYS_WIN32
|
||||||
static int exitNow = 0; /* Set when it's time to exit main */
|
static int exitNow = 0; /* Set when it's time to exit main */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void s_time_init(void)
|
static void s_time_init(void)
|
||||||
{
|
{
|
||||||
host=SSL_CONNECT_NAME;
|
host = SSL_CONNECT_NAME;
|
||||||
t_cert_file=NULL;
|
t_cert_file = NULL;
|
||||||
t_key_file=NULL;
|
t_key_file = NULL;
|
||||||
CApath=NULL;
|
CApath = NULL;
|
||||||
CAfile=NULL;
|
CAfile = NULL;
|
||||||
tm_cipher=NULL;
|
tm_cipher = NULL;
|
||||||
tm_verify = SSL_VERIFY_NONE;
|
tm_verify = SSL_VERIFY_NONE;
|
||||||
maxTime = SECONDS;
|
maxTime = SECONDS;
|
||||||
tm_ctx=NULL;
|
tm_ctx = NULL;
|
||||||
s_time_meth=NULL;
|
s_time_meth = NULL;
|
||||||
s_www_path=NULL;
|
s_www_path = NULL;
|
||||||
bytes_read=0;
|
bytes_read = 0;
|
||||||
st_bugs=0;
|
st_bugs = 0;
|
||||||
perform=0;
|
perform = 0;
|
||||||
|
|
||||||
#ifdef FIONBIO
|
#ifdef FIONBIO
|
||||||
t_nbio=0;
|
t_nbio = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef OPENSSL_SYS_WIN32
|
#ifdef OPENSSL_SYS_WIN32
|
||||||
exitNow = 0; /* Set when it's time to exit main */
|
exitNow = 0; /* Set when it's time to exit main */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* usage - display usage message
|
* usage - display usage message
|
||||||
*/
|
*/
|
||||||
static void s_time_usage(void)
|
static void s_time_usage(void)
|
||||||
{
|
{
|
||||||
static char umsg[] = "\
|
static char umsg[] = "\
|
||||||
-time arg - max number of seconds to collect data, default %d\n\
|
-time arg - max number of seconds to collect data, default %d\n\
|
||||||
-verify arg - turn on peer certificate verification, arg == depth\n\
|
-verify arg - turn on peer certificate verification, arg == depth\n\
|
||||||
-cert arg - certificate file to use, PEM format assumed\n\
|
-cert arg - certificate file to use, PEM format assumed\n\
|
||||||
@@ -181,19 +184,20 @@ static void s_time_usage(void)
|
|||||||
-CAfile arg - PEM format file of CA's\n\
|
-CAfile arg - PEM format file of CA's\n\
|
||||||
-cipher - preferred cipher to use, play with 'openssl ciphers'\n\n";
|
-cipher - preferred cipher to use, play with 'openssl ciphers'\n\n";
|
||||||
|
|
||||||
printf( "usage: s_time <args>\n\n" );
|
printf("usage: s_time <args>\n\n");
|
||||||
|
|
||||||
printf("-connect host:port - host:port to connect to (default is %s)\n",SSL_CONNECT_NAME);
|
printf("-connect host:port - host:port to connect to (default is %s)\n",
|
||||||
|
SSL_CONNECT_NAME);
|
||||||
#ifdef FIONBIO
|
#ifdef FIONBIO
|
||||||
printf("-nbio - Run with non-blocking IO\n");
|
printf("-nbio - Run with non-blocking IO\n");
|
||||||
printf("-ssl2 - Just use SSLv2\n");
|
printf("-ssl2 - Just use SSLv2\n");
|
||||||
printf("-ssl3 - Just use SSLv3\n");
|
printf("-ssl3 - Just use SSLv3\n");
|
||||||
printf("-bugs - Turn on SSL bug compatibility\n");
|
printf("-bugs - Turn on SSL bug compatibility\n");
|
||||||
printf("-new - Just time new connections\n");
|
printf("-new - Just time new connections\n");
|
||||||
printf("-reuse - Just time connection reuse\n");
|
printf("-reuse - Just time connection reuse\n");
|
||||||
printf("-www page - Retrieve 'page' from the site\n");
|
printf("-www page - Retrieve 'page' from the site\n");
|
||||||
#endif
|
#endif
|
||||||
printf( umsg,SECONDS );
|
printf(umsg, SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
@@ -205,428 +209,433 @@ static int parseArgs(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int badop = 0;
|
int badop = 0;
|
||||||
|
|
||||||
verify_depth=0;
|
verify_depth = 0;
|
||||||
verify_error=X509_V_OK;
|
verify_error = X509_V_OK;
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
|
|
||||||
while (argc >= 1) {
|
while (argc >= 1) {
|
||||||
if (strcmp(*argv,"-connect") == 0)
|
if (strcmp(*argv, "-connect") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
host= *(++argv);
|
host = *(++argv);
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
else if( strcmp(*argv,"-host") == 0)
|
else if (strcmp(*argv, "-host") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
host= *(++argv);
|
host = *(++argv);
|
||||||
}
|
} else if (strcmp(*argv, "-port") == 0) {
|
||||||
else if( strcmp(*argv,"-port") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
port = *(++argv);
|
||||||
port= *(++argv);
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
else if (strcmp(*argv,"-reuse") == 0)
|
else if (strcmp(*argv, "-reuse") == 0)
|
||||||
perform=2;
|
perform = 2;
|
||||||
else if (strcmp(*argv,"-new") == 0)
|
else if (strcmp(*argv, "-new") == 0)
|
||||||
perform=1;
|
perform = 1;
|
||||||
else if( strcmp(*argv,"-verify") == 0) {
|
else if (strcmp(*argv, "-verify") == 0) {
|
||||||
|
|
||||||
tm_verify=SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE;
|
tm_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE;
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
verify_depth=atoi(*(++argv));
|
goto bad;
|
||||||
BIO_printf(bio_err,"verify depth is %d\n",verify_depth);
|
verify_depth = atoi(*(++argv));
|
||||||
|
BIO_printf(bio_err, "verify depth is %d\n", verify_depth);
|
||||||
|
|
||||||
} else if( strcmp(*argv,"-cert") == 0) {
|
} else if (strcmp(*argv, "-cert") == 0) {
|
||||||
|
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
t_cert_file= *(++argv);
|
goto bad;
|
||||||
|
t_cert_file = *(++argv);
|
||||||
|
|
||||||
} else if( strcmp(*argv,"-key") == 0) {
|
} else if (strcmp(*argv, "-key") == 0) {
|
||||||
|
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
t_key_file= *(++argv);
|
goto bad;
|
||||||
|
t_key_file = *(++argv);
|
||||||
|
|
||||||
} else if( strcmp(*argv,"-CApath") == 0) {
|
} else if (strcmp(*argv, "-CApath") == 0) {
|
||||||
|
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
CApath= *(++argv);
|
goto bad;
|
||||||
|
CApath = *(++argv);
|
||||||
|
|
||||||
} else if( strcmp(*argv,"-CAfile") == 0) {
|
} else if (strcmp(*argv, "-CAfile") == 0) {
|
||||||
|
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
CAfile= *(++argv);
|
goto bad;
|
||||||
|
CAfile = *(++argv);
|
||||||
|
|
||||||
} else if( strcmp(*argv,"-cipher") == 0) {
|
} else if (strcmp(*argv, "-cipher") == 0) {
|
||||||
|
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
tm_cipher= *(++argv);
|
goto bad;
|
||||||
}
|
tm_cipher = *(++argv);
|
||||||
|
}
|
||||||
#ifdef FIONBIO
|
#ifdef FIONBIO
|
||||||
else if(strcmp(*argv,"-nbio") == 0) {
|
else if (strcmp(*argv, "-nbio") == 0) {
|
||||||
t_nbio=1;
|
t_nbio = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if(strcmp(*argv,"-www") == 0)
|
else if (strcmp(*argv, "-www") == 0) {
|
||||||
{
|
if (--argc < 1)
|
||||||
if (--argc < 1) goto bad;
|
goto bad;
|
||||||
s_www_path= *(++argv);
|
s_www_path = *(++argv);
|
||||||
if(strlen(s_www_path) > MYBUFSIZ-100)
|
if (strlen(s_www_path) > MYBUFSIZ - 100) {
|
||||||
{
|
BIO_printf(bio_err, "-www option too long\n");
|
||||||
BIO_printf(bio_err,"-www option too long\n");
|
badop = 1;
|
||||||
badop=1;
|
}
|
||||||
}
|
} else if (strcmp(*argv, "-bugs") == 0)
|
||||||
}
|
st_bugs = 1;
|
||||||
else if(strcmp(*argv,"-bugs") == 0)
|
|
||||||
st_bugs=1;
|
|
||||||
#ifndef OPENSSL_NO_SSL2
|
#ifndef OPENSSL_NO_SSL2
|
||||||
else if(strcmp(*argv,"-ssl2") == 0)
|
else if (strcmp(*argv, "-ssl2") == 0)
|
||||||
s_time_meth=SSLv2_client_method();
|
s_time_meth = SSLv2_client_method();
|
||||||
#endif
|
#endif
|
||||||
#ifndef OPENSSL_NO_SSL3
|
#ifndef OPENSSL_NO_SSL3
|
||||||
else if(strcmp(*argv,"-ssl3") == 0)
|
else if (strcmp(*argv, "-ssl3") == 0)
|
||||||
s_time_meth=SSLv3_client_method();
|
s_time_meth = SSLv3_client_method();
|
||||||
#endif
|
#endif
|
||||||
else if( strcmp(*argv,"-time") == 0) {
|
else if (strcmp(*argv, "-time") == 0) {
|
||||||
|
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
maxTime= atoi(*(++argv));
|
goto bad;
|
||||||
}
|
maxTime = atoi(*(++argv));
|
||||||
else {
|
if (maxTime <= 0) {
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
BIO_printf(bio_err, "time must be > 0\n");
|
||||||
badop=1;
|
badop = 1;
|
||||||
break;
|
}
|
||||||
}
|
} else {
|
||||||
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
|
badop = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (perform == 0) perform=3;
|
if (perform == 0)
|
||||||
|
perform = 3;
|
||||||
|
|
||||||
if(badop) {
|
if (badop) {
|
||||||
bad:
|
bad:
|
||||||
s_time_usage();
|
s_time_usage();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0; /* Valid args */
|
return 0; /* Valid args */
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* TIME - time functions
|
* TIME - time functions
|
||||||
*/
|
*/
|
||||||
#define START 0
|
#define START 0
|
||||||
#define STOP 1
|
#define STOP 1
|
||||||
|
|
||||||
static double tm_Time_F(int s)
|
static double tm_Time_F(int s)
|
||||||
{
|
{
|
||||||
return app_tminterval(s,1);
|
return app_tminterval(s, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MAIN - main processing area for client
|
* MAIN - main processing area for client
|
||||||
* real name depends on MONOLITH
|
* real name depends on MONOLITH
|
||||||
*/
|
*/
|
||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
double totalTime = 0.0;
|
double totalTime = 0.0;
|
||||||
int nConn = 0;
|
int nConn = 0;
|
||||||
SSL *scon=NULL;
|
SSL *scon = NULL;
|
||||||
long finishtime=0;
|
long finishtime = 0;
|
||||||
int ret=1,i;
|
int ret = 1, i;
|
||||||
MS_STATIC char buf[1024*8];
|
MS_STATIC char buf[1024 * 8];
|
||||||
int ver;
|
int ver;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
s_time_init();
|
s_time_init();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
bio_err=BIO_new_fp(stderr,BIO_NOCLOSE);
|
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||||
|
|
||||||
#if !defined(OPENSSL_NO_SSL2) && !defined(OPENSSL_NO_SSL3)
|
s_time_meth = SSLv23_client_method();
|
||||||
s_time_meth=SSLv23_client_method();
|
|
||||||
#elif !defined(OPENSSL_NO_SSL3)
|
|
||||||
s_time_meth=SSLv3_client_method();
|
|
||||||
#elif !defined(OPENSSL_NO_SSL2)
|
|
||||||
s_time_meth=SSLv2_client_method();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* parse the command line arguments */
|
/* parse the command line arguments */
|
||||||
if( parseArgs( argc, argv ) < 0 )
|
if (parseArgs(argc, argv) < 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
OpenSSL_add_ssl_algorithms();
|
OpenSSL_add_ssl_algorithms();
|
||||||
if ((tm_ctx=SSL_CTX_new(s_time_meth)) == NULL) return(1);
|
if ((tm_ctx = SSL_CTX_new(s_time_meth)) == NULL)
|
||||||
|
return (1);
|
||||||
|
|
||||||
SSL_CTX_set_quiet_shutdown(tm_ctx,1);
|
SSL_CTX_set_quiet_shutdown(tm_ctx, 1);
|
||||||
|
|
||||||
if (st_bugs) SSL_CTX_set_options(tm_ctx,SSL_OP_ALL);
|
if (st_bugs)
|
||||||
SSL_CTX_set_cipher_list(tm_ctx,tm_cipher);
|
SSL_CTX_set_options(tm_ctx, SSL_OP_ALL);
|
||||||
if(!set_cert_stuff(tm_ctx,t_cert_file,t_key_file))
|
SSL_CTX_set_cipher_list(tm_ctx, tm_cipher);
|
||||||
goto end;
|
if (!set_cert_stuff(tm_ctx, t_cert_file, t_key_file))
|
||||||
|
goto end;
|
||||||
|
|
||||||
SSL_load_error_strings();
|
SSL_load_error_strings();
|
||||||
|
|
||||||
if ((!SSL_CTX_load_verify_locations(tm_ctx,CAfile,CApath)) ||
|
if ((!SSL_CTX_load_verify_locations(tm_ctx, CAfile, CApath)) ||
|
||||||
(!SSL_CTX_set_default_verify_paths(tm_ctx)))
|
(!SSL_CTX_set_default_verify_paths(tm_ctx))) {
|
||||||
{
|
/*
|
||||||
/* BIO_printf(bio_err,"error setting default verify locations\n"); */
|
* BIO_printf(bio_err,"error setting default verify locations\n");
|
||||||
ERR_print_errors(bio_err);
|
*/
|
||||||
/* goto end; */
|
ERR_print_errors(bio_err);
|
||||||
}
|
/* goto end; */
|
||||||
|
}
|
||||||
|
|
||||||
if (tm_cipher == NULL)
|
if (tm_cipher == NULL)
|
||||||
tm_cipher = getenv("SSL_CIPHER");
|
tm_cipher = getenv("SSL_CIPHER");
|
||||||
|
|
||||||
if (tm_cipher == NULL ) {
|
if (tm_cipher == NULL) {
|
||||||
fprintf( stderr, "No CIPHER specified\n" );
|
fprintf(stderr, "No CIPHER specified\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(perform & 1)) goto next;
|
if (!(perform & 1))
|
||||||
printf( "Collecting connection statistics for %d seconds\n", maxTime );
|
goto next;
|
||||||
|
printf("Collecting connection statistics for %d seconds\n", maxTime);
|
||||||
|
|
||||||
/* Loop and time how long it takes to make connections */
|
/* Loop and time how long it takes to make connections */
|
||||||
|
|
||||||
bytes_read=0;
|
bytes_read = 0;
|
||||||
finishtime=(long)time(NULL)+maxTime;
|
finishtime = (long)time(NULL) + maxTime;
|
||||||
tm_Time_F(START);
|
tm_Time_F(START);
|
||||||
for (;;)
|
for (;;) {
|
||||||
{
|
if (finishtime < (long)time(NULL))
|
||||||
if (finishtime < (long)time(NULL)) break;
|
break;
|
||||||
#ifdef WIN32_STUFF
|
#ifdef WIN32_STUFF
|
||||||
|
|
||||||
if( flushWinMsgs(0) == -1 )
|
if (flushWinMsgs(0) == -1)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if( waitingToDie || exitNow ) /* we're dead */
|
if (waitingToDie || exitNow) /* we're dead */
|
||||||
goto end;
|
goto end;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( (scon = doConnection( NULL )) == NULL )
|
if ((scon = doConnection(NULL)) == NULL)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if (s_www_path != NULL)
|
|
||||||
{
|
|
||||||
BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
|
|
||||||
SSL_write(scon,buf,strlen(buf));
|
|
||||||
while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
|
|
||||||
bytes_read+=i;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (s_www_path != NULL) {
|
||||||
|
BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n",
|
||||||
|
s_www_path);
|
||||||
|
SSL_write(scon, buf, strlen(buf));
|
||||||
|
while ((i = SSL_read(scon, buf, sizeof(buf))) > 0)
|
||||||
|
bytes_read += i;
|
||||||
|
}
|
||||||
#ifdef NO_SHUTDOWN
|
#ifdef NO_SHUTDOWN
|
||||||
SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
|
SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
|
||||||
#else
|
#else
|
||||||
SSL_shutdown(scon);
|
SSL_shutdown(scon);
|
||||||
#endif
|
#endif
|
||||||
SHUTDOWN2(SSL_get_fd(scon));
|
SHUTDOWN2(SSL_get_fd(scon));
|
||||||
|
|
||||||
nConn += 1;
|
nConn += 1;
|
||||||
if (SSL_session_reused(scon))
|
if (SSL_session_reused(scon))
|
||||||
ver='r';
|
ver = 'r';
|
||||||
else
|
else {
|
||||||
{
|
ver = SSL_version(scon);
|
||||||
ver=SSL_version(scon);
|
if (ver == TLS1_VERSION)
|
||||||
if (ver == TLS1_VERSION)
|
ver = 't';
|
||||||
ver='t';
|
else if (ver == SSL3_VERSION)
|
||||||
else if (ver == SSL3_VERSION)
|
ver = '3';
|
||||||
ver='3';
|
else if (ver == SSL2_VERSION)
|
||||||
else if (ver == SSL2_VERSION)
|
ver = '2';
|
||||||
ver='2';
|
else
|
||||||
else
|
ver = '*';
|
||||||
ver='*';
|
}
|
||||||
}
|
fputc(ver, stdout);
|
||||||
fputc(ver,stdout);
|
fflush(stdout);
|
||||||
fflush(stdout);
|
|
||||||
|
|
||||||
SSL_free( scon );
|
SSL_free(scon);
|
||||||
scon=NULL;
|
scon = NULL;
|
||||||
}
|
}
|
||||||
totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
|
totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
|
||||||
|
|
||||||
i=(int)((long)time(NULL)-finishtime+maxTime);
|
i = (int)((long)time(NULL) - finishtime + maxTime);
|
||||||
printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
|
printf
|
||||||
printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
|
("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n",
|
||||||
|
nConn, totalTime, ((double)nConn / totalTime), bytes_read);
|
||||||
|
printf
|
||||||
|
("%d connections in %ld real seconds, %ld bytes read per connection\n",
|
||||||
|
nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn);
|
||||||
|
|
||||||
/* Now loop and time connections using the same session id over and over */
|
/*
|
||||||
|
* Now loop and time connections using the same session id over and over
|
||||||
|
*/
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (!(perform & 2)) goto end;
|
if (!(perform & 2))
|
||||||
printf( "\n\nNow timing with session id reuse.\n" );
|
goto end;
|
||||||
|
printf("\n\nNow timing with session id reuse.\n");
|
||||||
|
|
||||||
/* Get an SSL object so we can reuse the session id */
|
/* Get an SSL object so we can reuse the session id */
|
||||||
if( (scon = doConnection( NULL )) == NULL )
|
if ((scon = doConnection(NULL)) == NULL) {
|
||||||
{
|
fprintf(stderr, "Unable to get connection\n");
|
||||||
fprintf( stderr, "Unable to get connection\n" );
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (s_www_path != NULL)
|
if (s_www_path != NULL) {
|
||||||
{
|
BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n", s_www_path);
|
||||||
BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
|
SSL_write(scon, buf, strlen(buf));
|
||||||
SSL_write(scon,buf,strlen(buf));
|
while (SSL_read(scon, buf, sizeof(buf)) > 0) ;
|
||||||
while (SSL_read(scon,buf,sizeof(buf)) > 0)
|
}
|
||||||
;
|
|
||||||
}
|
|
||||||
#ifdef NO_SHUTDOWN
|
#ifdef NO_SHUTDOWN
|
||||||
SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
|
SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
|
||||||
#else
|
#else
|
||||||
SSL_shutdown(scon);
|
SSL_shutdown(scon);
|
||||||
#endif
|
#endif
|
||||||
SHUTDOWN2(SSL_get_fd(scon));
|
SHUTDOWN2(SSL_get_fd(scon));
|
||||||
|
|
||||||
nConn = 0;
|
nConn = 0;
|
||||||
totalTime = 0.0;
|
totalTime = 0.0;
|
||||||
|
|
||||||
finishtime=(long)time(NULL)+maxTime;
|
finishtime = (long)time(NULL) + maxTime;
|
||||||
|
|
||||||
printf( "starting\n" );
|
printf("starting\n");
|
||||||
bytes_read=0;
|
bytes_read = 0;
|
||||||
tm_Time_F(START);
|
tm_Time_F(START);
|
||||||
|
|
||||||
for (;;)
|
for (;;) {
|
||||||
{
|
if (finishtime < (long)time(NULL))
|
||||||
if (finishtime < (long)time(NULL)) break;
|
break;
|
||||||
|
|
||||||
#ifdef WIN32_STUFF
|
#ifdef WIN32_STUFF
|
||||||
if( flushWinMsgs(0) == -1 )
|
if (flushWinMsgs(0) == -1)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if( waitingToDie || exitNow ) /* we're dead */
|
if (waitingToDie || exitNow) /* we're dead */
|
||||||
goto end;
|
goto end;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( (doConnection( scon )) == NULL )
|
if ((doConnection(scon)) == NULL)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
if (s_www_path)
|
|
||||||
{
|
|
||||||
BIO_snprintf(buf,sizeof buf,"GET %s HTTP/1.0\r\n\r\n",s_www_path);
|
|
||||||
SSL_write(scon,buf,strlen(buf));
|
|
||||||
while ((i=SSL_read(scon,buf,sizeof(buf))) > 0)
|
|
||||||
bytes_read+=i;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (s_www_path) {
|
||||||
|
BIO_snprintf(buf, sizeof buf, "GET %s HTTP/1.0\r\n\r\n",
|
||||||
|
s_www_path);
|
||||||
|
SSL_write(scon, buf, strlen(buf));
|
||||||
|
while ((i = SSL_read(scon, buf, sizeof(buf))) > 0)
|
||||||
|
bytes_read += i;
|
||||||
|
}
|
||||||
#ifdef NO_SHUTDOWN
|
#ifdef NO_SHUTDOWN
|
||||||
SSL_set_shutdown(scon,SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN);
|
SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
|
||||||
#else
|
#else
|
||||||
SSL_shutdown(scon);
|
SSL_shutdown(scon);
|
||||||
#endif
|
#endif
|
||||||
SHUTDOWN2(SSL_get_fd(scon));
|
SHUTDOWN2(SSL_get_fd(scon));
|
||||||
|
|
||||||
nConn += 1;
|
|
||||||
if (SSL_session_reused(scon))
|
|
||||||
ver='r';
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ver=SSL_version(scon);
|
|
||||||
if (ver == TLS1_VERSION)
|
|
||||||
ver='t';
|
|
||||||
else if (ver == SSL3_VERSION)
|
|
||||||
ver='3';
|
|
||||||
else if (ver == SSL2_VERSION)
|
|
||||||
ver='2';
|
|
||||||
else
|
|
||||||
ver='*';
|
|
||||||
}
|
|
||||||
fputc(ver,stdout);
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
totalTime += tm_Time_F(STOP); /* Add the time for this iteration*/
|
|
||||||
|
|
||||||
|
nConn += 1;
|
||||||
|
if (SSL_session_reused(scon))
|
||||||
|
ver = 'r';
|
||||||
|
else {
|
||||||
|
ver = SSL_version(scon);
|
||||||
|
if (ver == TLS1_VERSION)
|
||||||
|
ver = 't';
|
||||||
|
else if (ver == SSL3_VERSION)
|
||||||
|
ver = '3';
|
||||||
|
else if (ver == SSL2_VERSION)
|
||||||
|
ver = '2';
|
||||||
|
else
|
||||||
|
ver = '*';
|
||||||
|
}
|
||||||
|
fputc(ver, stdout);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
totalTime += tm_Time_F(STOP); /* Add the time for this iteration */
|
||||||
|
|
||||||
printf( "\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n", nConn, totalTime, ((double)nConn/totalTime),bytes_read);
|
printf
|
||||||
printf( "%d connections in %ld real seconds, %ld bytes read per connection\n",nConn,(long)time(NULL)-finishtime+maxTime,bytes_read/nConn);
|
("\n\n%d connections in %.2fs; %.2f connections/user sec, bytes read %ld\n",
|
||||||
|
nConn, totalTime, ((double)nConn / totalTime), bytes_read);
|
||||||
|
printf
|
||||||
|
("%d connections in %ld real seconds, %ld bytes read per connection\n",
|
||||||
|
nConn, (long)time(NULL) - finishtime + maxTime,
|
||||||
|
bytes_read / (nConn?nConn:1));
|
||||||
|
|
||||||
ret=0;
|
ret = 0;
|
||||||
end:
|
end:
|
||||||
if (scon != NULL) SSL_free(scon);
|
if (scon != NULL)
|
||||||
|
SSL_free(scon);
|
||||||
|
|
||||||
if (tm_ctx != NULL)
|
if (tm_ctx != NULL) {
|
||||||
{
|
SSL_CTX_free(tm_ctx);
|
||||||
SSL_CTX_free(tm_ctx);
|
tm_ctx = NULL;
|
||||||
tm_ctx=NULL;
|
}
|
||||||
}
|
apps_shutdown();
|
||||||
apps_shutdown();
|
OPENSSL_EXIT(ret);
|
||||||
OPENSSL_EXIT(ret);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/*-
|
||||||
* doConnection - make a connection
|
* doConnection - make a connection
|
||||||
* Args:
|
* Args:
|
||||||
* scon = earlier ssl connection for session id, or NULL
|
* scon = earlier ssl connection for session id, or NULL
|
||||||
* Returns:
|
* Returns:
|
||||||
* SSL * = the connection pointer.
|
* SSL * = the connection pointer.
|
||||||
*/
|
*/
|
||||||
static SSL *doConnection(SSL *scon)
|
static SSL *doConnection(SSL *scon)
|
||||||
{
|
{
|
||||||
BIO *conn;
|
BIO *conn;
|
||||||
SSL *serverCon;
|
SSL *serverCon;
|
||||||
int width, i;
|
int width, i;
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
|
|
||||||
if ((conn=BIO_new(BIO_s_connect())) == NULL)
|
if ((conn = BIO_new(BIO_s_connect())) == NULL)
|
||||||
return(NULL);
|
return (NULL);
|
||||||
|
|
||||||
/* BIO_set_conn_port(conn,port);*/
|
/* BIO_set_conn_port(conn,port);*/
|
||||||
BIO_set_conn_hostname(conn,host);
|
BIO_set_conn_hostname(conn, host);
|
||||||
|
|
||||||
if (scon == NULL)
|
if (scon == NULL)
|
||||||
serverCon=SSL_new(tm_ctx);
|
serverCon = SSL_new(tm_ctx);
|
||||||
else
|
else {
|
||||||
{
|
serverCon = scon;
|
||||||
serverCon=scon;
|
SSL_set_connect_state(serverCon);
|
||||||
SSL_set_connect_state(serverCon);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
SSL_set_bio(serverCon,conn,conn);
|
SSL_set_bio(serverCon, conn, conn);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if( scon != NULL )
|
if (scon != NULL)
|
||||||
SSL_set_session(serverCon,SSL_get_session(scon));
|
SSL_set_session(serverCon, SSL_get_session(scon));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ok, lets connect */
|
/* ok, lets connect */
|
||||||
for(;;) {
|
for (;;) {
|
||||||
i=SSL_connect(serverCon);
|
i = SSL_connect(serverCon);
|
||||||
if (BIO_sock_should_retry(i))
|
if (BIO_sock_should_retry(i)) {
|
||||||
{
|
BIO_printf(bio_err, "DELAY\n");
|
||||||
BIO_printf(bio_err,"DELAY\n");
|
|
||||||
|
|
||||||
i=SSL_get_fd(serverCon);
|
|
||||||
width=i+1;
|
|
||||||
FD_ZERO(&readfds);
|
|
||||||
openssl_fdset(i,&readfds);
|
|
||||||
/* Note: under VMS with SOCKETSHR the 2nd parameter
|
|
||||||
* is currently of type (int *) whereas under other
|
|
||||||
* systems it is (void *) if you don't have a cast it
|
|
||||||
* will choke the compiler: if you do have a cast then
|
|
||||||
* you can either go for (int *) or (void *).
|
|
||||||
*/
|
|
||||||
select(width,(void *)&readfds,NULL,NULL,NULL);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(i <= 0)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"ERROR\n");
|
|
||||||
if (verify_error != X509_V_OK)
|
|
||||||
BIO_printf(bio_err,"verify error:%s\n",
|
|
||||||
X509_verify_cert_error_string(verify_error));
|
|
||||||
else
|
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
if (scon == NULL)
|
|
||||||
SSL_free(serverCon);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return serverCon;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
i = SSL_get_fd(serverCon);
|
||||||
|
width = i + 1;
|
||||||
|
FD_ZERO(&readfds);
|
||||||
|
openssl_fdset(i, &readfds);
|
||||||
|
/*
|
||||||
|
* Note: under VMS with SOCKETSHR the 2nd parameter is currently
|
||||||
|
* of type (int *) whereas under other systems it is (void *) if
|
||||||
|
* you don't have a cast it will choke the compiler: if you do
|
||||||
|
* have a cast then you can either go for (int *) or (void *).
|
||||||
|
*/
|
||||||
|
select(width, (void *)&readfds, NULL, NULL, NULL);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i <= 0) {
|
||||||
|
BIO_printf(bio_err, "ERROR\n");
|
||||||
|
if (verify_error != X509_V_OK)
|
||||||
|
BIO_printf(bio_err, "verify error:%s\n",
|
||||||
|
X509_verify_cert_error_string(verify_error));
|
||||||
|
else
|
||||||
|
ERR_print_errors(bio_err);
|
||||||
|
if (scon == NULL)
|
||||||
|
SSL_free(serverCon);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return serverCon;
|
||||||
|
}
|
||||||
|
|||||||
413
apps/server.pem
413
apps/server.pem
@@ -1,369 +1,52 @@
|
|||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
|
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert
|
||||||
subject= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (512 bit)
|
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIB6TCCAVICAQYwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
|
MIID5zCCAs+gAwIBAgIJALnu1NlVpZ6zMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
|
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
|
||||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNMDAxMDE2MjIzMTAzWhcNMDMwMTE0
|
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
|
||||||
MjIzMTAzWjBjMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
|
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZDELMAkG
|
||||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxIzAhBgNVBAMTGlNlcnZlciB0ZXN0IGNl
|
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
|
||||||
cnQgKDUxMiBiaXQpMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJ+zw4Qnlf8SMVIP
|
RVNUSU5HIFBVUlBPU0VTIE9OTFkxGTAXBgNVBAMMEFRlc3QgU2VydmVyIENlcnQw
|
||||||
Fe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVDTGiXav6ooKXfX3j/7tdkuD8Ey2//
|
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzhPOSNtyyRspmeuUpxfNJ
|
||||||
Kv7+ue0CAwEAATANBgkqhkiG9w0BAQQFAAOBgQCT0grFQeZaqYb5EYfk20XixZV4
|
KCLTuf7g3uQ4zu4iHOmRO5TQci+HhVlLZrHF9XqFXcIP0y4pWDbMSGuiorUmzmfi
|
||||||
GmyAbXMftG1Eo7qGiMhYzRwGNWxEYojf5PZkYZXvSqZ/ZXHXa4g59jK/rJNnaVGM
|
R7bfSdI/+qIQt8KXRH6HNG1t8ou0VSvWId5TS5Dq/er5ODUr9OaaDva7EquHIcMv
|
||||||
k+xIX8mxQvlV0n5O9PIha5BX5teZnkHKgL8aKKLKW1BK7YTngsfSzzaeame5iKfz
|
vPQGuI+OEAcnleVCy9HVEIySrO4P3CNIicnGkwwiAud05yUAq/gPXBC1hTtmlPD7
|
||||||
itAE+OjGF+PFKbwX8Q==
|
TVcGVSEiJdvzqqlgv02qedGrkki6GY4S7GjZxrrf7Foc2EP+51LJzwLQx3/JfrCU
|
||||||
|
41NEWAsu/Sl0tQabXESN+zJ1pDqoZ3uHMgpQjeGiE0olr+YcsSW/tJmiU9OiAr8R
|
||||||
|
AgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJYIZI
|
||||||
|
AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW
|
||||||
|
BBSCvM8AABPR9zklmifnr9LvIBturDAfBgNVHSMEGDAWgBQ2w2yI55X+sL3szj49
|
||||||
|
hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEAqb1NV0B0/pbpK9Z4/bNjzPQLTRLK
|
||||||
|
WnSNm/Jh5v0GEUOE/Beg7GNjNrmeNmqxAlpqWz9qoeoFZax+QBpIZYjROU3TS3fp
|
||||||
|
yLsrnlr0CDQ5R7kCCDGa8dkXxemmpZZLbUCpW2Uoy8sAA4JjN9OtsZY7dvUXFgJ7
|
||||||
|
vVNTRnI01ghknbtD+2SxSQd3CWF6QhcRMAzZJ1z1cbbwGDDzfvGFPzJ+Sq+zEPds
|
||||||
|
xoVLLSetCiBc+40ZcDS5dV98h9XD7JMTQfxzA7mNGv73JoZJA6nFgj+ADSlJsY/t
|
||||||
|
JBv+z1iQRueoh9Qeee+ZbRifPouCB8FDx+AltvHTANdAq0t/K3o+pplMVA==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
MIIBPAIBAAJBAJ+zw4Qnlf8SMVIPFe9GEcStgOY2Ww/dgNdhjeD8ckUJNP5VZkVD
|
MIIEpAIBAAKCAQEA84TzkjbcskbKZnrlKcXzSSgi07n+4N7kOM7uIhzpkTuU0HIv
|
||||||
TGiXav6ooKXfX3j/7tdkuD8Ey2//Kv7+ue0CAwEAAQJAN6W31vDEP2DjdqhzCDDu
|
h4VZS2axxfV6hV3CD9MuKVg2zEhroqK1Js5n4ke230nSP/qiELfCl0R+hzRtbfKL
|
||||||
OA4NACqoiFqyblo7yc2tM4h4xMbC3Yx5UKMN9ZkCtX0gzrz6DyF47bdKcWBzNWCj
|
tFUr1iHeU0uQ6v3q+Tg1K/Tmmg72uxKrhyHDL7z0BriPjhAHJ5XlQsvR1RCMkqzu
|
||||||
gQIhANEoojVt7hq+SQ6MCN6FTAysGgQf56Q3TYoJMoWvdiXVAiEAw3e3rc+VJpOz
|
D9wjSInJxpMMIgLndOclAKv4D1wQtYU7ZpTw+01XBlUhIiXb86qpYL9NqnnRq5JI
|
||||||
rHuDo6bgpjUAAXM+v3fcpsfZSNO6V7kCIQCtbVjanpUwvZkMI9by02oUk9taki3b
|
uhmOEuxo2ca63+xaHNhD/udSyc8C0Md/yX6wlONTRFgLLv0pdLUGm1xEjfsydaQ6
|
||||||
PzPfAfNPYAbCJQIhAJXNQDWyqwn/lGmR11cqY2y9nZ1+5w3yHGatLrcDnQHxAiEA
|
qGd7hzIKUI3hohNKJa/mHLElv7SZolPTogK/EQIDAQABAoIBAADq9FwNtuE5IRQn
|
||||||
vnlEGo8K85u+KwIOimM48ZG8oTk7iFdkqLJR1utT3aU=
|
zGtO4q7Y5uCzZ8GDNYr9RKp+P2cbuWDbvVAecYq2NV9QoIiWJOAYZKklOvekIju3
|
||||||
|
r0UZLA0PRiIrTg6NrESx3JrjWDK8QNlUO7CPTZ39/K+FrmMkV9lem9yxjJjyC34D
|
||||||
|
AQB+YRTx+l14HppjdxNwHjAVQpIx/uO2F5xAMuk32+3K+pq9CZUtrofe1q4Agj9R
|
||||||
|
5s8mSy9pbRo9kW9wl5xdEotz1LivFOEiqPUJTUq5J5PeMKao3vdK726XI4Z455Nm
|
||||||
|
W2/MA0YV0ug2FYinHcZdvKM6dimH8GLfa3X8xKRfzjGjTiMSwsdjgMa4awY3tEHH
|
||||||
|
674jhAECgYEA/zqMrc0zsbNk83sjgaYIug5kzEpN4ic020rSZsmQxSCerJTgNhmg
|
||||||
|
utKSCt0Re09Jt3LqG48msahX8ycqDsHNvlEGPQSbMu9IYeO3Wr3fAm75GEtFWePY
|
||||||
|
BhM73I7gkRt4s8bUiUepMG/wY45c5tRF23xi8foReHFFe9MDzh8fJFECgYEA9EFX
|
||||||
|
4qAik1pOJGNei9BMwmx0I0gfVEIgu0tzeVqT45vcxbxr7RkTEaDoAG6PlbWP6D9a
|
||||||
|
WQNLp4gsgRM90ZXOJ4up5DsAWDluvaF4/omabMA+MJJ5kGZ0gCj5rbZbKqUws7x8
|
||||||
|
bp+6iBfUPJUbcqNqFmi/08Yt7vrDnMnyMw2A/sECgYEAiiuRMxnuzVm34hQcsbhH
|
||||||
|
6ymVqf7j0PW2qK0F4H1ocT9qhzWFd+RB3kHWrCjnqODQoI6GbGr/4JepHUpre1ex
|
||||||
|
4UEN5oSS3G0ru0rC3U4C59dZ5KwDHFm7ffZ1pr52ljfQDUsrjjIMRtuiwNK2OoRa
|
||||||
|
WSsqiaL+SDzSB+nBmpnAizECgYBdt/y6rerWUx4MhDwwtTnel7JwHyo2MDFS6/5g
|
||||||
|
n8qC2Lj6/fMDRE22w+CA2esp7EJNQJGv+b27iFpbJEDh+/Lf5YzIT4MwVskQ5bYB
|
||||||
|
JFcmRxUVmf4e09D7o705U/DjCgMH09iCsbLmqQ38ONIRSHZaJtMDtNTHD1yi+jF+
|
||||||
|
OT43gQKBgQC/2OHZoko6iRlNOAQ/tMVFNq7fL81GivoQ9F1U0Qr+DH3ZfaH8eIkX
|
||||||
|
xT0ToMPJUzWAn8pZv0snA0um6SIgvkCuxO84OkANCVbttzXImIsL7pFzfcwV/ERK
|
||||||
|
UM6j0ZuSMFOCr/lGPAoOQU0fskidGEHi1/kW+suSr28TqsyYZpwBDQ==
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
||||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
|
|
||||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
|
|
||||||
notBefore=950413210656Z
|
|
||||||
notAfter =970412210656Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
|
|
||||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
|
|
||||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
|
|
||||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
|
|
||||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
|
|
||||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
|
|
||||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
|
|
||||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
|
|
||||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
|
|
||||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
|
|
||||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
|
|
||||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
|
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
|
|
||||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
|
|
||||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
|
|
||||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
|
|
||||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
|
|
||||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
|
|
||||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
|
|
||||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
|
|
||||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
|
|
||||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
|
|
||||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
|
|
||||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
|
|
||||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
|
|
||||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
|
|
||||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
|
|
||||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
|
|
||||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
|
|
||||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
|
|
||||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
|
|
||||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
|
|
||||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
|
|
||||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
|
|
||||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
|
|
||||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
|
|
||||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
|
|
||||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
|
|
||||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
|
|
||||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
|
|
||||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
|
|
||||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
|
|
||||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
|
|
||||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
|
|
||||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
|
|
||||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
|
|
||||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
|
|
||||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
|
|
||||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
|
|
||||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
|
|
||||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
|
|
||||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
|
|
||||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
|
|
||||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
|
|
||||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
|
|
||||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
|
|
||||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
|
|
||||||
LC7obsrHD8XAHG+ZRG==
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
|
|
||||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
|
|
||||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
|
|
||||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
|
|
||||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
|
|
||||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
|
|
||||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
|
|
||||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
|
|
||||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
|
|
||||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
|
|
||||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
|
|
||||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
|
|
||||||
S7ELuYGtmYgYm9NZOIr7yU0=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
|
|
||||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
|
|
||||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
|
|
||||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
|
|
||||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
|
|
||||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
|
|
||||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
|
|
||||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
|
|
||||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
|
|
||||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
|
|
||||||
GJNMJ4L0AJ/ac+SmHZc=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
|
|
||||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
|
|
||||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
|
|
||||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
|
|
||||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
|
|
||||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
|
|
||||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
|
|
||||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
|
|
||||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
|
|
||||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
|
|
||||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
|
|
||||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
|
|
||||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
|
|
||||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
|
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
|
|
||||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
|
|
||||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
|
|
||||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
|
|
||||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
|
|
||||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
|
|
||||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
|
|
||||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
|
|
||||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
|
|
||||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
|
|
||||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
|
|
||||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
|
|
||||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
|
|
||||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
|
|
||||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
|
|
||||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
|
|
||||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
|
|
||||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
|
|
||||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
|
|
||||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
|
|
||||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
|
|
||||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
|
|
||||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
|
|
||||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
|
|
||||||
notBefore=941104185834Z
|
|
||||||
notAfter =991103185834Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
|
|
||||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
|
|
||||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
|
|
||||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
|
|
||||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
|
|
||||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
|
|
||||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
|
|
||||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
|
|
||||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
|
|
||||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
|
|
||||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
|
|
||||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
|
|
||||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
|
|
||||||
notBefore=941109235417Z
|
|
||||||
notAfter =991231235417Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
|
|
||||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
|
|
||||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
|
|
||||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
|
|
||||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
|
|
||||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
|
|
||||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
|
|
||||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
|
|
||||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
|
|
||||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
|
|
||||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
|
|
||||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
|
|
||||||
/OU=Certification Services Division/CN=Thawte Server CA
|
|
||||||
/Email=server-certs@thawte.com
|
|
||||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
|
|
||||||
/OU=Certification Services Division/CN=Thawte Server CA
|
|
||||||
/Email=server-certs@thawte.com
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
|
|
||||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
|
||||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
|
||||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
|
|
||||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
|
|
||||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
|
|
||||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
|
|
||||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
|
||||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
|
|
||||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
|
||||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
|
|
||||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
|
|
||||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
|
|
||||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
|
|
||||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
|
|
||||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
|
|
||||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
|
||||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
|
||||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
|
|
||||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
|
|
||||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
|
|
||||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
|
|
||||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
|
|
||||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
|
|
||||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
|
|
||||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
|
|
||||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
|
|
||||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
|
|
||||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
|
|
||||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
|
|
||||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
|
|
||||||
3VZdLbCVIhNoEsysrxCpxcI=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
Tims test GCI CA
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
|
|
||||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
|
|
||||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
|
|
||||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
|
|
||||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
|
|
||||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
|
|
||||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
|
|
||||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
|
|
||||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
|
|
||||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
|
|
||||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
|
|
||||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
|
|
||||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
|
|
||||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
|
|
||||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
|
|
||||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
|
|
||||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
|
|
||||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
|
|
||||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
|
|
||||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
|
|
||||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
|
|
||||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
|
|
||||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
|
|
||||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
|
|
||||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
|
|
||||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
|
|
||||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
|
|
||||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
|
|
||||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
|
|
||||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
|
|
||||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
|
|
||||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
|
|
||||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
|
|
||||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
|
|
||||||
issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
|
|
||||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
|
|
||||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
|
|
||||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
|
|
||||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
|
|
||||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
|
|
||||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
|
|
||||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
|
|
||||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
|
|
||||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
|
|
||||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
|
|
||||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
|
|
||||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
|
|
||||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
|
|
||||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
|
|
||||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
|
|
||||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
|
|
||||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
|
|
||||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
|
|
||||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
|
|
||||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
|
|
||||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
|
|
||||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
|
|
||||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
|
|
||||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
|
|
||||||
issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
|
|
||||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
|
|
||||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
|
|
||||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
|
|
||||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
|
|
||||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
|
|
||||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
|
|
||||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
|
|
||||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
|
|
||||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
|
|
||||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
|
|
||||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
|
|
||||||
issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
|
|
||||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
|
|
||||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
|
|
||||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
|
|
||||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
|
|
||||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
|
|
||||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
|
|
||||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
|
|
||||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
|
|
||||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
|
|
||||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
|
|
||||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|||||||
420
apps/server2.pem
420
apps/server2.pem
@@ -1,376 +1,52 @@
|
|||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
|
subject= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = Test Server Cert #2
|
||||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Server test cert (1024 bit)
|
issuer= C = UK, O = OpenSSL Group, OU = FOR TESTING PURPOSES ONLY, CN = OpenSSL Test Intermediate CA
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIICLjCCAZcCAQEwDQYJKoZIhvcNAQEEBQAwWzELMAkGA1UEBhMCQVUxEzARBgNV
|
MIID6jCCAtKgAwIBAgIJALnu1NlVpZ60MA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNV
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYD
|
BAYTAlVLMRYwFAYDVQQKDA1PcGVuU1NMIEdyb3VwMSIwIAYDVQQLDBlGT1IgVEVT
|
||||||
VQQDExJUZXN0IENBICgxMDI0IGJpdCkwHhcNOTcwNjA5MTM1NzU0WhcNOTgwNjA5
|
VElORyBQVVJQT1NFUyBPTkxZMSUwIwYDVQQDDBxPcGVuU1NMIFRlc3QgSW50ZXJt
|
||||||
MTM1NzU0WjBkMQswCQYDVQQGEwJBVTETMBEGA1UECBMKUXVlZW5zbGFuZDEaMBgG
|
ZWRpYXRlIENBMB4XDTExMTIwODE0MDE0OFoXDTIxMTAxNjE0MDE0OFowZzELMAkG
|
||||||
A1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxJDAiBgNVBAMTG1NlcnZlciB0ZXN0IGNl
|
A1UEBhMCVUsxFjAUBgNVBAoMDU9wZW5TU0wgR3JvdXAxIjAgBgNVBAsMGUZPUiBU
|
||||||
cnQgKDEwMjQgYml0KTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsxH1PBPm
|
RVNUSU5HIFBVUlBPU0VTIE9OTFkxHDAaBgNVBAMME1Rlc3QgU2VydmVyIENlcnQg
|
||||||
RkxrR11eV4bzNi4N9n11CI8nV29+ARlT1+qDe/mjVUvXlmsr1v/vf71G9GgqopSa
|
IzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDrdi7j9yctG+L4EjBy
|
||||||
6RXrICLVdk/FYYYzhPvl1M+OrjaXDFO8BzBAF1Lnz6c7aRZvGRJNrRSr2nZEkqDf
|
gjPmEqZzOJEQba26MoQGzglU7e5Xf59Rb/hgVQuKAoiZe7/R8rK4zJ4W7iXdXw0L
|
||||||
JW9dY7r2VZEpD5QeuaRYUnuECkqeieB65GMCAwEAATANBgkqhkiG9w0BAQQFAAOB
|
qBpyG8B5aGKeI32w+A9TcBApoXXL2CrYQEQjZwUIpLlYBIi2NkJj3nVkq5dgl1gO
|
||||||
gQCWsOta6C0wiVzXz8wPmJKyTrurMlgUss2iSuW9366iwofZddsNg7FXniMzkIf6
|
ALiQ+W8jg3kzg5Ec9rimp9r93N8wsSL3awsafurmYCvOf7leHaMP1WJ/zDRGUNHG
|
||||||
dp7jnmWZwKZ9cXsNUS2o4OL07qOk2HOywC0YsNZQsOBu1CBTYYkIefDiKFL1zQHh
|
/WtDjXc8ZUG1+6EXU9Jc2Fs+2Omf7fcN0l00AK/wPg8OaNS0rKyGq9JdIT9FRGV1
|
||||||
8lwwNd4NP+OE3NzUNkCfh4DnFfg9WHkXUlD5UpxNRJ4gJA==
|
bXe/rx58FaE5CItdwCSYhJvF/O95LWQoxJXye5bCFLmvDTEyVq9FMSCptfsmbXjE
|
||||||
|
ZGsXAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCBeAwLAYJ
|
||||||
|
YIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1Ud
|
||||||
|
DgQWBBR52UaWWTKzZGDH/X4mWNcuqeQVazAfBgNVHSMEGDAWgBQ2w2yI55X+sL3s
|
||||||
|
zj49hqshgYfa2jANBgkqhkiG9w0BAQUFAAOCAQEANBW+XYLlHBqVY/31ie+3gRlS
|
||||||
|
LPfy4SIqn0t3RJjagT29MXprblBO2cbMO8VGjkQdKGpmMXjxbht2arOOUXRHX4n/
|
||||||
|
XTyn/QHEf0bcwIITMReO3DZUPAEw8hSjn9xEOM0IRVOCP+mH5fi74QzzQaZVCyYg
|
||||||
|
5VtLKdww/+sc0nCbKl2KWgDluriH0nfVx95qgW3mg9dhXRr0zmf1w2zkBHYpARYL
|
||||||
|
Dew6Z8EE4tS3HJu8/qM6meWzNtrfonQ3eiiMxjZBxzV46jchBwa2z9XYhP6AmpPb
|
||||||
|
oeTSzcQNbWsxaGYzWo46oLDUZmJOwSBawbS31bZNMCoPIY6ukoesCzFSsUKZww==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
MIICXgIBAAKBgQCzEfU8E+ZGTGtHXV5XhvM2Lg32fXUIjydXb34BGVPX6oN7+aNV
|
MIIEowIBAAKCAQEA63Yu4/cnLRvi+BIwcoIz5hKmcziREG2tujKEBs4JVO3uV3+f
|
||||||
S9eWayvW/+9/vUb0aCqilJrpFesgItV2T8VhhjOE++XUz46uNpcMU7wHMEAXUufP
|
UW/4YFULigKImXu/0fKyuMyeFu4l3V8NC6gachvAeWhiniN9sPgPU3AQKaF1y9gq
|
||||||
pztpFm8ZEk2tFKvadkSSoN8lb11juvZVkSkPlB65pFhSe4QKSp6J4HrkYwIDAQAB
|
2EBEI2cFCKS5WASItjZCY951ZKuXYJdYDgC4kPlvI4N5M4ORHPa4pqfa/dzfMLEi
|
||||||
AoGBAKy8jvb0Lzby8q11yNLf7+78wCVdYi7ugMHcYA1JVFK8+zb1WfSm44FLQo/0
|
92sLGn7q5mArzn+5Xh2jD9Vif8w0RlDRxv1rQ413PGVBtfuhF1PSXNhbPtjpn+33
|
||||||
dSChAjgz36TTexeLODPYxleJndjVcOMVzsLJjSM8dLpXsTS4FCeMbhw2s2u+xqKY
|
DdJdNACv8D4PDmjUtKyshqvSXSE/RURldW13v68efBWhOQiLXcAkmISbxfzveS1k
|
||||||
bbPWfk+HOTyJjfnkcC5Nbg44eOmruq0gSmBeUXVM5UntlTnxAkEA7TGCA3h7kx5E
|
KMSV8nuWwhS5rw0xMlavRTEgqbX7Jm14xGRrFwIDAQABAoIBAHLsTPihIfLnYIE5
|
||||||
Bl4zl2pc3gPAGt+dyfk5Po9mGJUUXhF5p2zueGmYWW74TmOWB1kzt4QRdYMzFePq
|
x4GsQQ5zXeBw5ITDM37ktwHnQDC+rIzyUl1aLD1AZRBoKinXd4lOTqLZ4/NHKx4A
|
||||||
zfDNXEa1CwJBAMFErdY0xp0UJ13WwBbUTk8rujqQdHtjw0klhpbuKkjxu2hN0wwM
|
DYr58mZtWyUmqLOMmQVuHXTZBlp7XtYuXMMNovQwjQlp9LicBeoBU6gQ5PVMtubD
|
||||||
6p0D9qxF7JHaghqVRI0fAW/EE0OzdHMR9QkCQQDNR26dMFXKsoPu+vItljj/UEGf
|
F4xGF89Sn0cTHW3iMkqTtQ5KcR1j57OcJO0FEb1vPvk2MXI5ZyAatUYE7YacbEzd
|
||||||
QG7gERiQ4yxaFBPHgdpGo0kT31eh9x9hQGDkxTe0GNG/YSgCRvm8+C3TMcKXAkBD
|
rg02uIwx3FqNSkuSI79uz4hMdV5TPtuhxx9nTwj9aLUhXFeZ0mn2PVgVzEnnMoJb
|
||||||
dhGn36wkUFCddMSAM4NSJ1VN8/Z0y5HzCmI8dM3VwGtGMUQlxKxwOl30LEQzdS5M
|
+znlsZDgzDlJqdaD744YGWh8Z3OEssB35KfzFcdOeO6yH8lmv2Zfznk7pNPT7LTb
|
||||||
0SWojNYXiT2gOBfBwtbhAkEAhafl5QEOIgUz+XazS/IlZ8goNKdDVfYgK3mHHjvv
|
Lae9VgkCgYEA92p1qnAB3NtJtNcaW53i0S5WJgS1hxWKvUDx3lTB9s8X9fHpqL1a
|
||||||
nY5G+AuGebdNkXJr4KSWxDcN+C2i47zuj4QXA16MAOandA==
|
E94fDfWzp/hax6FefUKIvBOukPLQ6bYjTMiFoOHzVirghAIuIUoMI5VtLhwD1hKs
|
||||||
|
Lr7l/dptMgKb1nZHyXoKHRBthsy3K4+udsPi8TzMvYElgEqyQIe/Rk0CgYEA86GL
|
||||||
|
8HC6zLszzKERDPBxrboRmoFvVUCTQDhsfj1M8aR3nQ8V5LkdIJc7Wqm/Ggfk9QRf
|
||||||
|
rJ8M2WUMlU5CNnCn/KCrKzCNZIReze3fV+HnKdbcXGLvgbHPrhnz8yYehUFG+RGq
|
||||||
|
bVyDWRU94T38izy2s5qMYrMJWZEYyXncSPbfcPMCgYAtaXfxcZ+V5xYPQFARMtiX
|
||||||
|
5nZfggvDoJuXgx0h3tK/N2HBfcaSdzbaYLG4gTmZggc/jwnl2dl5E++9oSPhUdIG
|
||||||
|
3ONSFUbxsOsGr9PBvnKd8WZZyUCXAVRjPBzAzF+whzQNWCZy/5htnz9LN7YDI9s0
|
||||||
|
5113Q96cheDZPFydZY0hHQKBgQDVbEhNukM5xCiNcu+f2SaMnLp9EjQ4h5g3IvaP
|
||||||
|
5B16daw/Dw8LzcohWboqIxeAsze0GD/D1ZUJAEd0qBjC3g+a9BjefervCjKOzXng
|
||||||
|
38mEUm+6EwVjJSQcjSmycEs+Sr/kwr/8i5WYvU32+jk4tFgMoC+o6tQe/Uesf68k
|
||||||
|
z/dPVwKBgGbF7Vv1/3SmhlOy+zYyvJ0CrWtKxH9QP6tLIEgEpd8x7YTSuCH94yok
|
||||||
|
kToMXYA3sWNPt22GbRDZ+rcp4c7HkDx6I6vpdP9aQEwJTp0EPy0sgWr2XwYmreIQ
|
||||||
|
NFmkk8Itn9EY2R9VBaP7GLv5kvwxDdLAnmwGmzVtbmaVdxCaBwUk
|
||||||
-----END RSA PRIVATE KEY-----
|
-----END RSA PRIVATE KEY-----
|
||||||
subject=/C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
|
|
||||||
issuer= /C=US/O=AT&T Bell Laboratories/OU=Prototype Research CA
|
|
||||||
notBefore=950413210656Z
|
|
||||||
notAfter =970412210656Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICCDCCAXECAQAwDQYJKoZIhvcNAQEEBQAwTjELMAkGA1UEBhMCVVMxHzAdBgNV
|
|
||||||
BAoUFkFUJlQgQmVsbCBMYWJvcmF0b3JpZXMxHjAcBgNVBAsUFVByb3RvdHlwZSBS
|
|
||||||
ZXNlYXJjaCBDQTAeFw05NTA0MTMyMTA2NTZaFw05NzA0MTIyMTA2NTZaME4xCzAJ
|
|
||||||
BgNVBAYTAlVTMR8wHQYDVQQKFBZBVCZUIEJlbGwgTGFib3JhdG9yaWVzMR4wHAYD
|
|
||||||
VQQLFBVQcm90b3R5cGUgUmVzZWFyY2ggQ0EwgZwwDQYJKoZIhvcNAQEBBQADgYoA
|
|
||||||
MIGGAoGAebOmgtSCl+wCYZc86UGYeTLY8cjmW2P0FN8ToT/u2pECCoFdrlycX0OR
|
|
||||||
3wt0ZhpFXLVNeDnHwEE9veNUih7pCL2ZBFqoIoQkB1lZmXRiVtjGonz8BLm/qrFM
|
|
||||||
YHb0lme/Ol+s118mwKVxnn6bSAeI/OXKhLaVdYZWk+aEaxEDkVkCAQ8wDQYJKoZI
|
|
||||||
hvcNAQEEBQADgYEAAZMG14lZmZ8bahkaHaTV9dQf4p2FZiQTFwHP9ZyGsXPC+LT5
|
|
||||||
dG5iTaRmyjNIJdPWohZDl97kAci79aBndvuEvRKOjLHs3WRGBIwERnAcnY9Mz8u/
|
|
||||||
zIHK23PjYVxGGaZd669OJwD0CYyqH22HH9nFUGaoJdsv39ChW0NRdLE9+y8=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
|
|
||||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICJjCCAY8CAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
|
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
|
|
||||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTc0M1oXDTAxMDYw
|
|
||||||
OTEzNTc0M1owWzELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
|
|
||||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRswGQYDVQQDExJUZXN0IENBICgxMDI0
|
|
||||||
IGJpdCkwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKO7o8t116VP6cgybTsZ
|
|
||||||
DCZhr95nYlZuya3aCi1IKoztqwWnjbmDFIriOqGFPrZQ+moMETC9D59iRW/dFXSv
|
|
||||||
1F65ka/XY2hLh9exCCo7XuUcDs53Qp3bI3AmMqHjgzE8oO3ajyJAzJkTTOUecQU2
|
|
||||||
mw/gI4tMM0LqWMQS7luTy4+xAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAM7achv3v
|
|
||||||
hLQJcv/65eGEpBXM40ZDVoFQFFJWaY5p883HTqLB1x4FdzsXHH0QKBTcKpWwqyu4
|
|
||||||
YDm3fb8oDugw72bCzfyZK/zVZPR/hVlqI/fvU109Qoc+7oPvIXWky71HfcK6ZBCA
|
|
||||||
q30KIqGM/uoM60INq97qjDmCJapagcNBGQs=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIICXQIBAAKBgQCju6PLddelT+nIMm07GQwmYa/eZ2JWbsmt2gotSCqM7asFp425
|
|
||||||
gxSK4jqhhT62UPpqDBEwvQ+fYkVv3RV0r9ReuZGv12NoS4fXsQgqO17lHA7Od0Kd
|
|
||||||
2yNwJjKh44MxPKDt2o8iQMyZE0zlHnEFNpsP4COLTDNC6ljEEu5bk8uPsQIDAQAB
|
|
||||||
AoGAVZmpFZsDZfr0l2S9tLLwpjRWNOlKATQkno6q2WesT0eGLQufTciY+c8ypfU6
|
|
||||||
hyio8r5iUl/VhhdjhAtKx1mRpiotftHo/eYf8rtsrnprOnWG0bWjLjtIoMbcxGn2
|
|
||||||
J3bN6LJmbJMjDs0eJ3KnTu646F3nDUw2oGAwmpzKXA1KAP0CQQDRvQhxk2D3Pehs
|
|
||||||
HvG665u2pB5ipYQngEFlZO7RHJZzJOZEWSLuuMqaF/7pTfA5jiBvWqCgJeCRRInL
|
|
||||||
21ru4dlPAkEAx9jj7BgKn5TYnMoBSSe0afjsV9oApVpN1Nacb1YDtCwy+scp3++s
|
|
||||||
nFxlv98wxIlSdpwMUn+AUWfjiWR7Tu/G/wJBAJ/KjwZIrFVxewP0x2ILYsTRYLzz
|
|
||||||
MS4PDsO7FB+I0i7DbBOifXS2oNSpd3I0CNMwrxFnUHzynpbOStVfN3ZL5w0CQQCa
|
|
||||||
pwFahxBRhkJKsxhjoFJBX9yl75JoY4Wvm5Tbo9ih6UJaRx3kqfkN14L2BKYcsZgb
|
|
||||||
KY9vmDOYy6iNfjDeWTfJAkBkfPUb8oTJ/nSP5zN6sqGxSY4krc4xLxpRmxoJ8HL2
|
|
||||||
XfhqXkTzbU13RX9JJ/NZ8vQN9Vm2NhxRGJocQkmcdVtJ
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
MIICYDCCAiACAgEoMAkGBSsOAwINBQAwfDELMAkGA1UEBhMCVVMxNjA0BgNVBAoT
|
|
||||||
LU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZ
|
|
||||||
MBcGA1UECxMQVGVzdCBFbnZpcm9ubWVudDEaMBgGA1UECxMRRFNTLU5BU0EtUGls
|
|
||||||
b3QtQ0EwHhcNOTYwMjI2MTYzMjQ1WhcNOTcwMjI1MTYzMjQ1WjB8MQswCQYDVQQG
|
|
||||||
EwJVUzE2MDQGA1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFk
|
|
||||||
bWluaXN0cmF0aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MRowGAYDVQQL
|
|
||||||
ExFEU1MtTkFTQS1QaWxvdC1DQTCB8jAJBgUrDgMCDAUAA4HkADCB4AJBAMA/ssKb
|
|
||||||
hPNUG7ZlASfVwEJU21O5OyF/iyBzgHI1O8eOhJGUYO8cc8wDMjR508Mr9cp6Uhl/
|
|
||||||
ZB7FV5GkLNEnRHYCQQDUEaSg45P2qrDwixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLb
|
|
||||||
bn3QK74T2IxY1yY+kCNq8XrIqf5fJJzIH0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3
|
|
||||||
fVd0geUCQQCzCFUQAh+ZkEmp5804cs6ZWBhrUAfnra8lJItYo9xPcXgdIfLfibcX
|
|
||||||
R71UsyO77MRD7B0+Ag2tq794IleCVcEEMAkGBSsOAwINBQADLwAwLAIUUayDfreR
|
|
||||||
Yh2WeU86/pHNdkUC1IgCFEfxe1f0oMpxJyrJ5XIxTi7vGdoK
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICGTCCAdgCAwCqTDAJBgUrDgMCDQUAMHwxCzAJBgNVBAYTAlVTMTYwNAYDVQQK
|
|
||||||
Ey1OYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24x
|
|
||||||
GTAXBgNVBAsTEFRlc3QgRW52aXJvbm1lbnQxGjAYBgNVBAsTEURTUy1OQVNBLVBp
|
|
||||||
bG90LUNBMB4XDTk2MDUxNDE3MDE0MVoXDTk3MDUxNDE3MDE0MVowMzELMAkGA1UE
|
|
||||||
BhMCQVUxDzANBgNVBAoTBk1pbmNvbTETMBEGA1UEAxMKRXJpYyBZb3VuZzCB8jAJ
|
|
||||||
BgUrDgMCDAUAA4HkADCB4AJBAKbfHz6vE6pXXMTpswtGUec2tvnfLJUsoxE9qs4+
|
|
||||||
ObZX7LmLvragNPUeiTJx7UOWZ5DfBj6bXLc8eYne0lP1g3ACQQDUEaSg45P2qrDw
|
|
||||||
ixTRhFhmWz5Nvc4lRFQ/42XPcchiJBLbbn3QK74T2IxY1yY+kCNq8XrIqf5fJJzI
|
|
||||||
H0J/xUP3AhUAsg2wsQHfDGYk/BOSulX3fVd0geUCQQCzCFUQAh+ZkEmp5804cs6Z
|
|
||||||
WBhrUAfnra8lJItYo9xPcXgdIfLfibcXR71UsyO77MRD7B0+Ag2tq794IleCVcEE
|
|
||||||
MAkGBSsOAwINBQADMAAwLQIUWsuuJRE3VT4ueWkWMAJMJaZjj1ECFQCYY0zX4bzM
|
|
||||||
LC7obsrHD8XAHG+ZRG==
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICTTCCAbagAwIBAgIBADANBgkqhkiG9w0BAQQFADBMMQswCQYDVQQGEwJHQjEM
|
|
||||||
MAoGA1UEChMDVUNMMRgwFgYDVQQLEw9JQ0UtVEVMIFByb2plY3QxFTATBgNVBAMT
|
|
||||||
DFRydXN0RmFjdG9yeTAeFw05NzA0MjIxNDM5MTRaFw05ODA0MjIxNDM5MTRaMEwx
|
|
||||||
CzAJBgNVBAYTAkdCMQwwCgYDVQQKEwNVQ0wxGDAWBgNVBAsTD0lDRS1URUwgUHJv
|
|
||||||
amVjdDEVMBMGA1UEAxMMVHJ1c3RGYWN0b3J5MIGcMAoGBFUIAQECAgQAA4GNADCB
|
|
||||||
iQKBgQCEieR8NcXkUW1f0G6aC6u0i8q/98JqS6RxK5YmHIGKCkuTWAUjzLfUa4dt
|
|
||||||
U9igGCjTuxaDqlzEim+t/02pmiBZT9HaX++35MjQPUWmsChcYU5WyzGErXi+rQaw
|
|
||||||
zlwS73zM8qiPj/97lXYycWhgL0VaiDSPxRXEUdWoaGruom4mNQIDAQABo0IwQDAd
|
|
||||||
BgNVHQ4EFgQUHal1LZr7oVg5z6lYzrhTgZRCmcUwDgYDVR0PAQH/BAQDAgH2MA8G
|
|
||||||
A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAfaggfl6FZoioecjv0dq8
|
|
||||||
/DXo/u11iMZvXn08gjX/zl2b4wtPbShOSY5FhkSm8GeySasz+/Nwb/uzfnIhokWi
|
|
||||||
lfPZHtlCWtXbIy/TN51eJyq04ceDCQDWvLC2enVg9KB+GJ34b5c5VaPRzq8MBxsA
|
|
||||||
S7ELuYGtmYgYm9NZOIr7yU0=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB6jCCAZQCAgEtMA0GCSqGSIb3DQEBBAUAMIGAMQswCQYDVQQGEwJVUzE2MDQG
|
|
||||||
A1UEChMtTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0
|
|
||||||
aW9uMRkwFwYDVQQLExBUZXN0IEVudmlyb25tZW50MR4wHAYDVQQLExVNRDUtUlNB
|
|
||||||
LU5BU0EtUGlsb3QtQ0EwHhcNOTYwNDMwMjIwNTAwWhcNOTcwNDMwMjIwNTAwWjCB
|
|
||||||
gDELMAkGA1UEBhMCVVMxNjA0BgNVBAoTLU5hdGlvbmFsIEFlcm9uYXV0aWNzIGFu
|
|
||||||
ZCBTcGFjZSBBZG1pbmlzdHJhdGlvbjEZMBcGA1UECxMQVGVzdCBFbnZpcm9ubWVu
|
|
||||||
dDEeMBwGA1UECxMVTUQ1LVJTQS1OQVNBLVBpbG90LUNBMFkwCgYEVQgBAQICAgAD
|
|
||||||
SwAwSAJBALmmX5+GqAvcrWK13rfDrNX9UfeA7f+ijyBgeFQjYUoDpFqapw4nzQBL
|
|
||||||
bAXug8pKkRwa2Zh8YODhXsRWu2F/UckCAwEAATANBgkqhkiG9w0BAQQFAANBAH9a
|
|
||||||
OBA+QCsjxXgnSqHx04gcU8S49DVUb1f2XVoLnHlIb8RnX0k5O6mpHT5eti9bLkiW
|
|
||||||
GJNMJ4L0AJ/ac+SmHZc=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICajCCAdMCBDGA0QUwDQYJKoZIhvcNAQEEBQAwfTELMAkGA1UEBhMCQ2ExDzAN
|
|
||||||
BgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmlsaXR5IEFjY2VwdGVkMR8w
|
|
||||||
HQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRwwGgYDVQQDExNFbnRydXN0
|
|
||||||
IERlbW8gV2ViIENBMB4XDTk2MDQyNjEzMzUwMVoXDTA2MDQyNjEzMzUwMVowfTEL
|
|
||||||
MAkGA1UEBhMCQ2ExDzANBgNVBAcTBk5lcGVhbjEeMBwGA1UECxMVTm8gTGlhYmls
|
|
||||||
aXR5IEFjY2VwdGVkMR8wHQYDVQQKExZGb3IgRGVtbyBQdXJwb3NlcyBPbmx5MRww
|
|
||||||
GgYDVQQDExNFbnRydXN0IERlbW8gV2ViIENBMIGdMA0GCSqGSIb3DQEBAQUAA4GL
|
|
||||||
ADCBhwKBgQCaroS7O1DA0hm4IefNYU1cx/nqOmzEnk291d1XqznDeF4wEgakbkCc
|
|
||||||
zTKxK791yNpXG5RmngqH7cygDRTHZJ6mfCRn0wGC+AI00F2vYTGqPGRQL1N3lZT0
|
|
||||||
YDKFC0SQeMMjFIZ1aeQigroFQnHo0VB3zWIMpNkka8PY9lxHZAmWwQIBAzANBgkq
|
|
||||||
hkiG9w0BAQQFAAOBgQBAx0UMVA1s54lMQyXjMX5kj99FJN5itb8bK1Rk+cegPQPF
|
|
||||||
cWO9SEWyEjjBjIkjjzAwBkaEszFsNGxemxtXvwjIm1xEUMTVlPEWTs2qnDvAUA9W
|
|
||||||
YqhWbhH0toGT36236QAsqCZ76rbTRVSSX2BHyJwJMG2tCRv7kRJ//NIgxj3H4w==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
issuer= /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
|
|
||||||
subject=/C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test PCA (1024 bit)
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICJzCCAZACAQAwDQYJKoZIhvcNAQEEBQAwXDELMAkGA1UEBhMCQVUxEzARBgNV
|
|
||||||
BAgTClF1ZWVuc2xhbmQxGjAYBgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYD
|
|
||||||
VQQDExNUZXN0IFBDQSAoMTAyNCBiaXQpMB4XDTk3MDYwOTEzNTczN1oXDTAxMDYw
|
|
||||||
OTEzNTczN1owXDELMAkGA1UEBhMCQVUxEzARBgNVBAgTClF1ZWVuc2xhbmQxGjAY
|
|
||||||
BgNVBAoTEUNyeXB0U29mdCBQdHkgTHRkMRwwGgYDVQQDExNUZXN0IFBDQSAoMTAy
|
|
||||||
NCBiaXQpMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCdoWk/3+WcMlfjIrkg
|
|
||||||
40ketmnQaEogQe1LLcuOJV6rKfUSAsPgwgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp
|
|
||||||
22Jp85PmemiDzyUIStwk72qhp1imbANZvlmlCFKiQrjUyuDfu4TABmn+kkt3vR1Y
|
|
||||||
BEOGt+IFye1UBVSATVdRJ2UVhwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABNA1u/S
|
|
||||||
Cg/LJZWb7GliiKJsvuhxlE4E5JxQF2zMub/CSNbF97//tYSyj96sxeFQxZXbcjm9
|
|
||||||
xt6mr/xNLA4szNQMJ4P+L7b5e/jC5DSqlwS+CUYJgaFs/SP+qJoCSu1bR3IM9XWO
|
|
||||||
cRBpDmcBbYLkSyB92WURvsZ1LtjEcn+cdQVI
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIICXAIBAAKBgQCdoWk/3+WcMlfjIrkg40ketmnQaEogQe1LLcuOJV6rKfUSAsPg
|
|
||||||
wgsabJ/wn8TxA1yy3eKJbFl3OiUXMRsp22Jp85PmemiDzyUIStwk72qhp1imbANZ
|
|
||||||
vlmlCFKiQrjUyuDfu4TABmn+kkt3vR1YBEOGt+IFye1UBVSATVdRJ2UVhwIDAQAB
|
|
||||||
AoGAba4fTtuap5l7/8ZsbE7Z1O32KJY4ZcOZukLOLUUhXxXduT+FTgGWujc0/rgc
|
|
||||||
z9qYCLlNZHOouMYTgtSfYvuMuLZ11VIt0GYH+nRioLShE59Yy+zCRyC+gPigS1kz
|
|
||||||
xvo14AsOIPYV14Tk/SsHyq6E0eTk7VzaIE197giiINUERPECQQDSKmtPTh/lRKw7
|
|
||||||
HSZSM0I1mFWn/1zqrAbontRQY5w98QWIOe5qmzYyFbPXYT3d9BzlsMyhgiRNoBbD
|
|
||||||
yvohSHXJAkEAwAHx6ezAZeWWzD5yXD36nyjpkVCw7Tk7TSmOceLJMWt1QcrCfqlS
|
|
||||||
xA5jjpQ6Z8suU5DdtWAryM2sAir1WisYzwJAd6Zcx56jvAQ3xcPXsE6scBTVFzrj
|
|
||||||
7FqZ6E+cclPzfLQ+QQsyOBE7bpI6e/FJppY26XGZXo3YGzV8IGXrt40oOQJALETG
|
|
||||||
h86EFXo3qGOFbmsDy4pdP5nBERCu8X1xUCSfintiD4c2DInxgS5oGclnJeMcjTvL
|
|
||||||
QjQoJCX3UJCi/OUO1QJBAKgcDHWjMvt+l1pjJBsSEZ0HX9AAIIVx0RQmbFGS+F2Q
|
|
||||||
hhu5l77WnnZOQ9vvhV5u7NPCUF9nhU3jh60qWWO8mkc=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
subject=/C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
|
|
||||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Commercial Certification Authority
|
|
||||||
notBefore=941104185834Z
|
|
||||||
notAfter =991103185834Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw
|
|
||||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy
|
|
||||||
Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05
|
|
||||||
OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT
|
|
||||||
ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u
|
|
||||||
IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o
|
|
||||||
975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/
|
|
||||||
touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE
|
|
||||||
7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j
|
|
||||||
9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI
|
|
||||||
0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb
|
|
||||||
MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
subject=/C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
|
|
||||||
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
|
|
||||||
notBefore=941109235417Z
|
|
||||||
notAfter =991231235417Z
|
|
||||||
-----BEGIN X509 CERTIFICATE-----
|
|
||||||
|
|
||||||
MIICKTCCAZYCBQJBAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMSAw
|
|
||||||
HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJl
|
|
||||||
IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDkyMzU0MTda
|
|
||||||
Fw05OTEyMzEyMzU0MTdaMF8xCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0
|
|
||||||
YSBTZWN1cml0eSwgSW5jLjEuMCwGA1UECxMlU2VjdXJlIFNlcnZlciBDZXJ0aWZp
|
|
||||||
Y2F0aW9uIEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCSznrB
|
|
||||||
roM+WqqJg1esJQF2DK2ujiw3zus1eGRUA+WEQFHJv48I4oqCCNIWhjdV6bEhAq12
|
|
||||||
aIGaBaJLyUslZiJWbIgHj/eBWW2EB2VwE3F2Ppt3TONQiVaYSLkdpykaEy5KEVmc
|
|
||||||
HhXVSVQsczppgrGXOZxtcGdI5d0t1sgeewIDAQABMA0GCSqGSIb3DQEBAgUAA34A
|
|
||||||
iNHReSHO4ovo+MF9NFM/YYPZtgs4F7boviGNjwC4i1N+RGceIr2XJ+CchcxK9oU7
|
|
||||||
suK+ktPlDemvXA4MRpX/oRxePug2WHpzpgr4IhFrwwk4fia7c+8AvQKk8xQNMD9h
|
|
||||||
cHsg/jKjn7P0Z1LctO6EjJY2IN6BCINxIYoPnqk=
|
|
||||||
-----END X509 CERTIFICATE-----
|
|
||||||
subject=/C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
|
|
||||||
/OU=Certification Services Division/CN=Thawte Server CA
|
|
||||||
/Email=server-certs@thawte.com
|
|
||||||
issuer= /C=ZA/SP=Western Cape/L=Cape Town/O=Thawte Consulting cc
|
|
||||||
/OU=Certification Services Division/CN=Thawte Server CA
|
|
||||||
/Email=server-certs@thawte.com
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIC+TCCAmICAQAwDQYJKoZIhvcNAQEEBQAwgcQxCzAJBgNVBAYTAlpBMRUwEwYD
|
|
||||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
|
||||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
|
||||||
dmljZXMgRGl2aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkq
|
|
||||||
hkiG9w0BCQEWF3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMB4XDTk2MDcyNzE4MDc1
|
|
||||||
N1oXDTk4MDcyNzE4MDc1N1owgcQxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0
|
|
||||||
ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENv
|
|
||||||
bnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
|
||||||
aXNpb24xGTAXBgNVBAMTEFRoYXd0ZSBTZXJ2ZXIgQ0ExJjAkBgkqhkiG9w0BCQEW
|
|
||||||
F3NlcnZlci1jZXJ0c0B0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
|
|
||||||
iQKBgQDTpFBuyP9Wa+bPXbbqDGh1R6KqwtqEJfyo9EdR2oW1IHSUhh4PdcnpCGH1
|
|
||||||
Bm0wbhUZAulSwGLbTZme4moMRDjN/r7jZAlwxf6xaym2L0nIO9QnBCUQly/nkG3A
|
|
||||||
KEKZ10xD3sP1IW1Un13DWOHA5NlbsLjctHvfNjrCtWYiEtaHDQIDAQABMA0GCSqG
|
|
||||||
SIb3DQEBBAUAA4GBAIsvn7ifX3RUIrvYXtpI4DOfARkTogwm6o7OwVdl93yFhDcX
|
|
||||||
7h5t0XZ11MUAMziKdde3rmTvzUYIUCYoY5b032IwGMTvdiclK+STN6NP2m5nvFAM
|
|
||||||
qJT5gC5O+j/jBuZRQ4i0AMYQr5F4lT8oBJnhgafw6PL8aDY2vMHGSPl9+7uf
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDDTCCAnYCAQAwDQYJKoZIhvcNAQEEBQAwgc4xCzAJBgNVBAYTAlpBMRUwEwYD
|
|
||||||
VQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
|
||||||
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
|
|
||||||
dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBD
|
|
||||||
QTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTAeFw05
|
|
||||||
NjA3MjcxODA3MTRaFw05ODA3MjcxODA3MTRaMIHOMQswCQYDVQQGEwJaQTEVMBMG
|
|
||||||
A1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xHTAbBgNVBAoT
|
|
||||||
FFRoYXd0ZSBDb25zdWx0aW5nIGNjMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNl
|
|
||||||
cnZpY2VzIERpdmlzaW9uMSEwHwYDVQQDExhUaGF3dGUgUHJlbWl1bSBTZXJ2ZXIg
|
|
||||||
Q0ExKDAmBgkqhkiG9w0BCQEWGXByZW1pdW0tc2VydmVyQHRoYXd0ZS5jb20wgZ8w
|
|
||||||
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANI2NmqL18JbntqBQWKPOO5JBFXW0O8c
|
|
||||||
G5UWR+8YSDU6UvQragaPOy/qVuOvho2eF/eetGV1Ak3vywmiIVHYm9Bn0LoNkgYU
|
|
||||||
c9STy5cqAJxcTgy8+hVS/PJEbtoRSm4Iny8t4/mqOoZztkZTWMiJBb2DEbhzP6oH
|
|
||||||
jfRCTedAnRw3AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAutFIgTRZVYerIZfL9lvR
|
|
||||||
w9Eifvvo5KTZ3h+Bj+VzNnyw4Qc/IyXkPOu6SIiH9LQ3sCmWBdxpe+qr4l77rLj2
|
|
||||||
GYuMtESFfn1XVALzkYgC7JcPuTOjMfIiMByt+uFf8AV8x0IW/Qkuv+hEQcyM9vxK
|
|
||||||
3VZdLbCVIhNoEsysrxCpxcI=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
Tims test GCI CA
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIB8DCCAZoCAQAwDQYJKoZIhvcNAQEEBQAwgYIxCzAJBgNVBAYTAkFVMRMwEQYD
|
|
||||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
|
|
||||||
cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2RldmVsb3BtZW50MRkwFwYDVQQDExBD
|
|
||||||
cnlwdFNvZnQgRGV2IENBMB4XDTk3MDMyMjEzMzQwNFoXDTk4MDMyMjEzMzQwNFow
|
|
||||||
gYIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhC
|
|
||||||
cmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxFDASBgNVBAsTC2Rl
|
|
||||||
dmVsb3BtZW50MRkwFwYDVQQDExBDcnlwdFNvZnQgRGV2IENBMFwwDQYJKoZIhvcN
|
|
||||||
AQEBBQADSwAwSAJBAOAOAqogG5QwAmLhzyO4CoRnx/wVy4NZP4dxJy83O1EnL0rw
|
|
||||||
OdsamJKvPOLHgSXo3gDu9uVyvCf/QJmZAmC5ml8CAwEAATANBgkqhkiG9w0BAQQF
|
|
||||||
AANBADRRS/GVdd7rAqRW6SdmgLJduOU2yq3avBu99kRqbp9A/dLu6r6jU+eP4oOA
|
|
||||||
TfdbFZtAAD2Hx9jUtY3tfdrJOb8=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICVjCCAgACAQAwDQYJKoZIhvcNAQEEBQAwgbUxCzAJBgNVBAYTAkFVMRMwEQYD
|
|
||||||
VQQIEwpRdWVlbnNsYW5kMREwDwYDVQQHEwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5
|
|
||||||
cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsTI1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9O
|
|
||||||
IEFVVEhPUklUSUVTMTQwMgYDVQQDEytaRVJPIFZBTFVFIENBIC0gREVNT05TVFJB
|
|
||||||
VElPTiBQVVJQT1NFUyBPTkxZMB4XDTk3MDQwMzEzMjI1NFoXDTk4MDQwMzEzMjI1
|
|
||||||
NFowgbUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpRdWVlbnNsYW5kMREwDwYDVQQH
|
|
||||||
EwhCcmlzYmFuZTEaMBgGA1UEChMRQ3J5cHRTb2Z0IFB0eSBMdGQxLDAqBgNVBAsT
|
|
||||||
I1dPUlRITEVTUyBDRVJUSUZJQ0FUSU9OIEFVVEhPUklUSUVTMTQwMgYDVQQDEyta
|
|
||||||
RVJPIFZBTFVFIENBIC0gREVNT05TVFJBVElPTiBQVVJQT1NFUyBPTkxZMFwwDQYJ
|
|
||||||
KoZIhvcNAQEBBQADSwAwSAJBAOZ7T7yqP/tyspcko3yPY1y0Cm2EmwNvzW4QgVXR
|
|
||||||
Fjs3HmJ4xtSpXdo6mwcGezL3Abt/aQXaxv9PU8xt+Jr0OFUCAwEAATANBgkqhkiG
|
|
||||||
9w0BAQQFAANBAOQpYmGgyCqCy1OljgJhCqQOu627oVlHzK1L+t9vBaMfn40AVUR4
|
|
||||||
WzQVWO31KTgi5vTK1U+3h46fgUWqQ0h+6rU=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIAwgKADAgECAgEAMA0GCSqGSIb3DQEBBAUAMGIxETAPBgNVBAcTCEludGVybmV0
|
|
||||||
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xh
|
|
||||||
c3MgMSBDQSAtIEluZGl2aWR1YWwgU3Vic2NyaWJlcjAeFw05NjA0MDgxMDIwMjda
|
|
||||||
Fw05NzA0MDgxMDIwMjdaMGIxETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5W
|
|
||||||
ZXJpU2lnbiwgSW5jLjE0MDIGA1UECxMrVmVyaVNpZ24gQ2xhc3MgMSBDQSAtIElu
|
|
||||||
ZGl2aWR1YWwgU3Vic2NyaWJlcjCAMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2
|
|
||||||
FKbPTdAFDdjKI9BvqrQpkmOOLPhvltcunXZLEbE2jVfJw/0cxrr+Hgi6M8qV6r7j
|
|
||||||
W80GqLd5HUQq7XPysVKDaBBwZJHXPmv5912dFEObbpdFmIFH0S3L3bty10w/cari
|
|
||||||
QPJUObwW7s987LrbP2wqsxaxhhKdrpM01bjV0Pc+qQIDAQABAAAAADANBgkqhkiG
|
|
||||||
9w0BAQQFAAOBgQA+1nJryNt8VBRjRr07ArDAV/3jAH7GjDc9jsrxZS68ost9v06C
|
|
||||||
TvTNKGL+LISNmFLXl+JXhgGB0JZ9fvyYzNgHQ46HBUng1H6voalfJgS2KdEo50wW
|
|
||||||
8EFZYMDkT1k4uynwJqkVN2QJK/2q4/A/VCov5h6SlM8Affg2W+1TLqvqkwAA
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
subject=/L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
|
|
||||||
issuer= /L=Internet/O=VeriSign, Inc./OU=VeriSign Class 2 CA - Individual Subscriber
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEkzCCA/ygAwIBAgIRANDTUpSRL3nTFeMrMayFSPAwDQYJKoZIhvcNAQECBQAw
|
|
||||||
YjERMA8GA1UEBxMISW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQw
|
|
||||||
MgYDVQQLEytWZXJpU2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3Jp
|
|
||||||
YmVyMB4XDTk2MDYwNDAwMDAwMFoXDTk4MDYwNDIzNTk1OVowYjERMA8GA1UEBxMI
|
|
||||||
SW50ZXJuZXQxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTQwMgYDVQQLEytWZXJp
|
|
||||||
U2lnbiBDbGFzcyAyIENBIC0gSW5kaXZpZHVhbCBTdWJzY3JpYmVyMIGfMA0GCSqG
|
|
||||||
SIb3DQEBAQUAA4GNADCBiQKBgQC6A+2czKGRcYMfm8gdnk+0de99TDDzsqo0v5nb
|
|
||||||
RsbUmMcdRQ7nsMbRWe0SAb/9QoLTZ/cJ0iOBqdrkz7UpqqKarVoTSdlSMVM92tWp
|
|
||||||
3bJncZHQD1t4xd6lQVdI1/T6R+5J0T1ukOdsI9Jmf+F28S6g3R3L1SFwiHKeZKZv
|
|
||||||
z+793wIDAQABo4ICRzCCAkMwggIpBgNVHQMBAf8EggIdMIICGTCCAhUwggIRBgtg
|
|
||||||
hkgBhvhFAQcBATCCAgAWggGrVGhpcyBjZXJ0aWZpY2F0ZSBpbmNvcnBvcmF0ZXMg
|
|
||||||
YnkgcmVmZXJlbmNlLCBhbmQgaXRzIHVzZSBpcyBzdHJpY3RseSBzdWJqZWN0IHRv
|
|
||||||
LCB0aGUgVmVyaVNpZ24gQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQg
|
|
||||||
KENQUyksIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL0NQ
|
|
||||||
Uy0xLjA7IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBv
|
|
||||||
ciBieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1v
|
|
||||||
dW50YWluIFZpZXcsIENBIDk0MDQzIFVTQSBUZWwuICsxICg0MTUpIDk2MS04ODMw
|
|
||||||
IENvcHlyaWdodCAoYykgMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBS
|
|
||||||
ZXNlcnZlZC4gQ0VSVEFJTiBXQVJSQU5USUVTIERJU0NMQUlNRUQgYW5kIExJQUJJ
|
|
||||||
TElUWSBMSU1JVEVELqAOBgxghkgBhvhFAQcBAQGhDgYMYIZIAYb4RQEHAQECMC8w
|
|
||||||
LRYraHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BTLTEuMDAU
|
|
||||||
BglghkgBhvhCAQEBAf8EBAMCAgQwDQYJKoZIhvcNAQECBQADgYEApRJRkNBqLLgs
|
|
||||||
53IR/d18ODdLOWMTZ+QOOxBrq460iBEdUwgF8vmPRX1ku7UiDeNzaLlurE6eFqHq
|
|
||||||
2zPyK5j60zfTLVJMWKcQWwTJLjHtXrW8pxhNtFc6Fdvy5ZkHnC/9NIl7/t4U6WqB
|
|
||||||
p4y+p7SdMIkEwIZfds0VbnQyX5MRUJY=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
subject=/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
|
|
||||||
issuer= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICMTCCAZoCBQKhAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
|
|
||||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMg
|
|
||||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
|
|
||||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
|
|
||||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
|
|
||||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZ
|
|
||||||
nvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7ma
|
|
||||||
AKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57Ga
|
|
||||||
IMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIF
|
|
||||||
AAOBgQB1Zmw+0c2B27X4LzZRtvdCvM1Cr9wO+hVs+GeTVzrrtpLotgHKjLeOQ7RJ
|
|
||||||
Zfk+7r11Ri7J/CVdqMcvi5uPaM+0nJcYwE3vH9mvgrPmZLiEXIqaB1JDYft0nls6
|
|
||||||
NvxMsvwaPxUupVs8G5DsiCnkWRb5zget7Ond2tIxik/W2O8XjQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
subject=/C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
|
|
||||||
issuer= /C=US/O=VeriSign, Inc./OU=Class 4 Public Primary Certification Authority
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw
|
|
||||||
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg
|
|
||||||
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa
|
|
||||||
Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln
|
|
||||||
biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
|
|
||||||
Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1
|
|
||||||
9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj
|
|
||||||
IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd
|
|
||||||
O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF
|
|
||||||
AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ
|
|
||||||
g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am
|
|
||||||
yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|||||||
434
apps/sess_id.c
434
apps/sess_id.c
@@ -5,21 +5,21 @@
|
|||||||
* This package is an SSL implementation written
|
* This package is an SSL implementation written
|
||||||
* by Eric Young (eay@cryptsoft.com).
|
* by Eric Young (eay@cryptsoft.com).
|
||||||
* The implementation was written so as to conform with Netscapes SSL.
|
* The implementation was written so as to conform with Netscapes SSL.
|
||||||
*
|
*
|
||||||
* This library is free for commercial and non-commercial use as long as
|
* This library is free for commercial and non-commercial use as long as
|
||||||
* the following conditions are aheared to. The following conditions
|
* the following conditions are aheared to. The following conditions
|
||||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||||
* included with this distribution is covered by the same copyright terms
|
* included with this distribution is covered by the same copyright terms
|
||||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||||
*
|
*
|
||||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||||
* the code are not to be removed.
|
* the code are not to be removed.
|
||||||
* If this package is used in a product, Eric Young should be given attribution
|
* If this package is used in a product, Eric Young should be given attribution
|
||||||
* as the author of the parts of the library used.
|
* as the author of the parts of the library used.
|
||||||
* This can be in the form of a textual message at program startup or
|
* This can be in the form of a textual message at program startup or
|
||||||
* in documentation (online or textual) provided with the package.
|
* in documentation (online or textual) provided with the package.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
@@ -34,10 +34,10 @@
|
|||||||
* Eric Young (eay@cryptsoft.com)"
|
* Eric Young (eay@cryptsoft.com)"
|
||||||
* The word 'cryptographic' can be left out if the rouines from the library
|
* The word 'cryptographic' can be left out if the rouines from the library
|
||||||
* being used are not cryptographic related :-).
|
* being used are not cryptographic related :-).
|
||||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||||
* the apps directory (application code) you must include an acknowledgement:
|
* the apps directory (application code) you must include an acknowledgement:
|
||||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* The licence and distribution terms for any publically available version or
|
* The licence and distribution terms for any publically available version or
|
||||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||||
* copied and put under another distribution licence
|
* copied and put under another distribution licence
|
||||||
@@ -67,20 +67,20 @@
|
|||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
|
||||||
#undef PROG
|
#undef PROG
|
||||||
#define PROG sess_id_main
|
#define PROG sess_id_main
|
||||||
|
|
||||||
static const char *sess_id_usage[]={
|
static const char *sess_id_usage[] = {
|
||||||
"usage: sess_id args\n",
|
"usage: sess_id args\n",
|
||||||
"\n",
|
"\n",
|
||||||
" -inform arg - input format - default PEM (DER or PEM)\n",
|
" -inform arg - input format - default PEM (DER or PEM)\n",
|
||||||
" -outform arg - output format - default PEM\n",
|
" -outform arg - output format - default PEM\n",
|
||||||
" -in arg - input file - default stdin\n",
|
" -in arg - input file - default stdin\n",
|
||||||
" -out arg - output file - default stdout\n",
|
" -out arg - output file - default stdout\n",
|
||||||
" -text - print ssl session id details\n",
|
" -text - print ssl session id details\n",
|
||||||
" -cert - output certificate \n",
|
" -cert - output certificate \n",
|
||||||
" -noout - no CRL output\n",
|
" -noout - no CRL output\n",
|
||||||
" -context arg - set the session ID context\n",
|
" -context arg - set the session ID context\n",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static SSL_SESSION *load_sess_id(char *file, int format);
|
static SSL_SESSION *load_sess_id(char *file, int format);
|
||||||
@@ -88,235 +88,213 @@ static SSL_SESSION *load_sess_id(char *file, int format);
|
|||||||
int MAIN(int, char **);
|
int MAIN(int, char **);
|
||||||
|
|
||||||
int MAIN(int argc, char **argv)
|
int MAIN(int argc, char **argv)
|
||||||
{
|
{
|
||||||
SSL_SESSION *x=NULL;
|
SSL_SESSION *x = NULL;
|
||||||
X509 *peer = NULL;
|
X509 *peer = NULL;
|
||||||
int ret=1,i,num,badops=0;
|
int ret = 1, i, num, badops = 0;
|
||||||
BIO *out=NULL;
|
BIO *out = NULL;
|
||||||
int informat,outformat;
|
int informat, outformat;
|
||||||
char *infile=NULL,*outfile=NULL,*context=NULL;
|
char *infile = NULL, *outfile = NULL, *context = NULL;
|
||||||
int cert=0,noout=0,text=0;
|
int cert = 0, noout = 0, text = 0;
|
||||||
const char **pp;
|
const char **pp;
|
||||||
|
|
||||||
apps_startup();
|
apps_startup();
|
||||||
|
|
||||||
if (bio_err == NULL)
|
if (bio_err == NULL)
|
||||||
if ((bio_err=BIO_new(BIO_s_file())) != NULL)
|
if ((bio_err = BIO_new(BIO_s_file())) != NULL)
|
||||||
BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
|
BIO_set_fp(bio_err, stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||||
|
|
||||||
informat=FORMAT_PEM;
|
informat = FORMAT_PEM;
|
||||||
outformat=FORMAT_PEM;
|
outformat = FORMAT_PEM;
|
||||||
|
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
num=0;
|
num = 0;
|
||||||
while (argc >= 1)
|
while (argc >= 1) {
|
||||||
{
|
if (strcmp(*argv, "-inform") == 0) {
|
||||||
if (strcmp(*argv,"-inform") == 0)
|
if (--argc < 1)
|
||||||
{
|
goto bad;
|
||||||
if (--argc < 1) goto bad;
|
informat = str2fmt(*(++argv));
|
||||||
informat=str2fmt(*(++argv));
|
} else if (strcmp(*argv, "-outform") == 0) {
|
||||||
}
|
if (--argc < 1)
|
||||||
else if (strcmp(*argv,"-outform") == 0)
|
goto bad;
|
||||||
{
|
outformat = str2fmt(*(++argv));
|
||||||
if (--argc < 1) goto bad;
|
} else if (strcmp(*argv, "-in") == 0) {
|
||||||
outformat=str2fmt(*(++argv));
|
if (--argc < 1)
|
||||||
}
|
goto bad;
|
||||||
else if (strcmp(*argv,"-in") == 0)
|
infile = *(++argv);
|
||||||
{
|
} else if (strcmp(*argv, "-out") == 0) {
|
||||||
if (--argc < 1) goto bad;
|
if (--argc < 1)
|
||||||
infile= *(++argv);
|
goto bad;
|
||||||
}
|
outfile = *(++argv);
|
||||||
else if (strcmp(*argv,"-out") == 0)
|
} else if (strcmp(*argv, "-text") == 0)
|
||||||
{
|
text = ++num;
|
||||||
if (--argc < 1) goto bad;
|
else if (strcmp(*argv, "-cert") == 0)
|
||||||
outfile= *(++argv);
|
cert = ++num;
|
||||||
}
|
else if (strcmp(*argv, "-noout") == 0)
|
||||||
else if (strcmp(*argv,"-text") == 0)
|
noout = ++num;
|
||||||
text= ++num;
|
else if (strcmp(*argv, "-context") == 0) {
|
||||||
else if (strcmp(*argv,"-cert") == 0)
|
if (--argc < 1)
|
||||||
cert= ++num;
|
goto bad;
|
||||||
else if (strcmp(*argv,"-noout") == 0)
|
context = *++argv;
|
||||||
noout= ++num;
|
} else {
|
||||||
else if (strcmp(*argv,"-context") == 0)
|
BIO_printf(bio_err, "unknown option %s\n", *argv);
|
||||||
{
|
badops = 1;
|
||||||
if(--argc < 1) goto bad;
|
break;
|
||||||
context=*++argv;
|
}
|
||||||
}
|
argc--;
|
||||||
else
|
argv++;
|
||||||
{
|
}
|
||||||
BIO_printf(bio_err,"unknown option %s\n",*argv);
|
|
||||||
badops=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (badops)
|
if (badops) {
|
||||||
{
|
bad:
|
||||||
bad:
|
for (pp = sess_id_usage; (*pp != NULL); pp++)
|
||||||
for (pp=sess_id_usage; (*pp != NULL); pp++)
|
BIO_printf(bio_err, "%s", *pp);
|
||||||
BIO_printf(bio_err,"%s",*pp);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ERR_load_crypto_strings();
|
ERR_load_crypto_strings();
|
||||||
x=load_sess_id(infile,informat);
|
x = load_sess_id(infile, informat);
|
||||||
if (x == NULL) { goto end; }
|
if (x == NULL) {
|
||||||
peer = SSL_SESSION_get0_peer(x);
|
goto end;
|
||||||
|
}
|
||||||
if(context)
|
peer = SSL_SESSION_get0_peer(x);
|
||||||
{
|
|
||||||
size_t ctx_len = strlen(context);
|
|
||||||
if(ctx_len > SSL_MAX_SID_CTX_LENGTH)
|
|
||||||
{
|
|
||||||
BIO_printf(bio_err,"Context too long\n");
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (context) {
|
||||||
|
size_t ctx_len = strlen(context);
|
||||||
|
if (ctx_len > SSL_MAX_SID_CTX_LENGTH) {
|
||||||
|
BIO_printf(bio_err, "Context too long\n");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
SSL_SESSION_set1_id_context(x, (unsigned char *)context, ctx_len);
|
||||||
|
}
|
||||||
#ifdef undef
|
#ifdef undef
|
||||||
/* just testing for memory leaks :-) */
|
/* just testing for memory leaks :-) */
|
||||||
{
|
{
|
||||||
SSL_SESSION *s;
|
SSL_SESSION *s;
|
||||||
char buf[1024*10],*p;
|
char buf[1024 * 10], *p;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
s=SSL_SESSION_new();
|
s = SSL_SESSION_new();
|
||||||
|
|
||||||
p= &buf;
|
p = &buf;
|
||||||
i=i2d_SSL_SESSION(x,&p);
|
i = i2d_SSL_SESSION(x, &p);
|
||||||
p= &buf;
|
p = &buf;
|
||||||
d2i_SSL_SESSION(&s,&p,(long)i);
|
d2i_SSL_SESSION(&s, &p, (long)i);
|
||||||
p= &buf;
|
p = &buf;
|
||||||
d2i_SSL_SESSION(&s,&p,(long)i);
|
d2i_SSL_SESSION(&s, &p, (long)i);
|
||||||
p= &buf;
|
p = &buf;
|
||||||
d2i_SSL_SESSION(&s,&p,(long)i);
|
d2i_SSL_SESSION(&s, &p, (long)i);
|
||||||
SSL_SESSION_free(s);
|
SSL_SESSION_free(s);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!noout || text)
|
if (!noout || text) {
|
||||||
{
|
out = BIO_new(BIO_s_file());
|
||||||
out=BIO_new(BIO_s_file());
|
if (out == NULL) {
|
||||||
if (out == NULL)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
ERR_print_errors(bio_err);
|
}
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (outfile == NULL)
|
if (outfile == NULL) {
|
||||||
{
|
BIO_set_fp(out, stdout, BIO_NOCLOSE);
|
||||||
BIO_set_fp(out,stdout,BIO_NOCLOSE);
|
|
||||||
#ifdef OPENSSL_SYS_VMS
|
#ifdef OPENSSL_SYS_VMS
|
||||||
{
|
{
|
||||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||||
out = BIO_push(tmpbio, out);
|
out = BIO_push(tmpbio, out);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else
|
if (BIO_write_filename(out, outfile) <= 0) {
|
||||||
{
|
perror(outfile);
|
||||||
if (BIO_write_filename(out,outfile) <= 0)
|
goto end;
|
||||||
{
|
}
|
||||||
perror(outfile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (text)
|
if (text) {
|
||||||
{
|
SSL_SESSION_print(out, x);
|
||||||
SSL_SESSION_print(out,x);
|
|
||||||
|
|
||||||
if (cert)
|
if (cert) {
|
||||||
{
|
if (peer == NULL)
|
||||||
if (peer == NULL)
|
BIO_puts(out, "No certificate present\n");
|
||||||
BIO_puts(out,"No certificate present\n");
|
else
|
||||||
else
|
X509_print(out, peer);
|
||||||
X509_print(out,peer);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!noout && !cert)
|
if (!noout && !cert) {
|
||||||
{
|
if (outformat == FORMAT_ASN1)
|
||||||
if (outformat == FORMAT_ASN1)
|
i = i2d_SSL_SESSION_bio(out, x);
|
||||||
i=i2d_SSL_SESSION_bio(out,x);
|
else if (outformat == FORMAT_PEM)
|
||||||
else if (outformat == FORMAT_PEM)
|
i = PEM_write_bio_SSL_SESSION(out, x);
|
||||||
i=PEM_write_bio_SSL_SESSION(out,x);
|
else {
|
||||||
else {
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
if (!i) {
|
||||||
if (!i) {
|
BIO_printf(bio_err, "unable to write SSL_SESSION\n");
|
||||||
BIO_printf(bio_err,"unable to write SSL_SESSION\n");
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
} else if (!noout && (peer != NULL)) { /* just print the certificate */
|
||||||
}
|
if (outformat == FORMAT_ASN1)
|
||||||
else if (!noout && (peer != NULL)) /* just print the certificate */
|
i = (int)i2d_X509_bio(out, peer);
|
||||||
{
|
else if (outformat == FORMAT_PEM)
|
||||||
if (outformat == FORMAT_ASN1)
|
i = PEM_write_bio_X509(out, peer);
|
||||||
i=(int)i2d_X509_bio(out,peer);
|
else {
|
||||||
else if (outformat == FORMAT_PEM)
|
BIO_printf(bio_err, "bad output format specified for outfile\n");
|
||||||
i=PEM_write_bio_X509(out,peer);
|
goto end;
|
||||||
else {
|
}
|
||||||
BIO_printf(bio_err,"bad output format specified for outfile\n");
|
if (!i) {
|
||||||
goto end;
|
BIO_printf(bio_err, "unable to write X509\n");
|
||||||
}
|
goto end;
|
||||||
if (!i) {
|
}
|
||||||
BIO_printf(bio_err,"unable to write X509\n");
|
}
|
||||||
goto end;
|
ret = 0;
|
||||||
}
|
end:
|
||||||
}
|
if (out != NULL)
|
||||||
ret=0;
|
BIO_free_all(out);
|
||||||
end:
|
if (x != NULL)
|
||||||
if (out != NULL) BIO_free_all(out);
|
SSL_SESSION_free(x);
|
||||||
if (x != NULL) SSL_SESSION_free(x);
|
apps_shutdown();
|
||||||
apps_shutdown();
|
OPENSSL_EXIT(ret);
|
||||||
OPENSSL_EXIT(ret);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static SSL_SESSION *load_sess_id(char *infile, int format)
|
static SSL_SESSION *load_sess_id(char *infile, int format)
|
||||||
{
|
{
|
||||||
SSL_SESSION *x=NULL;
|
SSL_SESSION *x = NULL;
|
||||||
BIO *in=NULL;
|
BIO *in = NULL;
|
||||||
|
|
||||||
in=BIO_new(BIO_s_file());
|
in = BIO_new(BIO_s_file());
|
||||||
if (in == NULL)
|
if (in == NULL) {
|
||||||
{
|
ERR_print_errors(bio_err);
|
||||||
ERR_print_errors(bio_err);
|
goto end;
|
||||||
goto end;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (infile == NULL)
|
if (infile == NULL)
|
||||||
BIO_set_fp(in,stdin,BIO_NOCLOSE);
|
BIO_set_fp(in, stdin, BIO_NOCLOSE);
|
||||||
else
|
else {
|
||||||
{
|
if (BIO_read_filename(in, infile) <= 0) {
|
||||||
if (BIO_read_filename(in,infile) <= 0)
|
perror(infile);
|
||||||
{
|
goto end;
|
||||||
perror(infile);
|
}
|
||||||
goto end;
|
}
|
||||||
}
|
if (format == FORMAT_ASN1)
|
||||||
}
|
x = d2i_SSL_SESSION_bio(in, NULL);
|
||||||
if (format == FORMAT_ASN1)
|
else if (format == FORMAT_PEM)
|
||||||
x=d2i_SSL_SESSION_bio(in,NULL);
|
x = PEM_read_bio_SSL_SESSION(in, NULL, NULL, NULL);
|
||||||
else if (format == FORMAT_PEM)
|
else {
|
||||||
x=PEM_read_bio_SSL_SESSION(in,NULL,NULL,NULL);
|
BIO_printf(bio_err, "bad input format specified for input crl\n");
|
||||||
else {
|
goto end;
|
||||||
BIO_printf(bio_err,"bad input format specified for input crl\n");
|
}
|
||||||
goto end;
|
if (x == NULL) {
|
||||||
}
|
BIO_printf(bio_err, "unable to load SSL_SESSION\n");
|
||||||
if (x == NULL)
|
ERR_print_errors(bio_err);
|
||||||
{
|
goto end;
|
||||||
BIO_printf(bio_err,"unable to load SSL_SESSION\n");
|
}
|
||||||
ERR_print_errors(bio_err);
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
if (in != NULL) BIO_free(in);
|
|
||||||
return(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
end:
|
||||||
|
if (in != NULL)
|
||||||
|
BIO_free(in);
|
||||||
|
return (x);
|
||||||
|
}
|
||||||
|
|||||||
1333
apps/smime.c
1333
apps/smime.c
File diff suppressed because it is too large
Load Diff
5239
apps/speed.c
5239
apps/speed.c
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user